Video: Birra_Monitor: 3 koraki
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Progetto postrežemo z monitorrare la fermentazione della birra fatta v casa tramite un semplice sensore di vibrazione (SW-420 NC). Senzor temperature (DHT22) služi za spremljanje temperature in 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.
Projekt se uporablja za spremljanje fermentacije domačega piva s preprostim senzorjem vibracij (SW-420 NC). dodatek temperaturnega senzorja (DHT22) služi za spremljanje temperature in vlažnosti prostora, primernega za fermentacijo. Te podatke upravlja kartica nodemcu in vizualizira prek aplikacije Blynk, imenovane za razvoj rešitev IoT.
1. korak: Pakiranje
Scheda e sensori sono aloggiate in una semplice scatola di derivazione.
Plošča in senzorji so nameščeni v preprosti razdelilni omarici.
2. korak: Senzor pri delu
quello che succede quando il sensore è "montato" sul gorgogliatore che ad ogni espulsione di CO2 il sensore registrarà delle vibrazioni che verranno vizualizirati sull'app Blynk
kaj se zgodi, ko je senzor "nameščen" na mehurček, da bo senzor ob vsakem izločanju CO2 zabeležil vibracije, ki bodo prikazane v aplikaciji Blynk
3. korak: Koda
Id kode za permettere il funzionamento del tutto è il seguente che basterà caricare sulla scheda tramide il programska oprema Arduino IDE
koda, ki omogoča delovanje celote, je naslednja, ki bo dovolj, da na kartico naložite programsko opremo Arduino IDE
#vključi senzor Adafruit.h
#vključi DHT.h
#define BLYNK_PRINT Serijska številka
#include ESP8266WiFi.h;
#include BlynkSimpleEsp8266.h;
#include SimpleTimer.h;
#include WidgetRTC.h;
float lettura [50]; // dimenzija Arrayper media
int nume_Letture = 0; // progressivo letture
float tot_Letture = 0; // somma letture
float media_Letture = 0; // medijska literatura
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
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
brez podpisa dolga prima = 0; // uporabnost na zamenjavo min/max
dolga Tempmax = 660000; // uporabnost na zamenjavo min/max
plovec tmax = -100; // impostazione impossibile per la temperature massima
plavajoči tmin = 100; // impostazione impossibile per il temperature minima
float umax = 0; // impostazione impossibile per umidità massima
plavajoči umin = 100; // impostazione impossibile per umidità minima
Niz nizov; // stringa visualizzata su Blynk
Struna meta; // stringa visualizzata su Blynk
Niz nizko; // stringa visualizzata su Blynk
Niz nizov; // stringa visualizzata su Blynk
char auth = "a °°°°°°°°°°°°° d"; // žeton Blynk
char ssid = "T °°°°°°°°°°°°° 9"; //Wifi
char pass = "O °°°°°°°°°°°° R"; // psw
#define DHTPIN 2 // pin senzor DHT
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
Časovnik SimpleTimer; // časovnik
WidgetRTC rtc; // orologio di sistem Blynk
WidgetLED led1 (V15); // Led Blynk sul pin V15
BLYNK_CONNECTED () {
rtc.begin (); // avvio RTC
}
BLYNK_WRITE (V0) // rutina za ponastavitev tasto za Blynk
{
int attiva = param.asInt ();
če (attiva == 1) {
tmax = -100;
tmin = 100;
umax = 0;
umin = 100;
maxt = "------------";
kovnica = "------------";
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, meta);
Blynk.virtualWrite (V12, največ);
Blynk.virtualWrite (V13, minuta);
Blynk.virtualWrite (V1, conteggio);
Serial.println ("Ponastavi");
zamuda (200);
Blynk.virtualWrite (V0, LOW);
}
}
void sendSensor () // normale procedura di lettura
{
Niz currentTime = String (ura ()) + ":" + minuta ();
Niz currentDate = String (dan ()) + "/" + mesec ();
float h = dht.readHumidity ();
float t = dht.readTemperature ();
if (isnan (h) || isnan (t)) {
Serial.println ("Odčitavanje s senzorja DHT ni uspelo!");
led1.on ();
vrnitev;
}
drugače {
led1.off ();
}
če (t> tmax) {
tmax = t;
maxt = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
če (t <tmin) {
tmin = t;
mint = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
if (h> umax) {
umax = h;
maxu = String (h) + "% (" + currentTime + "-" + currentDate + ")";
}
če (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, meta);
Blynk.virtualWrite (V12, največ);
Blynk.virtualWrite (V13, minuta);
}
void calcolo_media () // postopek za registracijo medija
{
lettura [nume_Letture] = dht.readTemperature ();
if (isnan (lettura [nume_Letture])) {
led1.on ();
vrnitev;
}
// 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 (24or)
}
če (cc == 1) {
conteggio = 48; // DOPO le prime 24ore deli semper na 24ore (48mezzore)
}
drugače {
// medijska 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, kontekst);
}
void setup ()
{
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
}
void loop ()
{
Blynk.run ();
timer.run ();
dolg adesso = millis ();
val = digitalRead (vibr_pin);
vb = vb+val;
če (adesso - prima> = Tempmax)
{
vb = 0;
vbinit = vb;
prima = adesso;
}