Buongiorno a tutti. scrivo per avere il vostro aiuto sulla seguente tematica.
Abitando in una zona che non è servita costantemente dall'acqua corrente, avrei necessità di creare un qualcosa che mi legga il livello del serbatoio e che mi faccia capire se l'acqua corrente è presente o meno.
Quindi, ho acquistato un modulo ESP32 Wifi, un sensore a ultrasuoni HC-SR04 e un rilevatore di liquidi senza contatto xkc-y26-pnp.
L'esigenza sarebbe quella di poter effettuare la lettura tramite ultrasuono del livello del serbatoio e l'intervento o meno del sensore presenza liquidi.
Possibilmente, volevo poter leggere il tutto da un app, non avendo home assistant dato che dovrei mantenere attivo un "server" solo per gestire questi due oggetti. Avevo visto qualche guida utilizzando Blynk ma essendo neofita non sono riuscito a capire.
Buongiorno e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
Non ho ben capito una cosa ... se già leggi il livello con gli ultrasuoni (però butta via il HC-SR04 e prendi un SRF-05, molto più preciso ed affidabile) a cosa serve il rilevatore di liquido?
Ciao grazie per la risposta. Magari cambieró ul sensore dopo essere comunque riuscito a configurare il tutto per provarne la fattabilita
L'esigenza del secondo sensore nasce dal fatto che:
Con ultrasuono vado a leggere il livello del serbatoio per capire quanta riserva di acqua ho
Con il secondo sensore invece vado a capire se il tubo di riempimento dall'acquedotto e pieno( abito in collina quindi quando l'acqua va via il tubo dell'acquedotto si svuota) o vuoto (dato che io prelevo l'acqua sempre dal serbatoio sia se presente l'acqua corrente o meno).
Se riusciste ad aiutarmi con la scrittura del codice ve ne sarei grato.
Da capire poi come leggere i dati. Se esiste un modo di creare un app collegando esp32 in wifi senza dover usare home assistant o altro
Emmm ... come chiaramente spiegato al punto 16.1 del REGOLAMENTO (che dovresti aver letto), noi possiamo aiutarti a "correggere" il codice che, però, devi scrivere tu ...
Tenete sempre presente che qui sul forum nessuno scrive software per conto terzi o realizza schemi su ordinazione, ma si aiuta chi viene qui a correggere/ottimizzare il software che lui scrive o gli schemi che lui realizza .
Se hai poca esperienza su Arduino, sempre nel punto 16.1 trovi una serie di link a dei .pdf, che puoi scaricare gratuitamente ed ad un ottimo libro che puoi eventualmete acquistare.
La fattibità te la do' per certa, anche se ho un dubbio relativo al sensore dell'acqua: io non l'ho mai usato, ma sei certo che quel sensore si possa utilizzare nel tuo caso? Ossia come lo installeresti? Hei letto bene le specifiche? I tubi dell'acquedotto non sono di metallo?
Confermo anche il consiglio di non usare mai gli HC-SR04 prendendo invece gli SRF05: gli SR04 sono poco precisi ma soprattutto si "impallano" spesso, a suo tempo feci una libreria apposita per poterli gestire entrambi, cercando di mitigare il problema del blocco...
Quindi ora inizia a farti un primo programmino che rilevi il livello di un serbatoio (puoi fare le prove anche con una caraffa o un vasetto), se vuoi prendi spunto da QUESTO mio vecchio progetto di sensore di livello per macchinetta del caffè espresso.
Poi, come ti è stato detto, se hai problemi puoi postare qui quello che avrai fatto e ti potremo aiutare in caso di problemi.
Una volta funzionante il sensore di livello devi solo aggiungere il sensore dell'acqua, una volta che avrai capito se è utilizzabile. Altrimenti dovresti cercare altre soluzioni ad esempio un sensore di pressione, collegabile ad Arduino, da avvitare sul tubo dell'acqua previa filettatura (per intenderci, anche se non l'ho mai utilizzato, una cosa tipo QUESTA).
La tubazione che vado utilizzare è quella interna al mio locale tecnico che è in multistrato/polietilene. Quindi il sensore dovrebbe funzionare. Alla meno peggio, avevo già pensato alla soluzione da te proposta con il sensore di pressione. Tanto a me il funzionamento cambia poco visto che mi interessa capire se il tubo è vuoto, quindi mi basta qualunque cosa mi restituisca un contatto.
Purtroppo essendo neofita ho fatto qualche prova con scarsi risultati. Proveró a riscrivere il codice e postarlo almeno per riuscire a leggere il sensore a ultrasuoni. Poi magari integreremo il resto. Per il momento, vi ringrazio
I problemi sono i seguenti, se provo a fare l'upload del codice con il sensore attaccato, non va mi da errore dicendomi che c'è rumore seriale.
Provando a staccare invece il sensore, il codice viene uploadato. ma una volta collegato il tutto nella task del serial monitor, dove se ho ben capito dovevano comparire le variazioni indicate dal sensore e anche l'ip per poter leggere tramite webserver, mi compare solo una sfilza di puntini.
Cambia pin, il GPIO3 in particolare è connesso a RX0 ovvero la seriale che viene usata per l'upload del firmware.
Il GPIO2 invece è connesso al LED builtin, in teoria non dovrebbe dare problemi, però va tenuto basso o sconnesso per entrare in flashing mode.
Puó essere che abbia problemi a collegarsi al wofi 2.4 ghz? Siccome il mio modem usa lo stesso SSID per 5ghz e 2.4 ghz. Forse è il caso di provare a creare una rete dedicata
Su questi aspetti non sono ferrato. Con un ESP-01 ho avuto dei problemi su una rete che usa sia 5Ghz che 2.4Ghz. Però non saprei se è anche il tuo problema.
aAggiornamento, il problema credo sia il modem. Perchè usando il telefono come router, inserendo SSID e password, effettivamente, il webserver funziona perfettamente e riesco anche a ricevere la lettura.
Ora ho provato ad integrare anche il secondo sensore. sono riuscito in qualche modo ad avere il responso sul seriale, ma non capisco in nessun modo come farlo scrivere nel webserver sotto i dati già presenti
La parte che aggiorna la pagina web è questa.
Verso la fine della seconda riga vedi che viene inserita la variabile distance_cm nel sorgente html della pagina. In modo analogo devi inserire anche la variabile relativa al secondo sensore.
Allora questo è il nuovo codice che attualmente, in seriale, recepisce entrambi i sensori.
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
int trigger_pin = 14;
int echo_pin = 12;
#define Liquid_Detection_Pin 27 //Output pin on sensor
// Replace with your network credentials
const char* ssid = "WifiTel";
const char* password = "12345678";
WebServer server(80);
String page = "";
int distance_cm;
void setup() {
Serial.begin(115200);
pinMode(trigger_pin, OUTPUT);
pinMode(echo_pin, INPUT);
delay(1000);
pinMode(Liquid_Detection_Pin, INPUT);
WiFi.begin(ssid, password);
Serial.println("");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", []() {
page = "<head><meta http-equiv=\"refresh\" content=\"3\"></head><center><h1>Ultasonic Water Level Monitor</h1><h3>Current water level:</h3> <h4>" + String(distance_cm) + "</head></h4></center> <center><h5>Stato dell'acquedotto:</h5> <h6>" + String("prova") + "</h6></center>";
server.send(200, "text/html", page);
});
server.begin();
Serial.println("Web server started!");
}
void loop() {
digitalWrite(trigger_pin, LOW);
delayMicroseconds(2);
digitalWrite(trigger_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trigger_pin, LOW);
long duration = pulseIn(echo_pin, HIGH);
distance_cm = (duration / 2) / 29.09;
Serial.println(distance_cm);
server.handleClient();
delay(3000);
if (digitalRead(Liquid_Detection_Pin)) {
Serial.println("Acqua da rete presente");
}
else {
Serial.println("Acqua da rete non presente");
}
delay(1000);
}
ho scritto il testo del webserver (chiaramente poi sarà da capire come migliorarlo, magari inserendo dei gauges o altro), però non capisco come scrivere la variabile.
Attualmente ho inserito string "prova" per capire se lo scriveva e lo scrive.
Ho fatto varie prove, ma come acquisire la parte dello stato testuale del (Liquid_Detection_Pin) non riesco proprio a capirlo anche perchè essendoci le due "condizioni" non ho idea di come poterlo scrivere
c'è un </head> di troppo dopo la variabile distance_cm
PPS: se arriva uno di quelli bravi con esp ti dirà che il metodo della stringona con tutta la pagina web non è il più ortodosso...se non sia molto pratico, ma mano che acquisisci confidenza magari guarda anche altri esempi
Se posso permettermi, lascia perdere fin da subito questo tipo di approccio al webserver.
Costruire di volta in volta il contenuto della pagina web lato esp32, da pessimi risultati sia dal punto di vista "prestazionale" che estetico.
Se il tuo obiettivo è quello di realizzare una webapp come mi pare di aver intuito, allora usa un approccio da webapp e questo significa che il grosso del lavoro va fatto sul frontend sfruttando le (grandi) potenzialità di HTML5, CSS e soprattutto JavaScript.
L'ESP32 offre tutti i mezzi necessari per fare un'interfaccia web funzionale, gradevole dal punto di vista estetico e con la giusta ergonomia cognitiva.
Allora così come da te indicato effettivamente il sistema restituisce 0 e 1 al cambio dello stato. Da capire però come fare a fargli scrivere invece dei testi.