Arduino Dozownik Nawozu Akwarystyczny

Masz problem z Arduino? Tutaj możesz szukać pomocy.
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 9 mar 2014, 19:10

Witam mam problem z zaprogramowaniem dozownika nawozu na Arduino. Napisze co chce osiągnąć i co już mam.
Wiec tak program na chwile obecna przelicza zadana dawkę nawozu na ruchy serwa wykorzystując przy tym wydajność pompy czyli ile podaje przy pojedynczym ruchu serwa.

Już od jakiegoś czasu próbuje rozwinąć program ale chyba chce za dużo i wychodzą mi jakieś bzdury , napisze co chce osiągnąć:

1. podłączenie 3(UP & DOWN & OK) przycisków które służyły by do zaprogramowania ilości płynu na każdej z pomp przy pierwszym uruchomieniu programu, a nie tak jak jest teraz ze wartości są wpisane na sztywno.

2. podłączenie układu RTC który wyświetlał by czas na ekranie LCD(16x4) i realizowanie programu np raz na 24h według RTC

Wiec zwracam się z prośbą o pomoc w powyższej sprawie pozdrawiam

obecny kod:

Kod: Zaznacz cały

#include <Servo.h>

Servo servo1;  
Servo servo2;  
Servo servo3;  
Servo servo4;  


float dawka1 = 3; // dawka 1 pompy w ml
float dawka2 = 2; // dawka 2 pompy w ml
float dawka3 = 2; // dawka 3 pompy w ml
float dawka4 = 4; // dawka 4 pompy w ml

float  poj1 = 0.4; // ilosc pompowanej cieczy na 1 ruch (1 pompy w ml)
float poj2 = 0.5; // ilosc pompowanej cieczy na 1 ruch (2 pompy w ml)
float poj3 = 0.5; // ilosc pompowanej cieczy na 1 ruch (3 pompy w ml)
float poj4 = 0.4; // ilosc pompowanej cieczy na 1 ruch (4 pompy w ml)



int servo1_min = 0;
int servo1_max = 180;

int servo2_min = 0;
int servo2_max = 180;

int servo3_min = 0;
int servo3_max = 180;

int servo4_min = 0;
int servo4_max = 180;


int poz = 0;
int poz2 = 0;
int stat = 1;
int ruch = 0;
int ruchy = 0;
int ruchy2 = 0;



void setup()

{
  servo1.attach(2); 
  servo2.attach(3);
  servo3.attach(4);
  servo4.attach(5);
 
 
  servo1.write(servo1_min);
  servo2.write(180-servo2_min);
  servo3.write(servo3_min);
  servo4.write(180-servo4_min);
  delay(1000);
}



void loop()
{
// przeliczanie dawek na ilosc ruchow serw w pompach / wysyla dane do serwa
if (stat == 1) {ruchy = (dawka1 / poj1)+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);} 
if (stat == 2) {ruchy = dawka2 / poj2;poz2 = map(poz,0,180,servo2_min,servo2_max) ;servo2.write(180-poz2);}
if (stat == 3) {ruchy = dawka3 / poj3;poz2 = map(poz,0,180,servo3_min,servo3_max) ;servo3.write(poz2);}
if (stat == 4) {ruchy = dawka4 / poj4;poz2 = map(poz,0,180,servo4_min,servo4_max) ;servo4.write(180-poz2);}
// zlicza ruchy pompy

if(poz == 0){ruchy2= ruchy2 + 1;}



// powoduje ruch serva
if (poz == 0 ) { ruch = 0;} else if (poz == 180) {ruch = 1;}
if (ruch == 0 & stat > 0) { poz = poz++;} else if (ruch == 1 & stat > 0) { poz = poz--;}

if (ruchy == ruchy2){stat=stat+1;ruchy2 = 0;}
 if (stat == 5){stat = 0 ;}
 
delay(4);

} 
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 11 mar 2014, 21:57

Witam
Kurcze mało z tego rozumiem...a po zerknięciu na dołączone zdjęcie rozumiem jeszcze mniej... Piszesz o 4 serwach i pompach a na zdjęciu serwo i strzykawka...
Jeśli masz pompy (pompę) to po co serwa? Czy nie lepiej załączać pompę na okr. czas?
Potrzebuję więcej danych a Ty zastanów się jak uprościć projekt :-)
Pozdrawiam
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 12 mar 2014, 09:01

OK zaraz spróbuje wyjaśnić jak to działa, faktycznie możne nie jasno to napisałem;] . Pisząc pompa mam na myśli zestaw strzykawka z serwem działająca w dany sposób , serwo porusza tłokiem strzykawki a zaworki zwrotne powodują przepływ cieczy w jednym kierunku. system działa poprawnie jest bardzo tani i pozwala na dość precyzyjne(1ml) dawkowanie nawozu. i tak jak pisałem wcześniej najważniejsze są te 3 przyciski i rtc
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 12 mar 2014, 13:08

