.. note::
Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.
**Pourquoi nous rejoindre ?**
- **Support d'experts** : Résolvez les problèmes après-vente et relevez vos défis techniques grâce à l'aide de notre communauté et de notre équipe.
- **Apprenez et Partagez** : Échangez des astuces et des tutoriels pour perfectionner vos compétences.
- **Aperçus exclusifs** : Bénéficiez d'un accès anticipé aux nouvelles annonces de produits et aux avant-premières.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos nouveaux produits.
- **Promotions festives et concours** : Participez à des concours et à des promotions lors des fêtes.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui !
3.1.3 Alarme de Recul
=====================
Introduction
--------------
Dans ce projet, nous allons utiliser un écran LCD, un buzzer et des capteurs ultrasoniques pour réaliser un système d'aide au recul. Nous pourrons l'installer sur un véhicule téléguidé pour simuler le processus réel de marche arrière d'une voiture dans un garage.
Composants
------------
.. image:: img/list_Reversing_Alarm.png
:align: center
Schéma de câblage
-----------------------
Le capteur ultrasonique détecte la distance entre lui-même et l'obstacle, qui
sera affichée sur le LCD sous forme de code. En même temps, le capteur ultrasonique
commande le buzzer pour émettre des sons d'alerte de différentes fréquences en fonction
de la valeur de la distance.
============ ======== ======== ===
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
============ ======== ======== ===
.. image:: img/Schematic_three_one3.png
:width: 800
:align: center
Procédures expérimentales
-----------------------------
**Étape 1 :** Construisez le circuit.
.. image:: img/image242.png
:width: 800
:align: center
**Étape 2 :** Changez de répertoire.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/3.1.3/
**Étape 3 :** Compilez.
.. raw:: html
.. code-block::
gcc 3.1.3_ReversingAlarm.c -lwiringPi
**Étape 4 :** Exécutez.
.. raw:: html
.. code-block::
sudo ./a.out
Lorsque le code s'exécute, le module de capteur ultrasonique détecte la distance
jusqu'à l'obstacle, puis affiche les informations sur l'écran LCD1602 ; en parallèle,
le buzzer émet un signal d'alerte dont la fréquence varie en fonction de la distance.
.. note::
* Si un message d'erreur s'affiche indiquant ``wiringPi.h: Aucun fichier ou répertoire de ce type``, veuillez consulter :ref:`install_wiringpi`.
* Si vous obtenez l'erreur ``Unable to open I2C device: No such file or directory``, vous devez vous référer à :ref:`i2c_config` pour activer l'I2C et vérifier le câblage.
* Si le code et le câblage sont corrects mais que l'écran LCD ne s'affiche toujours pas, essayez de tourner le potentiomètre à l'arrière pour augmenter le contraste.
**Code**
.. note::
Les codes suivants sont incomplets. Si vous souhaitez consulter le code complet,
il est recommandé d'utiliser la commande ``nano 3.1.1_ReversingAlarm.c``.
.. code-block:: c
#include
#include
#include
#include
#include
#include
#define Trig 4
#define Echo 5
#define Buzzer 0
int LCDAddr = 0x27;
int BLEN = 1;
int fd;
// Fonctions liées au 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[]){...}
// Fonctions liées à l'ultrason
void ultraInit(void){...}
float disMeasure(void){...}
// Fonction 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);
delay(100);
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;
}
**Explication du Code**
.. code-block:: c
pinMode(Buzzer,OUTPUT);
fd = wiringPiI2CSetup(LCDAddr);
lcdInit();
ultraInit();
Dans ce programme, nous utilisons les composants précédemment abordés de manière
intégrée. Ici, nous utilisons un buzzer, un écran LCD et un capteur ultrasonique.
Nous les initialisons de la même manière que dans les exemples précédents.
.. code-block:: c
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);
}
Ici, nous obtenons la valeur du capteur ultrasonique et calculons la distance.
Si la valeur de la distance est supérieure à la portée détectable, un message d'erreur est affiché sur l'écran LCD. Si la valeur de la distance est dans la plage acceptable, les résultats correspondants sont affichés.
.. code-block:: c
sprintf(result,"%.2f cm",dis);
Le mode de sortie de l'écran LCD ne prend en charge que le type de données
caractères, et la variable `dis` stocke une valeur de type `float`. Nous devons
donc utiliser `sprintf()`. Cette fonction convertit la valeur de type `float` en
chaîne de caractères et la stocke dans la variable `result[]`. `%.2f` signifie que
nous conservons deux décimales.
.. code-block:: c
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);
}
}
Cette condition permet de contrôler le son du buzzer. Selon la différence de distance,
trois cas sont possibles, chacun générant des fréquences sonores distinctes. Puisque la
valeur totale de `delay` est de 500ms, toutes ces conditions assurent un intervalle de
500ms pour le capteur ultrasonique.