Go Down

Topic: Brew System -impianto Birra (Read 3090 times) previous topic - next topic

SAMPEI80

Ciao a tutti,sono un novello riguardo arduino e stò cercando di automatizzare il mio impianto della birra.Ho difficoltà nella programmazione dell'arduino mega che ho in quanto sono più elettronico  che informatico.
ho una sonda DS18B20 per la pentola di MASH
Gestirò il tutto con tre relè SSR che già ho.
quindi con un relè Gestirò l'accensione del motore per mescolare l'orzo nella pentola di mash,con un altro accenderò e spengerò l'elettrovalvola del fornello della pentola di mash,e con il terzo accenderò e spengerò il fornello della pentola di bollitura.
C'è qualcuno che può aiutarmi a fare una bozza di Sketch....Considerate che ho visto sul forum e c'è poco e niente al riguardo.....
In pratica avrò la possibilità di programmare 4/5 step di temperatura e per un determinato tempo, raggiunta la temperatura devo mantenerla per un tot di tempo.....Tutto ciò gestibile con dei pulsanti set point.
Come display ho sia il seriale che il parallelo ed ho arduino mega e 2009,pulsanti ne ho una decina.

SAMPEI80

#1
Sep 01, 2010, 08:48 am Last Edit: Sep 01, 2010, 08:49 am by SAMPEI80 Reason: 1
Ho fatto questo ma mi dà errore quando provo a verificarlo sul punto
pinmode(motor_mashtun, OUTPUT);

Code: [Select]
#include <LiquidCrystal.h>
#include <OneWire.h>

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

int motor_mashtun = 31; //relè motore mashtun
int mashtun_birra = 29; // relè mashtun birra
int boil_birra = 30;  //relè mashtun bollitore birra
int sonda_birra = 8;          // pin a cui e' collegata la sonda serbatoio birra
int alza_birra = 32;     // pin per il bottone aumento setpoint birra
int abbassa_birra = 33;  // pin per il bottone diminuzione setpoint birra
int setpoint_birra;// inizializza il setpoint della birra
long temp_birra;     // inizializza una variabile contenente la temperatura della birra

int i;


void setup() {                                  // ingressi come imput o output
 pinmode(motor_mashtun, OUTPUT);
 pinmode(mashtun_birra, OUTPUT);
 pinmode(boil_birra, OUTPUT);
 pinMode(sonda_birra, INPUT);
 lcd.begin(4,20);
 lcd.clear();
}

void loop() {
   
OneWire  ds(temp_birra);        // ds18b20 pin #2 (middle pin) to Arduino pin 8

byte i;
byte present = 0;
byte data[12];
byte addr[8];
 
int HighByte, LowByte, SignBit, Whole, Fract, TReading, Tc_100, FWhole;

void setup(void) {
 
 lcd.begin(4,20);              // rows, columns.  use 2,16 for a 2x16 LCD, etc.
 lcd.clear();                  // start with a blank screen
 lcd.setCursor(0,0);           // set cursor to column 0, row 0
 
   if ( !ds.search(addr)) {
     lcd.clear(); lcd.print("No more addrs");
     delay(1000);
     ds.reset_search();
     return;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
     lcd.clear(); lcd.print("CRC not valid!");
     delay(1000);
     return;
 }
}

void getTemp() {
 int foo, bar;
 
 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);
 
 present = ds.reset();
 ds.select(addr);    
 ds.write(0xBE);

 for ( i = 0; i < 9; i++) {
   data[i] = ds.read();
 }
 
 LowByte = data[0];
 HighByte = data[1];
 TReading = (HighByte << 8) + LowByte;
 SignBit = TReading & 0x8000;  // test most sig bit
 
 if (SignBit) {
   TReading = -TReading;
 }
 Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
 Whole = Tc_100 / 100;          // separate off the whole and fractional portions
 Fract = Tc_100 % 100;
 if (Fract > 49) {
   if (SignBit) {
     --Whole;
   } else {
     ++Whole;
   }
 }

 if (SignBit) {
   bar = -1;
 } else {
   bar = 1;
 }
 
}

