Strona 2 z 3

Re: Solarny system nawadniania

PostNapisane: 18 sie 2016, o 01:35
przez SCRUBBY
Co tu pisać... Graty przyjechały wczoraj rano, więc korzystając z urlopu usiadłem i zaprogramowałem bazę.

Użyte:
WeMos D1 R2 z ESP80266EX
5 channel relay
DHT22
DS3232
LCD 4x20

czeka na uruchomienie płytka z czytnikiem SD by był logger :)

Działanie:
weryfikacja temperatury i:
...
Kod: Zaznacz cały
temp= dht.readTemperature();    //pobór wartości temperatury
   if (temp >= 25.00)   
      {
      digitalWrite(RELAY1,LOW);           //Wiatrak 1 - ON
      if(temp >=27.00)   
        {
        digitalWrite(RELAY2,LOW);           //Wiatrak 2 - ON
        }
        else
        {
        digitalWrite(RELAY2,HIGH);          // Wiatrak 2 - OFF
        Serial.println("RELAY2 OFF | ");
        }
      }
   else                       
      {
      digitalWrite(RELAY1,HIGH);          // Wiatrak 1 - OFF
      digitalWrite(RELAY2,HIGH);          // Wiatrak 2 - OFF (choć wiadomo, że jest off z wyższych linijek ale nie testowałem bez tej linijki ,więc nie wiem
      }
...

No i wodotryski, które uwielbiam, jak latające kropki, bym wiedział, że program działa. Generalnie, jak to z softem. Zawsze na ekranie coś się musi dziać, bo inaczej user uzna, że zwiecha ;-)
np. kropki progressu dla zdefiniowanych delay'i pomiarowych:

for (int c = 0; c<20; c++)       //pasek, kropki "postępu"
   {
    lcd.setCursor(c,3);             //działanie na c++ w kolumnach w wierszu numer3, czyli w czwartym :)
    lcd.print("."); 
    delay(100); 
   }

...
Dzięki za zmotywowanie do roboty, bo to prościzna była i szkoda by czekać aż "się zrobi" :)

Jeżeli mogę jakoś pomóc, to chętnie., No i bardzo chciałbym zobaczyć Twój kod dla wypluwania danych na LCD (mamy chyba ten sam 2004A na i2C) . Fajnie podzieliłeś ekran i chciałbym to "spapugować" :-) W zamian proponuję działanie zegara bo trochę ch... słabo opisane w sieci, no i niebawem napiszę scheduler dla planowanych diagnoz całego systemu.

P.S. Nie moge znaleźć schematu podłączenia i bibliotek dla obsługi karty SD ( A total of six pins (GND, VCC, MISO, MOSI, SCK, CS), GND to ground, VCC is the power supply, MISO, MOSI, SCK is the SPI bus, CS is the chip select signal pin ) może coś gdzieś widziałeś?

Obrazek Obrazek

Obrazek

Re: Solarny system nawadniania

PostNapisane: 18 sie 2016, o 11:29
przez Pi0tR
łap

Kod: Zaznacz cały
  lcd.setCursor(5, 0);
  lcd.print("| T | W | G |");
  lcd.setCursor(0, 1);
  lcd.print("Tunel|");
  lcd.setCursor(6, 1);
  lcd.print(ttunel);
  lcd.print("*|");
  lcd.setCursor(10, 1);
  lcd.print(wtunel);
  lcd.print("%|");
  lcd.setCursor(14, 1);
  lcd.print(glebaproc);
  lcd.print("%|");

  lcd.setCursor(0, 2);
  lcd.print("Otoc.|");
  lcd.setCursor(6, 2);
  lcd.print(ttunel);
  lcd.print("*|");
  lcd.setCursor(10, 2);
  lcd.print(wtunel);
  lcd.print("%|");
  lcd.setCursor(14, 2);
  lcd.print(glebaproc);
  lcd.print("%|");


Jaki to modul SD ?

