Dans ce projet, je vais vous montrer comment créer vous-même un radar Arduino.
Il s'agit d'un projet intermédiaire / avancé.
Lorsque votre projet est assemblé, des objets jusqu'à 50 cm du capteur s'affichent. Si vous modifiez le code, le radar peut détecter des objets jusqu'à 5 mètres.
Pour ce projet, vous avez besoin de deux programmes différents IDE Arduino en En cours. Le langage utilisé par le traitement est Java, alors gardez cela à l'esprit.
- Niveau - Avancé / Expert 65%
- Durée - 30/45 Min 40%
- Coûts - 49.75 € complets 40%
Étape 1: Fournitures
1X Arduino UNO
1X painboard
Câbles volants 4X m / m
Câbles volants 4X f / m
Servo 1X 180
1XHC-SR04
1X support HC-SR04
Étape 2: Construire et câbler
Nous allons maintenant assembler le projet.
Vous commencez par envoyer le 5V de l'Arduino à la maquette. Ensuite, vous passez de la maquette au port plus du servo et du capteur.
Lorsque vous avez fait cela, passez du GND du servo et du capteur au GND de l'Arduino.
Enfin, connectez le câble de commande du servo à la broche 9, la broche d'écho à la broche 6 et la goupille à la broche 7.
Étape 3: programmation
Maintenant que vous avez terminé le câblage et la construction de votre radar Arduino, vous pouvez commencer à programmer le Arduino Uno.
Pour ce code, nous devons inclure un fichier d'inclusion.
Un fichier Library ou Include contient souvent du code qui peut souvent être réutilisé dans d'autres esquisses. Les bibliothèques (bibliothèques) sont souvent un ensemble de fonctions associées destinées à une application particulière. Par exemple pour contrôler une bande avec des LED, des fonctions mathématiques spéciales ou par exemple pour contrôler un écran LCD.
Pour ce projet, nous utilisons le fichier servo d'inclusion, si vous ne le mettez pas, votre Arduino ne pourra pas contrôler le servo et votre sonar ne fonctionnera pas.
Vous pouvez copier et coller le code ci-dessous. Nous vous recommandons de copier le code vous-même car vous en apprendrez plus.
leftRightServo.write (leftRightPos);
pour (index = 0, index <= numReadings, index ++) {
digitalWrite (trigPin, LOW);
delayMicrosecondes (2);
digitalWrite (trigPin, HIGH);
delayMicrosecondes (10);
digitalWrite (trigPin, LOW);
pulseTime = pulseIn (echoPin, HIGH);
distance = pulseTime / 13;
total = total + distance ;
délai (10);
}
moyenne = total / numReadings;
if (index> = numReadings) {
index = 0;
total = 0 ;
}
if (moyenne> = 300) {
moyenne = 300;
}
Serial.print («X»);
Serial.print (leftRightPos);
Serial.print («V»);
Serial.println (moyenne);
}
for (leftRightPos = 180; leftRightPos> 0; leftRightPos–) {
leftRightServo.write (leftRightPos);
pour (index = 0, index <= numReadings, index ++) {
digitalWrite (trigPin, LOW);
delayMicrosecondes (2);
digitalWrite (trigPin, HIGH);
delayMicrosecondes (10);
digitalWrite (trigPin, LOW);
pulseTime = pulseIn (echoPin, HIGH);
distance = pulseTime / 13;
total = total + distance ;
délai (10);
}
moyenne = total / numReadings;
if (index> = numReadings) {
index = 0;
total = 0 ;
}
if (moyenne> = 300) {
moyenne = 300;
}
Serial.print («X»);
Serial.print (leftRightPos);
Serial.print («V»);
Serial.println (moyenne);
}
}
Après avoir entré le code dans l'IDE Arduino, vous pouvez entrer le code ci-dessous dans Traitement.
import processing.serial. *;
Port série en pierre bleue;
flotter x, y ;
rayon int = 350;
entier w = 300 ;
degré int = 0;
valeur int = 0;
mouvement int = 0;
int [] newValue = new int [181];
int [] oldValue = new int [181];
PFont maFont;
int radarDist = 0 ;
int premierExécution = 0 ;
void setup () {
taille (750, 450);
arrière-plan (0);
myFont = createFont ("verdana", 12);
textFont (maFont);
arduinoport = nouveau Serial (ceci, «COM10», 9600);
}
nul tirage () {
fill (0);
noStroke ();
ellipse (rayon, rayon, 750, 750);
rectMode (CENTRE);
rect (350,402,800,100);
if (degré> = 179) {
mouvement = 1;
}
if (degré <= 1) {
mouvement = 0;
}
strokeWeight (7);
if (mouvement == 0) {
pour (int i = 0; i <= 20; i ++) {
course (0, (10 * i), 0);
ligne (rayon, rayon, rayon + cos (radians (degré + (180 + i))) * w, rayon + sin (radians (degré + (180 + i))) * w);
}
} Else {
pour (int i = 20, i> = 0, i–) {
course (0,200- (10 * i), 0);
ligne (rayon, rayon, rayon + cos (radians (degré + (180 + i))) * w, rayon + sin (radians (degré + (180 + i))) * w);
}
}
noStroke ();
fill (0,50,0);
beginShape ();
pour (int i = 0; i <180; i ++) {
x = rayon + cos (radians ((180 + i))) * ((oldValue [i]));
y = rayon + sin (radians ((180 + i))) * ((oldValue [i]));
sommet (x, y);
}
endShape ();
fill (0,110,0);
beginShape ();
pour (int i = 0; i <180; i ++) {
x = rayon + cos (radians ((180 + i))) * (newValue [i]);
y = rayon + sin (radians ((180 + i))) * (newValue [i]);
sommet (x, y);
}
endShape ();
fill (0,170,0);
beginShape ();
pour (int i = 0; i <180; i ++) {
x = rayon + cos (radians ((180 + i))) * ((newValue [i] + oldValue [i]) / 2);
y = rayon + sin (radians ((180 + i))) * ((newValue [i] + oldValue [i]) / 2);
sommet (x, y);
}
endShape ();
if (firstRun> = 360) {
course (150,0,0);
strokeWeight (1);
aucun remplissage ();
pour (int i = 0; i <180; i ++) {
if (oldValue [i] - newValue [i]> 35 || newValue [i] - oldValue [i]> 35) {
x = rayon + cos (radians ((180 + i))) * (newValue [i]);
y = rayon + sin (radians ((180 + i))) * (newValue [i]);
ellipse (x, y, 10, 10);
}
}
}
pour (int i = 0; i <= 5; i ++) {
aucun remplissage ();
strokeWeight (1);
course (0, 255- (30 * i), 0);
ellipse (rayon, rayon, (120 * i), (120 * i));
remplir (0, 100, 0);
}
pour (int i = 0; i <= 6; i ++) {
strokeWeight (1);
course (0);
ligne (rayon, rayon, rayon + cos (radians (180+ (30 * i))) * w, rayon + sin (radians (180+ (30 * i))) * w);
remplir (0, 55, 0);
noStroke ();
si (180+ (30 * i)> = 300) {
text (Integer.toString (180+ (30 * i)), (radius + 10) + cos (radians (180+ (30 * i))) * (w + 10), (radius + 10) + sin (radians (180+ (30 * i))) * (w + 10), 25,50);
} Else {
text (Integer.toString (180+ (30 * i)), rayon + cos (radians (180+ (30 * i))) * w, rayon + sin (radians (180+ (30 * i))) * w , 60,40);
}
}
noStroke ();
fill (0);
rect (350,402,800,100);
remplir (0, 100, 0);
texte ("Degrés:" + Integer.toString (degré), 100, 380, 100, 50);
texte ("Code d'écran radar", 540, 380, 250, 50);
fill (0);
rect (70,60,150,100);
remplir (0, 100, 0);
texte ("Clé d'écran:", 100, 50, 150, 50);
fill (0,50,0);
rect (30,53,10,10);
texte ("Premier balayage", 115, 70, 150, 50);
fill (0,110,0);
rect (30,73,10,10);
texte ("Second balayage", 115, 90, 150, 50);
fill (0,170,0);
rect (30,93,10,10);
texte ("Moyenne", 115, 110, 150, 50);
remplir (0, 255, 0);
texte ("10", 455, 375, 200, 200);
remplir (0, 255, 0);
texte ("20", 455, 310, 200, 200);
remplir (0, 255, 0);
texte ("30", 455, 250, 200, 200);
remplir (0, 255, 0);
texte ("40", 455, 190, 200, 200);
remplir (0, 255, 0);
texte ("50", 455, 130, 200, 200);
}
void serialEvent (port arduino série) {
Chaîne xString = arduinoport.readStringUntil ('\ n');
if (xString! = null) {
xString = trim (xString);
Chaîne getX = xString.substring (1, xString.indexOf («V»));
Chaîne getV = xString.substring (xString.indexOf («V») + 1, xString.length ());
degré = Integer.parseInt (getX);
valeur = Integer.parseInt (getV);
oldValue [degré] = nouvelleValeur [degré];
newValue [degré] = valeur;
firstRun ++;
if (firstRun> 330) {
premierRun = 333 ;
}
}
}
C'est un sonar, pas un radar!