Skocz do zawartości

Robot do nalewania wódki


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 to post
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 to post
Share on other sites
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 to post
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 to post
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 to post
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 to post
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 to post
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 to post
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

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.