Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
saviothecnic

Cercasi Volontari Per Automazione Camera Fermentazione Con Arduino

81 posts in this topic

Dimenticavo,

se qualcuno sa come limitare la potenza delle celle, in modo da non fare un effetto on-off, mi farebbe il piacere di integrarlo nello sketch?

Grazie

Share this post


Link to post
Share on other sites
23 hours ago, Filippo77 said:

Allora ragazzi,

penso di fare cosa gradita postando lo sketch dove ho unito la funzione di controllo ventole in base alla temperatura e il PID (di Mysobry) per controllare la temperatura del mosto e controllare le celle di Peltier. 

Allego anche lo schema, elementare, del circuito.

 

Non ho avuto ancora la possibilità di testarlo, poiché mi manca la parte hardware, quindi non so se effettivamente funzioni o meno.


/*
Il programma misura la temperatura tramite sensori DS18B20 per regolare la rotazione dei due ventole da PC a 12V 0,25A, 
per controllare la temperatura della birra in fermentazione usando un terzo DS18B20 con funzione PID
L'uscita del PID pilota un circuito H-bridge per le celle di Peltier
*/

#include <OneWire.h>
#include <rgb_lcd.h> // libreria di gestione del display lcd Grove I2C
#include <DallasTemperature.h>  // dichiarazione di utilizzo della libreria DallasTemperature
#include <PID_v1.h>

/* Definizioni globali */

// Il terminale data del sensore è connesso alla porta 2 e 4 di Arduino

#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 4
#define ONE_WIRE_BUS_3 A0 

// Imposta la comunicazione oneWire per comunicare
// con un dispositivo compatibile
OneWire oneWire_1(ONE_WIRE_BUS_1);
OneWire oneWire_2(ONE_WIRE_BUS_2);
OneWire oneWire_3(ONE_WIRE_BUS_3);

// Passaggio oneWire reference alla Dallas Temperature. 
DallasTemperature sensor_1(&oneWire_1);
DallasTemperature sensor_2(&oneWire_2);
DallasTemperature sensor_3(&oneWire_3);

double Setpoint, Input, Output;
                     
int SNS_A   = A0; // current read
int LPWM = 9; // H-bridge leg 1 ->LPWM
int enL = 8; // H-bridge enable pin 1 -> L_EN
int RPWM = 6; // H-bridge leg 2 ->RPWM
int enR = 7; // H-bridge enable pin 2 -> R_EN

int FANsensor0 = 10;   // fan tachometer connected to digital pin 10
int letturaFANsensor0;
unsigned long FANsignal0; // time duration between tachometer pulses
float RPM0; // fan speed in RPM

int FANsensor1 = 11;   // fan tachometer connected to digital pin 11
int letturaFANsensor1;
unsigned long FANsignal1; // time duration between tachometer pulses
float RPM1; // fan speed in RPM

unsigned long int time;
int sampletime=1; // Number of sample to average-out sampling values
/* Impostazione dell'hardware */

//Inizializzazione del PID, impostazione a DIRECT (frigo), e dell'LCD
PID myPID(&Input, &Output, &Setpoint,2,5,1, REVERSE);
rgb_lcd lcd ;

void setup() 
{
  Setpoint = 30;          //definizione del set point
  Serial.begin(9600);
  Serial.println("Temperatura    PIDout    Corrente\n");
  time=millis();
  lcd.begin(16, 2);
  digitalWrite(FANsensor0, HIGH);  // turn on pull-up resistor
  digitalWrite(FANsensor1, HIGH);  // turn on pull-up resistor

  //turn the PID on
  myPID.SetMode(AUTOMATIC);
  // Start up the OneWire library
  sensor_1.begin();
  sensor_2.begin();
  
  // Configurazione PIN direzione e freno H-bridge
  pinMode(LPWM, OUTPUT); 
  pinMode(RPWM, OUTPUT); 
  pinMode(enL, OUTPUT);
  pinMode(enR, OUTPUT);
  digitalWrite(enL, HIGH);
  digitalWrite(enR, HIGH);

}

void loop()
{
    time=millis();
  
  // inizio loop per visualizzare temperature e RPM
  lcd.setCursor(0,0);
  if(time>letturaFANsensor0+1){
  lcd.print("RPM:");
  FANsignal0=0;
  for (int i = 0; i < sampletime; i++) { // Average out pulseIn time reading in microseconds
  FANsignal0 = FANsignal0+pulseIn(FANsensor0, HIGH);
  }
  RPM0=(600000000/float(FANsignal0))/40; // in RPM
  lcd.print(int(RPM0)); // displays RPM value
  }
  
  lcd.setCursor(8,0);
  if(time>letturaFANsensor1+1){
  lcd.print("RPM:");
  FANsignal1=0;
  for (int i = 0; i < sampletime; i++) { // Average out pulseIn time reading in microseconds
  FANsignal1 = FANsignal1+pulseIn(FANsensor1, HIGH);
  }
  RPM1=(600000000/float(FANsignal1))/40; // in RPM
  lcd.print(int(RPM1)); // displays RPM value
  } 
  
  lcd.setCursor(0,1);
  lcd.print("T1:");
  sensor_1.requestTemperatures();
  lcd.println(sensor_1.getTempCByIndex(0));

  lcd.setCursor(8,1);
  lcd.print("T2:");
  sensor_2.requestTemperatures();
  lcd.println(sensor_2.getTempCByIndex(0));
  
  delay(1000);
  // fine loop per visualizzare temperature e RPM

  // inizio loop PID 
  double temp = sensor_3.getTempCByIndex(0);  // legge il valore della temperatura e la memorizza nella var. temp.

  Input = temp;              //temperatura passata in ingresso a PID
  myPID.Compute(); 
  
  digitalWrite(LPWM, LOW);
  analogWrite(RPWM,Output); //PWM con segnale in uscita pari a uscita PID
    
  Serial.print( temp);    // invia i valori alla seriale
  Serial.print("\t");
  Serial.print((Output/255*100));
  Serial.print("\t");
  Serial.print(analogRead(SNS_A));
  Serial.print("\n");

delay (1000);
// fine loop PID


}

 

Schema.jpg

Interessante in questo periodo sto fermo ho un po di cose da sistemare :(
Ma appena riprendo lo provo e ti dico Grazie per la dondivisione di codice e schema è questo lo spirito giusto del forum :D

Share this post


Link to post
Share on other sites

Ho montato il tutto, ma le celle non funzionano.... non capisco  dove sia il problema.. Sui terminali dell' H-Bridge in ingresso i 12v ci sono, ma in uscita verso le celle non c'è tensione...

Qualche idea?

Share this post


Link to post
Share on other sites

Dimenticavo, dal monitor seriale, il PID out funziona e i valori cambiano fino ad arrivare a 100, ma le celle non reagiscono

Qualche idea?

Edited by Filippo77

Share this post


Link to post
Share on other sites

Provo a caricarlo e guardare cosa nn va

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now