Grow Box Homemade

Coltivazione e conservazione di funghi e tartufi
Avatar utente
M&M
Messaggi: 143
Iscritto il: lun feb 29, 2016 4:59 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da M&M » sab mar 12, 2016 10:45 am

Grazie Cibino,molto disponibile!


Avatar utente
CloneXY
Messaggi: 1073
Iscritto il: dom set 13, 2015 12:25 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da CloneXY » sab mar 12, 2016 11:51 am

Quando un ingegnere incontra la psichedelia :D
Complimenti, bel progetto , attendo aggiornamenti!
λάϑε βιώσας
https://t.me/DrogaNews

Avatar utente
Psycore
Messaggi: 615
Iscritto il: sab set 19, 2015 6:17 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da Psycore » sab mar 12, 2016 1:32 pm

Bellissimo! Appena porti a termine se vuoi scrivila anche nella wiki, o se mi dai il permesso inizio a copiare e incollare così poi ti puoi limitare a modificare e aggiungere.

Quindi nel complesso viene poco meno di 100 € costruirla tutto considerato?
Giusto o sbagliato non può essere reato! Free drugs!

Avatar utente
Cibino
Messaggi: 100
Iscritto il: mar dic 22, 2015 10:54 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da Cibino » sab mar 12, 2016 4:59 pm

CloneXY ha scritto:Quando un ingegnere incontra la psichedelia :D
Complimenti, bel progetto , attendo aggiornamenti!
Mercì!
Psycore ha scritto:Bellissimo! Appena porti a termine se vuoi scrivila anche nella wiki, o se mi dai il permesso inizio a copiare e incollare così poi ti puoi limitare a modificare e aggiungere.

Quindi nel complesso viene poco meno di 100 € costruirla tutto considerato?
La carico subito!

Il costo effettivo del materiale è di 70/75,00 euro. Per mantenere il prezzo così basso, la maggior parte dei componenti è stata acquistata in Cina tramite eb_ay. Il solo problema è che occorrono 45-60 giorni per la consegna (ringraziamo la dogana itaGliana)!

Cibino

Avatar utente
tsunami666
Messaggi: 873
Iscritto il: mer set 30, 2015 10:20 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da tsunami666 » mar mar 15, 2016 4:09 pm

Ho messo giù una bozza di codice. Mi resta da capire come gestire l' orario... Qualche suggerimento.. ;) Sono un nubbio in questo campo...
Di alzarmi non ne ho voglia,
oggi non combatto con nessuno...

Avatar utente
papo
Scriba
Messaggi: 129
Iscritto il: lun set 14, 2015 10:48 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da papo » mer mar 16, 2016 2:55 am

Wow! Senza contare che potresti crearle e venderle :) che spettacolo!bravo!
Gloria eterna all'ipnorospo!
Tutti i miei post sono frutto della mia fervida immaginazione. Niente di ciò che scrivo è riferito a persone o situazioni reali.

Avatar utente
Cibino
Messaggi: 100
Iscritto il: mar dic 22, 2015 10:54 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da Cibino » mer mar 16, 2016 9:04 am

tsunami666 ha scritto:Ho messo giù una bozza di codice. Mi resta da capire come gestire l' orario... Qualche suggerimento.. ;) Sono un nubbio in questo campo...
Questa è solo una versione estremamente semplificata e "poco elegante" (ho poco tempo a disposizione) per poter iniziare un ciclo di coltivazione. Trovi anche come ho "gestito" (in maniera "barbara") il tempo.

Codice: Seleziona tutto

#include <DHT.h>
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

uint8_t ont[8] = {0x1F, 0x1F, 0x11, 0x1B, 0x1B, 0x1B, 0x1F, 0x1F};
uint8_t onh[8] = {0x1F, 0x1F, 0x15, 0x11, 0x15, 0x15, 0x1F, 0x1F};
uint8_t onl[8] = {0x1F, 0x1F, 0x17, 0x17, 0x17, 0x11, 0x1F, 0x1F};
uint8_t onf[8] = {0x1F, 0x1F, 0x11, 0x17, 0x13, 0x17, 0x1F, 0x1F};
uint8_t off[8] = {0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F};

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

DHT dht;

void setup(void)
{
  //Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.backlight();
  pinMode(4, OUTPUT); //Luce
  pinMode(5, OUTPUT); //Riscaldamento
  pinMode(6, OUTPUT); //Ventola
  pinMode(7, OUTPUT); //Umidificatore

  //digitalWrite(4, HIGH); //Spegnimento Relè
  digitalWrite(5, HIGH); //Spegnimento Relè
  digitalWrite(6, HIGH); //Spegnimento Relè
  digitalWrite(7, HIGH); //Spegnimento Relè

  setSyncProvider(RTC.get);

  lcd.createChar(1, ont);
  lcd.createChar(2, onh);
  lcd.createChar(3, onl);
  lcd.createChar(4, onf);
  lcd.createChar(5, off);

  lcd.setCursor(0, 0);
  lcd.print("--- Mushroom ---");
  lcd.setCursor(0, 1);
  lcd.print("  BoxController");
  delay(1000);
  digitalWrite(4, HIGH);
  delay(1000);

  lcd.setCursor(0, 0);
  lcd.print("  :     /          ");
  lcd.setCursor(0, 1);
  lcd.print("T:     C H:    %");
  lcd.setCursor(6, 1);
  lcd.print((char)223);

  lcd.setCursor(12, 0);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);

  dht.setup(3); // data pin 3


}
int StatoLuceLcd = 1; // 0 = spento - 1 = acceso
int StatoVentola = 0;
int StatoLuceBox = 0;
float SecondiTotali = 0;
int UscitaMenu = 0;

void loop(void)
{
  SecondiTotali = (((hour() * 36) + (minute() * .6)) * 100) + second();
  GestioneTasti();
  AccensioneRiscaldamento();
  AccensioneUmidificatore();
  AccensioneLuce();
  AccensioneVentola();
  GestioneDisplayLcd();
  //GestioneMonitorSeriale();

  delay(dht.getMinimumSamplingPeriod());
}