void printTemp(void) {
 lcd.clear();
 lcd.setCursor(0,2);
 lcd.print("MASH-TEMP : ");
 lcd.setCursor(0,3);  
 
 if (SignBit) {  
    lcd.print("-");
 }
 lcd.print(Whole);
 lcd.print(" C  ");
 
}

void loop(void) {
 getTemp();
 printTemp();
 delay(1000);
}    


   
 if (temp_birra < setpoint_birra){   // controlla se la birra è in temperatura
   digitalWrite(motor_mashtun, HIGH);             // accendi il motore mash tun
   delay(50);                          // attende
   digitalWrite(mashtun_birra, HIGH);       // accendi caldaia mash tun
   delay(50);                          // attende
   }
    }
 
 if (temp_birra == setpoint_birra){ // se birra è in temperatura
   digitalWrite(mashtun_birra, LOW);  // spengi gas mash tun
   }
     }
  if (digitalRead (alza_birra) == LOW){           // se ha rilevato pressione del bottone + birra incrementa
   setpoint_birra=setpoint_birra+1;
 }
if (digitalRead (abbassa_birra) == LOW){           // se ha rilevato pressione del bottone - birra decrementa
   setpoint_birra=setpoint_birra-1;
 }
  }
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Birra");
 lcd.setCursor(9, 0);
 lcd.print("Set");
 lcd.setCursor(9, 1);
 lcd.print("Set");
 lcd.setCursor(6, 0);
 lcd.print(temp_birra);
 lcd.setCursor(13, 1);
 lcd.print(setpoint_birra);
 delay(100);  
}

lesto

anche un copia incolla dell'errore sarebbe veramente utile  ::)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

SAMPEI80

eccolo:

In function 'void setup()':
error: 'pinmode' was not declared in this scope In function 'void loop()':

Federico Vanzati

Quote
pinmode(motor_mashtun, OUTPUT);
 pinmode(mashtun_birra, OUTPUT);
 pinmode(boil_birra, OUTPUT);


Le "M" vanno maiuscole
F

SAMPEI80

Corretto,ma ora ho altri errori...porca miseria

Federico Vanzati

leggi nella riga error, di solito (come nel caso sopra) è di aiuto
F

SAMPEI80

In function 'void loop()':
error: expected initializer before 'lcd' In function 'void getTemp()':
In function 'void printTemp()':
In function 'void loop()':
At global scope:
:'(

Federico Vanzati

#8
Sep 01, 2010, 02:48 pm Last Edit: Sep 01, 2010, 02:48 pm by Federico_Vanzati Reason: 1
In questo caso il messaggio non è proprio attinente all'errore, però se ricontrolli ti accorgerai che nel tuo codice ci sono due funzioni "setup" e due "loop".

Ricontrolla un po' tutto
F

Federico Vanzati

hai già visto questo:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241337653
F

SAMPEI80

#10
Sep 03, 2010, 08:54 am Last Edit: Sep 03, 2010, 08:54 am by SAMPEI80 Reason: 1
Si grazie, già l'ho scaricato solo che non mi funzionano le parti di visualizzazione sul mio display,deve aver usato un tipo di display seriale diverso dal mio,poi dovrei modificarlo perchè io non uso pompe per spostare il liquido da un pentolone all'altro.Comunque è un ottimo progetto dal quale volevo prendere spunto

lesto

allora a quanto pare hai tolto il codice relativo all'lcd...
secondo me se devi solo adattare il codice ti conviene usare il suo che è già fatto e modificare/cancellare solo le parti non necessarie. Ma occhio a quello che fai, potresti cancellare anche istruzioni che ti servono
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

SAMPEI80

ok,ma a me non funziona proprio la parte grafica come faccio a modificarlo?

Federico Vanzati

#13
Sep 04, 2010, 04:02 pm Last Edit: Sep 04, 2010, 04:02 pm by Federico_Vanzati Reason: 1
devi leggerti tutto il suo codice e capire come lo ha organizzato. Poi puoi sostituire le istruzioni che lui ha usato per il suo display con quelle per il tuo display.
il codice è un po' lungo ma se sai cosa fare non dovrebbe essere difficile.

F

Go Up