MODULI DA UTILIZZARE: ESP32 HELTEC LoRa e Sensore ad ultrasuoni impermeabile JSN-SR04T ver.2/3
Moduli che utilizzo come TRASMETTITORE e RICEVITORE :
ESP32 HELTEC LoRa V2 433 Mhz OLED a 0,96"
Considerazioni personali sull'utilizzo del modulo WIFI LoRa 32(V2) che utilizzo per la trasmissione dati.
N.B. Caratteristiche elettroniche di ogni singolo Pin dell'ESP32:
Uscita 3.3 Volt e massima corrente 16 mA
· I Sensori alimentati dal modulo ESP32 - LoRa devono essere del tipo a 3.3 Vcc.
ESP32 ha 3 interfacce hardware seriali.
Per collegare es.: un GPS ad una seriale hardware del modulo WIFI LoRa 32(V2) devo definire una seriale personale,ecco perchè.
L'interfaccia seriale standard 0,collegata ai Pin GPIO3 (RX) e GPIO1 (TX), viene utilizzata per la comunicazione con l'IDE Arduino ed è permanentemente cablata al CP2102.
L'interfaccia seriale 1 dell'ESP 32 normale è collegata ai pin GPIO9 (RX) e GPIO10 (TX).
I pin GPIO9 (RX) e GPIO10 (TX) non sono presenti sul modulo WIFI LoRa 32(V2).
Sul modulo WIFI LoRa 32(V2) i Pin 9 e 10 vengono utilizzati per controllare la memoria flash e pertanto non sono accessibili.
L'interfaccia seriale 2 è normalmente collegata ai pin GPIO16 (RX) e GPIO17 (TX).
Il pin GPIO16 è collegato al ripristino del display OLED , se utilizzato in un programma il display rimane scuro
Si constata dalla figura del Pinout Diagram del modulo WIFI LoRa 32(V2) che:
i pin 4 - 15 - 16 sono utilizzati per l'OLED
Non bisogna utilizzare il controller SSD1306.
N.B. La libreria #include "heltec.h" gestisce il buon funzionamento e collegamenti :
· dei PIN della scheda LoRa
· dei Pin dell'OLED.
es.
//FILE:HELTEC_V2_GPS_13_FEBBRAIO_2023_FUNZIONANTE_CON_heltec_oled
//SCHEDA da impostare :Heltec WiFi Lora 32
// anche se è la scheda ver.2
// IDE arduino 1.8.12
#include "heltec.h"
#define BAND 433E6
#define SERIAL1_RX 2 // TX del GPS -> al PIN 2 dell'ESP32
#define SERIAL1_TX 17 // RX del GPS_-> al PIN 17 del'ESP32
Cambiano i comandi per gestire l'OLED rispetto ai comandi del controller SSD1306
....................
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
.......
Heltec.display->drawString(96,48, String(temprature));
Heltec.display->drawString(0,54, "Umidità’ %: ");
Heltec.display->drawString(96,54, String(h));
Heltec.display->display();
.............
i pin da 32 a 39 sono attivi solo come INPUT (possono essere utilizzati anche come RX)
i pin 22 - 23 - 2 - 17 - 25 - 12 - 13 sono disponibili come INPUT/OUTPUT
Bene, la soluzione al mio problema è molto semplice (momentaneamente prendo a prestito i pin 2 e 17).
In seguito utilizzerò un pin arbitrario come RX dal blocco 32-39 per avere a disposizione 7 pin come OUTPUT.
..................
#define SERIAL1_RX 2 // TX del GPS -> al PIN 2 dell'ESP32
#define SERIAL1_TX 17 // RX del GPS_-> al PIN 17 del'ESP32
.........
void setup () {
..........
Serial1.begin(9600, SERIAL_8N1, SERIAL1_RX, SERIAL1_TX);
Heltec.begin(1,1,1,1, BAND);
LoRa.setTxPower(20,RF_PACONFIG_PASELECT_PABOOST);
..............................
Definisco l'interfaccia la Serial1 con 9600 baud e 8 bit senza parità(N) più 1 bit di stop sui pin GPIO 2 (RX) e GPIO 17 (TX).
Il chip ESP32 è in grado di collegare le interfacce hardware seriali (UARTS) a quasi tutti i pin IO.
L'uso di due antenne permettono di raggiungere un range di circa 10 km.(senza ostacoli):
una GROUND PLANE omnidirezionale per il trasmettitore
una YAGI direttiva per il ricevitore
permettono di raggiungere un range di circa 10 km.(senza ostacoli)
Antenna omnidirezionale ground plane 433MHz Antenna direzionale YAGI 433MHz
Questo è un esempio.
Es.: Copertura territoriale con un Range di 7 km:
Sensore ad ultrasuoni impermeabile JSN-SR04T ver.2/3
Similitudini tra i moduli ad ultrasuoni utilizzati per le schede Arduino ed ESP32
Il modulo sensore ad ultrasuoni HC-SR04-P :
il campo di alimentazione è compreso tra 3.3v e 5v a differenza dell' HC-SR04 che è alimentato solo da 5v.
Il modulo sensore ad ultrasuoni JSN-SR04T ver.2/3:
il campo di alimentazione è compreso tra 3.3v e 5v a differenza dell' HC-SR04 che è alimentato solo da 5v.
1° TEST: Simulazione del tempo necessario al riempimento del serbatoio alla variazione della Distanza D
PROGRAMMA (Solo per verifica di funzionamento ):
/// ******* INTESTAZIONE DEL PROGRAMMA *******
//FILE:HELTEC_V2_SERBATOIO_INTERRATO_29_LUGLIO_2024
//SCHEDA da impostare :Heltec WiFi Lora 32
// anche se è la scheda ver.2
// IDE arduino 1.8.14
// ****** Dati di progetto serbatoio interrato in metri ********
float lunghezza = 15;
float larghezza = 6;
float altezza = 8;
int superficie =larghezza * lunghezza;
int volume = superficie * altezza * 1000 ;// calcolo dei litri a disposizione
int portata=10;// Portata di immissione acqua in litri al minuto
int t_r=0;// Tempo di riempimento del serbatoio
// ****** *******************************************
#include "heltec.h"
#define BAND 433E6
#include "Ultrasonic.h"
Ultrasonic ultrasonic(12,13);// 12 Trigg. e 13 Echo
float distanza;
int cont = 1;
void setup() {
Serial.begin(115200);
delay(500);
Heltec.begin(1,1,1,1, BAND);
LoRa.setTxPower(20,RF_PACONFIG_PASELECT_PABOOST);
}
// ******* Procedura calcolo della distanza **********
void loop() {
distanza=(ultrasonic.read());// distanza in centimetri
int distanza_dm=(ultrasonic.read()/10);// distanza in decimetri
int litri_riemp =((superficie*100)* distanza_dm);// Acqua da riempire in decimetri cubi
t_r =(litri_riemp)/portata;// tempo di riempimento
int ore_riemp = t_r/60;// ore per il riempimento
delay(1000);
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, "Serbatoio SANTA CROCE ");
Heltec.display->drawString(0, 10, "CAPACITA' lt. ");
Heltec.display->drawString(72, 10, String(volume));
Heltec.display->drawString(0, 20, "Dist. dm. ");
Heltec.display->drawString(42, 20, String(distanza_dm));
Heltec.display->drawString(68, 20, "Cnt.");
Heltec.display->drawString(96, 20, String(cont));
Heltec.display->drawString(0, 30, "Litri da riempire: ");
Heltec.display->drawString(76, 30, String(litri_riemp));
Heltec.display->drawString(0, 40, "T min. x riempire ");
Heltec.display->drawString(88, 40, String(t_r));
Heltec.display->drawString(0, 50, "Ore x riempire ");
Heltec.display->drawString(88, 50, String(ore_riemp));
Heltec.display->display();
//******* TRASMISSIONE DA METTERE A PUNTO ******************
LoRa.beginPacket();
LoRa.print(( "Dist. cm. ")+String(distanza)+(" "));
LoRa.println(("cont. ")+String(cont));
LoRa.println(("Litri disponibili ")+String(litri_riemp));
//LoRa.println(("Umidità % ")+String(h));
LoRa.endPacket();
//******************************************
digitalWrite(25, HIGH);
delay(400);
digitalWrite(25, LOW);
delay(400);
cont++;
}
2° TEST: Attivazione di un Rele' 3.3 Volt per l'attivazione di apertura e/o chiusura di una elettrovalvola a 12 Volt
PROGRAMMA:
IL RELE'
Il relè è un dispositivo elettromeccanico costituito da:
una sezione COMANDO (Circuito di eccitazione di tipo elettrico - BOBINA)
una sezione di POTENZA(Circuito di commutazione di tipo meccanico - Ancora e contatti fissi e mobili)
Prima di iniziare ad utilizzare un relè bisogna individuare:
I capi della bobina (VCC e GND)
Il contatto mobile (COM) - Collegare il (positivo + 3- 24 Volt )
N.B. se si utilizza corrente alternata 240 volt al COM va collegato il "filo" della FASE
Il contatto chiuso (NC)
Il contatto aperto (ON)
3° TEST: Rilevare la portata d'acqua nel serbatoio di accumulo
PROGRAMMA:
4° TEST: Programma completo
PROGRAMMI di supporto VEDERE LINK: Portata della Fonte del Capriolo ESP8266_Portata acqua rubinetto di casa