//######### Inizio Routine #########

void GestioneDisplayLcd(void)
{
  lcd.setCursor(0, 0);
  //lcd.print(SecondiTotali,0);
  printDigits(hour());
  lcd.setCursor(3, 0);
  printDigits(minute());
  lcd.setCursor(6, 0);
  printDigits(day());
  lcd.setCursor(9, 0);
  printDigits(month());
  //lcd.setCursor(12,0);
  //lcd.print(year());
  lcd.setCursor(2, 1);
  lcd.print(dht.getTemperature(), 1);
  lcd.setCursor(11, 1);
  lcd.print(dht.getHumidity(), 1);
}

void printDigits(int digits)
{
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}

/*
//#############################################

void GestioneMonitorSeriale(void)
{
  Serial.print(hour());
  Serial.print(':');
  Serial.print(minute());
  Serial.print(':');
  Serial.print(second());
  Serial.print(' ');
  Serial.print(SecondiTotali, 0);
  Serial.println();
}
*/

//#############################################

void AccensioneRiscaldamento(void)
{
  if (dht.getTemperature() >= 25.5) {
    digitalWrite(5, HIGH); //Spegnimento
    lcd.setCursor(12, 0);
    lcd.write(5);
  } else {
    digitalWrite(5, LOW); //Accensione
    lcd.setCursor(12, 0);
    lcd.write(1);
  }
}

//#############################################

void AccensioneUmidificatore(void)
{
  if (dht.getHumidity() >= 95) {
    digitalWrite(7, HIGH); //Spegnimento
    lcd.setCursor(13, 0);
    lcd.write(5);
  } else {
    digitalWrite(7, LOW); //Accensione
    lcd.setCursor(13, 0);
    lcd.write(2);
  }
}

//#############################################

void AccensioneLuce(void)
{
  if (StatoLuceBox == 0) {
    if (SecondiTotali >= 3600 && SecondiTotali <= 25200) {
      digitalWrite(4, LOW); //Accensione
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(3);
    } else {
      digitalWrite(4, HIGH); //Spegnimento
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(5);
    }
  }
}

//#############################################

void AccensioneVentola(void)
{
  if (StatoVentola == 0) {
    if ((SecondiTotali >= 0 && SecondiTotali <= 60) || (SecondiTotali >= 14400 && SecondiTotali <= 14460) || (SecondiTotali >= 28800 && SecondiTotali <= 28860)
      || (SecondiTotali >= 43200 && SecondiTotali <= 43260) || (SecondiTotali >= 57600 && SecondiTotali <= 57660) || (SecondiTotali >= 72000 && SecondiTotali <= 72060)) {
      digitalWrite(6, LOW); //Accensione
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(4);
    } else {
      digitalWrite(6, HIGH); //Spegnimento
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(5);
    }
  }
}  

//#############################################

void GestioneTasti(void)
{
  if (analogRead(A0) > 500 && analogRead(A0) < 520) { //Accensione/spegnimento Luce LCD
    if (StatoLuceLcd == 0) {
      lcd.backlight();
      StatoLuceLcd = 1;
    } else {
      lcd.noBacklight();
      StatoLuceLcd = 0;
    }
  }
  if (analogRead(A0) > 755 && analogRead(A0) < 780) { //Accensione/spegnimento Ventola
    if (StatoVentola == 0) {
      digitalWrite(6, LOW); //Accensione
      StatoVentola = 1;
      lcd.setCursor(15, 0);
      lcd.write(4);
    } else {
      digitalWrite(6, HIGH); //Spegnimento
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(5);
    }
  }
  if (analogRead(A0) > 670 && analogRead(A0) < 695) { //Accensione/spegnimento LuceBox
    if (StatoLuceBox == 0) {
      digitalWrite(4, LOW); //Accensione
      StatoLuceBox = 1;
      lcd.setCursor(14, 0);
      lcd.write(3);
    } else {
      digitalWrite(4, HIGH); //Spegnimento
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(5);
    }
  }
  if (analogRead(A0) >= 0 && analogRead(A0) < 20) { //Ingresso Menù
      menu();
  }
}

//#############################################
void menu(void)
{
  lcd.setCursor(0, 0);
  lcd.print("---  Menu  ---");
  lcd.setCursor(0, 1);
  lcd.print("      Test      ");
  if (analogRead(A0) >= 500 && analogRead(A0) < 520) { UscitaMenu=1;}
  if (UscitaMenu == 0) { menu();}
}
Ultima modifica di Cibino il mer mar 16, 2016 9:10 am, modificato 1 volta in totale.

Avatar utente
Cibino
Messaggi: 100
Iscritto il: mar dic 22, 2015 10:54 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da Cibino » mer mar 16, 2016 9:09 am

papo ha scritto:Wow! Senza contare che potresti crearle e venderle :) che spettacolo!bravo!
Non ne vale la pena: se "conti" anche le ore di "mano d'opera" sarebbero troppo care! Solo DIY! :chitarra:

Cibino

On1onGuY
Scriba
Messaggi: 328
Iscritto il: ven gen 08, 2016 10:32 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da On1onGuY » mer mar 16, 2016 10:51 am

Geniale , degno di un ing ;)
Volevo porti una domanda , io ho una raspberry (Raspberry Pi B+) comprensiva di 26 pin GPIO , potrei usare comunque la raspberry al posto dell'arduino giusto? Anche perché così potrei sfruttare la raspberry come ponte per un sistema alla IoT (Internet of Things) ;)
Le monde est à Nous
____________________________________________
Non credete a ciò che scrivo

Avatar utente
Cibino
Messaggi: 100
Iscritto il: mar dic 22, 2015 10:54 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da Cibino » mer mar 16, 2016 2:44 pm