Witam
No... nareszcie mnie oświeciło i muszę przyznać, że z tymi zaworkami to mi szczena opadła. Kurcze a serwo poradzi sobie z ruchami tłoka? ... i jak to się ma do trwałości całego zestawu?
Co do samego projektu to RTC możesz sobie darować, ponieważ dozowanie ma być raz na dobę jak czytam... Nawet jeśli potem zaplanujesz kilka dozowań w cyklu dobowym to i tak dokładność nie ma większego znaczenia, więc po co RTC? Do tego celu wystarczy zwykła funkcja millis() Program i tak będzie miał sporo roboty z ustawianiem ilości płynu dla każdej z pomp :-)
To po pierwsze... a po drugie i tak dość często trzeba będzie korygować dawki bo np rośliny czy rybki rosną i potrzebują zmian. Funkcja millis() liczy do ok 50 dni, więc całkiem sporo, czyli jak raz na miesiąc zresetujesz system i dokonasz korekty to chyba nie będzie za często, prawda?

Dobra teraz kod. Niestety nie wziąłem ze sobą żadnej płytki Arduino więc mogłem tylko sprawdzić, czy kompilacja jest OKI. Co musisz sam zrobić? Na początek podłącz LCD (ew. zmień piny na swoje) podłącz 3 buttony ( zmień piny na swoje jak potrzeba) i załaduj program.
Najpierw powinieneś na LCD zobaczyć odliczanie czasu.
Następnie "odremuj" //ustaw(); w funkcji setup i załaduj program ponownie. Powinieneś teraz mieć możliwość zmiany dawkowania za pomocą buttonów UP, DOWN i OK.
Kurcze, sprawdź czy Ci to w ogóle działa, bo ja bez płytki to pisałem.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);
/*
float dawka1 = 3; // dawka 1 pompy w ml
float dawka2 = 2; // dawka 2 pompy w ml
float dawka3 = 2; // dawka 3 pompy w ml
float dawka4 = 4; // dawka 4 pompy w ml
float  poj1 = 0.4; // ilosc pompowanej cieczy na 1 ruch (1 pompy w ml)
float poj2 = 0.5;  // ilosc pompowanej cieczy na 1 ruch (2 pompy w ml)
float poj3 = 0.5;  // ilosc pompowanej cieczy na 1 ruch (3 pompy w ml)
float poj4 = 0.4;  // ilosc pompowanej cieczy na 1 ruch (4 pompy w ml)
*/
// --- zamiast tego proponuję to: -----------------
int dawki[4]={3,2,2,4};
float poj[4]={0.4, 0.5, 0.5, 0.5};
#define UP 11       // klawisz UP ( + )
#define DOWN 10     // klawisz DOWN ( - )
#define OK 12       // klawisz OK
int day=0, hour=0, min=0, sek=0; // bez komentarza
unsigned long now=0; // obecna chwila
unsigned long cykl=0; // czas jaki upłynął
char buf[30];
//--------------------------------------------------
void ustaw() // funkcja do ustawiania dawek
{
  lcd.setCursor(0,0);lcd.print(" < USTAWIENIA >");
  int i=0; // zmienna pomocnicza
  lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki);
  while(i<4) // dopóki nie ustawisz wszystkich 4 dawek
  {
    if(digitalRead(UP)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki+=1;if(dawki>50)dawki=50;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki);}
      }  
    if(digitalRead(DOWN)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki-=1;if(dawki<0)dawki=0;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki);}
      }  
    if(digitalRead(OK)==0)
      {
      delay(50);if(digitalRead(OK)==0){
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" < ZAPISANO > ");i++;}
      }  
    delay(1000);
  }lcd.setCursor(0,1);lcd.print("DAWKI USTAWIONE!");delay(2000);
}
//--------------------------------------------------
void setup()
{
pinMode(UP,INPUT_PULLUP);
pinMode(DOWN,INPUT_PULLUP);
pinMode(OK,INPUT_PULLUP); // klawisze UP DOWN i OK zwierają do masy
lcd.begin(16,2); // inicjalizacja LCD
Serial.begin(9600);
//ustaw();                    // wywołujemy funkcję ustaw()
now=millis(); // start systemu
cykl=millis();
}
// -------------------------------------------------
void loop()
{
  
  if((millis()-now)>999)
    {
    now=millis();
    sek++;
    if(sek>59){sek=0;min++;}
    if(min>59){min=0;hour++;}
    if(hour>23){hour=0;day++;}
    if(day>40){day=0;hour=0;min=0;sek=0;cykl=millis();}
    memset(buf,0,sizeof(buf)); // czyścimy bufor
    snprintf(buf,sizeof(buf),"%02d_%02d:%02d:%02d",day,hour,min,sek); // takie małe czary mary :-)
    lcd.setCursor(4,0);lcd.print(buf);
    }
  if((millis()-cykl)>86400) // dla doby: 86400 dla 12h: 43200 dla 6h: 21600 itd.
    { 
    // tutaj wstaw funkcję dozowania co 24 h
    lcd.setCursor(0,0);lcd.print(" ");
    lcd.setCursor(0,0);lcd.print("DOZOWANIE NAWOZU");
    delay(3000);
    lcd.setCursor(0,0);lcd.print(" ");
    cykl=millis();
    }  
}



