Skocz do zawartości

Robot do nalewania wódki


Kasztan

Pomocna odpowiedź

&

Dnia 10.04.2020 o 09:33, Gieneq napisał:

Tak czytając ten temat przypomniał mi się film GreatScotta. Właśnie używa tu pompy perystaltyczne:

 

 

Dzieki @Gieneq za podpowiedź o pompach perystaltycznych. To coś co jest mi akurat potrzebne. Użyję ją (już zamówiłem 2 w Chinach)  do odprowadzania brudnej wody z doniczki spod kwiatków. Mam drzewko które wymaga dużo wody i często woda przelewa się do kamiennej doniczki w której stoi drzewko. Trudno tę wodę wylać bo drzewko sięga sufity i waży z 15 -20 kg z donicą. Próbowałem stosować pompę do odprowadzania wody ale kilka razy musiałem już ją rozkręcać i czyścić bo drobinki ziemi ją blokowały (pomimo filtracji przez gąbkę). Taka pompa jelitkowa jest dla mnie w sam raz.
Zrobię sobie układ z Arduino który obsłuży pompę nawadniającą i opróżniającą !!! 

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

Dnia 29.04.2020 o 21:56, Kasztan napisał:

Było to dla mnie największe wyzwanie, po wielu próbach wyszło mi coś takiego:


#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;

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()
{
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 (digitalRead(start) == LOW){
{  
   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); 
}

 

Cześć czy możesz mi powiedzić co jest zdefiniowane w kodzie pod "kp" i "vp"? (analogWrite(vp,200); digitalWrite(kp,1);

(domyślam się że chodzi o pomkę)

jestem początkujący i byłbym wdzięczny za odpowiedź 🙂

ps. super projekt i wykonanie

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

Dnia 2.06.2020 o 15:26, Darsoon napisał:

Cześć czy możesz mi powiedzić co jest zdefiniowane w kodzie pod "kp" i "vp"? (analogWrite(vp,200); digitalWrite(kp,1);

(domyślam się że chodzi o pomkę)

jestem początkujący i byłbym wdzięczny za odpowiedź 🙂

ps. super projekt i wykonanie

Cześć,

W skrypcie "kp" oznaczyłem sobie jako kierunek obrotu pompki a "vp" jako prędkość

Dnia 3.06.2020 o 17:26, Kaj napisał:

to ja również zadam pytanie

jak sterujesz pompką , przekaźnik mostek H ?
 

Przy pomocy takiego sterownika:

https://botland.com.pl/pl/sterowniki-silnikow-moduly/3164-l298n-dwukanalowy-sterownik-silnikow-modul-12v2a.html?search_query=sterownik+silnika&results=96

Link do komentarza
Share on other sites

@Kasztan Czyli mostkiem, a jak pompka membranowa reaguje na zmianę vp  ?? można sterować prędkościową pompowania w miarę płynie ?

Przyznam się ze twój projekt zainspirował mnie do zaczęcia zabawy z arduino i stworzenia czegoś podobnego na bazie silnika krokowego (zachowanie serwa po włączeniu niezbyt mi się podobało)
enkodera i z wyświetlaczem LCD 2x16 oraz termometru brakuje mi tylko najwalniejszej części czyli pompki 😉
cześć "mechaniczna" oparłem o jakieś stare zestawy konstrukcyjne wsparte lekko wydrukami z drukarki 3d

Ogólnie bardzo dziękuję za inspirację bo co innego wiedzieć arduino może robić wiele rzeczy a co innego dowiedzieć się że zrobienie ich nie jest wcale takie bardzo skomplikowane.
IMG_20200530_225626.thumb.jpg.f4f1b8bb57a987ccabf93b7cc9488c77.jpgIMG_20200530_225607.thumb.jpg.b59e61f657d67e9898da6688b34e1ef4.jpg

Edytowano przez Kaj
Link do komentarza
Share on other sites

Dodać czujnik poziomu cieczy i po skończonym polewaniu zmienić na chwilę kierunek działania pompki aby to co w wężyku cofnęło się. Nie naleje do pełnego i nie będzie strat w związku z kapaniem 🙂
A po co termometr w zbiorniku? Może przegapiłem info w opisie.

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

@szczawiosław termometr jest czysto informacyjnie jak nic nie robi to wyświetla temperaturę w butelce

@Gieneq @szczawiosław  myślę nad tym pompkę mam z zaworkiem zwrotnym co jest wygodne bo ciecz się nie cofa ale w momencie kiedy poziom w butelce jest wyższy niż ujście wężyka nalewającego to samoczynnie wycieka zastanawiam się nad jakimś rozwiązaniem tego problemu ale nie chcę bym iść w stronę elektrozaworu  ponieważ mogło by to podwoić koszy urządzenia
 

zwłaszcza że całość jest na zasilaniu 5V arduino , silnik krokowy, wyświetlacz oraz pompka a to wszystko na przetwornicy step down 2A zasilanej dwoma ogniwami 18650 już teraz po włączeniu pompki   przygasa wyświetlacz.

Link do komentarza
Share on other sites

Albo do  wydrukowania - na thingiversie masz kilka modeli perystaltyków, na dobrą sprawę to pół godzinki w openscadzie i sam zrobisz projekt... tylko łożyska trzeba kupić, ale to groszowy wydatek.

Link do komentarza
Share on other sites

@Przemek1967 @ethanak  myślałem nad pompka perystaltyczną ale odrzuciłem pomysł właśnie ze względu na niska wydajność

znalazłem na ali jakieś małe elektro zawory o dość małym poborze prądu w prawdzie są do powietrza ale może się nie rozpadną od razu.

 

myślę też nad jakimś mechanicznym rozwiązaniem w coś w stylu niekapiącego keczapu czy kubka niekapka albo ewentualnego podniesienia polewacza powyżej butelki

Link do komentarza
Share on other sites

Dnia 8.07.2020 o 11:50, g00pher napisał:

A mógłbyś udostępnić pliki .stl do drukarki 3D oraz kod programu jaki należy wgrać w całość.

Sorry ale na razie nie udostępniam plików stl. jeśli chodzi o kod to wrzuciłem całość.

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.