On1onGuY ha scritto:Geniale , degno di un ing ;)
Volevo porti una domanda , io ho una raspberry (Raspberry Pi B+) comprensiva di 26 pin GPIO , potrei usare comunque la raspberry al posto dell'arduino giusto? Anche perché così potrei sfruttare la raspberry come ponte per un sistema alla IoT (Internet of Things) ;)
Assolutamente si. :pidu:

Cosa puoi "usare" del mio progetto:
- Sonda Am2302/DHT22
- Scheda relè (e tutti i dispositivi collegati: tappetino riscaldante, umidificatore, ventola, luce).
- Programma (nonostante sia scritto in "simil C++" avrà sicuramente bisogno di leggera e semplice qualche modifica)

Per quanto riguarda "l'orario", presumo che il Raspberry lo gestisca in automatico senza il bisogno di scheda RTC aggiuntiva. L'unica "cosa" da verificare è come gestire un display LCD ma presumo che a te non serva in quanto potresti verificare i parametri da qualsiasi altro pc in rete o direttamente collegando il monitor al Rasp.

Cibino

P.S. A Maggio dovrebbe arrivarmi il Pine64 (al momento la singleboard più "potente"). Sicuramente "sposterò" il progetto su quello, in quanto spero di iniziare presto anche la coltivazione di ganoderma e potrei gestire tutte le coltivazioni e le varie "fasi" (e magari aggiungere una cam) con un solo "apparato".

Avatar utente
burtaur
Messaggi: 36
Iscritto il: mar mar 15, 2016 5:25 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da burtaur » mer mar 16, 2016 10:25 pm

Fantastico! Ammiro molto la cura dei dettagli, l'ordine e l'eleganza del tuo lavoro. E pensare che è la primissima versione questa... io quando mi ci metto con l'elettronica e con il fai da te mi viene un puttanaio da questi punti di vista e poi perdo un sacco di tempo per migliorare estetica e praticità. Non riesco a lavorare con metodo e con le idee chiare in testa come dimostri di aver fatto tu fin da subito!
Mi hai dato anche alcuni spunti tecnici per dei progetti che ho in mente, grazie :)

PS: ho utilizzato quella stessa lampadina e i funghi mi sono venuti sdraiati, qualcuno mi suggeri che forse l'illuminazione non era abbastanza... ma in realtà c'erano anche altre cose che non andavano bene in quel ciclo tipo la temperatura che superava ogni tanto anche i 30

Avatar utente
Cibino
Messaggi: 100
Iscritto il: mar dic 22, 2015 10:54 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da Cibino » ven mar 18, 2016 8:08 pm

burtaur ha scritto:Fantastico! Ammiro molto la cura dei dettagli, l'ordine e l'eleganza del tuo lavoro. E pensare che è la primissima versione questa... io quando mi ci metto con l'elettronica e con il fai da te mi viene un puttanaio da questi punti di vista e poi perdo un sacco di tempo per migliorare estetica e praticità. Non riesco a lavorare con metodo e con le idee chiare in testa come dimostri di aver fatto tu fin da subito!
Mi hai dato anche alcuni spunti tecnici per dei progetti che ho in mente, grazie :)

PS: ho utilizzato quella stessa lampadina e i funghi mi sono venuti sdraiati, qualcuno mi suggeri che forse l'illuminazione non era abbastanza... ma in realtà c'erano anche altre cose che non andavano bene in quel ciclo tipo la temperatura che superava ogni tanto anche i 30
Grazie mille ma la "cura dei dettagli" è dovuta alla mia età! Sicuramente sei più giovane dello "zio Cibino"! Goditi la tua età e i "grovigli di cavi"!!! :asd:

Cibino

Avatar utente
pannocchietta
Messaggi: 155
Iscritto il: lun mar 14, 2016 5:46 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da pannocchietta » sab mar 26, 2016 1:27 pm

Arduino + grow room combo letale XD

Avatar utente
Tilt!
Messaggi: 68
Iscritto il: mar dic 01, 2015 4:42 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da Tilt! » mar mar 29, 2016 5:55 pm

bellissimo complimenti!

Avatar utente
tsunami666
Messaggi: 873
Iscritto il: mer set 30, 2015 10:20 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da tsunami666 » lun apr 04, 2016 3:08 pm

Mi son preso la libertà di aggiungere un banale schema elettrico.
mio box_schem.jpg
Ho modificato anche il code, aggiungendo vari commenti per capire dove modificare i parametri, aggiungendo la possibilità di programmare l' orario tramite monitor seriale, modificato i vari test tramite pulsanti.

Codice: Seleziona tutto

#include <DHT.h>
#include <DS3232RTC.h>
#include <Streaming.h>
#include <time.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

uint8_t ont[8] = {0x1F, 0x1F, 0x11, 0x1B, 0x1B, 0x1B, 0x1F, 0x1F}; //crea carattere
uint8_t onh[8] = {0x1F, 0x1F, 0x15, 0x11, 0x15, 0x15, 0x1F, 0x1F}; //
uint8_t onl[8] = {0x1F, 0x1F, 0x17, 0x17, 0x17, 0x11, 0x1F, 0x1F}; //
uint8_t onf[8] = {0x1F, 0x1F, 0x11, 0x17, 0x13, 0x17, 0x1F, 0x1F}; //
uint8_t off[8] = {0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F}; //
uint8_t mus[8] = {0x1B, 0x11, 0x00, 0x00, 0x0A, 0x1B, 0x19, 0x1C}; //crea carattere mushroom

LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // indirizzo per il mio disply 0x3f


DHT dht;
#define DHTTYPE DHT11   // Sesore modello DHT 11