Pozdrowienia
Ostatnio zmieniony 18 mar 2014, 18:09 przez wojtekizk, łącznie zmieniany 1 raz.
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 12 mar 2014, 16:07

Na pewno przetestuje po powrocie do domu. Ale mam jedno pytanie czy program nie wykona się 2 razy w ciągu dnia jeśli na przykład zabraknie zasilania w sieci?? Chciałem wykorzysta rdc bo porostu mam taki moduł i stwierdziłem ze może podtrzymywać czas nawet przy braku zasilania. Co do wytrzymałości zestawu wykorzystam do tego serwa Serwo Tower Pro SG-5010 są to silne serwa(0,51 Nm) i przy testach sprawowały się rewelacyjnie
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 12 mar 2014, 21:05

Cos mi tu nie śmiga nie wiem czy wprowadziłem dobrze zmienna dawki w swoim programie

Kod: Zaznacz cały

if (stat == 1) {ruchy = (dawki[1] / poj[1])+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);}
a tu cały program

Kod: Zaznacz cały

#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(13,12,11,10,9,8);

Servo servo1;  
Servo servo2;  
Servo servo3;  
Servo servo4;  


int servo1_min = 0;
int servo1_max = 180;

int servo2_min = 0;
int servo2_max = 180;

int servo3_min = 0;
int servo3_max = 180;

int servo4_min = 0;
int servo4_max = 180;


int poz = 0;
int poz2 = 0;
int stat = 1;
int ruch = 0;
int ruchy = 0;
int ruchy2 = 0;
int dawki[4]={3,2,2,4};
int poj[4]={0.4, 0.5, 0.5, 0.5};
#define UP 7       // klawisz UP ( + )
#define DOWN 6     // klawisz DOWN ( - )
#define OK 5       // klawisz OK
int day=0, hour=0, min=0, sek=0; // bez komentarza
unsigned long now=0; // obecna chwila
unsigned long cykl=0; // czas jaki upłynął
char buf[30];
//--------------------------------------------------
void ustaw() // funkcja do ustawiania dawek
{
  lcd.setCursor(0,0);lcd.print(" < USTAWIENIA >");
  int i=0; // zmienna pomocnicza
  lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);
  while(i<4) // dopóki nie ustawisz wszystkich 4 dawek
  {
    if(digitalRead(UP)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]+=1;if(dawki[i]>50)dawki[i]=50;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      }  
    if(digitalRead(DOWN)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]-=1;if(dawki[i]<0)dawki[i]=0;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      }  
    if(digitalRead(OK)==0)
      {
      delay(50);if(digitalRead(OK)==0){
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" < ZAPISANO > ");i++;}
      }  
    delay(1000);
  }lcd.setCursor(0,1);lcd.print("DAWKI USTAWIONE!");delay(2000);
}
//--------------------------------------------------
void setup()
{
   servo1.attach(2);  
   servo2.attach(3); 
   servo3.attach(4); 
   servo4.attach(5); 
   
pinMode(UP,INPUT_PULLUP);
pinMode(DOWN,INPUT_PULLUP);
pinMode(OK,INPUT_PULLUP); // klawisze UP DOWN i OK zwierają do masy
lcd.begin(16,4); // inicjalizacja LCD
Serial.begin(9600);
ustaw();                    // wywołujemy funkcję ustaw()
now=millis(); // start systemu
cykl=millis();
}
// -------------------------------------------------
void loop()
{
  
 if((millis()-now)>999)
    {
    now=millis();
    sek++;
    if(sek>59){sek=0;min++;}
    if(min>59){min=0;hour++;}
    if(hour>23){hour=0;day++;}
    if(day>40){day=0;hour=0;min=0;sek=0;cykl=millis();}
    memset(buf,0,sizeof(buf)); // czyścimy bufor
    snprintf(buf,sizeof(buf),"%02d_%02d:%02d:%02d",day,hour,min,sek); // takie małe czary mary :-)
    lcd.setCursor(4,0);lcd.print(buf);
    }
  if((millis()-cykl)>86400) // dla doby: 86400 dla 12h: 43200 dla 6h: 21600 itd.
    { 
   
// przeliczanie dawek na ilosc ruchow serw w pompach / wysyla dane do serwa
if (stat == 1) {ruchy = (dawki[1] / poj[1])+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);}
if (stat == 2) {ruchy = dawki[2] / poj[2];poz2 = map(poz,0,180,servo2_min,servo2_max) ;servo2.write(180-poz2);}
if (stat == 3) {ruchy = dawki[3] / poj[3];poz2 = map(poz,0,180,servo3_min,servo3_max) ;servo3.write(poz2);}
if (stat == 4) {ruchy = dawki[4] / poj[4];poz2 = map(poz,0,180,servo4_min,servo4_max) ;servo4.write(180-poz2);}
// zlicza ruchy pompy
if(poz == 0){ruchy2= ruchy2 + 1;}
// powoduje ruch serva
if (poz == 0 ) { ruch = 0;} else if (poz == 180) {ruch = 1;}
if (ruch == 0 & stat > 0) { poz = poz++;} else if (ruch == 1 & stat > 0) { poz = poz--;}
if (ruchy == ruchy2){stat=stat+1;ruchy2 = 0;}
if (stat == 5){stat = 0 ;}
 

    lcd.setCursor(0,0);lcd.print(" ");
    lcd.setCursor(0,0);lcd.print("DOZOWANIE NAWOZU");
    delay(3000);
    lcd.setCursor(0,0);lcd.print(" ");
    cykl=millis();
    }  
}
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 12 mar 2014, 21:48

