Hi
N'ayant pas de radar sur mon parechoc avant, j'ai décidé de développer un petit boitier permettant d'afficher un petit feu vert ou rouge en fonction de mon approche devant ma porte de garage quand je me gare. Un truc simple, alimenté par solaire car pas de gros besoin en puissance. Un capteur ultrason HC-SR04 et 2 LED, une verte et une rouge et un Arduino Nano. Rien de plus.
Voici le schéma:
Code:
// ACG : AnCoGa : ANtiCOllisionGArage
// Le 26/11/2021
// Cedric Delauney / Mr Robot
// déclaration des variables
const int trigPin = 12;
const int echoPin = 11;
const int ledv = 7;
const int ledr = 9;
int durationLedR;
int durationLedV;
const int delayLedR=15;
const int delayLedV=15;
int duration;
int cm;
int cm_moins_1;
int microsecondsToCentimeters(int microseconds)
{
return microseconds / 28 / 2;
}
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledv, OUTPUT);
pinMode(ledr, OUTPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
cm_moins_1=cm;
cm = microsecondsToCentimeters(duration);
if (cm >= 100)
{
delay(3000);
durationLedV=0;
durationLedR=0;
digitalWrite(ledv, LOW);
digitalWrite(ledr, LOW);
}
if (cm < 100 && cm >=20)
{
durationLedV=durationLedV+1;
if (cm_moins_1 != cm)
{
durationLedV = 0;
}
if (durationLedV >= delayLedV)
{
digitalWrite(ledv, LOW);
digitalWrite(ledr, LOW);
}
else
{
digitalWrite(ledv, HIGH);
digitalWrite(ledr, LOW);
durationLedR=0;
}
}
if (cm<20)
{
durationLedR=durationLedR+1;
if (cm_moins_1 != cm)
{
durationLedR = 0;
}
if (durationLedR >= delayLedR)
{
digitalWrite(ledv, LOW);
digitalWrite(ledr, LOW);
}
else
{
digitalWrite(ledv, LOW);
digitalWrite(ledr, HIGH);
durationLedV=0;
}
}
// pour debuggage si besoin
//Serial.print("Distance:");
// Serial.print(cm);
// Serial.print("cm");
// Serial.print(", durationLedR:");
// Serial.print(durationLedR);
// Serial.print(", durationLedV:");
// Serial.println(durationLedV);
// delay(1000);
}
Le principe est simple:
* au dessus de 1 mètre, aucun voyant ne s'allume
* à moins d'1 mètre et plus de 20cm la LED verte s'allume
* à moins de 20cm, la LED verte s'éteint et la rouge s'allume
* une fois garé, au bout de 15 secondes à moins de 20 cm, la LED s’éteint (idem entre 1 mètre et 20cm au cas où on se garerait à ce niveau d'éloignement)
* le relevé se fait toutes les 1 seconde à plus d'un mettre et tous les quarts de seconde en dessous d'un mettre pour avoir une meilleure réactivité pendant l'approche
Création du boitier:
J'ai créé un boitier simple qui contiendra le capteur ultrason, les 2 LEDs, l'Arduino Nano, la batterie, le module de charge de la batterie (sur lequel est connecté le panneau solaire et en entrée et la batterie en sortie) et l'amplificateur (qui convertit la tension de sortie du module de charge 3,3V en 5v).
Prototype:
Une fois imprimé sur imprimante 3D filament, voici le résultat sur ce prototype:
à plus de 20 cm le feu s'allume en vert
Consommation approximative:
L'arduino Nano consomme à vide environ 20mA. Le capteur ultra son hc-sr04 consomme 15mA. La LED rouge consomme 50mA et la verte 20mA (étrange que la couleur change la conso mais... c'est comme ça). Du fait qu'elles ne s'allumeront pas souvent, on va partir sur une moyenne de consommation de 5mA.
La batterie étant une 3400maH, on obtient donc une autonomie théorique de 3400 / (20 + 15 + 5) = 85 heures, dans le meilleur des cas, batterie rechargée régulièrement grace au soleil.
Final:
Une fois les éléments assemblés, voici le résultat avec le panneau solaire collé dessus, faisant office de toit "débordant" et protégeant donc le capteur ultrason, et enfin l'ajout d'un interrupteur étanche (le but étant de le fixer sur ma porte de garage, dehors donc, et en Normandie, il pleut beaucoup! 😀):