void setup(void)
{
  Serial.begin(115200);
  lcd.begin(16, 2);
  lcd.backlight();
  dht.setup(2); // data pin 2
  pinMode(4, OUTPUT); //Luce
  pinMode(5, OUTPUT); //Riscaldamento
  pinMode(6, OUTPUT); //Ventola
  pinMode(7, OUTPUT); //Umidificatore

  digitalWrite(4, HIGH); //Spegnimento Relè
  digitalWrite(5, HIGH); //Spegnimento Relè
  digitalWrite(6, HIGH); //Spegnimento Relè
  digitalWrite(7, HIGH); //Spegnimento Relè

  setSyncProvider(RTC.get);

  lcd.createChar(1, ont); //Associa il numero al carattere creato precedentemente
  lcd.createChar(2, onh); //
  lcd.createChar(3, onl); //
  lcd.createChar(4, onf); //
  lcd.createChar(5, off); //
  lcd.createChar(6, mus); //

  lcd.setCursor(0, 0);
  lcd.write(6);
  lcd.setCursor(1, 0);
  lcd.write(6);
  lcd.setCursor(2, 0);
  lcd.print("- Mushroom -");
  lcd.setCursor(14, 0);
  lcd.write(6);
  lcd.setCursor(15, 0);
  lcd.write(6);
  lcd.setCursor(0, 1);
  lcd.print("  BoxController ");
  delay(1000);
  digitalWrite(4, HIGH);
  delay(1000);

  lcd.setCursor(0, 0);
  lcd.print("  :     /          ");
  lcd.setCursor(0, 1);
  lcd.print("T:     C H:    %");
  lcd.setCursor(6, 1);
  lcd.print((char)223);

  lcd.setCursor(12, 0);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);

  }
int StatoLuceLcd = 1; // 0 = spento - 1 = acceso
int StatoVentola = 0;
int StatoLuceBox = 0;
int StatoUmidificatore = 0;
float SecondiTotali = 0;
int UscitaMenu = 0;

void loop(void)
{
  SecondiTotali = (((hour() * 36) + (minute() * .6)) * 100) + second();
  GestioneTasti();
  GestioneOrario();
  ValoreA0();
  AccensioneRiscaldamento();
  AccensioneUmidificatore();
  AccensioneLuce();
  AccensioneVentola();
  AccensioneRaffreddamento();
  GestioneDisplayLcd();
  GestioneMonitorSeriale();
}


//######### Inizio Routine #########

//*************** lettura valore bottoni su A0 ***********************

void ValoreA0(void)
{
delay(dht.getMinimumSamplingPeriod());  // lettura valore bottoni su A0 solo per conoscere valore da settare in base alle resistenze
//  printTime();
//  delay(1000);
// read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);
}

//****************GestioneOrario************************

void GestioneOrario(void)//Permette di impostare l' orario tramite monitor seriale. Digitare: aaaa,mm,gg,hh,mm,ss, e inviare
{ 
    static time_t tLast;
    time_t t;
    tmElements_t tm;

    //check for input to set the RTC, minimum length is 12, i.e. yy,m,d,h,m,s
    if (Serial.available() >= 12) {
        //note that the tmElements_t Year member is an offset from 1970,
        //but the RTC wants the last two digits of the calendar year.
        //use the convenience macros from Time.h to do the conversions.
        int y = Serial.parseInt();
        if (y >= 100 && y < 1000)
            Serial << F("Error: Year must be two digits or four digits!") << endl;
        else {
            if (y >= 1000)
                tm.Year = CalendarYrToTm(y);
            else    //(y < 100)
                tm.Year = y2kYearToTm(y);
            tm.Month = Serial.parseInt();
            tm.Day = Serial.parseInt();
            tm.Hour = Serial.parseInt();
            tm.Minute = Serial.parseInt();
            tm.Second = Serial.parseInt();
            t = makeTime(tm);
            RTC.set(t);        //use the time_t value to ensure correct weekday is set
            setTime(t);        
            Serial << F("RTC set to: ");
           // printDateTime(t);
            Serial << endl;
            //dump any extraneous input
            while (Serial.available() > 0) Serial.read();
        }
    }
    
    t = now();
    if (t != tLast) {
        tLast = t;
//        printDateTime(t);
        if (second(t) == 0) {
            float c = RTC.temperature() / 4.;
            float f = c * 9. / 5. + 32.;
            Serial << F("  ") << c << F(" C  ") << f << F(" F");
        }
        Serial << endl;
    }
}

void GestioneDisplayLcd(void)
{
  lcd.setCursor(0, 0);
  //lcd.print(SecondiTotali,0); //mod mio
  printDigits(hour());
  lcd.setCursor(3, 0);
  printDigits(minute());
  lcd.setCursor(6, 0);
  printDigits(day());
  lcd.setCursor(9, 0);
  printDigits(month());
  //lcd.setCursor(12,0);
  //lcd.print(year());
  lcd.setCursor(2, 1);
  lcd.print(dht.getTemperature(), 1);
  lcd.setCursor(11, 1);
  lcd.print(dht.getHumidity(), 1);
}

void printDigits(int digits)
{
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}


//#############################################

void GestioneMonitorSeriale(void)
{
  Serial.print(hour());
  Serial.print(':');
  Serial.print(minute());
  Serial.print(':');
  Serial.print(second());
  Serial.print(' ');
  Serial.print(SecondiTotali, 0);
  Serial.println();
}

//#############################################

void AccensioneRiscaldamento(void)
{
  if (dht.getTemperature() >= 25.5) {  // Il riscaldamento è attivo fino a 25,5°C
    digitalWrite(5, HIGH); //Spegnimento
    lcd.setCursor(12, 0);
    lcd.write(5);
  } else {
    digitalWrite(5, LOW); //Accensione
    lcd.setCursor(12, 0);
    lcd.write(1);
  }
}
//#############################################

void AccensioneRaffreddamento(void) // raffreddamnento in caso si raggiugano i 29,5°C
{
  if (dht.getTemperature() >= 29.5) {
    digitalWrite(6, LOW); //Accensione
    lcd.setCursor(15, 0);
    lcd.write(4);
  } else {
    digitalWrite(6, HIGH); //Spegnimento
    lcd.setCursor(15, 0);
    lcd.write(5);
  }
}

//#############################################

void AccensioneUmidificatore(void)  // Umidificatore attivo fino al raggiungimento del 95% di umidità
{
  if (dht.getHumidity() >= 95) {
    digitalWrite(7, HIGH); //Spegnimento
    lcd.setCursor(13, 0);
    lcd.write(5);
  } else {
    digitalWrite(7, LOW); //Accensione
    lcd.setCursor(13, 0);
    lcd.write(2);
  }
}

//#############################################

void AccensioneLuce(void)
{
  if (StatoLuceBox == 0) {
    if (SecondiTotali >= 25200 && SecondiTotali <= 46800) {  //La luce del box è spenta dalle ore 7 alle ore 13
      digitalWrite(4, HIGH); //Spegnimento
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(5);
    } else {
      digitalWrite(4, LOW); //Accensione
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(3);
    }
  }
}

//#############################################

void AccensioneVentola(void)  // La ventola è attiva un minuto ogni 4 ore
{
  if (StatoVentola == 0){
      if ((SecondiTotali >= 0 && SecondiTotali <= 60) || (SecondiTotali >= 14400 && SecondiTotali <= 14460) || (SecondiTotali >= 28800 && SecondiTotali <= 28860)
      || (SecondiTotali >= 43200 && SecondiTotali <= 43260) || (SecondiTotali >= 57600 && SecondiTotali <= 57660) || (SecondiTotali >= 72000 && SecondiTotali <= 72060)) {
      digitalWrite(6, LOW); //Accensione
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(4);
    } else {
      digitalWrite(6, HIGH); //Spegnimento
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(5);
    }
  }
}  

//#############################################

void GestioneTasti(void)
{
  if (analogRead(A0) > 760 && analogRead(A0) < 780) { //Accensione/spegnimento Luce LCD
    if (StatoLuceLcd == 0) {
      lcd.backlight();
      StatoLuceLcd = 1;
    } else {
      lcd.noBacklight();
      StatoLuceLcd = 0;
    }
  }
  if (analogRead(A0) > 605 && analogRead(A0) < 625) { //Accensione/spegnimento Ventola
    if (StatoVentola == 0) {
      digitalWrite(6, LOW); //Accensione
      StatoVentola = 1;
      lcd.setCursor(15, 0);
      lcd.write(4);
      delay(1000); //mod mio
    } else {
      digitalWrite(6, HIGH); //Spegnimento
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(5);
    }
  }
    if (analogRead(A0) > 400 && analogRead(A0) < 420) { //Accensione/spegnimento Umidificatore
    if (StatoUmidificatore == 0) {
      digitalWrite(7, LOW); //Accensione
      StatoUmidificatore = 1;
      lcd.setCursor(13, 0);
      lcd.write(2);
    } else {
      digitalWrite(7, HIGH); //Spegnimento
      StatoUmidificatore = 0;
      lcd.setCursor(13, 0);
      lcd.write(5);
      delay(2000); //mod mio
    }
  }
  if (analogRead(A0) > 250 && analogRead(A0) < 270) { //Accensione/spegnimento LuceBox
    if (StatoLuceBox == 0) {
      digitalWrite(4, LOW); //Accensione
      StatoLuceBox = 1;
      lcd.setCursor(14, 0);
      lcd.write(3);
    } else {
      digitalWrite(4, HIGH); //Spegnimento
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(5);
      delay(2000); //mod mio
    }
  }
  if (analogRead(A0) >= 0 && analogRead(A0) < 20) { //Ingresso Menu Test.
      menu();
  }
}

//#############################################
void menu(void) // Accende e spegne le uscite dei 4 rele per 3 secondi
{
  lcd.setCursor(0, 0);
  lcd.print("--*-  Menu  -*--");
  lcd.setCursor(0, 1);
  lcd.print("* * * Test * * *");
  digitalWrite(4, LOW); //Accensione
  digitalWrite(5, LOW); //Accensione
  digitalWrite(6, LOW); //Accensione
  digitalWrite(7, LOW); //Accensione
  delay(3000); //mod mio
  digitalWrite(4, HIGH); //Spegnimento
  digitalWrite(5, HIGH); //Spegnimento
  digitalWrite(6, HIGH); //Spegnimento
  digitalWrite(7, HIGH); //Spegnimento
  delay(3000); //mod mio
  
  lcd.setCursor(0, 0);
  lcd.print("  :     /          ");
  lcd.setCursor(0, 1);
  lcd.print("T:     C H:    %");
  lcd.setCursor(6, 1);
  lcd.print((char)223);

  lcd.setCursor(12, 0);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  if (analogRead(A0) >= 760 && analogRead(A0) < 780) { UscitaMenu=1;} //Esce dal menù test se si preme il tasto della retroilluminazione LCD
  if (UscitaMenu == 0) { menu();}
  
}
//Top
//Risposta Rapida
E' adattabile per l' uso come terrario, serra, camera di fruttificazione e incubatoio...
Se avete idee/modifiche da aggiungere, benvengano...
Di alzarmi non ne ho voglia,
oggi non combatto con nessuno...

Avatar utente
Cibino
Messaggi: 100
Iscritto il: mar dic 22, 2015 10:54 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da Cibino » mar apr 05, 2016 7:28 pm

tsunami666 ha scritto:Mi son preso la libertà di aggiungere un banale schema elettrico.


Ho modificato anche il code, aggiungendo vari commenti per capire dove modificare i parametri, aggiungendo la possibilità di programmare l' orario tramite monitor seriale, modificato i vari test tramite pulsanti.

E' adattabile per l' uso come terrario, serra, camera di fruttificazione e incubatoio...
Se avete idee/modifiche da aggiungere, benvengano...
E' proprio successo quello che speravo: un progetto open dove tutti possono dare il loro apporto. :lode:

Cibino

SaulSilver
Messaggi: 312
Iscritto il: dom set 20, 2015 1:52 pm

Idea Progetto Grow Kit Homemade

Messaggio da SaulSilver » mer apr 06, 2016 6:58 pm

Kit coltivazione funghi fai da te

L'idea di questo nuova discussione parte dal fatto che spesso molti grow kit che si trovano da internet sono per la maggior parte dispendiosi, e spesso usano un substrato che non sfrutta al massimo le condizioni possibili.
Infatti nelle varie tecniche oltre le tortine (PF-Tek), il substrato non è di farina di riso ma piuttosto di farro, cereali vari, mais ect ect, permettendo una maggiore resa del raccolto.

Da qui nasce pertanto il concetto di grow kit fai da te, che sfrutta le potenzialità del casing come substrato, ma usando una scatola per il substrato identica a quella dei grow kit che si trovano on-line. In questo modo avrete diciamo meno sbattimenti di un casing, ma più resa di una Pf-Tek.

Occorrente:

-Grow box 1200ml con filtro di plastica (prezzo irrisorio) forata con 4 fori per inoculare
-cereali vari, alcuni ottengono molta resa dal farro perchè non troppo grande né troppo piccolo
-vermiculite
-siringa o impronta spore
-sacchetto per richiudere la scatola una volta il substrato sarà inoculato
-acqua
-pentola a pressione (obbligatoria per sterilizzare il substrato, al contrario della Pf-Tek)
-guanti, tuta, mascherina, alcol etilico per disinfettare


La procedura poi è molto semplice, seguite le istruzione per una normale substrato casing, aggiungete in superficie la vermiculite, e poi sterilizzate il tutto, stando attenti a tenere aperto per ¼ il coperto della scatola perchè in plastica e potrebbe deformarsi, chiudete il tutto con una pellicola di alluminio. Dopo 90 minuti nella pentola a pressione aspettate che si raffreddi e poi inoculate le spore coprendo i fori con nastro adesivo oppure quei gommini bio-adesivo da mettere sotto le sedie per non farle grattare.
Dopo di che, aspettate e seguite una normalissima guida per principianti dei normali Grow kit che si possono acquistare on-line.


Qualcuno ha critiche o consigli da darmi? E' un'idea semplice che per me si può attuare senza problemi e senza troppi sbatti.

SaulSilver
Messaggi: 312
Iscritto il: dom set 20, 2015 1:52 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da SaulSilver » dom apr 10, 2016 2:50 am

Complimentoni!

Forse prenderò spunto quando vorrò coltivare i cactus da seme perchè davvero l'idea è geniale...

Se uno ha una soffitta anti-sgamo buia questa Grow box è geniale. :asd: :lode:

Avatar utente
tsunami666
Messaggi: 873
Iscritto il: mer set 30, 2015 10:20 am

Re: [Progetto] Grow Box Automatizzata

Messaggio da tsunami666 » mar apr 12, 2016 12:54 pm

Ho aggiunto la possibilità di fare una media sulla rilevazione della temperatura. Così risulta più stabile e il relè si eccita a dovere... :anal:
Ho modificato alcuni delay, così non rimane freezato per quei determinati tempi...
Reimpostato le uscite in modo che coincidano con le icone del display...
Devo sistemare la routine "cooler" per raffreddare la scatola dell' arduino in caso di temperature elevate sfruttando il termometro del RTC...
Aggiunto funghetti sul display... :asd:

Codice: Seleziona tutto

#include <DHT.h>
#include <DS3232RTC.h>
#include <Streaming.h>
#include <time.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

uint8_t ont[8] = {0x1F, 0x1F, 0x11, 0x1B, 0x1B, 0x1B, 0x1F, 0x1F}; //crea carattere
uint8_t onh[8] = {0x1F, 0x1F, 0x15, 0x11, 0x15, 0x15, 0x1F, 0x1F}; //
uint8_t onl[8] = {0x1F, 0x1F, 0x17, 0x17, 0x17, 0x11, 0x1F, 0x1F}; //
uint8_t onf[8] = {0x1F, 0x1F, 0x11, 0x17, 0x13, 0x17, 0x1F, 0x1F}; //
uint8_t off[8] = {0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F}; //
uint8_t mus[8] = {0x04, 0x0E, 0x1F, 0x1F, 0x15, 0x04, 0x06, 0x03}; //crea carattere mushroom

LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // indirizzo per il mio disply 0x3f


DHT dht;
#define DHTTYPE DHT11   // Sesore modello DHT 11

void setup(void)
{
  Serial.begin(115200);
  lcd.begin(16, 2);
  lcd.backlight();
  dht.setup(2); // data pin 2
  pinMode(4, OUTPUT); //Luce
  pinMode(5, OUTPUT); //Riscaldamento
  pinMode(6, OUTPUT); //Umidificatore
  pinMode(7, OUTPUT); //Ventola
  
  digitalWrite(4, HIGH); //Spegnimento Relè
  digitalWrite(5, HIGH); //Spegnimento Relè
  digitalWrite(6, HIGH); //Spegnimento Relè
  digitalWrite(7, HIGH); //Spegnimento Relè

  setSyncProvider(RTC.get);

  lcd.createChar(1, ont); //Associa il numero al carattere creato precedentemente
  lcd.createChar(2, onh); //
  lcd.createChar(3, onl); //
  lcd.createChar(4, onf); //
  lcd.createChar(5, off); //
  lcd.createChar(6, mus); //

  lcd.setCursor(0, 0);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.setCursor(3, 0);
  lcd.print(" Mushroom ");
  lcd.setCursor(13, 0);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.setCursor(0, 1);
  lcd.print("  BoxController ");
  delay(1000);
  digitalWrite(4, HIGH);
  delay(1000);

  lcd.setCursor(0, 0);
  lcd.print("  :     /          ");
  lcd.setCursor(0, 1);
  lcd.print("T:     C H:    %");
  lcd.setCursor(6, 1);
  lcd.print((char)223);
  lcd.setCursor(12, 0);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);

  }
int timer = millis(); // mod delay http://zuccala.blogspot.it/2010/01/multitasking-arduino-millis-parte-1.html
int luce_time = millis(); // mod delay
int Umidita = millis(); // mod delay
int Ventola  =millis(); // mod delay
int StatoLuceLcd = 1; // 0 = spento - 1 = acceso
int StatoVentola = 0;
int StatoLuceBox = 0;
int StatoUmidificatore = 0;
float SecondiTotali = 0;
float celsius = 0, farhenheit =0;
float somma=0.0;
float media=0.0;
int UscitaMenu = 0;
int i=0;

void loop(void)
{
  timer = millis(); // mod delay
  SecondiTotali = (((hour() * 36) + (minute() * .6)) * 100) + second();
  GestioneTasti();
  GestioneOrario();
  ValoreA0();
  Temperatura();
  AccensioneRiscaldamento();
  AccensioneUmidificatore();
  AccensioneLuce();
  AccensioneVentola();
  AccensioneRaffreddamento();
 // Cooler();
  GestioneDisplayLcd();
  GestioneMonitorSeriale();
  menu();
}


//######### Inizio Routine #########

void ValoreA0(void) //*************** lettura valore bottoni su A0 ***********************
{
//delay(dht.getMinimumSamplingPeriod());  // lettura valore bottoni su A0 solo per conoscere valore da settare in base alle resistenze
//  printTime();
//  delay(1000);
// read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);
}

//****************GestioneOrario************************

void GestioneOrario(void) //Permette di impostare l' orario tramite monitor seriale. Digitare: aaaa,mm,gg,hh,mm,ss, e inviare
{ 
    static time_t tLast;
    time_t t;
    tmElements_t tm;

    //check for input to set the RTC, minimum length is 12, i.e. yy,m,d,h,m,s
    if (Serial.available() >= 12) {
        //note that the tmElements_t Year member is an offset from 1970,
        //but the RTC wants the last two digits of the calendar year.
        //use the convenience macros from Time.h to do the conversions.
        int y = Serial.parseInt();
        if (y >= 100 && y < 1000)
            Serial << F("Error: Year must be two digits or four digits!") << endl;
        else {
            if (y >= 1000)
                tm.Year = CalendarYrToTm(y);
            else    //(y < 100)
                tm.Year = y2kYearToTm(y);
            tm.Month = Serial.parseInt();
            tm.Day = Serial.parseInt();
            tm.Hour = Serial.parseInt();
            tm.Minute = Serial.parseInt();
            tm.Second = Serial.parseInt();
            t = makeTime(tm);
            RTC.set(t);        //use the time_t value to ensure correct weekday is set
            setTime(t);        
            Serial << F("RTC set to: ");
           // printDateTime(t);
            Serial << endl;
            //dump any extraneous input
            while (Serial.available() > 0) Serial.read();
        }
    }
    
    t = now();
    if (t != tLast) {
        tLast = t;
//        printDateTime(t);
        if (second(t) == 0) {
            float c = RTC.temperature() / 4.;
            float f = c * 9. / 5. + 32.;
            Serial << F("  ") << c << F(" C  ") << f << F(" F");
        }
        Serial << endl;
    }
}

//#############################################

void Temperatura(void)
{
for(i=0;i<8;i++)
    {
    //sensor = analogRead(tempPin);
    //millivolts = ( sensor/1024.0)*5000;
    celsius = dht.getTemperature();
    somma = (somma + celsius);
    delay(100); //ritardo tra due campionature successive
    }
  media = (somma/8.0); //calcolo del valore medio di 8 rilievi
  somma = 0; // riazzeramento della variabile somma
  //Serial.print(media);
  //Serial.println(" C"); //stampa su serial monitor del valore di temperatura in gradi Celsius
}


//#############################################

void GestioneDisplayLcd(void)
{
  lcd.setCursor(0, 0);
  //lcd.print(SecondiTotali,0); //mod mio
  printDigits(hour());
  lcd.setCursor(3, 0);
  printDigits(minute());
  lcd.setCursor(6, 0);
  printDigits(day());
  lcd.setCursor(9, 0);
  printDigits(month());
  //lcd.setCursor(12,0);
  //lcd.print(year());
  lcd.setCursor(2, 1);
  lcd.print(media,1);
  lcd.setCursor(11, 1);
  lcd.print(dht.getHumidity(), 1);
}

void printDigits(int digits)
{
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}


//#############################################

void GestioneMonitorSeriale(void)
{
  Serial.print(hour());
  Serial.print(':');
  Serial.print(minute());
  Serial.print(':');
  Serial.print(second());
  Serial.print(' ');
  Serial.print(SecondiTotali, 0);
  Serial.println();
}

//#############################################

void AccensioneRiscaldamento(void) // Il riscaldamento è attivo fino a 25,5°C
{
  if (media >= 25.0) {
    digitalWrite(5, HIGH); //Spegnimento
    lcd.setCursor(12, 0);
    lcd.write(5);
  } else {
    digitalWrite(5, LOW); //Accensione
    lcd.setCursor(12, 0);
    lcd.write(1);
  }
}

//#############################################

void AccensioneRaffreddamento(void) // raffreddamento in caso si raggiugano i 29,5°C
{
  if (media >= 30.0) {
    digitalWrite(7, LOW); //Accensione
    lcd.setCursor(15, 0);
    lcd.write(4);
    digitalWrite(5, HIGH); //Spegnimento
    lcd.setCursor(12, 0);
    lcd.write(5);
  } else {
    digitalWrite(7, HIGH); //Spegnimento
    lcd.setCursor(15, 0);
    lcd.write(5);
  }
}

//#############################################

void Cooler(void)
{
  if (RTC.temperature() >= 40.0) {
    digitalWrite(7, LOW); //Accensione
    lcd.setCursor(15, 0);
    lcd.write(4);
    digitalWrite(5, HIGH); //Spegnimento
    lcd.setCursor(12, 0);
    lcd.write(5);
  } else {
    digitalWrite(7, HIGH); //Spegnimento
    lcd.setCursor(15, 0);
    lcd.write(5);
  }
}
//#############################################

void AccensioneUmidificatore(void)  // Umidificatore attivo fino al raggiungimento del 95% di umidità
{
  if (dht.getHumidity() >= 95) {
    digitalWrite(6, HIGH); //Spegnimento
    lcd.setCursor(13, 0);
    lcd.write(5);
  } else {
    digitalWrite(6, LOW); //Accensione
    lcd.setCursor(13, 0);
    lcd.write(2);
  }
}

