Vediamo come realizzare un Meter shield per Wemos D1 mini, lo shield una volta collegato alla scheda Wemos D1 Mini o Wemos Pro permette di visualizzare su un piccolo display OLED la misura delle distanza in cm (sensore sonar tipo HC-SR04) che separa il sensore dall’oggetto posto frontalmente al sensore.
Il PCB è stato progettato con il programma online EasyEDA, mentre stata realizzata tramite il servizio offerto dal sito JLCPCB.
Sito online per creazioni schemi e PCB | Sito produzione PCB |
Indice
Descrizione
Il sensore utilizzato è di tipo sonar ad ultrasuoni tipo HC-SR04 il quale non misura direttamente la distanza, ma fornisce il tempo impiegato da segnale sonoro per raggiungere un ostacolo e ritornare di nuovo al sensore. In base al tempo viene calcolata la distanza.
Il circuito è il PCB è stato realizzato con il programma online EasyEDA
Ecco i componenti necessari
- Scheda Wemos D1 mini – utilizzata per gestire il circuito
- Sensore ad ultrasuoni HC-SR04
- Display OLED
- 2 resistenze 2,2kΩ e 4,7kΩ per partitore di tensione
- pinstrip
Fasi della realizzazione
- Progettazione dello shield;
- Montaggio dello shield
- Test dello shield montato.
Filmato illustrativo
Modulo WeMos D1 mini
Il Modulo WeMos D1 mini è basato sul microcontrollore Wi-Fi ESP8266 ESP-12F che può essere programmato utilizzando l’IDE di Arduino oppure NodeMCU.
La semplicità della programmazione che può essere effettuata anche in modalità wireless e l’ampia disponibilità di shield aggiuntivi permettono di sviluppare il proprio progetto di “Internet delle cose” in tempi estremamente rapidi.
Il modulo WeMos D1 mini è dotato di una interfaccia USB realizzata tramite il convertitore seriale-USB CH340.
Dal connettore USB viene anche prelevata l’alimentazione a 5V, un regolatore interno (tipo RT9013) si occupa di generare l’alimentazione a 3,3V per il modulo ESP-12F.
Per evitare confusione tutti i pin di I/O sono chiaramente etichettati.
Nota: Tutti gli I/O supportano una tensione massima di 3,3V
Specifiche tecniche
-
11 I/O digitali, tutti i pin sono provvisti di interrupt e supportano PWM, I2C , One-Wire (D1-SCL-D2 -SDA)
-
1 Pin analogico (tensione massima di ingresso 3.2V)
-
Connessione Micro USB
-
Compatibile con Arduino e con nodemcu
-
Dimensioni (mm): 28x24x18
Interfaccia I2C
Il collegamento tramite interfaccia I2C può essere utilizzato per connettere fino a 127 nodi tramite un bus che richiede solo due cavi dati, noti come SDA e SCL.
-
SDA => D2.
-
SCL => D1
Interfaccia SPI
Il collegamento SPI è molto più semplice di I2C. Master e slave sono collegati da tre fili di dati, solitamente chiamati MISO, (Master in, Slave out), MOSI (Master out, Slave in) e M-CLK.
-
M-CLK => D5
-
MISO => D6
-
MOSI => D7
(SPI Bus SS (CS) è D8.)
Pinout Completo
Pin | Function | ESP-8266 Pin |
---|---|---|
TX | TXD | TXD |
RX | RXD | RXD |
A0 | Analog input-max 3.3V input | A0 |
D0 | IO | GPIO16 |
D1 | IO-SCL | GPIO5 |
D2 | IO-SDA | GPIO4 |
D3 | IO-10k Pull-up | GPIO0 |
D4 | IO-10k Pull-up-BUILTIN_LED | GPIO2 |
D5 | IO-SCK | GPIO14 |
D6 | IO-MISO | GPIO12 |
D7 | IO-MOSI | GPIO13 |
D8 | IO-10k Pull-down-SS | GPIO15 |
G | Ground | GND |
5V | 5V | 5V |
3V3 | 3.3V | 3.3V |
RST | Reset | RST |
Foto del modulo
Sensore ad ultrasuoni HC-SR04
Il sensore ad ultrasuoni HC-SR04 ha un campo di misura che si estende da due centimetri a quatto metri e la precisione arriva a 1 cm.Il modulo comprende il trasmettitore a ultrasuoni, il ricevitore e il circuito di controllo.
Questi sensori ad ultrasuoni non misurano direttamente la distanza, ma forniscono il tempo impiegato da un segnale sonoro per raggiungere un ostacolo e ritornare di nuovo al sensore.
Quando Arduino setta a 1 il Pin Trigger, il sensore invia 8 impulsi ad ultrasuoni. Quando questi poi sono ricevuti, il sensore setta a 1 il pin Echo, viene quindi misurato il tempo che passa tra lattivazione del pin Trigger ed il settaggio del pin Echo. Infine, nota la velocità del suono, converte il tempo misurato in una lunghezza e ricava quindi la distanza dell’ostacolo.
Caratteristiche
Tensione di alimentazione | 5V |
Frequenza ultrasuoni | 40 kHz |
Distanza massima di lettura | 400 cm |
Distanza minima di lettura | 2 cm |
Risoluzione | 1 cm |
Angolo di misura: | < 30° |
Dimensioni | 43x20x15 millimetri |
Dove trovare il sensore Sonar HC-SR04
Il sensore Sonar HC-SR04 può essere acquistato presso il sito FUTURA ELETTRONICA. Il codice prodotto è 2846-MISDIST04.
Il sensore singolo può essere trovato anche sul sito TechMaker, il codice prodotto è SE482050, ricordate di inserire il codice “ADRIROBOT” per ottenere uno sconto del 3%.
Display monocromo OLED 0,49″risoluzione 64×32
Questo display monocromo OLED presenta una diagonale di 0,49″ e una risoluzione di 64×32 singoli pixel bianchi OLED.
Ciascuno è acceso o spento dal chip controller, in questo caso non è richiesta alcuna retroilluminazione e questo riduce l’assorbimento di potenza necessaria.
L’integrato pilota è il modello SSD1306 (datasheet) che è un single-chip CMOS driver. L’integrato comunica tramite il protocollo I2C, sono necessari solo 2 pin, linea dati / clock. È disponibile per Arduino IDE l’apposita libreria. Per altre informazioni ed esempi di utilizzo vedere la pagina dedicata.
Caratteristiche
Dimensioni: | |
PCB : | 15 x 16 mm |
Area di visualizzazione : | ~ 6 x 12mm |
Spessore : | 4mm |
Alimentazione | 3.0-5.5V |
Dettagli del display: | |
Diagonale del monitor : | 0.49 " |
Numero di pixel : | 64 ? 32 |
Profondità colore : | Monocromatico (Bianco-Blu) |
Modulo di costruzione : | COG |
Interfaccia: | I2C (High Level 2.2V-5.5V) |
Indirizzo I2C: | 7 bit 0x3 |
Librerie per gestione display OLED
Prima di utilizzare il display OLED è necessario installare le librerie Adafruit SSD1306, in questo caso opportunamente modificate per adattarsi alla ridotta risoluzione.
Per cui occorre scaricare la libreria di supporto presente su GitHub, oppure fare clic su questo link per scaricare il file zip.
Per il giusto funzionamento del display, occorrerà modificare o verificare che all’interno del file Adafruit_SSD1306.h della libreria, la linea che definisce la dimensione del display, l’unica linea senza commento, sia quella #define SSD1306_64_32
1 2 3 4 | // #define SSD1306_128_64 // #define SSD1306_128_32 // #define SSD1306_96_16 #define SSD1306_64_32 |
per gestire la parte grafica del modulo occorre inoltre scaricare le librerie grafiche Adafruit-GFX-Library presenti su GitHub, oppure fare clic su questo link per scaricare il file zip.
Progettazione dello shield
Per la progettazione del circuito del Wemos D1 – mini meter shield, si è scelto un tool EDA, Electronic Design Automation online gratuito chiamato EasyEDA, maggiori informazioni in questo articolo.
il programma non richiede alcuna installazione in quanto basato sul cloud; è stato progettato per fornire ad ingegneri elettronici, insegnanti, studenti di ingegneria e hobbisti, un facile strumento di lavoro.
Il programma permette di disegnare e simulare circuiti, è facile da usare e consente altresì, il disegno di circuiti stampati, direttamente dal proprio browser.
All’interno dell’Editor sono presenti un gran numero di librerie di componenti, in modo da poter facilmente e rapidamente trovare le parti desiderate.
Il sito offre anche un servizio di alta qualità ma a basso costo per la realizzazione di PCB personalizzati.
È possibile accedere allo schema attraverso questo link
Schema di collegamento con scheda Wemos D1 Mini
Schema di collegamento con display OLED
Sensore Sonar, dettaglio schema di collegamento con
Test preliminare del progetto
Prima di realizzare il circuito stampato il progetto è stato testato su breadboard, per cui i vari componenti sono stati montati come in figura
Come saprete, i pin digitali della scheda Wemos D1 Mini non sono adatti a ricevere segnali con una tensione superiore a 3,3V, dato che il sensore ad ultrasuoni HC-SR04 funziona a 5V anche i suoi segnali in uscita saranno a questo valore massimo.
Nel nostro circuito si è scelto di utilizzare i seguenti valori standard. come valore di R1=2,2 kΩ per R2 un valore di 4,7 kΩ, da cui applicando le formula si avrà che la tensione in uscita sarà di circa 3,4 V, la piccola differenza è ancora tollerabile.
Studio del PCB con il programma EasyEDA
PCB lato TOP SIDE
PCB lato BOTTOM SIDE
Dopo aver completo la progettazione del PCB, è possibile fare clic sull’icona PCB order.
in questa pagina è possibile scaricare file Gerber del vostro PCB e inviarli a qualsiasi produttore, oppure ancora più facile (e meno costoso) ordinarlo direttamente al servizio offerto dal sito JLCPCB
Qui è possibile selezionare il numero di PCB che volete ordinare, personalizzando eventualmente il vostro ordine, come eventualmente variare il colore del PCB. Dopo aver selezionato tutte le opzioni, si farà clic su “Salva nel carrello” e si completerà l’ordine, in questo modo si riceveranno i PCB pochi giorni dopo, nel caso si utilizzi il corriere.
Per altre informazioni su come realizzare un PCB vedere la seguente pagina
Ecco i PCB pronti per il montaggio
Montaggio dello shield
Vediamo sotto le varie fasi del montaggio dello shield che è limitato alle pin strip e alle due resistenze del partitore
Test dello shield montato
Per il test del Wemos D1 meter shield, occorrerà ora collegare la scheda appena realizzata al PC e scaricare il programma (scaricabile da questo link) sul WEMOS D1 mini ed eseguirlo.
Se si desidera, è possibile clonare lo schema Wemos D1 meter shield del PCB, questo è possibile da questo link.
Download Sketch
Sketch testato con versione IDE 1.8.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #define echoPin D8 // Echo Pin #define trigPin D3 // Trigger Pin long duration, distance; // Duration used to calculate distance #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 0 // GPIO0 Adafruit_SSD1306 display(OLED_RESET); //Definizione pin acui è collegato il sonar #define echoPin D8 // Echo Pin #define trigPin D3 // Trigger Pin void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // Impostazione modulo display con indirizzo I2C addr 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Cancellazione schermo e buffer display.clearDisplay(); // Messaggio iniziale display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.println(" ADRIROBOT"); display.setTextColor(BLACK, WHITE); // Inverte il colore del testo display.println(" SONAR "); display.println(" METER "); display.display(); delay(2000); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Value"); display.display(); } void loop() { /* The following trigPin/echoPin cycle is used to determine the distance of the nearest object by bouncing soundwaves off of it. */ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //Calculate the distance (in cm) based on the speed of sound. distance = duration / 58.2; Serial.println(distance); display.fillRect(0, 18, 64, 15, BLACK); display.setCursor(0, 18); display.print(distance); display.println(" cm"); display.display(); //Delay 50ms before next reading. delay(50); } |