Witam...
typowy błąd indeksowania tablic w C++... otóż tablice indeksowane są od 0 czyli pierwszy element tablicy dawki to dawki[0] i analogicznie dla tablicy poj :-)
element dawki[4] nie istnieje ! Czwarty element ( Twoja dawna dawka4 to tutaj jest dawki[3] )
zmień odp. indeksy i powinno być ok
Pozdrawiam
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 13 mar 2014, 11:54

ok sprawdzę wieczorem ale mam jeszcze jedno pytanie mam przyciski podłączone w poniższy sposób czy to dobra konfiguracja
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 13 mar 2014, 13:08

NIE !!!
Po to stosujesz konstrukcję pinMode(pin, INPUT_PULLUP); aby Twój procek automatycznie podciągnął do + zasilania ten właśnie pin. A drugą nóżkę switcha łączysz bezpośrednio z masą !
Czyli raz jeszcze: Jedna noga switcha do pinu 5,6, lub 7 a druga noga do masy. Potem w programie sprawdzasz stan np:
if(digitalRead(UP)==0) ...czyli czy jest zwarty do masy. Nie stosujesz żadnych rezystorów. Procesor zrobił to za Ciebie i podciągnął nogę pinu do + zasilania przez rezystor 10-47 kOhm.
Czy to jest jasne? :-)
Pozdrawiam
ps. w strukturze procka na pinach cyfrowych chodzą małe krasnoludki, zwane mosfetami, które tylko czekają aż dostaną komendę pinMode z opcją INPUT_PULLUP aby szybciutko dolutować do plusa zasilania rezystorek :-)
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 13 mar 2014, 14:19

ok dzięki za wytłumaczenie , przydał by mi się taki nauczyciel elektroniki\programowania ;] pozdrawiam
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 13 mar 2014, 22:22

sprawdziłem program i mam kilka problemów
1. przyciski bardzo słabo reagują na przyciśnięcia
2. przycisk down nie działa
3. podczas dozowania nawozu serwo rusza się 1mm na 2 sekundy
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 14 mar 2014, 07:39

Witam...
Jak jest problem z programem to pytam się gdzie jest Twój program??? :-)
Czekam na kod i Pozdrawiam
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 14 mar 2014, 14:12

Kod: Zaznacz cały

#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(13,12,11,10,9,8);

Servo servo1; 
Servo servo2; 
Servo servo3; 
Servo servo4; 


int servo1_min = 0;
int servo1_max = 180;

int servo2_min = 0;
int servo2_max = 180;

int servo3_min = 0;
int servo3_max = 180;

int servo4_min = 0;
int servo4_max = 180;


