Tabla de contenido:
Video: Birra_Monitor: 3 pasos
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Il progetto sirve un monitorare la fermentazione della birra fatta en casa tramite un semplice sensore di vibrazione (SW-420 NC). l'aggiunta del sensore di temperatura (DHT22) sirve un 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.
El proyecto se utiliza para monitorear la fermentación de cerveza casera usando un sensor de vibración simple (SW-420 NC). la adición del sensor de temperatura (DHT22) sirve para controlar la temperatura y la humedad de la habitación apta para la fermentación. Estos datos se gestionan mediante una tarjeta nodemcu y se visualizan a través de la aplicación Blynk designada para desarrollar soluciones de IoT.
Paso 1: empaque
Scheda e sensori sono alloggiate in una semplice scatola di derivazione.
La placa y los sensores están alojados en una simple caja de conexiones.
Paso 2: Sensor en funcionamiento
quello che succede quando il sensore è "montato" sul gorgogliatore che ad ogni espulsione di CO2 il sensore registrerà delle vibrazioni che verranno visualizzate sull'app Blynk
¿Qué sucede cuando el sensor está "montado" en el burbujeador? Cada vez que se expulsa el CO2, el sensor registrará las vibraciones que se mostrarán en la aplicación Blynk.
Paso 3: Código
il codice per permettere il funzionamento del tutto è il seguente che basterà caricare sulla scheda tramide il software Arduino IDE
el código para permitir el funcionamiento del conjunto es el siguiente que será suficiente para cargar en la tarjeta el software Arduino IDE
#include Adafruit_Sensor.h
#include DHT.h
#define BLYNK_PRINT Serie
#include ESP8266WiFi.h;
#include BlynkSimpleEsp8266.h;
#include SimpleTimer.h;
#include WidgetRTC.h;
flotador lettura [50]; // dimensione Arrayper media
int nume_Letture = 0; // letra progresiva
flotador tot_Letture = 0; // somma letture
float media_Letture = 0; // letra de los medios
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 por media continua
int val; // 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 por intercambio min / max
Long Tempmax = 660000; // utile por intercambio min / max
flotador tmax = -100; // impostazione impossibile per la temperatura massima
flotador tmin = 100; // impostazione impossibile per il temperatura minima
flotar umax = 0; // impostazione impossibile per umidità massima
flotador umin = 100; // impostazione impossibile per umidità minima
String maxt; // stringa visualizzata su Blynk
Menta de cuerda; // stringa visualizzata su Blynk
String maxu; // stringa visualizzata su Blynk
String minu; // stringa visualizzata 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);
Temporizador SimpleTimer; //Temporizador
WidgetRTC rtc; // orologio di sistema Blynk
WidgetLED led1 (V15); // Led Blynk sul pin V15
BLYNK_CONNECTED () {
rtc.begin (); // avvio RTC
}
BLYNK_WRITE (V0) // rutina por tasto reset da Blynk
{
int attiva = param.asInt ();
if (attiva == 1) {
tmax = -100;
tmin = 100;
umax = 0;
umin = 100;
maxt = "------------";
mint = "------------";
maxu = "------------";
minu = "------------";
media_Letture = 0;
tot_Letture = 0;
nume_Letture = 0;
conteggio = 0;
cc = 0;
Serial.println (conteggio);
Blynk.virtualWrite (V8, media_Letture);
Blynk.virtualWrite (V10, maxt);
Blynk.virtualWrite (V11, perfecto);
Blynk.virtualWrite (V12, maxu);
Blynk.virtualWrite (V13, minu);
Blynk.virtualWrite (V1, conteggio);
Serial.println ("Resetta");
retraso (200);
Blynk.virtualWrite (V0, BAJO);
}
}
void sendSensor () // procedimiento normal de lettura
{
String currentTime = String (hora ()) + ":" + minuto ();
String currentDate = String (día ()) + "/" + mes ();
flotar h = dht.readHumidity ();
flotar t = dht.readTemperature ();
si (isnan (h) || isnan (t)) {
Serial.println ("¡Error al leer del sensor DHT!");
led1.on ();
regreso;
}
demás {
led1.off ();
}
si (t> tmax) {
tmax = t;
maxt = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
si (t <tmin) {
tmin = t;
mint = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
si (h> umax) {
umax = h;
maxu = String (h) + "% (" + currentTime + "-" + currentDate + ")";
}
si (h <umin) {
umin = 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, perfecto);
Blynk.virtualWrite (V12, maxu);
Blynk.virtualWrite (V13, minu);
}
void calcolo_media () // procedura per registrazioni dati media
{
lettura [nume_Letture] = dht.readTemperature ();
if (isnan (lettura [nume_Letture])) {
led1.on ();
regreso;
}
// procedura media circolare
if (nume_Letture> = 48) {
togli = nume_Letture-48;
tot_Letture - = (lettura [togli]);
tot_Letture + = (lettura [nume_Letture]);
nume_Letture = 0; // setta a zero e riparte tutto
cc = 1; // identifica primo passaggio dopo 48 letture (24ore)
}
si (cc == 1) {
conteggio = 48; // DOPO le prime 24ore divide semper per 24ore (48mezzore)
}
demás{
// media prima dello scadere delle 24ore
tot_Letture + = (lettura [nume_Letture]);
conteggio = conteggio + 1;
}
media_Letture = tot_Letture / conteggio;
nume_Letture = nume_Letture + 1;
Blynk.virtualWrite (V8, media_Letture);
Blynk.virtualWrite (V1, conteggio);
}
configuración vacía ()
{
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
}
bucle vacío ()
{
Blynk.run ();
timer.run ();
largo adesso = millis ();
val = digitalRead (vibr_pin);
vb = vb + val;
si (adesso - prima> = Tempmax)
{
vb = 0;
vbinit = vb;
prima = adesso;
}