Grow Box Homemade
Re: [Progetto] Grow Box Automatizzata
Grazie Cibino,molto disponibile!
Re: [Progetto] Grow Box Automatizzata
Quando un ingegnere incontra la psichedelia
Complimenti, bel progetto , attendo aggiornamenti!
Complimenti, bel progetto , attendo aggiornamenti!
Re: [Progetto] Grow Box Automatizzata
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?
Quindi nel complesso viene poco meno di 100 € costruirla tutto considerato?
Giusto o sbagliato non può essere reato! Free drugs!
Re: [Progetto] Grow Box Automatizzata
Mercì!CloneXY ha scritto:Quando un ingegnere incontra la psichedelia
Complimenti, bel progetto , attendo aggiornamenti!
La carico subito!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?
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
- tsunami666
- Messaggi: 873
- Iscritto il: mer set 30, 2015 10:20 am
Re: [Progetto] Grow Box Automatizzata
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...
oggi non combatto con nessuno...
Re: [Progetto] Grow Box Automatizzata
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.
Tutti i miei post sono frutto della mia fervida immaginazione. Niente di ciò che scrivo è riferito a persone o situazioni reali.
Re: [Progetto] Grow Box Automatizzata
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.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...
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.
Re: [Progetto] Grow Box Automatizzata
Non ne vale la pena: se "conti" anche le ore di "mano d'opera" sarebbero troppo care! Solo DIY!papo ha scritto:Wow! Senza contare che potresti crearle e venderle che spettacolo!bravo!
Cibino
Re: [Progetto] Grow Box Automatizzata
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)
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
____________________________________________
Non credete a ciò che scrivo
Re: [Progetto] Grow Box Automatizzata
Assolutamente si.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)
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".
Re: [Progetto] Grow Box Automatizzata
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
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
Re: [Progetto] Grow Box Automatizzata
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"!!!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
Cibino
- pannocchietta
- Messaggi: 155
- Iscritto il: lun mar 14, 2016 5:46 pm
Re: [Progetto] Grow Box Automatizzata
Arduino + grow room combo letale XD
Re: [Progetto] Grow Box Automatizzata
bellissimo complimenti!
- tsunami666
- Messaggi: 873
- Iscritto il: mer set 30, 2015 10:20 am
Re: [Progetto] Grow Box Automatizzata
Mi son preso la libertà di aggiungere un banale schema elettrico.
E' adattabile per l' uso come terrario, serra, camera di fruttificazione e incubatoio...
Se avete idee/modifiche da aggiungere, benvengano...
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
Se avete idee/modifiche da aggiungere, benvengano...
Di alzarmi non ne ho voglia,
oggi non combatto con nessuno...
oggi non combatto con nessuno...
Re: [Progetto] Grow Box Automatizzata
E' proprio successo quello che speravo: un progetto open dove tutti possono dare il loro apporto.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...
Cibino
-
- Messaggi: 312
- Iscritto il: dom set 20, 2015 1:52 pm
Idea Progetto Grow Kit Homemade
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.
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.
-
- Messaggi: 312
- Iscritto il: dom set 20, 2015 1:52 pm
Re: [Progetto] Grow Box Automatizzata
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.
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.
- tsunami666
- Messaggi: 873
- Iscritto il: mer set 30, 2015 10:20 am
Re: [Progetto] Grow Box Automatizzata
Ho aggiunto la possibilità di fare una media sulla rilevazione della temperatura. Così risulta più stabile e il relè si eccita a dovere...
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...
Prossimo passo, abbassare le tapparelle di casa in base alla differenza di luce tra interno ed esterno
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...
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();}
}
Prossimo passo, abbassare le tapparelle di casa in base alla differenza di luce tra interno ed esterno
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...
oggi non combatto con nessuno...
Re: [Progetto] Grow Box Automatizzata
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à?"