Skocz do zawartości

Robot do nalewania wódki


Kasztan

Pomocna odpowiedź

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

No i tu nasza ulubiona biblioteka Bounce2 🙂

Reakcja jest na puszczenie klawisza (nie wciśnięcie), a czas jak długo klawisz został przytrzymany odczytujesz odpowiednią metodą z biblioteki 🙂

 

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

Normalnie szczyt lenistwa, żeby do kieliszka już się nie chciało samemu nalać. 😄😉

Ale jeszcze jest następny poziom, czyli kroplówka.

Link do komentarza
Share on other sites

Witam serdecznie, trochę odkurzę zapomniany temat ale tak mi się to urządzonko spodobało że musiałem napisać. Bardzo dobry projekcik brawo 👏, może taki wykonam. Od razu nasunął mi się dodatkowy pomysł jak można by to udoskonalić. A mianowicie czy można by było dodać belki tensometryczne i serwo po wykryciu ciężaru od razu przemieszało by się pod wskazane miejsce aby nalać ? Urządzenie pracowałoby (byłoby w gotowości) od włączenia cały czas. Wydaje mi się to fajne rozwiązanie tylko czy wymagałoby dużej ingerencji w kod podany przez autora ? Dopiero raczkuje w arduino więc to ciężki kawałek chleba obecnie dla mnie ale mam nadzieję że ktoś pomoże.

Jakiego komponentu użyć w tinkercad do próby podłączenie czegoś takiego ponieważ belki tensometrycznej nie zauważyłem tam.

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.