Dopo aver configurato l’ambiente Arduino IDE per la scheda Seeeduino XIAO nell’articolo precedente
Seeeduino XIAO – Ambiente Arduino
in questo faremo un piccolo esempio con tale scheda.
Nel piccolo progetto vengono usati come componenti
- Sensore ad ultrasuoni HC-SR04
- Schermo Oled 0,96 pollici SSD1306 I2C
Come prima operazione occorre installare le librerie dei due componenti sopra elencati su Arduino.
Si accede al menù Sketch->Include Libreria->Gestione librerie
Per HCSR04 scegliamo HCSR04 by Martin Sosic
Per SSD1306 scegliamo ACROBOTIC SSD1306
Ora abbiamo tutti i compomenti per il progetto. Colleghiamo allo Seeeduino XIAO i componenti come elencato nella tabella seguente
PIN XIAO | PIN SSD1306 | PIN HCSR04 |
---|---|---|
3V3 | VDD | |
GND | GND | GND |
5V | VCC | |
D2 | ECHO | |
D1 | TRIG | |
D5 | SCK | |
D4 | SDA |
Come si evince dalla tabella si utilizzano i pin I2C e digitali 1,2 dello XIAO
Di seguito lo schema dei collegamenti
Il codice per il funzionamento dell’esempio è il seguente
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
//Include la libreria HCSR04 #include <HCSR04.h> //Include la libreria Wire #include <Wire.h> //Include la libreria Oled SSD1306 #include <ACROBOTIC_SSD1306.h> //Variabili per salvare la distanza dell'oggetto, distanza, e la misura iniziale: distanza0 float distanza, distanza0; //Variabile per salvare la stringa da mostrare sullo schermo Oled char misura[10]; //Se la differenza tra distanza e distanza0 è maggiore della soglia errore //la nuova distanza e un messaggio di avvertimento è mostrato sullo schermo const float errore=20.0; //Inizializza il sensore ad ultrasuoni //XIAO D1-> HCSR04 Trig //XIAO D2-> HCSR04 Echo UltraSonicDistanceSensor distanceSensor(1, 2); //Mostra i messaggi sull'Oled void displayMessage() { //Imposta la posizione del cursore, linea 4 carattere 0 oled.setTextXY(4,0); //Mostra la misura oled.putString(misura); //Imposta la posizione del cursore, linea 6 carattere 0 oled.setTextXY(6,0); //Mostra il messaggio di Avvertimento oled.putString("OGG. RILEVATO"); } void setup() { //Inizializza la porta seriale per mandare messaggi Serial.begin(9600); //Inizializza la libreria Wire e si collega al bus I2C come master o slave Wire.begin(); //Inizializza lo schermo Oled SSD1306 oled.init(); //Ripulisce lo schermo oled.clearDisplay(); //Imposta la posizione del cursore alla linea 0 carattere 0 oled.setTextXY(0,0); //Mostra un messaggio di Intestazione oled.putString("RILEVAMENTO"); //Imposta il cursore alla linea 1 carattere 0 oled.setTextXY(1,0); //Mostra un messaggio di Intestazione oled.putString("OGGETTI"); //All'avvio misura la distanza in cm senza l'intrusione di oggetti distanza0=distanceSensor.measureDistanceCm(); //Ripulisce il contenuto di misura memset(misura,'\0',sizeof(misura)); //Invia i dati da mostrare alla stringa misura sprintf(misura, "D in cm: %.2f", distanza0); //Imposta il cursore alla linea 4 carattere 0 oled.setTextXY(4,0); //Mostra la misura sull'Oled oled.putString(misura); } void loop() { //Misura la distanza in cm nel campo di visione del sensore ultrasonico distanza=distanceSensor.measureDistanceCm(); //Invia la misura sulla porta seriale Arduino Serial.println(distanza); //Ripulisce in contenuto di misura memset(misura,'\0',sizeof(misura)); //Invia i dati da mostrare alla stringa misura sprintf(misura, "D in cm: %.2f", distanza); //Aspetta 550 millisecondi delay(500); //Se la nuova misura differisce da quella iniziale di un quantita superiore a quanto definito nella //variabile errore, la nuova misura è mostrata sullo schermo Oled con un messaggio di avvertimento if(abs(distanza-distanza0)>errore) { //Mostra il contenuto di misura sull'Oled displayMessage(); } } |
Alla presenza del passaggio di un oggetto nel campo visivo del sensore, l’evento viene segnalato sullo schermo OLED con la misura registrata. All’interno del codice vi è la descrizione di tutte le operazioni eseguite.
Di seguito il link al file del codice