int poz = 0;
int poz2 = 0;
int stat = 1;
int ruch = 0;
int ruchy = 0;
int ruchy2 = 0;
int dawki[4]={3,2,2,4};
int poj[4]={0.4, 0.5, 0.5, 0.5};
#define UP 7       // klawisz UP ( + )
#define DOWN 6     // klawisz DOWN ( - )
#define OK 5       // klawisz OK
int day=0, hour=0, min=0, sek=0; // bez komentarza
unsigned long now=0; // obecna chwila
unsigned long cykl=0; // czas jaki upłynął
char buf[30];
//--------------------------------------------------
void ustaw() // funkcja do ustawiania dawek
{
  lcd.setCursor(0,0);lcd.print(" < USTAWIENIA >");
  int i=0; // zmienna pomocnicza
  lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);
  while(i<4) // dopóki nie ustawisz wszystkich 4 dawek
  {
    if(digitalRead(UP)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]+=1;if(dawki[i]>50)dawki[i]=50;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
    if(digitalRead(DOWN)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]-=1;if(dawki[i]<0)dawki[i]=0;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
    if(digitalRead(OK)==0)
      {
      delay(50);if(digitalRead(OK)==0){
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" < ZAPISANO > ");i++;}
      } 
    delay(1000);
  }lcd.setCursor(0,1);lcd.print("DAWKI USTAWIONE!");delay(2000);
}
//--------------------------------------------------
void setup()
{
   servo1.attach(2); 
   servo2.attach(3);
   servo3.attach(4);
   servo4.attach(5);
   
pinMode(UP,INPUT_PULLUP);
pinMode(DOWN,INPUT_PULLUP);
pinMode(OK,INPUT_PULLUP); // klawisze UP DOWN i OK zwierają do masy
lcd.begin(16,4); // inicjalizacja LCD
Serial.begin(9600);
ustaw();                    // wywołujemy funkcję ustaw()
now=millis(); // start systemu
cykl=millis();
}
// -------------------------------------------------
void loop()
{
 
 if((millis()-now)>999)
    {
    now=millis();
    sek++;
    if(sek>59){sek=0;min++;}
    if(min>59){min=0;hour++;}
    if(hour>23){hour=0;day++;}
    if(day>40){day=0;hour=0;min=0;sek=0;cykl=millis();}
    memset(buf,0,sizeof(buf)); // czyścimy bufor
    snprintf(buf,sizeof(buf),"%02d_%02d:%02d:%02d",day,hour,min,sek); // takie małe czary mary :-)
    lcd.setCursor(4,0);lcd.print(buf);
    }
  if((millis()-cykl)>1000) // dla doby: 86400 dla 12h: 43200 dla 6h: 21600 itd.
    {
   
// przeliczanie dawek na ilosc ruchow serw w pompach / wysyla dane do serwa
if (stat == 1) {ruchy = (dawki[0] / poj[0])+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);}
if (stat == 2) {ruchy = dawki[1] / poj[1];poz2 = map(poz,0,180,servo2_min,servo2_max) ;servo2.write(180-poz2);}
if (stat == 3) {ruchy = dawki[2] / poj[2];poz2 = map(poz,0,180,servo3_min,servo3_max) ;servo3.write(poz2);}
if (stat == 4) {ruchy = dawki[3] / poj[3];poz2 = map(poz,0,180,servo4_min,servo4_max) ;servo4.write(180-poz2);}
lcd.setCursor(0,0);lcd.print("PRZELICZANIE");
lcd.setCursor(0,0);lcd.print("DAWEK");
delay(3000);
// zlicza ruchy pompy
if(poz == 0){ruchy2= ruchy2 + 1;}
lcd.setCursor(0,0);lcd.print("PRZELICZANIE");
lcd.setCursor(0,0);lcd.print("RUCHOW");
delay(3000);
// powoduje ruch serva
lcd.setCursor(0,0);lcd.print(" ");
lcd.setCursor(0,0);lcd.print("DOZOWANIE NAWOZU");
if (poz == 0 ) { ruch = 0;} else if (poz == 180) {ruch = 1;}
if (ruch == 0 & stat > 0) { poz = poz++;} else if (ruch == 1 & stat > 0) { poz = poz--;}
if (ruchy == ruchy2){stat=stat+1;ruchy2 = 0;}
if (stat == 5){stat = 0 ;}
 

    
    delay(3000);
    lcd.setCursor(0,0);lcd.print(" ");
    cykl=millis();
    } 
}
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 14 mar 2014, 14:52

Witam... musisz testować program etapami. Na początek wrzuć do loopa tylko funkcję ustaw a wywal ją z setupa....
..Oj już widzę pierwszy zonk :-)

#define OK 5 // klawisz OK
servo4.attach(5);

Do pinu 5 przypisujsz 2 znaczenia - na 100% się wysypie :-)
Posprawdzaj uważnie kod.... wieczorkiem się odezwę
Pozdrawiam
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 14 mar 2014, 22:39

Witam
Nareszcie była okazja podpięcia płytki i sprawdzenia kodu. Chyba się starzeję bo już nie potrafię przewidzieć jakie figle może płatać Arduino. Miałeś rację funkcja ustaw() oględnie mówiąc działała raczej niemrawo. Poprawiłem ją nieco, starą wyrzuć a zamiast niej wrzuć to:

Kod: Zaznacz cały

void ustaw() // funkcja do ustawiania dawek
{
  for(int i=0;i<4;i++) // ustawiamy dawki w pętli
  {
    lcd.clear();
    lcd.setCursor(0,0);lcd.print(" < USTAWIENIA >");
    lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);
    while(digitalRead(OK)!=0)
    {
      delay(50);
      if(digitalRead(UP)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]+=1;if(dawki[i]>50)dawki[i]=50;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
      if(digitalRead(DOWN)==0)
      {
      delay(50);if(digitalRead(DOWN)==0){dawki[i]-=1;if(dawki[i]<0)dawki[i]=0;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
     }
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" < ZAPISANO > ");
      delay(1000);
  }
  lcd.clear();lcd.setCursor(0,1);lcd.print("DAWKI USTAWIONE!");delay(2000);
}

Testuj kod małymi kroczkami.
W setupie odremuj ustaw() a loop niech bedzie pusty.
Zobacz jak teraz śmiga ustaw(). Potem dodawaj po kolei w loopie następne składniki. Dużo już potrafisz, więc powinieneś sobie poradzić :-)
Pozdrawiam
ps. i koniecznie sprawdź czy czasem nie dublujesz pinów :-)
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 14 mar 2014, 23:57

Ok. Sprawdze dopiero w niedziele wieczorem.pozdrawia
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 16 mar 2014, 19:06

nowa funkcja ustaw działa super ale program nadal nie wykonuje zadanej czynności czyli ruchu ser o podanym czasie
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 18 mar 2014, 09:25

Witam
powtórzę jak mantrę... jest problem - OK... a gdzie jest aktualny kod???? :-)
Pozdrawiam
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 18 mar 2014, 15:42