ja natomiast mam problem z przyciskami o ile menu ustawien udało sie zrealizaowac to jesli chciałbym juz kontrolować np % wilgotnosci przy której ma sie odpalac pompka to juz nie bardzo nie moge na to "wpaść" poprostu

2 rzecz to sfajczyłem sobie przez nieuwage modul wifi ;/
3 z racji mnogosci funkcji jaka chciałbym obluzyć musze chyba przeniesc wszystko na Arduino Mega

Re: Solarny system nawadniania

PostNapisane: 19 sie 2016, o 17:15
przez SCRUBBY
No to po kolei:
1) Mój czytnik SD na foto i ni chu-chu nie wiem gdzie zapiąć pin CS a SCK to chyba CLOCK...?:

Obrazek

Obrazek

2) Dziękuje za kod. Myślałem, że zrobiłeś to jakoś "dynamicznie" - za pomocą pętelek ;-)

3) Chętnie Ci pomogę z przyciskami itp. tyle, że nie wiem co chcesz uzyskać.

P.S. A może do Twojej funkcjonalności: "włącz coś, jeśli POMIAR <>= jakiejś wartości z FLOAT'a? Tak jak u mnie w kodzie zapętlenie na dwóch IF'ach?

P.S.2. A może przeniesiemy się z dyskusją o Andruino na inne forum? Zawsze ktoś pomoże :)

Re: Solarny system nawadniania

PostNapisane: 19 sie 2016, o 18:35
przez Pi0tR
A wiec tak

popełniłem proste menu na switch-ach wyglada mniej wiecej tak:

Kod: Zaznacz cały
void menu()
{
  Serial.print("Poziom 1 opcja >");

  Serial.print(wybor);
  Serial.println();
  Serial.print("Poziom 2 opcja >");
  Serial.print(wyborlvl8);

  if (digitalRead(PRZYCISK_PLUS) == HIGH)
  {
    delay(500);
    wybor++;
    if (wybor > 5) {
      wybor = 1;
    }
  }
  if (digitalRead(PRZYCISK_MINUS) == HIGH)
  {
    delay(500);
    wybor--;
    if (wybor < 1) {
      wybor = 5;
    }
  }
  switch (wybor) {
    case 1: {


        lcd.setCursor(0, 0);
        lcd.print(">Podlej teraz");
        lcd.setCursor(1, 1);
        lcd.print("Tryb pracy");
        lcd.setCursor(1, 2);
        lcd.print("Ustawienia");
        if (digitalRead(PRZYCISK_OK) == HIGH) {
          podlewanie();
        }


        delay(200);
        lcd.clear();


        break;
      }
    case 2: {


        lcd.setCursor(1, 0);
        lcd.print("Podlej teraz");
        lcd.setCursor(0, 1);
        lcd.print(">Tryb pracy");
        lcd.setCursor(1, 2);
        lcd.print("Ustawienia");
        if (digitalRead(PRZYCISK_OK) == HIGH) {
          delay(1000);
          if (digitalRead(PRZYCISK_PLUS) == HIGH)
          {
            delay(500);
            wyborlvl8++;
            if (wyborlvl8 > 5) {
              wyborlvl8 = 1;
            }
          }
          if (digitalRead(PRZYCISK_MINUS) == HIGH)
          {
            delay(500);
            wyborlvl8--;
            if (wyborlvl8 < 1) {
              wyborlvl8 = 5;
            }
          }
          lcd.clear();
          switch (wyborlvl8) {
            case 1: {
                lcd.setCursor(0, 0);
                lcd.print(">12");
                lcd.setCursor(1, 1);
                lcd.print("24");
                lcd.setCursor(1, 2);
                lcd.print("Procentowy");
                delay(200);
                lcd.clear();
              }
              break;
            case 2: {
                lcd.setCursor(1, 0);
                lcd.print("12");
                lcd.setCursor(0, 1);
                lcd.print(">24");
                lcd.setCursor(1, 2);
                lcd.print("Procentowy");
                delay(200);
                lcd.clear();
              }
              break;
            case 3: {
                lcd.setCursor(1, 0);
                lcd.print("12");
                lcd.setCursor(1, 1);
                lcd.print("24");
                lcd.setCursor(0, 2);
                lcd.print(">Procentowy");
              }
              break;
          }
          break;

          delay(200);
          lcd.clear();


        }
      }
      break;
  }
}


