Spisu treści:
Wideo: Birra_Monitor: 3 kroki
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Il progetto służyć monitorre la fermentazione della birra fatta in casa tramite un semplice sensore di vibrazione (SW-420 NC). l'aggiunta del sensore di temperatura (DHT22) służy monitorre temperatura e umidità della stanza atta alla fermentazione. Ta aplikacja służy do zarządzania schematami i wizualizacjami w aplikacji Blynk, która pomaga opracować rozwiązania IoT.
Projekt służy do monitorowania procesu fermentacji domowego piwa za pomocą prostego czujnika drgań (SW-420 NC). dodanie czujnika temperatury (DHT22) służy do monitorowania temperatury i wilgotności pomieszczenia odpowiedniego do fermentacji. Dane te są zarządzane przez kartę nodemcu i wizualizowane przez aplikację Blynk wyznaczoną do opracowywania rozwiązań IoT.
Krok 1: Pakowanie
Scheda e sensori sono alloggiate in una semplice scatola di derivazione.
Płytka i czujniki są umieszczone w prostej puszce połączeniowej.
Krok 2: Czujnik w pracy
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
co się dzieje, gdy czujnik jest „zamontowany” na bełkocie, że za każdym razem, gdy CO2 jest wyrzucany, czujnik rejestruje wibracje, które będą wyświetlane w aplikacji Blynk
Krok 3: Kod
il codice permittere il funzionamento tutto e il seguente che basterà a caricare sulla scheda il software Arduino IDE
kod umożliwiający funkcjonowanie całości jest następujący, który wystarczy do załadowania na kartę oprogramowania Arduino IDE
#dołącz Adafruit_Sensor.h
#dołącz DHT.h
#define BLYNK_PRINT Serial
#dołącz ESP8266WiFi.h;
#include BlynkSimpleEsp8266.h;
#include SimpleTimer.h;
#include WidgetRTC.h;
pływająca lettura[50]; //wymiar nośnika tablicy
int liczba_Letture=0; //progresivo sałata
pływak tot_Letture=0; //somma sałata
pływak media_Letture=0; //wykład medialny
int conteggio=0; //variabile di conteggio primario
//inizio dichiarazioni variabili per media continua
int i=0;
intcc=0;
int togli=0;
//drobne dichiarazioni variabili per media continua
wewn wart; //zmienna rejestracja vibrazione
int vibr_pin=5; //Piedino x Sensore di Vibrazione D1
int vb=0; //Inicjalizo vb a 0
int vbr=0; //Inicjalizo vb a 0
int vbinit=0; //Inicjalizo vbinit a 0
prima długa bez znaku=0; //utile na swap min/max
długi Tempmax=660000; //utile na swap min/max
pływak tmax=-100; //impostazione impossibile per la temperatura massima
pływak tmin=100; //impostazione impossibile per il temperatura minima
pływak umax=0; //impostazione impossibile per umidità massima
pływak umin=100; //impostazione impossibile per minima
Maks. ciąg; //stringa wizualizacja na Blynk
mięta sznurkowa; //stringa wizualizacja na Blynk
Maks. ciąg; //stringa wizualizacja na Blynk
Ciąg minus; //stringa wizualizacja na Blynk
char auth = "a°°°°°°°°°°°°°°d";//token Blynk
char ssid = „T°°°°°°°°°°°°°9”; //wifi
znak = „O°°°°°°°°°°°°R”; //psw
#define DHTPIN 2 //pin czujnik DHT
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Zegar SimpleTimer; //regulator czasowy
WidgetRTC RTC; //orologia systemu Blynk
WidgetLED led1 (V15); //Led Blynk sul pin V15
BLYNK_CONNECTED () {
rtc.początek(); //avvio RTC
}
BLYNK_WRITE(V0) //rutynę na resetowanie przez Blynk
{
int attiva = param.asInt();
jeśli (attiva==1){
tmax=-100;
tmin=100;
umaks=0;
mmin=100;
maxt= "---------------";
mennica= "------------";
maxu= "----------------";
minu= "---------------";
media_Letture=0;
tot_Letture=0;
liczba_nauczanie = 0;
conteggio = 0;
cc=0;
Serial.println(conteggio);
Blynk.virtualWrite(V8, media_Letture);
Blynk.virtualWrite(V10, maxt);
Blynk.virtualWrite(V11, mięta);
Blynk.virtualWrite(V12, maxu);
Blynk.virtualWrite(V13, min);
Blynk.virtualWrite(V1, conteggio);
Serial.println("Resetuj");
opóźnienie(200);
Blynk.virtualWrite(V0, LOW);
}
}
void sendSensor() //normalna procedura czytania
{
String currentTime = String(godzina()) + ":" + minuta();
Ciąg bieżącaData = Ciąg(dzień()) + "/" + miesiąc();
float h = dht.odczytWilgotność();
float t = dht.odczytTemperatura();
jeśli (isnan(h) || isnan(t)) {
Serial.println("Nie udało się odczytać z czujnika DHT!");
led1.on();
powrót;
}
w przeciwnym razie {
led1.off();
}
jeśli (t > tmax) {
tmax=t;
maxt= String(t) + "°C (" + aktualnyCzas + "-" +bieżącaData+ ")";
}
jeśli (t < tmin) {
tmin=t;
mint= String(t) + "°C (" + aktualnyCzas + "-" +bieżącaData+ ")";
}
jeśli (h > umax) {
umax=h;
maxu= String(h) + "% (" + aktualnyCzas + "-" +bieżącaData+ ")";
}
jeśli (h < min) {
umin=h;
minu= String(h) + "% (" + aktualnyCzas + "-" +bieżącaData+ ")";
}
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
Blynk.virtualWrite(V7, vb);
Blynk.virtualWrite(V10, maxt);
Blynk.virtualWrite(V11, mięta);
Blynk.virtualWrite(V12, maxu);
Blynk.virtualWrite(V13, min);
}
void calcolo_media() //procedura rejestracji mediów danych
{
lettura[liczba_napisu] = dht.odczytTemperatura();
if (isnan(lettura[numer_Letture])) {
led1.on();
powrót;
}
//procedura media circolare
if (numer_Letture>=48){
togli=numer_Letture-48;
tot_Letture -=(lettura[togli]);
tot_Letture +=(lettura[numer_Letture]);
liczba_Wykład=0; //setta a zero e riparte tutto
cc=1; //identifica primo passaggio dopo 48 sałata (24ore)
}
jeśli (cc==1) {
conteggio=48; //DOPO le prime 24ore podzielić semper na 24ore (48mezzore)
}
w przeciwnym razie{
//media prima dello scadere delle 24ore
tot_Letture +=(lettura[numer_Letture]);
conteggio=conteggio+1;
}
media_Letture=tot_Letture/conteggio;
liczba_naucza=liczba_naucza+1;
Blynk.virtualWrite(V8, media_Letture);
Blynk.virtualWrite(V1, conteggio);
}
pusta konfiguracja()
{
Serial.początek(115200);
Blynk.begin(auth, ssid, pass);
dht.początek();
timer.setInterval(10000, sendSensor); //lettura temperatura umidità ogni 5 min
timer.setInterval(1800000, calcolo_media); //lettura e media ogni 30min
}
pusta pętla()
{
Blynk.run();
timer.uruchom();
długie adesso=millis();
val = digitalRead (wibr_pin);
vb=vb+val;
if (adesso - prima >= Tempmax)
{
vb=0;
vbinit=vb;
prima=adesso;
}