Codice Arduino e video per il modulo di distanza IR Sharp con LCD1602 e modulo I2C

Codice Arduino e video per il modulo di distanza IR Sharp con LCD1602 e modulo I2C

Questa guida al progetto ti accompagnerà passo dopo passo nella realizzazione di un sistema di misurazione della distanza semplice ma efficace, utilizzando un sensore di distanza Sharp a infrarossi (IR) e un display LCD1602. Questa configurazione ti permette di misurare con precisione distanze entro un intervallo specifico e di visualizzarle direttamente su uno schermo, rendendola ideale per varie applicazioni di elettronica fai-da-te.

Sharpt IR distance sensor

Esempi pratici d'uso e idee di progetto per questo sistema includono:

  • Costruire un sistema di assistenza automatica al parcheggio per prevenire danni al paraurti.
  • Realizzare un semplice sensore di livello dell'acqua per serbatoi o pozzi.
  • Sviluppo di un erogatore di liquidi senza contatto.
  • Implementare un allarme di sicurezza di base mediante il rilevamento della prossimità.
  • Creare un indicatore del livello di riempimento per tramogge o contenitori.
  • Progettare un sistema di evitamento delle collisioni per piccoli robot o veicoli radiocomandati.

Hardware/Componenti

Per completare questo progetto, avrai bisogno dei seguenti componenti:

  • Scheda Arduino Uno o scheda compatibile
  • Sensore di distanza a infrarossi Sharp (modello GP2Y0A41SK0F, misura da 4 a 30 cm)
  • LCD1602 con modulo I2C (per un cablaggio più semplice)
  • Breadboard (opzionale, per il prototipaggio)
  • Cavi jumper
  • Cavo USB per alimentazione e programmazione di Arduino

Guida al cablaggio

Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

Collegare il sensore Sharp IR e il display LCD1602 con modulo I2C al tuo Arduino è semplice, grazie al modulo I2C che riduce il numero di fili necessari per il display.

Il sensore IR Sharp ha tre fili: rosso (5V), nero (GND) e giallo (uscita). Collega il filo rosso al pin 5V dell'Arduino, il filo nero a qualsiasi pin GND dell'Arduino e il filo giallo di uscita al pin analogico A0 dell'Arduino (nel video a 03:55).

L'LCD1602 con modulo I2C ha quattro fili: VCC, GND, SDA e SCL. Collega il pin VCC al 5V dell'Arduino e il pin GND al GND dell'Arduino. Il filo SDA (Serial Data Line) va collegato al pin analogico A4 dell'Arduino, e il filo SCL (Serial Clock Line) va collegato al pin analogico A5 dell'Arduino (nel video a 02:42).

Spiegazione del codice

Il codice Arduino fornito utilizza due librerie principali:Wire.hper la comunicazione I2C eLiquidCrystal_I2C.hper controllare l'LCD, eSharpIR.hper il sensore Sharp IR. Le parti del codice configurabili dall'utente sono principalmente relative alla definizione del sensore e all'inizializzazione del display LCD.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

La lineaLiquidCrystal_I2C lcd(0x27, 16, 2);inizializza l'oggetto LCD. Il primo parametro,0x27(nel video al 03:26), è l'indirizzo I2C predefinito per la maggior parte dei moduli LCD I2C basati su PCF8574. Se il tuo LCD non funziona, potresti dover trovare il suo indirizzo corretto (alternative comuni sono0x3F). Il secondo parametro,16, specifica che il tuo LCD ha 16 caratteri per riga, e il terzo parametro,2, indica che ha 2 righe.

#include <SharpIR.h>

#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
 * GP2Y0A02YK0F --> "20150"
 GP2Y0A21YK --> "1080"
 GP2Y0A710K0F --> "100500"
  GP2YA41SK0F --> "430"
 */

SharpIR SharpIR(IR, model);

Queste righe configurano il sensore IR Sharp.#define IR A0definisce il pin analogico di Arduino a cui è collegato il cavo di uscita del sensore IR Sharp.#define model 430(nel video a 04:27) è cruciale poiché specifica il modello esatto del tuo sensore Sharp IR. La libreria usa questo numero di modello per applicare la corretta conversione matematica dall'uscita di tensione analogica del sensore a una distanza in centimetri. Il blocco di commento elenca vari modelli Sharp IR e i loro corrispondenti valori interi che dovrebbero essere usati qui. Ad esempio, se stai usando un GP2Y0A21YK, dovresti cambiare430a1080.

void setup()
{
  lcd.begin();
  lcd.backlight();
}

Nelsetup()funzione,lcd.begin()inizializza il display LCD, elcd.backlight()accende la retroilluminazione, rendendo visibile il display.

void loop()
{
  lcd.clear();
  lcd.print("Robojax IR Test");
  lcd.setCursor (0,1); // go to start of 2nd line
  int dis=SharpIR.distance();// gets the distance in cm
  String distance = String(dis);
  distance ="Distance: "+distance+"cm";
  lcd.print(distance);
  delay(500);
}

All'interno delloop()funzione:

  • lcd.clear();cancella qualsiasi testo precedente sul display.
  • lcd.print("Robojax IR Test");stampa un messaggio statico sulla prima riga.
  • lcd.setCursor (0,1);sposta il cursore all'inizio della seconda riga (0 è la prima colonna, 1 è la seconda riga, poiché le righe sono indicizzate a 0).
  • int dis=SharpIR.distance();chiama ildistance()funzione della libreria SharpIR per leggere il valore del sensore e convertirlo in un intero che rappresenta la distanza in centimetri (nel video a 05:06). Questa è la funzione principale per ottenere la misura.
  • String distance = String(dis);converte la distanza intera in una stringa, poiché non è possibile concatenare direttamente interi e stringhe per la stampa.
  • distance ="Distance: "+distance+"cm";formatta la stringa in modo che includa "Distanza: " prima del valore e "cm" dopo.
  • lcd.print(distance);visualizza la stringa di distanza formattata sul display LCD.
  • delay(500);introduce una pausa di 500 millisecondi (nel video a 06:00). Questa pausa è importante per la precisione e la stabilità del sensore Sharp. È possibile regolare questo valore: aumentarlo potrebbe migliorare la precisione ma rallentare gli aggiornamenti, mentre diminuirlo velocizzerà gli aggiornamenti ma potrebbe ridurre la precisione.

Progetto/Dimostrazione dal vivo

Una volta che i componenti sono collegati e il codice caricato sul tuo Arduino, il sistema inizierà a misurare e visualizzare le distanze. Il progetto dimostra misurazioni accurate a distanze ravvicinate; per esempio mostra 12 cm quando l'oggetto è a 12 cm (nel video a 00:31) e 10 cm per 10 cm (nel video a 00:37).

Tuttavia, man mano che l'oggetto si allontana, specialmente oltre i 15-20 cm, la precisione può diminuire. Per esempio, a 20 cm il display potrebbe indicare 21 cm (nel video alle 07:06), e a 25 cm potrebbe segnare 28 o 29 cm (nel video alle 07:32). Questo comportamento è caratteristico di questi sensori a infrarossi. Il sensore Sharp IR fornisce una tensione analogica che varia con la distanza: all'aumentare della distanza, la tensione di uscita diminuisce (nel video alle 07:56).

La relazione tra distanza e uscita di tensione non è lineare, specialmente agli estremi dell'intervallo del sensore. Questa non linearità è il motivo per cui la libreria `SharpIR` risulta utile, poiché contiene dati di calibrazione per convertire queste tensioni variabili in letture di distanza più accurate. Per applicazioni che richiedono maggiore precisione a distanze maggiori, potrebbe essere necessario scegliere un modello Sharp IR diverso progettato per quelle distanze o implementare curve di calibrazione personalizzate.

Capitoli

  • [00:06] Introduzione e panoramica del progetto
  • [01:10] Dettagli e pinout del sensore Sharp a infrarossi
  • [02:09] Cablaggio del modulo LCD I2C
  • [02:58] Spiegazione del codice Arduino
  • [06:36] Dimostrazione sulla misurazione della distanza
  • [07:47] Caratteristiche del sensore e limiti di accuratezza
  • [08:48] Conclusioni e risorse

Immagini

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602
70-This is the Arduino code and video for a Sharp Infrared Sensor Module with LCD1602 and I2C.
Lingua: C++
Copia!

Cose di cui potresti avere bisogno

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Librerie Arduino (zip)

File Fritzing