Nota
Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Immergiti più a fondo in Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime esclusive.
Sconti speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
3.1.3 Allarme di Retromarcia
Introduzione
In questo progetto, utilizzeremo un display LCD, un buzzer e dei sensori a ultrasuoni per realizzare un sistema di assistenza alla retromarcia. Potremo montarlo su un veicolo telecomandato per simulare il processo reale di retromarcia nel garage.
Componenti necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTE |
LINK PER L’ACQUISTO |
|---|---|
- |
|
Schema elettrico
Il sensore a ultrasuoni rileva la distanza tra sé e l’ostacolo, che verrà visualizzata sull’LCD in forma numerica. Allo stesso tempo, il sensore a ultrasuoni farà emettere al buzzer un segnale acustico di diversa frequenza in base al valore della distanza rilevata.
T-Board Name |
physical |
wiringPi |
BCM |
GPIO23 |
Pin 16 |
4 |
23 |
GPIO24 |
Pin 18 |
5 |
24 |
GPIO17 |
Pin 11 |
0 |
17 |
SDA1 |
Pin 3 |
||
SCL1 |
Pin 5 |
Procedure sperimentali
Passo 1: Costruisci il circuito.
Passo 2: Vai alla cartella del codice.
cd ~/raphael-kit/c/3.1.3/
Passo 3: Compila il codice.
gcc 3.1.3_ReversingAlarm.c -lwiringPi
Passo 4: Esegui il file eseguibile.
sudo ./a.out
Una volta eseguito il codice, il modulo sensore a ultrasuoni rileverà la distanza dall’ostacolo e visualizzerà le informazioni sulla distanza sull’LCD1602; inoltre, il buzzer emetterà un tono di avviso la cui frequenza varierà in base alla distanza.
Nota
Se viene visualizzato un messaggio di errore
wiringPi.h: No such file or directory, consulta Installazione e verifica di WiringPi.Se viene visualizzato l’errore
Unable to open I2C device: No such file or directory, consulta Configurazione I²C per abilitare l’I2C e verifica che il cablaggio sia corretto.Se il codice e il cablaggio sono corretti, ma l’LCD non visualizza ancora contenuti, prova a ruotare il potenziometro sul retro per aumentare il contrasto.
Codice
Nota
I seguenti codici sono incompleti. Se desideri controllare il codice completo, ti consigliamo di usare il comando nano 3.1.1_ReversingAlarm.c.
#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <string.h>
#define Trig 4
#define Echo 5
#define Buzzer 0
int LCDAddr = 0x27;
int BLEN = 1;
int fd;
//Funzione per il controllo dell'LCD
void write_word(int data){...}
void send_command(int comm){...}
void send_data(int data){...}
void lcdInit(){...}
void clear(){...}
void write(int x, int y, char data[]){...}
//Funzione per il sensore a ultrasuoni
void ultraInit(void){...}
float disMeasure(void){...}
//Funzione principale
int main(void)
{
float dis;
char result[10];
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
}
pinMode(Buzzer,OUTPUT);
fd = wiringPiI2CSetup(LCDAddr);
lcdInit();
ultraInit();
clear();
write(0, 0, "Ultrasonic Starting");
write(1, 1, "By Sunfounder");
while(1){
dis = disMeasure();
printf("%.2f cm \n",dis);
digitalWrite(Buzzer,LOW);
if (dis > 400){
clear();
write(0, 0, "Error");
write(3, 1, "Out of range");
delay(500);
}
else
{
clear();
write(0, 0, "Distance is");
sprintf(result,"%.2f cm",dis);
write(5, 1, result);
if(dis>=50)
{delay(500);}
else if(dis<50 & dis>20) {
for(int i=0;i<2;i++){
digitalWrite(Buzzer,HIGH);
delay(50);
digitalWrite(Buzzer,LOW);
delay(200);
}
}
else if(dis<=20){
for(int i=0;i<5;i++){
digitalWrite(Buzzer,HIGH);
delay(50);
digitalWrite(Buzzer,LOW);
delay(50);
}
}
}
}
return 0;
}
Spiegazione del Codice
pinMode(Buzzer,OUTPUT);
fd = wiringPiI2CSetup(LCDAddr);
lcdInit();
ultraInit();
In questo programma, applichiamo componenti già utilizzati in precedenza. Qui usiamo buzzer, LCD e ultrasuoni. Li inizializziamo nello stesso modo in cui abbiamo fatto in precedenza.
dis = disMeasure();
printf("%.2f cm \n",dis);
digitalWrite(Buzzer,LOW);
if (dis > 400){
write(0, 0, "Error");
write(3, 1, "Out of range");
}
else
{
write(0, 0, "Distance is");
sprintf(result,"%.2f cm",dis);
write(5, 1, result);
}
Otteniamo il valore del sensore a ultrasuoni e calcoliamo la distanza.
Se il valore della distanza è maggiore del valore massimo rilevabile, un messaggio di errore viene visualizzato sull’LCD. Se invece la distanza è all’interno del range, i risultati corrispondenti verranno visualizzati.
sprintf(result,"%.2f cm",dis);
Poiché l’LCD supporta solo l’output di tipo carattere e la variabile dis memorizza il valore di tipo float, utilizziamo sprintf(). La funzione converte il valore di tipo float in un carattere e lo memorizza nella variabile stringa result[]. %.2f significa mantenere due cifre decimali.
if(dis>=50)
{delay(500);}
else if(dis<50 & dis>20) {
for(int i=0;i<2;i++){
digitalWrite(Buzzer,HIGH);
delay(50);
digitalWrite(Buzzer,LOW);
delay(200);
}
}
else if(dis<=20){
for(int i=0;i<5;i++){
digitalWrite(Buzzer,HIGH);
delay(50);
digitalWrite(Buzzer,LOW);
delay(50);
}
}
Questa condizione di giudizio viene utilizzata per controllare il suono del buzzer. In base alla differenza di distanza, il tono varia in tre diversi casi, con diverse frequenze. Poiché il valore totale del delay è 500ms, tutti i casi forniscono un intervallo di 500ms per il sensore a ultrasuoni.
Immagine del Fenomeno