//#############################################

void AccensioneLuce(void)  //La luce del box è spenta dalle ore 7 alle ore 13
{
  if ((StatoLuceBox == 0) && (SecondiTotali >= 25200 && SecondiTotali <= 46800)) {
      digitalWrite(4, HIGH); //Spegnimento
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(5);
    } else {
      digitalWrite(4, LOW); //Accensione
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(3);
    }
  }

//#############################################

void AccensioneVentola(void)  // La ventola è attiva un minuto ogni 4 ore
{
  if ((StatoVentola == 0) && ((SecondiTotali >= 0 && SecondiTotali <= 60) || (SecondiTotali >= 14400 && SecondiTotali <= 14460) || (SecondiTotali >= 28800 && SecondiTotali <= 28860)
      || (SecondiTotali >= 43200 && SecondiTotali <= 43260) || (SecondiTotali >= 57600 && SecondiTotali <= 57660) || (SecondiTotali >= 72000 && SecondiTotali <= 72060))) {
      digitalWrite(7, LOW); //Accensione
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(4);
    } else {
      digitalWrite(7, HIGH); //Spegnimento
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(5);
    }
}  

//#############################################

void GestioneTasti(void)
{
  if (analogRead(A0) > 760 && analogRead(A0) < 780) { //Accensione/spegnimento Luce LCD
    if (StatoLuceLcd == 0) {
      lcd.backlight();
      StatoLuceLcd = 1;
    } else {
      lcd.noBacklight();
      StatoLuceLcd = 0;
    }
  }
  if (analogRead(A0) > 605 && analogRead(A0) < 625) { //Accensione/spegnimento Ventola
    if (StatoVentola == 0) {
      digitalWrite(7, LOW); //Accensione
      StatoVentola = 1;
      lcd.setCursor(15, 0);
      lcd.write(4);
      if(timer > Ventola+1000){ //delay(1000); //mod mio
      Ventola=millis();
        }
      }
    } else {
      digitalWrite(7, HIGH); //Spegnimento
      StatoVentola = 0;
      lcd.setCursor(15, 0);
      lcd.write(5);
    }

  if (analogRead(A0) > 400 && analogRead(A0) < 425) { //Accensione/spegnimento Umidificatore
  if (StatoUmidificatore == 0) {
      digitalWrite(6, LOW); //Accensione
      StatoUmidificatore = 1;
      lcd.setCursor(13, 0);
      lcd.write(2);
    } else {
      digitalWrite(6, HIGH); //Spegnimento
      StatoUmidificatore = 0;
      lcd.setCursor(13, 0);
      lcd.write(5);
      if(timer > Umidita+1000){ //delay(1000); //mod mio
      Umidita=millis();// delay(2000); //mod mio
    }
  }
  }
  if (analogRead(A0) > 250 && analogRead(A0) < 275) { //Accensione/spegnimento LuceBox
    if (StatoLuceBox == 0) {
      digitalWrite(4, LOW); //Accensione
      StatoLuceBox = 1;
      lcd.setCursor(14, 0);
      lcd.write(3);
    } else {
      digitalWrite(4, HIGH); //Spegnimento
      StatoLuceBox = 0;
      lcd.setCursor(14, 0);
      lcd.write(5);
      if(timer > luce_time +2000){ //delay(1000); //mod mio
      luce_time=millis();// delay(2000); //mod mio 
    }
  }
 }
  if (analogRead(A0) >= 0 && analogRead(A0) < 25) { //Ingresso Menu Test.
      menu();
  }
}
//#############################################
void menu(void) // Accende e spegne le uscite dei 4 rele per 3 secondi
{
  lcd.setCursor(0, 0);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.print("  Menu  ");
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.setCursor(0, 1);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.print(" Test ");
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  lcd.write(6);
  digitalWrite(4, LOW); //Accensione
  digitalWrite(5, LOW); //Accensione
  digitalWrite(7, LOW); //Accensione
  digitalWrite(6, LOW); //Accensione
  if(timer > timer+2000){ //delay(1000); //mod mio
  timer=millis();} //delay(3000); //mod mio
  digitalWrite(4, HIGH); //Spegnimento
  digitalWrite(5, HIGH); //Spegnimento
  digitalWrite(7, HIGH); //Spegnimento
  digitalWrite(6, HIGH); //Spegnimento
  if(timer > timer+2000){ //delay(1000); //mod mio
  timer=millis();} //delay(3000); //mod mio
  
  lcd.setCursor(0, 0);
  lcd.print("  :     /          ");
  lcd.setCursor(0, 1);
  lcd.print("T:     C H:    %");
  lcd.setCursor(6, 1);
  lcd.print((char)223);

  lcd.setCursor(12, 0);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  lcd.write(5);
  if (analogRead(A0) >= 760 && analogRead(A0) < 780) { UscitaMenu=1;
  } //Esce dal menù test se si preme il tasto della retroilluminazione LCD
  if (UscitaMenu == 0) {
    menu();}
}
:weed:

Prossimo passo, abbassare le tapparelle di casa in base alla differenza di luce tra interno ed esterno :ninja:
Ultima modifica di tsunami666 il mer apr 13, 2016 2:52 pm, modificato 1 volta in totale.
Di alzarmi non ne ho voglia,
oggi non combatto con nessuno...

nocivo
Messaggi: 183
Iscritto il: mar set 15, 2015 12:33 pm

Re: [Progetto] Grow Box Automatizzata

Messaggio da nocivo » mar apr 12, 2016 4:50 pm

grande cibino!! ma sarebbe fattibile anche per una grow box per coltivazione di marijuana?
"Hai mai fatto un sogno tanto realistico da sembrarti vero? E se da un sogno così non ti dovessi più svegliare? Come potresti distinguere il mondo dei sogni da quello della realtà?"

Rispondi