i co jest nie tak o ile w samo głowne menu działa to wejście np w podmenu ustawienia jest nie mozliwe gdyz pojawia sie tylko przez ułamek sekundy i znika.

co do pinu CS w czytniku jest to pin SS w arduino jeśli używasz UNO to jest to na pinie 10

Re: Solarny system nawadniania

PostNapisane: 20 sie 2016, o 00:52
przez SCRUBBY
Co do pod menu, to możesz mieć problem pisząc na CASE'ach. Spróbuj na IF.
P.S. Pamiętam, że CASE to było moje ulubione wariantowanie pod INPUTy ale Borland C++ miał problemy właśnie z CASE. Zwłaszcza musisz zwrócić uwagę na użycie BREAK'ów, bo pewnie to one Ci dają wyskok do menu wyżej.

P.S. Dziękuję bardzo za info o SD Card a przy okazji:

ARDUINO 4 RELAYS SHIELD - I2C - transfer from Wemos D14/SDA/D4 + D15/SCL/D3 to shield A4 + A5, it not used by Wemos D1.
SD CARD - D13/SCK + D12/MISO + D11/MOSI + D10/SS on the right places, but D10/SS is a GPIO15, and must be LOW on startup. solder addon resistor to the GND.

Mam WeMos D1 R2 z oryginalnym ESP 8266 :) Więc mam też na PIN10 to SS/CS, co potwierdził godzinę temu ktoś na forum. (treść powyżej).

Padłem dziś ze śmiechu czekając na mecz POL-DAN, programując mojego Arduino.

Napisałem kilka wodotrysków... Jeżdzące po LCD napisy no i wsteczny pasek postepu (z prawej do lewej strony).

Kod: Zaznacz cały
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
     ArduinoOTA.handle();           // opis https://github.com/krzychb/OnlineHumidifier/tree/master/9-Maintain#update-the-sketch

    /* --------- odczyt wilgotnosci i temperatury -----------*/
    hum = dht.readHumidity();       //Read data and store it to variables hum
    temp = dht.readTemperature();    //Read data and store it to variables temp


    /* --------- Odczytujemy i wyswietlamy date i czas na SERIAL MONITOR -----------*/
   
    dt = clock.getDateTime();       //odczyt daty,czasu
 
    Serial.print(dt.year);   Serial.print("-");
    Serial.print(dt.month);  Serial.print("-");
    Serial.print(dt.day);    Serial.print(" ");
    Serial.print(dt.hour);   Serial.print(":");
    Serial.print(dt.minute); Serial.print(":");
    Serial.print(dt.second); Serial.println("");
    /* --------- koniec odczytujemy i wyswietlamy date i czas na SERIAL MONITOR -----------*/
   
    /* --------- wyswietlanie na SERIAL MONITOR -----------*/
    Serial.print("Temperature:  ");
    Serial.print(temp);
    Serial.print(" C | ");
    Serial.print("Humidity: ");
    Serial.print(hum);
    Serial.println(" %");       //println() to wyświetl z EOL
    /* --------- koniec wyswietlania na SERIAL MONITOR -----------*/

   
    /* --------- Wyswietlanie na LCD -----------*/
   
    lcd.clear();                        // czyszczenie ekranu, by było widać, że coś się dzieje
    delay(1000);                   
    lcd.setCursor(0,0);                // kursor LCD na 0,0
   
    /* --------- Odczytujemy i wyswietlamy date i czas na LCD -----------*/

    dt = clock.getDateTime();       //odczyt daty,czasu
   
    lcd.print(dt.year);   lcd.print("-");
    lcd.print(dt.month);  lcd.print("-");
    lcd.print(dt.day);    lcd.print(" ");
    lcd.print(dt.hour);   lcd.print(":");
    lcd.print(dt.minute); lcd.print(":");
    lcd.print(dt.second); lcd.print("");
  /* --------- koniec oczytujemy i wyswietlamy date i czas na LCD -----------*/
   
    delay(500);       

