Оглавление:
Видео: Birra_Monitor: 3 шага
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Разработан для того, чтобы подавать мониторинг ферментации делла бирра фатта в простом сенсорном вибрационе (SW-420 NC). l'aggiunta del sensore di temperatura (DHT22) служит для контроля температуры и umidità della stanza atta alla fermentazione. Эти данные используются для узлов и визуализируют маршруты приложения Blynk, связанные с подключенными решениями IoT.
В проекте используется для контроля брожения домашнего пива с помощью простого датчика вибрации (SW-420 NC). Дополнительный датчик температуры (DHT22) служит для контроля температуры и влажности в помещении, пригодном для ферментации. Эти данные управляются картой nodemcu и визуализируются через приложение Blynk, предназначенное для разработки решений IoT.
Шаг 1: упаковка
Scheda e sensori sono alloggiate in una semplice scatola di производная.
Плата и датчики размещены в простой распределительной коробке.
Шаг 2: датчик в действии
quello che successde quando il sensore è "montato" sul gorgogliatore, che ad ogni espulsione di CO2 il sensore registrerà delle vibrazioni, che verranno visualizzate sull'app Blynk
что происходит, когда датчик "установлен" на барботере, что каждый раз, когда CO2 удаляется, датчик будет записывать вибрации, которые будут отображаться в приложении Blynk
Шаг 3: Код
Код, позволяющий разрешить все функции всего этого, следует, что вы используете программное обеспечение Arduino IDE.
код, обеспечивающий функционирование всего, следующий, которого будет достаточно для загрузки на карту программного обеспечения Arduino IDE
#include Adafruit_Sensor.h
#include DHT.h
#define BLYNK_PRINT Serial
#include ESP8266WiFi.h;
#include BlynkSimpleEsp8266.h;
#include SimpleTimer.h;
#include WidgetRTC.h;
флоат-леттура [50]; // размерность Arrayper media
int nume_Letture = 0; // progressivo letture
float tot_Letture = 0; // somma letture
float media_Letture = 0; // СМИ
int contextggio = 0; // variabile di contextio primario
// inizio dichiarazioni variabili для континуума среды
int я = 0;
int cc = 0;
int togli = 0;
// fine dichiarazioni variabili per media континуум
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
беззнаковое длинное прима = 0; // полезность на своп мин. / макс.
long Tempmax = 660000; // полезность на своп мин. / макс.
float tmax = -100; // Impostazione Impossibile per la temperatura massima
float tmin = 100; // невозможность установки при минимальных температурах
поплавок umax = 0; // Impostazione Impossibile per umidità massima
поплавок umin = 100; // импостазион невозможен при минимальном значении
String maxt; // stringa visualizzata su Blynk
Струнная мята; // stringa visualizzata su Blynk
String maxu; // stringa visualizzata su Blynk
String minu; // stringa visualizzata su Blynk
char auth = «a °°°°°°°°°°°° d»; // токен Blynk
char ssid = "Т °°°°°°°°°°°° 9"; //вай фай
char pass = «O °°°°°°°°°°° R»; // psw
#define DHTPIN 2 // контактный датчик DHT
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
Таймер SimpleTimer; // таймер
WidgetRTC rtc; // orologio di sistema Blynk
WidgetLED led1 (V15); // Светодиод Blynk sul pin V15
BLYNK_CONNECTED () {
rtc.begin (); // avvio RTC
}
BLYNK_WRITE (V0) // подпрограмма для сброса настроек на Blynk
{
int attiva = param.asInt ();
if (attiva == 1) {
tmax = -100;
tmin = 100;
umax = 0;
umin = 100;
maxt = "------------";
мята = "------------";
maxu = "------------";
minu = "------------";
media_Letture = 0;
tot_Letture = 0;
nume_Letture = 0;
contextgio = 0;
cc = 0;
Serial.println (контекст);
Blynk.virtualWrite (V8, media_Letture);
Blynk.virtualWrite (V10, maxt);
Blynk.virtualWrite (V11, мята);
Blynk.virtualWrite (V12, maxu);
Blynk.virtualWrite (V13, minu);
Blynk.virtualWrite (V1, context);
Serial.println («Resetta»);
задержка (200);
Blynk.virtualWrite (V0, LOW);
}
}
void sendSensor () // нормальная процедура письма
{
Строка currentTime = Строка (час ()) + «:» + минута ();
Строка currentDate = Строка (день ()) + «/» + месяц ();
float h = dht.readHumidity ();
float t = dht.readTemperature ();
if (isnan (h) || isnan (t)) {
Serial.println («Не удалось прочитать с датчика DHT!»);
led1.on ();
возвращение;
}
еще {
led1.off ();
}
if (t> tmax) {
tmax = t;
maxt = String (t) + "° C (" + currentTime + "-" + currentDate + ")";
}
if (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, мята);
Blynk.virtualWrite (V12, maxu);
Blynk.virtualWrite (V13, minu);
}
void calcolo_media () // процедура для регистрации данных носителя
{
lettura [nume_Letture] = dht.readTemperature ();
if (isnan (lettura [nume_Letture])) {
led1.on ();
возвращение;
}
// procdura media circolare
if (nume_Letture> = 48) {
togli = nume_Letture-48;
tot_Letture - = (lettura [togli]);
tot_Letture + = (lettura [nume_Letture]);
nume_Letture = 0; // установить ноль и принять все
cc = 1; // Identifica primo passaggio dopo 48 letture (24ore)
}
if (cc == 1) {
contextgio = 48; // DOPO le prime 24ore делит число на 24ore (48 месяцев)
}
еще{
// media prima dello scadere delle 24ore
tot_Letture + = (lettura [nume_Letture]);
contextggio = contextgio + 1;
}
media_Letture = Tot_Letture / context;
nume_Letture = числовой_Letture + 1;
Blynk.virtualWrite (V8, media_Letture);
Blynk.virtualWrite (V1, context);
}
установка void ()
{
Serial.begin (115200);
Blynk.begin (auth, ssid, pass);
dht.begin ();
timer.setInterval (10000, sendSensor); // lettura temperatura umidità ogni 5 мин.
timer.setInterval (1800000, calcolo_media); // lettura e media ogni 30 мин.
}
пустой цикл ()
{
Blynk.run ();
timer.run ();
long adesso = millis ();
val = digitalRead (vibr_pin);
vb = vb + val;
если (adesso - prima> = Tempmax)
{
vb = 0;
vbinit = vb;
prima = adesso;
}