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

salve , ragazzi vorrei realizare un incubatrice per uova devo creare un termostato che attivi una cella di peltier e una uscita che attivi un umidificatore in base alle impostazione  effettuate sia della temperature che del umidita' purtroppo non conosco la programmazione ma ho abbastanza  basi per l'elettronica c'e qualcuno di voi che mi puo aiutare ho fatto molte ricerche ma sinceramente non riesco a capire come fare , vorrei visualizare i dati su un display grazie
p.s  scusatemi non vorrei rubare tempo a nessuno
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21486
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao Emanuele
Se avessimo l' imressione che vorresti rubarci del tempo non ti avremmo risposto.

Incomincia di leggere un po di tutorial di Arduino.
http://arduino.apogeolab.it/ se non vuoi comprarti un libro oppure ricecrchi un tutorial Arduino in inglese.
http://www.ladyada.net/learn/arduino/
http://arduino.cc/en/Tutorial/HomePage

Hai bisogno di 4 cose:
1 sensore di temperature
1 sensore di umiditá
1 driver per l'elemento peltier (qualche resistenza di potenza su un dissipatore mi sembra meno critico, visto che devi solo riscaldare e non raffreddare)
1 driver per l'umidificatore
un ventola.


Logged

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

ciao e grazie della risposta per quanto riguarda il libro lo comprato e lo sto legendo e ho notato che parla anche dei sensori.

° volevo usare la cella di peltier perche cosi facendo basta che imposto una temperatura ad esempio 37,5° quando aumentava o diminuiva il calore all'interno si termoregolava sia con il freddo che con il caldo

° ho scopiazato questo codice
Code:

 int potPin = 0;

float temperature = 0;

void setup()

{

Serial.begin(9600);

Serial.println("LM35 Thermometer ");

analogReference(INTERNAL);

}

void printTenths(int value) {

// prints a value of 123 as 12.3

Serial.print(value / 10);

Serial.print(".");

Serial.println(value % 10);

}

void loop() {

int span = 20;

int aRead = 0;

for (int i = 0; i < span; i++) {

aRead = aRead+analogRead(potPin);

}

aRead = aRead / 20;

temperature = ((100*1.1*aRead)/1024)*10;

// convert voltage to temperature

Serial.print("Analog in reading: ");

Serial.print(long(aRead));

// print temperature value on serial monitor

Serial.print(" - Calculated Temp: ");

printTenths(long(temperature));

delay(500);

}

 
e sembra funzionare bene adesso dovrei eliminare la lettura seriale e inviare il tutto sul display ed aggiungere un uscita per il rele' credo  ci sto provando ma senza risultati

° poi ho trovato  un altro codice che fa al caso mio solo che anche questo invia dati tramite serial monitor e non so come fare mi potresti dare qualche altro consiglio  grazie ancora  sei stato gentilissmo
http://www.synaptica.info/2010/02/03/arduino-duemilanove-application-1/langswitch_lang/it/
Logged

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

ciao,
se hai un display lcd seriale prova a dare un occhio a questo link
http://arduino.cc/en/Reference/LiquidCrystal
gli esempi sono mooolto chiari e in 5 minuti puoi vedere la solita "hello world".
se invece non un oggetto di questo tipo meglio se scrivi quello che intendi utilizzare

il codice che hai trovato utilizza la seriale per ricevere la temperatura minima e memorzzarla sulla eeprom. (puoi anche pensare di tenere quest aparte di codice per poter modificare al volo la sogli su cui vuoi regolare)
Code:
if (Serial.available() > 0)
   {
      TemperaturaMinima = Serial.read();
      EEPROM.write(0, 1);
      EEPROM.write(1, TemperaturaMinima);
   }
e per trasmettere al PC i dati della temperatura
Code:
  Serial.print((byte)tempC);
   Serial.print((byte)TempC_Decimal);
   Serial.println((byte)TemperaturaMinima);
queste tre righe le devi sostituire con la comunicazione con il tuo display
Logged

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

ho un display display hd44780 4*20
pensi che puo andare

il tempo di studiarlo e faro' una prova
Logged

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

non so dirti sul 4x20 (io ho provato la libreria su un 2x16, come fanno anche negli esempi ed era la prima volta che provavo ad utilizzare un display lcd)
eventualmente dai un occhio anche qui
http://www.arduino.cc/playground/Code/LCD4BitLibrary
terzo punto di Compatibility
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21486
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao emanuele
Per primo non fare fare calcoli a  arduino che sono costanti:
"temperature = ((100*1.1*aRead)/1024)*10;"
la stessa cosa con meno tempo di esecuzione é
temperature = aRead*1,074; È solo una operazione di calcolo al posto di 4.

Per alimentare il peltier io userei una ponte H che si usa per i motori tipo http://www.robot-italy.com/product_info.php?cPath=83_30&products_id=464 Puoi riscaldare o rafreddare e regolare la potenza di riscaldamneto/raffredamento.

Programmerei anche una loop di ritardo per evitare che il riscaldamneto oscilli.

Ciao Uwe




Logged

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

grazie a tutti il codice definitivo che sto lavorando e  questo
Code:

/*
  Analog input, analog output, serial output
 
 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.
 
 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground
 
 created 29 Dec. 2008
 by Tom Igoe
 
 */
 
#include <EEPROM.h>
 #include <LiquidCrystal.h>
 
 
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
 
// These constants won't change.  They're used to give names
// to the pins used:
float tempC;
int TempC_Decimal = 0;
int tempPin = 0;
int DigitalPin =  13;
int TemperaturaMinima = 23;
int value = 0;
 
int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
 
void setup() {
  // initialize serial communications at 9600 bps:
    lcd.begin(20, 4);
  value = EEPROM.read(0);
  if (value == 1)
  {
    TemperaturaMinima =  EEPROM.read(1);
  }
  
}
 
void loop() {
   if (Serial.available() > 0)
   {
      // read the incoming byte:
      TemperaturaMinima = Serial.read();
      
      EEPROM.write(0, 1);
      EEPROM.write(1, TemperaturaMinima);
 
   }
 
   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;
   lcd.clear();
   lcd.setCursor  (4,1);
   lcd.print(tempC);   //send the data to the computer
   lcd.setCursor  (4,7);
   lcd.print(TempC_Decimal);             //send the data to the computer
   lcd.setCursor  (2,2);
   Serial.println(TemperaturaMinima);
   if (tempC < TemperaturaMinima)
   {
     digitalWrite(DigitalPin, HIGH);   // set the LED on
     delay(4000);                  // wait for a second
   }
   if (tempC > (TemperaturaMinima + 1))
   {
     digitalWrite(DigitalPin, LOW);   // set the LED on
     delay(4000);      
   }
   delay(200);                                    
}
  
lo modificato in base a i vostri aiuti e sembra funzionare a temperatura impostata attiva una uscita per il rele al momento e un led .
adesso volevo  sapere se era possibile tramite  due pulsanti aumentare  o diminuire lintervento di soglia e visualizarlo sul display



per uwefed ho provato a modificare anche questo temperature = aRead*1,074; ma quando faccio la verifica mi da errore sono sicuro che sbaglio qualcosa qmc poi ci riprovero
Logged

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

ciao,
per i pulsanti guarda qui http://www.arduino.cc/en/Tutorial/Button.
Crei una variabile (es. isteresi) che inizializzi a 1 e la utilizzi in
Code:
if (tempC > (TemperaturaMinima + isteresi))
In riferimento al codice del link metti
Code:
if(buttonState == HIGH)
{ isteresi += 0.1}
e togli l'else. Poi realizzi un secondo pulsante (hardware uguale) solo che per questo il codice é
Code:
if((button2State == HIGH) && (isteresi > 0))
{ isteresi -= 0.1}
Poi fai visualizzare sul display isteresi nello stesso modo in cui lo fai per la temperatura

Sui conti, non è che sbagli a mettere la "virgola" al posto del "punto"?
temperature = aRead*1.074
Logged

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

frog niente da fare non ci riesco proprio ho passato tutto il pomeriggio a provarci ma riesco ad avere solo errori
« Last Edit: May 06, 2010, 02:15:23 pm by emanuele » Logged

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

forse allora è meglio se posti il codice completo che ti da errore
Logged

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

ho provato a scrivere ma sicuramente mi manca qualcosa ma non so dove sbaglio
Code:
 Analog input, analog output, serial output
 
 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.
 
 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground
 
 created 29 Dec. 2008
 by Tom Igoe
 
 */
 
#include <EEPROM.h>
 #include <LiquidCrystal.h>
 
 
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
 
// These constants won't change.  They're used to give names
// to the pins used:
float tempC;
int TempC_Decimal = 0;
int tempPin = 0;
int DigitalPin =  13;
int TemperaturaMinima = 22;
int value = 0;
 int isteresi = 1;
int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
 
void setup() {
  
    lcd.begin(4,20);
  value = EEPROM.read(0);
  if (value == 1)
  {
    TemperaturaMinima =  EEPROM.read(1);
  }
  pinMode isteresi, INPUT) ;
}
 
void loop() {
   if (Serial.available() > 0)
   {
      // read the incoming byte:
      TemperaturaMinima = Serial.read();
      
      EEPROM.write(0, 1);
      EEPROM.write(1, TemperaturaMinima);
      buttonState =digitalRead(isteresi);
      if(buttonState == HIGH)
      { isteresi  += 0.1}
 
   }
 
   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;
   lcd.clear();
   lcd.print ( "TEMP.INTERNA +" );
   lcd.setCursor  (14,0);
   lcd.print(tempC);   //send the data to the computer
   lcd.setCursor  (19,0);
   lcd.print(TempC_Decimal);             //send the data to the computer
   lcd.setCursor  (2,2);
   Serial.println(TemperaturaMinima);  
 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
    
   if (tempC < TemperaturaMinima)
  
   if (tempC (TemperaturaMinima + isteresi))
  
   {
     digitalWrite(DigitalPin, HIGH);   // set the LED on
     delay(4000);                  // wait for a second
   }
   if (tempC > (TemperaturaMinima + 1))
   {
     digitalWrite(DigitalPin, LOW);   // set the LED on
     delay(4000);      
   }
   delay(200);                                    
}

questo e con il casino

e questo funziona ma non imposta il livello di intervento ventola

Code:
/*
  Analog input, analog output, serial output
 
 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.
 
 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground
 
 created 29 Dec. 2008
 by Tom Igoe
 
 */
 
#include <EEPROM.h>
 #include <LiquidCrystal.h>
 
 
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
 
// These constants won't change.  They're used to give names
// to the pins used:
float tempC;
int TempC_Decimal = 0;
int tempPin = 0;
int DigitalPin =  13;
int TemperaturaMinima = 22;
int value = 0;
 
int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
 
void setup() {
  
    lcd.begin(4,20);
  value = EEPROM.read(0);
  if (value == 1)
  {
    TemperaturaMinima =  EEPROM.read(1);
  }
  
}
 
void loop() {
   if (Serial.available() > 0)
   {
      // read the incoming byte:
      TemperaturaMinima = Serial.read();
      
      EEPROM.write(0, 1);
      EEPROM.write(1, TemperaturaMinima);
 
   }
 
   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;
   lcd.clear();
   lcd.print ( "Temp.Interna +" );
   lcd.setCursor  (14,0);
   lcd.print(tempC);   //send the data to the computer
   lcd.setCursor  (19,0);
   lcd.print(TempC_Decimal);             //send the data to the computer
   lcd.setCursor  (2,2);
   Serial.println(TemperaturaMinima);  
 lcd.setCursor (0,1);  
 lcd.print ( "Temp.Attivazione +" );
    lcd.setCursor (18,1);          //sposta i gradi di soglia sull'lcd
 
   lcd.print(TemperaturaMinima); // scrive temperatura di soglia
   lcd.setCursor (0,2);
   lcd.print ( "Umidita' Int. %" );
  
   if (tempC < TemperaturaMinima)
   {
     digitalWrite(DigitalPin, HIGH);   // set the LED on
     delay(4000);                  // wait for a second
   }
   if (tempC > (TemperaturaMinima + 1))
   {
     digitalWrite(DigitalPin, LOW);   // set the LED on
     delay(4000);      
   }
   delay(200);                                    
}
 
« Last Edit: May 07, 2010, 12:12:10 pm by emanuele » Logged

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

mi sono accorto di averti dato un' indicazione mezza sbagliata sulla funzionalità da associare al pulsante (ad ogni giro di loop, se tieni premuto il pulsante incrementa l'isteresi di 0.1 gradi).
Domani con calma miglioro la cosa e ispeziono il codice che hai scirtto.
Logged

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

grazie gentilissimo comunque non sei tu che ti sei sbagliato sono io che non ci capisco niente. va bene anche l'interesi di 0,1 per volta tanto basta solo spingere piu volte
Logged

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

può pero succedere che il setup() sia talmente volece ad essere eseguito che non si riesca a controllare l'incremento dell'isteresi: tu pensi di premere velocemente una sola volta ma isteresi aumenta di 0.4: per la tua applicazione può non essere un problema ma io trovo la cosa particolarmente noiosa
Logged

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