Witam
Testowałem swój program z int zamiast float i wszystko śmiga ok, a jak wrzucam go do całości to zaczyna szaleć pojawia się napis dozowanie nawozu i serwo zaczyna się poruszać ale skokowo 1 mm na 2-3 sek

Kod: Zaznacz cały

#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(13,12,11,10,9,8);

Servo servo1; 
Servo servo2; 
Servo servo3; 
Servo servo4; 


int servo1_min = 0;
int servo1_max = 180;

int servo2_min = 0;
int servo2_max = 180;

int servo3_min = 0;
int servo3_max = 180;

int servo4_min = 0;
int servo4_max = 180;


int poz = 0;
int poz2 = 0;
int stat = 1;
int ruch = 0;
int ruchy = 0;
int ruchy2 = 0;
int dawki[4]={3,2,2,4};
int poj[4]={0.4, 0.5, 0.5, 0.5};
#define UP 7       // klawisz UP ( + )
#define DOWN 6     // klawisz DOWN ( - )
#define OK 5       // klawisz OK
int day=0, hour=0, min=0, sek=0; // bez komentarza
unsigned long now=0; // obecna chwila
unsigned long cykl=0; // czas jaki upłynął
char buf[30];
//--------------------------------------------------
void ustaw() // funkcja do ustawiania dawek
{
  for(int i=0;i<4;i++) // ustawiamy dawki w pętli
  {
    lcd.clear();
    lcd.setCursor(0,0);lcd.print(" < USTAWIENIA >");
    lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);
    while(digitalRead(OK)!=0)
    {
      delay(50);
      if(digitalRead(UP)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]+=1;if(dawki[i]>50)dawki[i]=50;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
      if(digitalRead(DOWN)==0)
      {
      delay(50);if(digitalRead(DOWN)==0){dawki[i]-=1;if(dawki[i]<0)dawki[i]=0;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
     }
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" < ZAPISANO > ");
      delay(1000);
  }
  lcd.clear();lcd.setCursor(0,1);lcd.print("DAWKI USTAWIONE!");delay(2000);
}
//--------------------------------------------------
void setup()
{
   servo1.attach(1); 
   servo2.attach(2);
   servo3.attach(3);
   servo4.attach(4);
   
pinMode(UP,INPUT_PULLUP);
pinMode(DOWN,INPUT_PULLUP);
pinMode(OK,INPUT_PULLUP); // klawisze UP DOWN i OK zwierają do masy
lcd.begin(16,4); // inicjalizacja LCD
Serial.begin(9600);
ustaw();                    // wywołujemy funkcję ustaw()
now=millis(); // start systemu
cykl=millis();
}
// -------------------------------------------------
void loop()
{
 
 if((millis()-now)>999)
    {
    now=millis();
    sek++;
    if(sek>59){sek=0;min++;}
    if(min>59){min=0;hour++;}
    if(hour>23){hour=0;day++;}
    if(day>40){day=0;hour=0;min=0;sek=0;cykl=millis();}
    memset(buf,0,sizeof(buf)); // czyścimy bufor
    snprintf(buf,sizeof(buf),"%02d_%02d:%02d:%02d",day,hour,min,sek); // takie małe czary mary :-)
    lcd.setCursor(4,0);lcd.print(buf);
    }
  if((millis()-cykl)>1000) // dla doby: 86400 dla 12h: 43200 dla 6h: 21600 itd.
    {
   
// przeliczanie dawek na ilosc ruchow serw w pompach / wysyla dane do serwa
if (stat == 1) {ruchy = (dawki[0] / poj[0])+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);}
if (stat == 2) {ruchy = dawki[1] / poj[1];poz2 = map(poz,0,180,servo2_min,servo2_max) ;servo2.write(180-poz2);}
if (stat == 3) {ruchy = dawki[2] / poj[2];poz2 = map(poz,0,180,servo3_min,servo3_max) ;servo3.write(poz2);}
if (stat == 4) {ruchy = dawki[3] / poj[3];poz2 = map(poz,0,180,servo4_min,servo4_max) ;servo4.write(180-poz2);}

// zlicza ruchy pompy
if(poz == 0){ruchy2= ruchy2 + 1;}

// powoduje ruch serva
lcd.setCursor(0,0);lcd.print(" ");
lcd.setCursor(0,0);lcd.print("DOZOWANIE NAWOZU");
if (poz == 0 ) { ruch = 0;} else if (poz == 180) {ruch = 1;}
if (ruch == 0 & stat > 0) { poz = poz++;} else if (ruch == 1 & stat > 0) { poz = poz--;}
if (ruchy == ruchy2){stat=stat+1;ruchy2 = 0;}
if (stat == 5){stat = 0 ;}
 

    
    delay(3000);
    lcd.setCursor(0,0);lcd.print(" ");
    cykl=millis();
    } 
}
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 18 mar 2014, 17:41

Witam... no widzisz jak wrzucasz kod to od razu lepiej :)
Po pierwsze co to za konstrukcja?

Kod: Zaznacz cały

int poj[4]={0.4, 0.5, 0.5, 0.5};
... jeśli to jest tablica zmiennych typu int to każda z nich =0 !
Tu musi być przecież float zamiast int ! ( niepotrzebnie namieszałem z tym int)
aż dziw że to:
dawki[0] / poj[0] --- nie powoduje dzielenia przez 0 (cholero :-), pewnie kompilator nawet nie spodziewał się takiego NIUSA i robi z ruchów zmienną typu NON (not in numbers) :-)
Więc:
ustaw dawki i poj na float
a potem obliczaj ruchy za pomocą konstrukcji :
ruchy = (int) (dawki[0] / poj[0]))+1; ... itd. we wszystkich takich if-ach
Popraw to i się zobaczy co dalej :-)
Pozdrawiam
ps. jak znajdę trochę czasu to podepnę Arduino i napiszę Ci programik w oparciu o bibliotekę Timers, tak dla wprawki :-)
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 20 mar 2014, 14:44

Witam
Nadal coś nie śmiga serwo nadal pracuje tak samo jak wcześniej

Kod: Zaznacz cały

#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(13,12,11,10,9,8);

Servo servo1; 
Servo servo2; 
Servo servo3; 
Servo servo4; 


int servo1_min = 0;
int servo1_max = 180;

int servo2_min = 0;
int servo2_max = 180;

int servo3_min = 0;
int servo3_max = 180;

int servo4_min = 0;
int servo4_max = 180;


int poz = 0;
int poz2 = 0;
int stat = 1;
int ruch = 0;
int ruchy = 0;
int ruchy2 = 0;
float dawki[4]={3,2,2,4};
float poj[4]={1,1,1,1};
#define UP 7       // klawisz UP ( + )
#define DOWN 6     // klawisz DOWN ( - )
#define OK 5       // klawisz OK
int day=0, hour=0, min=0, sek=0; // bez komentarza
unsigned long now=0; // obecna chwila
unsigned long cykl=0; // czas jaki upłynął
char buf[30];
//--------------------------------------------------
void ustaw() // funkcja do ustawiania dawek
{
  for(int i=0;i<4;i++) // ustawiamy dawki w pętli
  {
    lcd.clear();
    lcd.setCursor(0,0);lcd.print(" < USTAWIENIA >");
    lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);
    while(digitalRead(OK)!=0)
    {
      delay(50);
      if(digitalRead(UP)==0)
      {
      delay(50);if(digitalRead(UP)==0){dawki[i]+=1;if(dawki[i]>50)dawki[i]=50;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
      if(digitalRead(DOWN)==0)
      {
      delay(50);if(digitalRead(DOWN)==0){dawki[i]-=1;if(dawki[i]<0)dawki[i]=0;
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" Dawka ");lcd.print(i+1);lcd.print(" = ");lcd.print(dawki[i]);}
      } 
     }
      lcd.setCursor(0,1);lcd.print(" ");
      lcd.setCursor(0,1);lcd.print(" < ZAPISANO > ");
      delay(1000);
  }
  lcd.clear();lcd.setCursor(0,1);lcd.print("DAWKI USTAWIONE!");delay(2000);
}
//--------------------------------------------------
void setup()
{
   servo1.attach(1); 
   servo2.attach(2);
   servo3.attach(3);
   servo4.attach(4);
   
pinMode(UP,INPUT_PULLUP);
pinMode(DOWN,INPUT_PULLUP);
pinMode(OK,INPUT_PULLUP); // klawisze UP DOWN i OK zwierają do masy
lcd.begin(16,4); // inicjalizacja LCD
Serial.begin(9600);
ustaw();                    // wywołujemy funkcję ustaw()
now=millis(); // start systemu
cykl=millis();
}
// -------------------------------------------------
void loop()
{
 
 if((millis()-now)>999)
    {
    now=millis();
    sek++;
    if(sek>59){sek=0;min++;}
    if(min>59){min=0;hour++;}
    if(hour>23){hour=0;day++;}
    if(day>40){day=0;hour=0;min=0;sek=0;cykl=millis();}
    memset(buf,0,sizeof(buf)); // czyścimy bufor
    snprintf(buf,sizeof(buf),"%02d_%02d:%02d:%02d",day,hour,min,sek); // takie małe czary mary :-)
    lcd.setCursor(4,0);lcd.print(buf);
    }
  if((millis()-cykl)>60) // dla doby: 86400 dla 12h: 43200 dla 6h: 21600 itd.
    {
   
// przeliczanie dawek na ilosc ruchow serw w pompach / wysyla dane do serwa
if (stat == 1) {ruchy = (int) (dawki[0] / poj[0])+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);}
if (stat == 2) {ruchy = (int) dawki[1] / poj[1];poz2 = map(poz,0,180,servo2_min,servo2_max) ;servo2.write(180-poz2);}
if (stat == 3) {ruchy = (int) dawki[2] / poj[2];poz2 = map(poz,0,180,servo3_min,servo3_max) ;servo3.write(poz2);}
if (stat == 4) {ruchy = (int) dawki[3] / poj[3];poz2 = map(poz,0,180,servo4_min,servo4_max) ;servo4.write(180-poz2);}

// zlicza ruchy pompy
if(poz == 0){ruchy2= ruchy2 + 1;}

// powoduje ruch serva
lcd.setCursor(0,0);lcd.print(" ");
lcd.setCursor(0,0);lcd.print("DOZOWANIE NAWOZU");
if (poz == 0 ) { ruch = 0;} else if (poz == 180) {ruch = 1;}
if (ruch == 0 & stat > 0) { poz = poz++;} else if (ruch == 1 & stat > 0) { poz = poz--;}
if (ruchy == ruchy2){stat=stat+1;ruchy2 = 0;}
if (stat == 5){stat = 0 ;}
 

    
    delay(3000);
    lcd.setCursor(0,0);lcd.print(" ");
    cykl=millis();
    } 
}
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 20 mar 2014, 20:52

Witam
Dobra...nie smiga także w mojej głowie :-) jak uruchomiłem Twój kod to mi wychodzi poz2=0...czyli bez sensu. Poprawnie liczy tylko chyba ruchy: wychodzą 4 2 2 4, RESZTA DO BANI.
Może byś opisał co konkretnie ma zrobić np. serwo jeśli obliczone ruchy=4 (obrót o 180 i powrót do 0 - czy to jest jako jeden ruch? czy może inaczej. Opisz proszę b. dokładnie jak to ma się odbywać... bo ja stara żaba jestem... i nie kumam :-) I czy serwa pracują niezależnie dla 4 nawozów, czy też praca jednego jest zależna od innego.
Pozdrawiam
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 21 mar 2014, 11:30

witam
Wiec tak wartość poj mówi o tym ile serwo podaje przy jednym ruchu czyli od 0-180 stopni, wynika to z tego ze element łączące serwo ze strzykawka nie zawsze jest taki sam wiec jeden ruch to powiedzmy 0,2 ml płynu. A wartość Dawki to wiadomo ilość płynu jaki ma podać po wykonaniu programu powiedzmy 2ml wiec program wykonuje działanie 2ml/0,2ml = 10 ruchów serwa
Program wykonywany po kolei serwo 1 potem 2 itd

Na razie program wykonywany na wariata wgrana podstawowa wersja na arduino ze stałymi wartościami dawek , podłączone zasilaczem do zwykłego programatora czasowego który raz na dobę załącza zasilanie na 15 min program wykuje się raz i tyle. ale nie o to mi chodziło;]
Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: wojtekizk » 21 mar 2014, 13:06

Witam
Dobra... małymi kroczkami do celu w takim razie... nie mam tu teraz serwa do testów... wieczorkiem ew. będę mógł to przetestować... ale moim zdaniem powinno śmigać. Sprawdź najpierw to w swoim labolatorium :-)

Kod: Zaznacz cały

#include <Servo.h>
Servo servo[4];                         // defincja 4 serw 
int smin[4];                            // w sumie nie wiem po co min i max
int smax[4];
int ruchy;                              // ilośc ruchów do obliczenia 
float dawki[4]={4, 5.6, 3, 2.4};        // przykładowe dawki
float poj[4]={0.4, 0.8, 0.5, 0.3};      // przykładowe pojemności dla jednego ruchu
//--------------------------------------------------
void setup()
{
  for(int i=1;i<=4;i++)                  // w pętli podpinamy 4 serwa do programu
  {
    smin[i-1]=0;                         // nie wiem po co skoro serwo ma wyk. ruch od 0-180 st.
    smax[i-1]=180;                       // nie wiem po co skoro serwo ma wyk. ruch od 0-180 st.
    servo[i-1].attach(i);                // podpinamy serwa do pinów 1,2,3,4
  }  
}  
// -------------------------------------------------
void loop()
{
  for(int i=0;i<4;i++)
    {
    ruchy=(int)(dawki[i]/poj[i]);      // mi wychodzi odpowiednio: 10, 7, 6, 8 ruchów :-) 
    for(int k=1;k<=ruchy;k++)
      {
      servo[i].write(180);delay(2000); // naciągamy strzykawkę, czekamy, (tu dobierz czas dla delay)
      servo[i].write(0);delay(2000);   // wypluwamy ze strzykawki, czekamy (tu dobierz czas)
      }
   // ... i tak dla każdego z 4 serw 
   }
}
// --- koniec ---------------------------------------
Jak będzie OK... to dodamy kolejny wodotrysk...
Pozdrawiam
ps.
aaaa.... i pamiętaj musisz miec podpiete wszystkie 4 serwa...bo programik po wydaniu polecenia servo.write(...) czeka aż się wykona obrót... inaczej się powiesi :-)
Dabalwwy
Młodszy majsterkowicz
Posty: 41
Rejestracja: 4 wrz 2013, 11:10

Re: Arduino Dozownik Nawozu Akwarystyczny

Post autor: Dabalwwy » 21 mar 2014, 14:31

Wszytko fajnie tylko na ta chwile mam 2 sprawne serwa trzy dni temu uzylem 2 do innego projektu i nie moge ich wymatowac da sie to jakos ominac
ODPOWIEDZ

Strony partnerskie: