Wemos D1 mini meter shield

ultimo aggiornamento 29 luglio 2018


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 che separa il sensore dall'oggetto posto frontalmente al sensore.
Il sensore utilizzato è di tipo sonar ad ultrasuoni 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. Ecco i componenti necessari:

Fasi della realizzazione

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

homotix

PCBA

OurPCB

Specifiche tecniche

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.

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.

(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

Bustina antistatica contenente il modulo

Contenuto della bustina antistatica

Modulo con connettori scelti per il montaggio

Modulo con connettori montati

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 l’attivazione 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.

Link Utili

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

Foto del sensore

Display monocromo OLED 0,49"risoluzione 64x32

Questo display monocromo OLED commercializzato dalla ICStation con il codice 10786, presenta una diagonale di 0,49" e una risoluzione di 64x32 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  per display tipo OLED / PLED (Organic Light Emitting Diode, Polymer light-emitting diodes).
L'integrato comunica tramite il protocollo I2C, sono necessari solo 2 pin, linea dati / clock. Per l'utilizzo è necessario un microcontrollore con più di 512 byte di RAM in quanto il display deve essere tamponato.
È disponibile per Arduino IDE l'apposita libreria; questa permette di stampare testo, bitmap , pixel , rettangoli, cerchi e linee . Essa utilizza 512 byte di RAM in quanto ha bisogno di tamponare l'intero schermo ma è molto veloce! 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

Per 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

// #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, si è scelto un tool EDA, Electronic Design Automation online gratuito chiamato EasyEDA.

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

Dettaglio schema di collegamento con scheda Wemos D1 Mini

Dettaglio schema di collegamento con display OLED

Dettaglio schema di collegamento con sensore Sonar

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,2kΩ per R2 un valore di 4,7kΩ, 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

Anteprima del PCB lato TOP SIDE

Anteprima del 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

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 dello Shield e del PCB, questo è possibile da questo link.


sketch "Wemos D1 mini meter shield.ino"

Sketch testato con versione IDE 1.8.5

/*####################################################################
  FILE: Wemos D1 mini meter shield.ino
  VERSION: 1.0
  Descrizione: Programma per gestione metro sonar con Wemos D1 mini

  Creato il 29/7/2018 da Adriano Gandolfo
  Sito web http://www.adrirobot.it
  Blog http://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
  #################################################################### */


#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 a cui è collegato il sonar
#define echoPin D8 // Echo Pin
#define trigPin D3 // Trigger Pin
long duration, distance; // Duration used to calculate distance

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);
}

 

Elenco revisioni:

29/07/2018

Emissione preliminare
Private Policy Cookie Policy Termini e Condizioni