Nota
Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme agli altri appassionati.
Perché unirti a noi?
Supporto esperto: Risolvi problemi post-vendita e 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.
Sconti speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a omaggi e promozioni speciali per le festività.
👉 Sei 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 LCD, un cicalino e sensori a ultrasuoni per realizzare un sistema di assistenza alla retromarcia. Possiamo installarlo su un veicolo telecomandato per simulare il processo reale di retromarcia in un garage.
Componenti necessari
In questo progetto avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistare i componenti separatamente dai link qui sotto.
INTRODUZIONE COMPONENTI |
LINK DI ACQUISTO |
|---|---|
- |
|
Schema elettrico
Il sensore a ultrasuoni rileva la distanza tra sé e l’ostacolo, che verrà visualizzata sullo schermo LCD in codice. Allo stesso tempo, il sensore a ultrasuoni farà emettere al cicalino un suono di avvertimento con frequenza variabile in base al valore della distanza.
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 |
Procedura sperimentale
Passo 1: Costruisci il circuito.
Passo 2: Cambia directory.
cd ~/raphael-kit/c/3.1.3/
Passo 3: Compila.
gcc 3.1.3_ReversingAlarm.c -lwiringPi
Passo 4: Esegui.
sudo ./a.out
Quando il codice viene eseguito, il modulo sensore a ultrasuoni rileva la distanza dall’ostacolo e quindi visualizza le informazioni sulla distanza sull’LCD1602; inoltre, il cicalino emette un tono di avvertimento la cui frequenza cambia in base alla distanza.
Nota
Se appare un errore come
wiringPi.h: Nessun file o directory, fai riferimento a Installa e Controlla wiringPi.Se ottieni l’errore
Unable to open I2C device: No such file or directory, devi fare riferimento a Configurazione I²C per abilitare I2C e controllare se i collegamenti sono corretti.Se il codice e i collegamenti sono corretti, ma l’LCD non mostra ancora contenuti, puoi regolare il contrasto tramite il potenziometro sul retro.
Codice
Nota
I seguenti codici sono incompleti. Se desideri controllare i codici completi, ti consigliamo di utilizzare 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 l'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 i componenti utilizzati in precedenza. Qui utilizziamo cicalini, LCD e ultrasuoni. Li inizializziamo come 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);
}
Qui otteniamo il valore del sensore a ultrasuoni e calcoliamo la distanza.
Se il valore della distanza è superiore al valore di portata da rilevare, viene stampato un messaggio di errore sullo schermo LCD. E se il valore della distanza è all’interno della portata, verranno visualizzati i risultati corrispondenti.
sprintf(result,"%.2f cm",dis);
Poiché la modalità di output dell’LCD supporta solo il tipo carattere, e la variabile dis memorizza un valore di tipo float, dobbiamo usare sprintf(). Questa funzione converte il valore float in caratteri 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 controllo viene utilizzata per regolare il suono del cicalino. In base alla distanza, può essere suddiviso in tre casi, ognuno dei quali genererà frequenze sonore diverse. Poiché il valore totale di delay è 500, tutti i casi forniscono un intervallo di 500 ms per il sensore a ultrasuoni.
Immagine del Fenomeno