Video: Birra_Monitor: 3 koraka
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Progetto će poslužiti monitorrare la fermentazione della birra fatta u casa tramite un semplice sensore di vibrazione (SW-420 NC). L'aggiunta del sensore di temperature (DHT22) služi za praćenje temperature i 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 koristi za praćenje fermentacije domaćeg piva pomoću jednostavnog senzora vibracija (SW-420 NC). dodatak temperaturnog osjetnika (DHT22) služi za praćenje temperature i vlažnosti prostorije pogodne za fermentaciju. Ovim podacima upravlja nodemcu kartica i vizualizira ih aplikacija Blynk imenovana za razvoj IoT rješenja.
Korak 1: Pakiranje
Scheda e sensori sono aloggiate in una semplice scatola di derivazione.
Ploča i senzori smješteni su u jednostavnu razvodnu kutiju.
Korak 2: Senzor na poslu
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
što se događa kada je senzor "montiran" na mjehurić da svaki put kada se CO2 izbaci senzor će zabilježiti vibracije koje će biti prikazane u aplikaciji Blynk
Korak 3: Kodirajte
il kodeks permettere il funzionamento del tutto è il seguente che basterà caricare sulla scheda tramide il software Arduino IDE
kôd koji omogućuje funkcioniranje cjeline je sljedeći koji će biti dovoljan za učitavanje na karticu Arduino IDE softvera
#uključite Adafruit_Sensor.h
#uključuje DHT.h
#define BLYNK_PRINT Serijski
#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 književnost
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
bez potpisa duga prima = 0; // korisno po zamjeni min/maks
dugi Tempmax = 660000; // korisno po zamjeni min/maks
plovak tmax = -100; // impostazione impossibile per la temperature massima
plovak tmin = 100; // impostazione impossibile per il temperature minima
float umax = 0; // impostazione impossibile per umidità massima
plovak umin = 100; // impostazione impossibile per umidità minima
Niz znakova; // stringa visualizzata su Blynk
Nana žica; // stringa visualizzata su Blynk
String maxu; // stringa visualizzata su Blynk
Gudački 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 senzor DHT
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
Mjerač vremena SimpleTimer; // mjerač vremena
WidgetRTC rtc; // orologio di sistema Blynk
WidgetLED led1 (V15); // Led Blynk sul pin V15
BLYNK_CONNECTED () {
rtc.begin (); // avvio RTC
}
BLYNK_WRITE (V0) // rutina po tasto reset da Blynk
{
int attiva = param.asInt ();
ako (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;
Serijski.println (conteggio);
Blynk.virtualWrite (V8, media_Letture);
Blynk.virtualWrite (V10, maxt);
Blynk.virtualWrite (V11, metvica);
Blynk.virtualWrite (V12, najviše);
Blynk.virtualWrite (V13, minuta);
Blynk.virtualWrite (V1, kontekst);
Serial.println ("Resetta");
kašnjenje (200);
Blynk.virtualWrite (V0, LOW);
}
}
void sendSensor () // normalan postupak di lettura
{
Niz currentTime = String (sat ()) + ":" + minuta ();
Niz currentDate = String (dan ()) + "/" + mjesec ();
float h = dht.readHumidity ();
float t = dht.readTemperature ();
if (isnan (h) || isnan (t)) {
Serial.println ("Očitavanje nije uspjelo s DHT senzora!");
led1.on ();
povratak;
}
drugo {
led1.off ();
}
ako (t> tmax) {
tmax = t;
maxt = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
ako (t <tmin) {
tmin = t;
mint = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
if (h> umax) {
umax = h;
maxu = String (h) + "% (" + currentTime + "-" + currentDate + ")";
}
if (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, metvica);
Blynk.virtualWrite (V12, najviše);
Blynk.virtualWrite (V13, minuta);
}
void calcolo_media () // procedure per registrazioni dati media
{
lettura [nume_Letture] = dht.readTemperature ();
if (isnan (lettura [nume_Letture])) {
led1.on ();
povratak;
}
// 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)
}
ako (cc == 1) {
conteggio = 48; // DOPO le prime 24ore split semper per 24ore (48mezzore)
}
drugo{
// 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 ();
long adesso = millis ();
val = digitalRead (vibr_pin);
vb = vb+val;
if (adesso - prima> = Tempmax)
{
vb = 0;
vbinit = vb;
prima = adesso;
}