/*---------- Kroki chodzacej po ekranie temperatury  ---------------*/
   {
    int t=10;
    for (int n=0; n<10; n++)
     {
      lcd.setCursor(t,1);
      lcd.print("T: ");
      lcd.print(temp);
      lcd.print(" C");
      delay(100);
      lcd.setCursor(t,1);
      lcd.print("             ");
      delay(25);
      t=10-n;
     }
     t=0;
     int n=0;

     lcd.setCursor(0,1);
     lcd.print("T: ");
     lcd.print(temp);
     lcd.print(" C");
     delay(1000);
    }
  /*---------- koniec chodzacej po ekranie temperatury ---------------*/


     
  /*---------- chodzenie po ekranie wilgotnosci ----------------*/
  {
   int u=10;
      for (int p=0; p<10; p++)
     {
      lcd.setCursor(u,2);
      lcd.print("H: ");
      lcd.print(hum);
      lcd.print(" %");
      delay(100);
      lcd.setCursor(u,2);
      lcd.print("          ");
      delay(25);
      u=10-p;
     }
     u=0;
     int p=0;
     
     lcd.setCursor(0,2);
     lcd.print("H: ");
     lcd.print(hum);
     lcd.print(" %");
     delay(500);
  }
/*  ---------- koniec chodzenia po ekranie wilgotnosci ----------------*/

/*  ---------- wsteczny pasek postepu ----------------*/
 {
  int v = 20;
    for (int x = 0; x<22; x++)       //wsteczny pasek postepu
   {
    lcd.setCursor(v,3);             //działanie na v++ w kolumnach w wierszu numer3, czyli w czwartym :)
    lcd.print("."); 
    delay(100);
    v = 20 - x ;
   }
    v=0;
    int x=0;
    delay(100);
}
/*  ---------- koniec wsteczny pasek postepu ----------------*/

/*  ---------- czyszczenie wstecznego paska postepu ----------------*/
 {
  int v = 20;
    for (int x = 0; x<22; x++)       //wsteczny pasek postepu
   {
    lcd.setCursor(v,3);             //działanie na v++ w kolumnach w wierszu numer3, czyli w czwartym :)
    lcd.print(" "); 
    delay(100);
    v = 20 - x ;
   }
    v=0;
    int x=0;
    delay(100);
}
/*  ---------- koniec wsteczny pasek postepu ----------------*/

/* --(end main loop )-- */

Re: Solarny system nawadniania

PostNapisane: 7 wrz 2016, o 21:22
przez SCRUBBY
Cześć,
Jak tam Twój kodzik? Ogarnąłeś juz te CASE'y ?

Re: Solarny system nawadniania

PostNapisane: 8 wrz 2016, o 18:05
przez Pi0tR

Re: Solarny system nawadniania

PostNapisane: 12 wrz 2016, o 18:02
przez Pi0tR
W zasadzie zastanawiam się zę i tak chce przecież sterować tym wszystmim zdalnie wiec nie musze robić klawiaturki lokalnie, a co za tym idzie moge użyć np Node-Red

Re: Solarny system nawadniania

PostNapisane: 13 wrz 2016, o 08:00
przez SCRUBBY
cześć,

1) panel solarny - jeżeli coś kosztuje 9 USD, to zapewniam Cię, że jest to tylko imitacja fotowoltaiki.

2) brak klawiatury - słusznie. Bez sensu dla zdalnej pracy.

Re: Solarny system nawadniania

PostNapisane: 13 wrz 2016, o 19:47
przez ooryginall

Tak jak kolega wyżej sugerował, również radziłbym przemyśleć zakup tego "panelu" gdyż ta zabawka nie wyrobi w tym systemie podlewania. 7V i 1,2W to za dużo energii nie uzyskasz jeśli masz w planach jej magazynowanie...