Go Down

Topic: Scrittura codice per impianto birra cerco collaboratori Monza/Milano (Read 9153 times) previous topic - next topic

leo72


Visto il proliferare di produttori diy di birra non è che serve un beta tester del prodotto finale ?  :smiley-mr-green:

Per avere un sample come si fa?  :smiley-yell:

niki77


Visto il proliferare di produttori diy di birra non è che serve un beta tester del prodotto finale ?  :smiley-mr-green:


Ti posso segnare nella mia RED list, ma sappi che io produco quasi esclusivamente birre rosse stile belga.  ]:)


Bando alle ciance, riepilogo il mio sistema birrificante:

MashThun (tino di ammostamento) capacità 70lt, materiale acciaio inox , fondo filtrante di tipo bazooka completamente in acciaio inox, pale agitatore grani in acciaio inox pilotate da motoriduttore (motore tergicristallo camion :D) , coperchio semistagno con guarnizione di tenuta.
Fonte energetica piastra elettrica vetroceramica 2500w.

Sto allestendo una piccola scheda che farà da interprete tra la sonda di temperatura e l'azionamento del relè verso il PC, per fare prove userò questo abbinato ad un software c# che si occuperà solo del pilotaggio semi-manuale del relè e della raccolta dei dati di temperatura rilevati nel tempo dalla sonda.
Con questo conto di fare esperimenti sufficienti a poter trasferire poi tutta la logica del controllo su arduino.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

MrLofraz

Ma per piastra riscaldante in vetro ceramica, intendi quello portatili Niky?

niki77

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

niki77

Trovato un pò di tempo ho messo insieme un pò di righe di codice per il controllo




Nella foto la linea rossa è la temperatura rilevata (simulata al momento da una funzione)
La linea centrale gialla è la temperatura impostata  e l'altra linea celeste è il valore del controllo pid .

ora mi manca di prendere l'arduino attaccare sonda e relè e vedere come si comporta in una situazione reale.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

gingardu


Ma per piastra riscaldante in vetro ceramica, intendi quello portatili Niky?


ma sei sicuro che per scaldare  e tenere a temperatura un po di brodo   ci va tanto studio?

va bene  tenerere a bada un altoforno  che produce/costa milioni di euro  bisogna essere previdenti,

ma per queste cose le soluzioni sono gia state trovate e collaudate

Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

MrLofraz

Rieccomi, scusate per l'assenza prolungata ma ,ho passato 4 giorni di passione!
Niky, l'hai presa proprio sul serio 'sta cosa! :smiley-mr-green:

niki77

No è una vita che devo finire quel coso e non ho mai trovato tempo, ora che ci ho rimesso le mani non farmi cambiare idea!!!!
Parte del progetto la riutilizzero anche per un sistema di cottura a bassa temperatura che volevo fare da tempo.
Non tutti sanno che 'il brodo' cotto a bassa temperatura è mooolto più buono! XD
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

MrLofraz

Allora, partiamo dal principio.....
Non riesco a leggere nemmeno una temperatura a seriale.
Sonda ds18b20 e arduino uno rev3.
Come si scrive il codice?

llluca


Sonda ds18b20 e arduino uno rev3.
Come si scrive il codice?

ciao,
scaricati OneWire.zip da:
http://www.pjrc.com/teensy/td_libs_OneWire.html
una volta decompresso deve essere messo nella cartella libraries.
Dopo aver rilanciato Arduino nel menu file => esempi => OneWire troverai:
L' esempio DS18x20_Temperature  bello e pronto

Luca

MrLofraz

Ho caricato quella libreria, ma il risultato è che legge una temperatura maggiore di circa 3°C rispetto ad un termometro a mercurio che ritengo affidabile.
Provando poi a collegare la sonda in parasite mode, la situazione peggiora ancora di più.
Poi, siccome dovrò visualizzare la temperatura su un display, cosa si può togliere dal codice, in maniera di visualizzare soltanto "temperatura = 26,5" (es.)?

MrLofraz

Il codice è questo


#include <OneWire.h>

// DS18S20 Temperature chip i/o
OneWire ds(10);  // on pin 10

void setup(void) {
  // initialize inputs/outputs
  // start serial port
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      Serial.print("No more addresses.\n");
      ds.reset_search();
      return;
  }

  Serial.print("R=");
  for( i = 0; i < 8; i++) {
    Serial.print(addr, HEX);
    Serial.print(" ");
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }

  if ( addr[0] == 0x10) {
      Serial.print("Device is a DS18S20 family device.\n");
  }
  else if ( addr[0] == 0x28) {
      Serial.print("Device is a DS18B20 family device.\n");
  }
  else {
      Serial.print("Device family is not recognized: 0x");
      Serial.println(addr[0],HEX);
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end

  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("P=");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data = ds.read();
    Serial.print(data, HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
  Serial.println();
}

Michele Menniti

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

dab77

Bè, non conosco la libreria, ma nel tuo codice non vedo la conversione, quindi immagino sia nella libreria. dovresti aprire il file della libreria e trovare la riga di conversione, li sicuramente ci trovi il valore da cambiare per 'tarare' la sonda.
Per la stampa dei valori è abbastanza intuitivo, ogni riga Serial.print() stampa qualcosa, se Serial.println() stampa e poi va a capo. Individua le righe che non vuoi e le 'commenti' mettendo // all'inizio della riga. modifica poi la riga che ti stampa la temperatura e scrivici quello che vuoi.

dab77

Perdonami, la conversione sta nello sketch di esempio, che tu hai tagliato, o non hai postato completamente.
alla fine dello sketch dovresti avere questo:
Code: [Select]
  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");

dove la riga 'celsius = (float)raw / 16.0;' ti da il risultato che viene stampato. basta che alla fine dellì'operazione aggiungi '- 3.0' e sei a posto.

il codice l'ho preso da qui.

Ciao!

Go Up