Skocz do zawartości

Robot do nalewania wódki


Kasztan

Pomocna odpowiedź

3 godziny temu, g00pher napisał:

Co robię źle ???

...

Naprawiłem, błąd techniczny w schemacie, rezystor 1 był podwójnie wpięty i stąd problemy. Oraz rezystory 1: 10kOhm, 2: 10kOhm, 3: 20kOhm.

Schemat v1.1.png

Edytowano przez g00pher
Link do komentarza
Share on other sites

38 minut temu, farmaceuta napisał:

Pauza to nie problem...pytanie czym ma być wyzwalana?

Można by użyć przepływomierza :

https://abc-rc.pl/product-pol-9893-Czujnik-przeplywu-cieczy-wody-0-3-6L-min-przeplywomierz-YF-S401-uniw.html?gclid=CjwKCAiA78aNBhAlEiwA7B76pxlZcpX-GsrBls40dFGf6ux90KbdVXHPinM8mNTIya9pDpATv9rzBhoCVtcQAvD_BwE

Jeżeli nie leci ciecz przez pewien czas to pauza

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 godzinę temu, g00pher napisał:
2 godziny temu, Kasztan napisał:

Jeżeli nie leci ciecz przez pewien czas 

Można i tak...na pewno pewniejsze niż przepływomierz chińskiego pochodzenia, choć ja z tych urządzeń nie korzystałem...

 

1 godzinę temu, g00pher napisał:

Najprościej jak się da, czyli na oko, przycisk i robi pauzę. Najlepiej tym samym co się załącza akcje.

No dobra...jak najbardziej wykonalne..np. dłuższe przytrzymanie guzika oznacza wymianę butli lub lepiej np dwa szybkie wciśnięcia, ale wtedy trzeba kod tak przerobić żeby poczekał na wybór trybu i nie załączał akcji...bo rozumiem że ten guzik po naciśnięciu poprostu uruchamia maszynę tak? (Nie patrzyłem uważnie na kod etc)

Link do komentarza
Share on other sites

Dnia 8.12.2021 o 10:36, g00pher napisał:

Witam, mam takie pytanie techniczne. Jak zrobić pauzę w wykonywaniu programu, żeby wymienić butelkę ???

moze teraz bedzie to czego chcesz...

#include <Servo.h>

Servo myservo;

#define kp 2
#define vp 3
#define czerwona 5
#define zielona 6
#define niebieska 4
#define start 7
#define Trig 8
#define Echo 9
#define serwo 10
#define bateria A0
#define potencjometr A2

int dystans;
long duration;
int a = 2;
int b = 5;
int pos = 0;
int odczytanaWartosc = 0;
int wartosc = 0;
int czasOpoznienia = 300;
byte akcja = 0;

void setup() 
{
  Serial.begin(9600);
  Serial.println("napięcie");
  myservo.attach(10);
  pinMode(kp, OUTPUT);
  pinMode(vp, OUTPUT);
  pinMode(czerwona, OUTPUT);
  pinMode(zielona, OUTPUT);
  pinMode(niebieska, OUTPUT);
  pinMode(start, INPUT_PULLUP);
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT); 
  pinMode(bateria, INPUT_PULLUP);
  pinMode(potencjometr, INPUT_PULLUP);
}

void loop()
{
  if (digitalRead(start) == LOW) {
    delay(1000);
    akcja = 1;
    if (digitalRead(start) == LOW) {
      delay(1000);
      akcja = 0;
      //tu wylacz pompy!! (dopisz)
      //ewentualnie zaswiec jakis led jako info o zablokowaniu
    }
  }
  
int wartosc = analogRead(bateria);
byte poziom = (wartosc / 204.8)*2.4;
Serial.println(poziom);
delay(50);

if (poziom < 7)
{
  myservo.write(0);
  digitalWrite(niebieska, LOW);        
  digitalWrite(zielona, LOW);
  digitalWrite(czerwona, HIGH);
}
else
{
  myservo.write(0);
  digitalWrite(niebieska, LOW);        
  digitalWrite(zielona, HIGH);
  digitalWrite(czerwona,LOW);
} 
if (akcja == 1){
 
   myservo.write(14);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(28);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(45);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(62);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(80);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(99);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(120);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(140);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(158);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
   myservo.write(174);
   digitalWrite(niebieska, LOW);        
   digitalWrite(zielona, HIGH);
   digitalWrite(czerwona,LOW);
   delay(czasOpoznienia);
   dystans = calculateDistance();
   if((dystans >=a) && (dystans <= b))
{
lanie();
}
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15);  
} 

    
  }
}

int calculateDistance() { 
  
  digitalWrite(Trig, LOW); 
  delayMicroseconds(2);
  digitalWrite(Trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  duration = pulseIn(Echo, HIGH);
  dystans = duration / 58;
  return dystans;
}

void lanie ()
{
    odczytanaWartosc = analogRead(potencjometr);
    odczytanaWartosc = map(odczytanaWartosc, 0, 1023, 5, 30);
    digitalWrite(niebieska, HIGH);        
    digitalWrite(zielona, LOW);
    digitalWrite(czerwona,LOW);
    analogWrite(vp,200);
    digitalWrite(kp, 1);
    delay(100*odczytanaWartosc);
    analogWrite(vp,0);
    digitalWrite(kp, 0);
    digitalWrite(niebieska, HIGH);        
    digitalWrite(zielona, LOW);
    digitalWrite(czerwona,LOW);
    delay(500); 
}

krotkie wcisniecie maszyna startuje...przytrzymasz dluzej to praca zostanie przerwana z tym ze w drugim if musisz wylaczyc pompe,moze jakis led zapalic etc..jest opisane...opcja biblioteki o ktorej wspominal kolega @ethanak napewno lepsza jest bo nie blokuje no ale ja meczyl sie nie bede bo nie uzywam...😅

Link do komentarza
Share on other sites

18 godzin temu, farmaceuta napisał:

krotkie wcisniecie maszyna startuje...przytrzymasz dluzej to praca zostanie przerwana z tym ze w drugim if musisz wylaczyc pompe,moze jakis led zapalic etc..jest opisane...

Dziękuję za fatygę ale coś jest nie tak, w monitorze portu nie widzi w ogóle wciskanej "pauzy" a po skończonej akcji już nie czeka na start tylko zaczyna wszystko do początku. Ale zaznaczam, że z programowaniem u mnie kiepsko a metodą prób i błędów kręcę się w kółko 😞

void loop()
{
  if (digitalRead(start) == LOW) {
    delay(1000);   
    akcja = 1;
    Serial.println("START"); 
  
  if (digitalRead(start) == LOW) {
    delay(1000);     
    akcja = 0;
    Serial.println("PAUZA");
    digitalWrite(niebieska, LOW);        
    digitalWrite(zielona, LOW);
    digitalWrite(czerwona, HIGH);
      //tu wylacz pompy!! (dopisz)
      //ewentualnie zaswiec jakis led jako info o zablokowaniu
    }
  }

https://www.tinkercad.com/things/4AsPcigh4lc-nalewacz-v12-z-pauza

Link do komentarza
Share on other sites

1 godzinę temu, g00pher napisał:

 a po skończonej akcji już nie czeka na start tylko zaczyna wszystko do początku.


p()
{
 f (digitalRead(start) == LOW) {
 ona, LOW);
    digitalWrite(czerwona, HIGH);
      //tu wylacz

Ten kod nie jest istotny...nowy tel mam i coś tu nie gra..(nie mogę skasować tego?) 

Więc tak...zmienna akcja umieść na końcu warunku i dopisz do niej zero...wtedy przestanie się się powtarzać i będzie czekać na guzik...co do startu od nowa to nic nie poradzę bo tak kod jest zbudowany...poprostu musisz czekać aż całość się wykona...chociaż nie rozumiem teraz po co ta pauza wogole?? Skoro nalewasz tylko wtedy jak chcesz? Więc podczas postoju normalnie wymieniasz butelkę i nic złego się nie stanie...

Link do komentarza
Share on other sites

Modelarstwo nie ma tu nic do rzeczy(Bruder), to raczej zamiłowanie do pewnej zielonej marki, oraz maszyn i płynów z dużą mocą😁.

Edytowano przez SOYER
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.