Pages: 1 [2] 3 4 ... 6   Go Down
Author Topic: incubatrice per uova  aiutoooo  (Read 5069 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

intanto il pulsante

Code:
...
int buttonPin = ?; //qui devi mettere il numero del pin sul quale hai collegato il pulsante
char stato_pulsanti = 0;
int isteresi = ?; //qui devi mettere il valore di default dell'isteresi
...

void setup(){
    ...
    pinMode(buttonPin, INPUT)
    ...
}

void loop(){
    ...
    buttonState = digitalRead(buttonPin);
    if((buttonState == HIGH) && !(stato_pulsanti & 0x01))
    {
        isteresi  += 0.1;
        stato_pulsanti |= 0x01;
    }
    else
    {
        if((buttonState == LOW) && (stato_pulsanti & 0x01))
        {
            //isteresi  -= 0.1;            //riga erroneamente inserita in un primo momento
            stato_pulsanti &= ~0x01:
        }
    }
    ...
}

per il resto del codice ci guardo nel pomeriggio
« Last Edit: May 08, 2010, 03:36:00 pm by furgorsin » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao, come ormai mi succede un po' troppo di frequente ho ragionato troppo poco. Il codice per l'utilizzo del pulsante che ho pubblicato questa mattina conteneva un errore di funzionalità: non andava messa la riga con isteresi -= 0.1
Ho guardato il tuo codice e secondo me questo dovrebbe funzionare correttamente
Code:
#include <EEPROM.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

float tempC;
int TempC_Decimal = 0;
int tempPin = 0;
int DigitalPin =  13;
int TemperaturaMinima = 22;
int value = 0;
int isteresi = 1;
int buttonPin_inc = 6;
int buttonPin_dec = 7;
char stato_pulsanti = 0;
int lettura_pulsante = 0;

void setup() {
  lcd.begin(4,20);
  value = EEPROM.read(0);
  if (value == 1)
  {
    TemperaturaMinima =  EEPROM.read(1);
  }
  pinMode(DigitalPin, OUTPUT);
  pinMode(buttonPin_inc, INPUT);
  pinMode(buttonPin_dec, INPUT);
}

void loop() {
  //valutazione di dati disponibili da seriale
  if (Serial.available() > 0)
  {
    TemperaturaMinima = Serial.read();
    EEPROM.write(0, 1);
    EEPROM.write(1, TemperaturaMinima);
  }
  
  //gestione della pressione del pulsante collegato al pin 6 per incrementare l'isteresi
  lettura_pulsante = digitalRead(buttonPin_inc);
  if((lettura_pulsante == HIGH) && !(stato_pulsanti & 0x01))
  {
    isteresi += 0.1;
    stato_pulsanti |= 0x01;
  }
  else
  {
    if(lettura_pulsante == LOW)
    {
      stato_pulsanti &= ~0x01;
    }
  }
  
  //gestione della pressione del pulsante collegato al pin 7 per decrementare l'isteresi
  lettura_pulsante = digitalRead(buttonPin_dec);
  if((lettura_pulsante == HIGH) && !(stato_pulsanti & 0x02))
  {
    isteresi -= 0.1;
    stato_pulsanti |= 0x02;
  }
  else
  {
    if(lettura_pulsante == LOW)
    {
      stato_pulsanti &= ~0x02;
    }
  }
  
  //calcolo dela temperatura attuale
  tempC = analogRead(tempPin);           //read the value from the sensor
  tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature
  TempC_Decimal = (tempC - (tempC)) * 100;
  //visualizzazione a display
  lcd.clear();
  lcd.print ( "TEMP.INTERNA +" );
  lcd.setCursor  (14,0);
  lcd.print(tempC);
  lcd.setCursor  (19,0);
  lcd.print(TempC_Decimal);
  lcd.setCursor  (2,2);
       lcd.setCursor (0,1);  
       lcd.print ( "TEMP.di soglia +" );
  lcd.setCursor (18,1);          //sposta i gradi di soglia sull'lcd
  lcd.print(TemperaturaMinima); // scrive temperatura di soglia
  
  //trasmissione via seriale della temperatura di soglia
  Serial.println(TemperaturaMinima);
  
  //gestione dell'attivazione/disattivazione dell'uscita in base alla temperatura letta
  if (tempC < TemperaturaMinima)
  {
    digitalWrite(DigitalPin, HIGH);   // set the LED on
    delay(4000);                      // wait for a second
  }
  else
  {
    if (tempC > (TemperaturaMinima + isteresi))
    {
      digitalWrite(DigitalPin, LOW);  // set the LED off
      delay(4000);      
    }
  }
  delay(200);                                    
}
prevede due pulsanti, uno per incrementare l'iscteresi (collegato al pin 6) e un oper decrementarla (collegato al pin 7) per lo schema fai sempre riferimento a http://www.arduino.cc/en/Tutorial/Button.
Per quel che riguarda la ventola tu dici "[...]questo funziona ma non imposta il livello di intervento ventola". Dove avresti collegato la ventola? E in che condizioni si dovrebbe attivare? Sul codice non c'è traccia di queste due cose.
« Last Edit: May 08, 2010, 03:37:57 pm by furgorsin » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie frog sei veramente un genio quasi quasi mi fai invidia ahahaaaa.  Domani preparo i pulsanti  e faccio una prova,la ventola che dico io in realta' e la cella di peltier per riscaldare ,attualmente sul codice e selezionato da un led e posto al pin 13 si attiva appena scende la temperatura impostata che adesso sempre sul codice c'e scritto temperatua minima 22
 comunque ancora dico che non so come ringraziarti domani ti faccio sapere
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aspetta a cantar vittoria, per il momento ti posso garantire che non ci sono errori di forma (la compilazione va a buon fine). vediamo domani se ti funziona
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho resistito a provare adesso con una resistenza e un pezzo di filo ho provato e non funzionava poi ho provato a levare int isteresi e sostituire tutto con TemperaturaMinima e funziona non so il perche ma va poi per salire di un grado bisogna spingere ripetutamente il pulsante e ho provato a modificare questo TemperaturaMinima += 0.1;  con +=1; e va un pochino meglio domani preparo dei veri pulsanti e provo meglio
« Last Edit: May 08, 2010, 05:02:53 pm by emanuele » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lo so io il perché, è colpa di
Code:
int isteresi =1;
prova con
Code:
float isteresi = 1.0;
domande:
- di quanto vuoi far variare l'isteresi ad ogni pressione dei pulsanti?
- "ho provato a modificare questo TemperaturaMinima += 0.1;  con +=1; e va un pochino meglio", in che senso va meglio?
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vorrei farlo variare di un grado
per la seconda domanda va un pochino meglio perche con la il primo code devo spingere non so quante volte per vedere la lettura  mentre con il secondo dopo tre o 4 volte cambia
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora all'inizio puoi tenere
Code:
int isteresi = 1;
e sostituire
Code:
isteresi += 0.1;
con
Code:
isteresi += 1;
analoga modifica quando c'è il "-=".
« Last Edit: May 09, 2010, 04:35:40 am by furgorsin » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho trovato il problema non era isteresi + =0.1) anzi quello funziona benissimo e ho notato che agiungendo float al isteresi mi visualiza anche i decimali di sogli massima. il vero problema era un delay di 4000 posto al settaggio del led inspiegabilmente

grazie frog non pensare che ti liberi cosi facilmente di me..
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi adesso funziona?
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si funziona alla perfezione sei un genio..  smiley smiley smiley smiley smiley smiley
 ma eventualmente visto che devo ancora continuare sia per il sensore d'umidita e le varie attivazione ti posso ancora disturbare ????
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

a disposizione
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ormai sono diventato la tua ombra, stavo provando ad aggiungere un altro sensore (quello per l'umidita)
o scritto credo tutto quello che poteva essere utile per il sensore ma mi da una serie di errori
 se hai tempo e se ti gli puoi dare un occhiata la cosa che non capisco e che mi da errore a quello che non ho toccato
Code:


      #include <EEPROM.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

float tempC;
float umiditaC;

int tempPin = 0;
int umiditaPin = 1
int DigitalPin =  13;
int DigitalPin1 = 12;      // imposta il pin 12 per attivazione macchina umidita'
float TemperaturaMinima  = 22;
float UmiditaMinima = 57;           //soglia di umidita
int value = 0;

int buttonPin_inc = 7;
int buttonPin_dec = 9;
int buttonPin_inc_umidita = 8; // imposta il pin 8 per incremento pulsanti umidita'
int buttonPin_dec_umidita = 10; // imposta il pin 10 per diminuzione pulsante umidita'
char stato_pulsanti = 0;
char stato_pulsanti_umidita = 0;
int lettura_pulsante = 0;
int lettura_pulsante_umidita = 0;

void setup() {
  lcd.begin(4,20);
  value = EEPROM.read(0);
  if (value == 1)
  {
    TemperaturaMinima =  EEPROM.read(1);
  }

    lcd.begin(3,20);
    value = EEPROM.read(0);
    if (value == 1)
    {
        UmiditaMinima = EEPROM.rea (1);
    }
  pinMode(DigitalPin, OUTPUT);
  pinMode(DigitalPin1, OUTPUT);
  pinMode(buttonPin_inc, INPUT);
  pinMode(buttonPin_dec, INPUT);
  pinMode(buttonPin_inc_umidita, INPUT);
  pinMode(buttonPin_dec_umidita, INPUT);

}
void loop() {
  //valutazione di dati disponibili da seriale
  if (Serial.available() > 0)
  {
    TemperaturaMinima = Serial.read();
    EEPROM.write(0, 1);
    EEPROM.write(1, TemperaturaMinima);
  }
  {
    UmiditaMinima = Serial.read();
    EEPROM.write(0, 1);
    EEPROM.write(1, UmiditaMinima);
  }


  //gestione della pressione del pulsante collegato al pin 7 per incrementare l'isteresi
  lettura_pulsante = digitalRead(buttonPin_inc);
  if((lettura_pulsante == HIGH) && !(stato_pulsanti & 0x01))
  {
    TemperaturaMinima += 0.5;
    stato_pulsanti |= 0x01;


  }
  else
  {
    if(lettura_pulsante == LOW)
    {
      stato_pulsanti &= ~0x01;
    }
  }

  //gestione della pressione del pulsante collegato al pin 9 per decrementare l'isteresi
  lettura_pulsante = digitalRead(buttonPin_dec);
  if((lettura_pulsante == HIGH) && !(stato_pulsanti & 0x02))
  {
    TemperaturaMinima -= 0.5;
    stato_pulsanti |= 0x02;
  }
  else
  {
    if(lettura_pulsante == LOW)
    {
      stato_pulsanti &= ~0x02;
    }
  }
    //gestione della pressione del pulsante collegato al pin 8 per incrementare l'isteresi d'umidita'
  lettura_pulsante_umidita = digitalRead(buttonPin_inc_umidita);
  if((lettura_pulsante_umidita == HIGH) && !(stato_pulsanti_umidita & 0x01))
  {
    UmiditaMinima += 0.5;
    stato_pulsanti_umidita |= 0x01;


  }
  else
  {
    if(lettura_pulsante_umidita == LOW)
    {
      stato_pulsanti_umidita &= ~0x01;
    }
  }
   //gestione della pressione del pulsante collegato al pin 10 per decrementare l'isteresi d'umidita'
  lettura_pulsante_umidita = digitalRead(buttonPin_dec_umidita);
  if((lettura_pulsante_umidita == HIGH) && !(stato_pulsanti_umidita & 0x02))
  {
    UmiditaMinima -= 0.5;
    stato_pulsanti_umidita |= 0x02;
  }
  else
  {
    if(lettura_pulsante_umidita == LOW)
    {
      stato_pulsanti_umidita &= ~0x02;
    }
  }


  //calcolo dela temperatura attuale
  tempC = analogRead(tempPin);           //read the value from the sensor
  tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature

     //calcolo dell'umidita attuale
  umiditaC = analogRead(umiditaPin);           //read the value from the sensor
  umiditaC = (5.0 * umiditaC * 100.0)/1024.0;  //convert the analog data to temperature

  //visualizzazione a display
  lcd.clear();
  lcd.print ( "TEMP.INTERNA +" );

  lcd.setCursor  (14,0);
  lcd.print(tempC);

  lcd.setCursor  (14,0);
  lcd.print(umiditaC);


    lcd.setCursor (0,1);
    lcd.print ( "TEMP. soglia +" );

  lcd.setCursor (14,1);          //sposta i gradi di soglia sull'lcd
  lcd.print(TemperaturaMinima); // scrive temperatura di soglia

  lcd.setCursor (14,1);          //sposta i gradi di soglia sull'lcd
  lcd.print(UmiditaMinima); // scrive umidita' di soglia


  //gestione dell'attivazione/disattivazione dell'uscita in base alla temperatura letta
  if (tempC < TemperaturaMinima)
  {
    digitalWrite(DigitalPin, HIGH);   // set the LED on
    delay(40);                      // wait for a second
  }
  else
  {
    if (tempC > (TemperaturaMinima ))
    {
      digitalWrite(DigitalPin, LOW);  // set the LED off
      delay(40);
    }
  }
  delay(200);
}
 //gestione dell'attivazione/disattivazione dell'uscita in base all'umidita' letta
  if (umiditaC < UmiditaMinima)
  {
    digitalWrite(DigitalPin1, HIGH);   // set the LED on
    delay(40);                      // wait for a second
  }
  else
  {
    if (umiditaC > (UmiditaMinima ))
    {
      digitalWrite(DigitalPin1, LOW);  // set the LED off
      delay(40);
    }
  }
  delay(200);
}
 
grazie
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

gli errori di sintassi (per cui ti dà errore di compilazione) sono:
- manca un punto e virgola alla riga 10
- erroe di battitua alla riga 38 EEPROM.reda (1);
- errore di chiusura parentesi (quella alla riga 170 va tolta)

Avendo aggiunto un pulsante non serve cambiare variabile per controllare se è stato premuto/rilasciato, basta cambiare le maschere che servono per memorizzare lo stato precedente
Code:
   //gestione della pressione del pulsante collegato al pin 8 per incrementare l'isteresi d'umidita'
  lettura_pulsante_umidita = digitalRead(buttonPin_inc_umidita);
  if((lettura_pulsante_umidita == HIGH) && !(stato_pulsanti & 0x04))
  {
    UmiditaMinima += 0.5;
    stato_pulsanti |= 0x04;
  }
  else
  {
    if(lettura_pulsante_umidita == LOW)
    {
      stato_pulsanti &= ~0x04;
    }
  }
   //gestione della pressione del pulsante collegato al pin 10 per decrementare l'isteresi d'umidita'
  lettura_pulsante_umidita = digitalRead(buttonPin_dec_umidita);
  if((lettura_pulsante_umidita == HIGH) && !(stato_pulsanti & 0x08))
  {
    UmiditaMinima -= 0.5;
    stato_pulsanti |= 0x08;
  }
  else
  {
    if(lettura_pulsante_umidita == LOW)
    {
      stato_pulsanti &= ~0x08;
    }
  }
Naturalmente va ripristinato stato_pulsanti anche sulla parte del pulsante legato alla temperatura e nell'inizializzazione delle variabili. Questo serve per risparmiare RAM. Quello che ha fatto va comunque bene e puoi lasciarlo così. E' giusto un'informazione in più.

Sei consapevole di aver eliminato il funzionamento ad isteresi della regolazione? Non è mai bello toglierla perché il rischio è di letture "sporche" dal sensore che fanno attivare/disattivare le uscite in intervalli di tempo brevi e questo provoca la rottura dei relè.
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

° Sei consapevole di aver eliminato il funzionamento ad isteresi della regolazione? Non è mai bello toglierla perché il rischio è di letture "sporche" dal sensore che fanno attivare/disattivare le uscite in intervalli di tempo brevi e questo provoca la rottura dei relè.

no sinceramente non me ne sono accorto infatti quando arriva a temperatura il rele' fa come dici tu.

provo  a corregere quei erroi

Logged

Pages: 1 [2] 3 4 ... 6   Go Up
Jump to: