Sommario:

Birra_Monitor: 3 passaggi
Birra_Monitor: 3 passaggi

Video: Birra_Monitor: 3 passaggi

Video: Birra_Monitor: 3 passaggi
Video: Bruttissimo incidente 2024, Luglio
Anonim
Birra_Monitor
Birra_Monitor

Il progetto serve a monitorare la fermentazione della birra fatta in casa tramite un semplice sensore di vibrazione (SW-420 NC). l'aggiunta del sensore di temperatura (DHT22) serve a monitorare temperatura e umidità della stanza atta alla fermentazione. Questi dati vengono gestiti da una scheda nodemcu e visualizzati tramite Blynk app deputata allo sviluppo di soluzioni IoT.

Il progetto è utilizzato per monitorare la fermentazione della birra fatta in casa utilizzando un semplice sensore di vibrazione (SW-420 NC). l'aggiunta del sensore di temperatura (DHT22) serve per monitorare la temperatura e l'umidità del locale adatto alla fermentazione. Questi dati vengono gestiti da una scheda nodemcu e visualizzati tramite l'app Blynk incaricata di sviluppare soluzioni IoT.

Passaggio 1: imballaggio

Confezione
Confezione
Confezione
Confezione

Scheda e sensori sono alloggiate in una semplice scatola di derivazione.

Scheda e sensori sono alloggiati in una semplice scatola di giunzione.

Passaggio 2: sensore al lavoro

Sensore al lavoro
Sensore al lavoro
Sensore al lavoro
Sensore al lavoro

quello che succede quando il sensore è "montato" sul gorgogliatore che ad ogni espulsione di CO2 il sensore registrerà delle vibrazioni che verranno sull'app Blynk

cosa succede quando il sensore è "montato" sul gorgogliatore che ogni volta che viene espulsa la CO2 il sensore registrerà delle vibrazioni che verranno visualizzate sull'app Blynk

Passaggio 3: codice

il codice per consentire il funzionamento del tutto è il seguente che basterà caricare sulla scheda tramide il software Arduino IDE

il codice per permettere il funzionamento del tutto è il seguente che basterà per caricare sulla scheda il software Arduino IDE

#include Adafruit_Sensor.h

#include DHT.h

#define BLYNK_PRINT seriale

#include ESP8266WiFi.h;

#include BlynkSimpleEsp8266.h;

#include SimpleTimer.h;

#include WidgetRTC.h;

galleggiante lettura[50]; //dimensione Arrayper media

int numero_Lettura=0; //lettura progressiva

float tot_Letture=0; //somma letture

float media_Letture=0; //lettura mediatica

int conteggio=0; //variabile di conteggio primario

//inizio dichiarazioni variabili per media continua

int i=0;

int cc=0;

int togli=0;

//fine dichiarazioni variabili per media continua

valore int; //variabile registrazione vibrazione

int vibr_pin=5; //Piedino x Sensore di Vibrazione D1

int vb=0; //Inizializzo vb a 0

int vbr=0; //Inizializzo vb a 0

int vbinit=0; //Inizializzo vbinit a 0

unsigned long prima=0; //utile per swap min/max

Tempmax lungo=660000; //utile per swap min/max

float tmax=-100; //impostazione impossibile per la temperatura massima

float tmin=100; //impostazione impossibile per la temperatura minima

float umax=0; //impostazione impossibile per umidità massima

galleggiante umin=100; //impostazione impossibile per umidità minima

Massimo stringa; //stringa su Blynk

menta stringa; //stringa su Blynk

Stringa massima; //stringa su Blynk

Stringa min; //stringa su Blynk

char auth = "a°°°°°°°°°°°°d";//token Blynk

char ssid = "T°°°°°°°°°°°°9"; //Wifi

char pass = "O°°°°°°°°°°°R"; //psw

#define DHTPIN 2 //pin sensore DHT

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

Timer semplice; //Timer

WidgetRTC rtc; //orologio di sistema Blynk

LED widget led1(V15); //Led Blynk sul pin V15

BLYNK_CONNECTED () {

rtc.begin(); //avvio RTC

}

BLYNK_WRITE(V0) //routine per tasto reset da Blynk

{

int attiva = param.asInt();

se (attiva==1){

tmax=-100;

min=100;

umax=0;

umin=100;

maxt= "------------";

mint= "------------";

maxu= "------------";

minu= "------------";

media_Lettura=0;

tot_Lettura=0;

numero_Lettura = 0;

conteggio = 0;

cc=0;

Serial.println(conteggio);

Blynk.virtualWrite(V8, media_Letture);

Blynk.virtualWrite(V10, maxt);

Blynk.virtualWrite(V11, nuovo);

Blynk.virtualWrite(V12, maxu);

Blynk.virtualWrite(V13, minu);

Blynk.virtualWrite(V1, conteggio);

Serial.println("Resetta");

ritardo(200);

Blynk.virtualWrite(V0, LOW);

}

}

void sendSensor() //normale procedura di lettura

{

String currentTime = String(hour()) + ":" + minute();

String data corrente = String(giorno()) + "/" + mese();

float h = dht.readHumidity();

float t = dht.readTemperature();

if (isnan(h) || isnan(t)) {

Serial.println("Impossibile leggere dal sensore DHT!");

led1.on();

Restituzione;

}

altro {

led1.off();

}

se (t > tmax) {

tmax=t;

maxt= String(t) + "°C (" + CurrentTime + "-" +currentDate+ ")";

}

se (t < tmin) {

min=t;

mint= String(t) + "°C (" + CurrentTime + "-" +currentDate+ ")";

}

se (h > umax) {

umax=h;

maxu= String(h) + "% (" + currentTime + "-" +currentDate+ ")";

}

if (h < umin) {

umino=h;

minu= String(h) + "% (" + currentTime + "-" +currentDate+ ")";

}

Blynk.virtualWrite(V5, h);

Blynk.virtualWrite(V6, t);

Blynk.virtualWrite(V7, vb);

Blynk.virtualWrite(V10, maxt);

Blynk.virtualWrite(V11, nuovo);

Blynk.virtualWrite(V12, maxu);

Blynk.virtualWrite(V13, minu);

}

void calcolo_media() //procedura per registrazione dati media

{

lettura[nume_Letture] = dht.readTemperature();

if (isnan(lettura[nume_Letture])) {

led1.on();

Restituzione;

}

//procedura media circolare

if (nume_Lettura>=48){

togli=nume_Letture-48;

tot_Letture -=(lettura[togli]);

tot_Letture +=(lettura[nume_Letture]);

numero_Lettura=0; //setta a zero e riparte tutto

cc=1; //identifica primo passaggio dopo 48 letture (24ore)

}

se (cc==1) {

conteggio=48; //DOPO le prime 24ore divide sempre per 24ore (48mezzore)

}

altro{

//media prima dello scadere delle 24ore

tot_Letture +=(lettura[nume_Letture]);

conteggio=conteggio+1;

}

media_Letture=tot_Letture/conteggio;

num_Letture=nume_Letture+1;

Blynk.virtualWrite(V8, media_Letture);

Blynk.virtualWrite(V1, conteggio);

}

configurazione nulla()

{

Serial.begin(115200);

Blynk.begin(auth, ssid, pass);

dht.begin();

timer.setInterval(10000, sendSensor); //lettura temperatura umidità ogni 5 min

timer.setInterval(1800000, calcolo_media); //lettura e media ogni 30min

}

ciclo vuoto()

{

Blynk.run();

timer.run();

lungo adesso=millis();

val = digitalRead (vibr_pin);

vb=vb+val;

if (adesso - prima >= Tempmax)

{

vb=0;

vbinit=vb;

prima=adesso;

}

Consigliato: