In questo progetto ti mostrerò come creare il tuo radar Arduino.
Questo è un progetto intermedio/avanzato.
Quando il tuo progetto è assemblato, gli oggetti verranno visualizzati fino a 50 cm dal sensore. Se modifichi il codice, il radar può rilevare oggetti fino a 5 metri.
Per questo progetto sono necessari due programmi diversi Arduino IDE en Processando† Il linguaggio utilizzato da Processing è java, quindi tienilo a mente.
- Livello – Avanzato/Esperto 65%
- Durata – 30/45 Min 40%
- Costi – € 49.75 euro completo 40%
Passaggio 1: forniture
1X Arduino UNO
1X paneboard
Cavi jumper 4X m/m
4 cavi jumper f/m
Servo 1X180
1XHC-SR04
Supporto 1X HC-SR04
Passaggio 2: costruisci e cabla
Ora mettiamo insieme il progetto.
Inizi inviando i 5V da Arduino alla breadboard. Quindi si passa dalla breadboard alla porta positiva del servo e del sensore.
Fatto ciò, passa dal GND del servo e del sensore al GND dell'Arduino.
Infine, collegare il cavo del servocomando al pin 9, il pin dell'eco al pin 6 e il pin del trigger al pin 7.
Passaggio 3: programmazione
Ora che hai finito di cablare e costruire il tuo radar Arduino, puoi iniziare a programmare il Arduino Uno.
Per questo codice è necessario inserire un file include.
Un file Libreria o Include spesso contiene codice che può essere spesso riutilizzato in altri schizzi. Le biblioteche sono spesso una raccolta di funzioni correlate finalizzate a una particolare applicazione. Ad esempio per controllare una striscia con LED, funzioni matematiche speciali o ad esempio per controllare uno schermo LCD.
Per questo progetto useremo il file include servo, se non lo includi il tuo Arduino non sarà in grado di controllare il servo e il tuo sonar non funzionerà.
Puoi copiare e incollare il codice qui sotto. Ti consigliamo di copiare tu stesso il codice poiché ne imparerai di più.
leftRightServo.write(leftRightPos);
for (indice = 0; indice<=numLetture;indice++) {
digitalWrite(trigPin, BASSO);
ritardoMicrosecondi(2);
digitalWrite(trigPin, ALTO);
ritardoMicrosecondi(10);
digitalWrite(trigPin, BASSO);
impulsoTempo = impulsoIn(echoPin, ALTO);
distanza = tempo di impulso/13;
totale = totale + distanza;
ritardo (10);
}
media = totale/num letture;
if (indice >= numLetture) {
indice = 0;
totale = 0;
}
se(media >= 300){
media = 300;
}
Serial.print("X");
Serial.print(Pos.DestraSinistra);
Serial.print("V");
Serial.println (media);
}
for(leftRightPos = 180; leftRightPos > 0; leftRightPos–) {
leftRightServo.write(leftRightPos);
for (indice = 0; indice<=numLetture;indice++) {
digitalWrite(trigPin, BASSO);
ritardoMicrosecondi(2);
digitalWrite(trigPin, ALTO);
ritardoMicrosecondi(10);
digitalWrite(trigPin, BASSO);
impulsoTempo = impulsoIn(echoPin, ALTO);
distanza = tempo di impulso/13;
totale = totale + distanza;
ritardo (10);
}
media = totale/num letture;
if (indice >= numLetture) {
indice = 0;
totale = 0;
}
if( media >= 300){
media = 300;
}
Serial.print("X");
Serial.print(Pos.DestraSinistra);
Serial.print("V");
Serial.println (media);
}
}
Dopo aver inserito il codice nell'IDE di Arduino, puoi inserire il codice qui sotto in Elaborazione.
importazione elaborazione.seriale.*;
porta seriale arduino;
galleggiante x, y;
raggio int = 350;
int w = 300;
grado int = 0;
int valore = 0;
intmotion = 0;
int[] nuovoValore = nuovo int[181];
int[] vecchioValore = nuovo int[181];
Font mio Font;
int radarDist = 0;
int firstRun = 0;
void setup () {
dimensione (750, 450);
sfondo (0);
mioFont = createFont("verdana", 12);
testoFont(mioFont);
arduinoport = new Serial(questo, "COM10", 9600);
}
vuoto disegnare() {
riempimento(0);
noColpo();
ellisse(raggio, raggio, 750, 750);
rectMode(CENTRO);
retto(350,402,800,100);
se (grado >= 179) {
movimento = 1;
}
se (grado <= 1) {
movimento = 0;
}
corsaPeso(7);
se(movimento == 0) {
for (int i = 0; i <= 20; i++) {
tratto(0, (10*i), 0);
line(raggio, raggio, raggio + cos(radianti(gradi+(180+i))))*w, raggio + sin(radianti(gradi+(180+i))))*w);
}
} Else {
for (int i = 20; i >= 0; i–) {
corsa(0,200-(10*i), 0);
line(raggio, raggio, raggio + cos(radianti(gradi+(180+i))))*w, raggio + sin(radianti(gradi+(180+i))))*w);
}
}
noColpo();
riempimento(0,50,0);
iniziareForma();
for (int i = 0; i <180; i ++) {
x = raggio + cos(radianti((180+i)))*((oldValue[i]));
y = raggio + sin(radianti((180+i))))*((oldValue[i]));
vertice(x, y);
}
forma finale();
riempimento(0,110,0);
iniziareForma();
for (int i = 0; i <180; i ++) {
x = raggio + cos(radianti((180+i)))*(nuovoValore[i]);
y = raggio + sin(radianti((180+i))))*(nuovoValore[i]);
vertice(x, y);
}
forma finale();
riempimento(0,170,0);
iniziareForma();
for (int i = 0; i <180; i ++) {
x = raggio + cos(radianti((180+i))))*((nuovoValore[i]+vecchioValore[i])/2);
y = raggio + sin(radianti((180+i))))*((nuovoValore[i]+vecchioValore[i])/2);
vertice(x, y);
}
forma finale();
se (prima esecuzione >= 360) {
corsa(150,0,0);
corsaPeso(1);
noRiempimento();
for (int i = 0; i <180; i ++) {
if (oldValue[i] – newValue[i] > 35 || newValue[i] – oldValue[i] > 35) {
x = raggio + cos(radianti((180+i)))*(nuovoValore[i]);
y = raggio + sin(radianti((180+i))))*(nuovoValore[i]);
ellisse(x, y, 10, 10);
}
}
}
for (int i = 0; i <= 5; i++){
noRiempimento();
corsaPeso(1);
tratto(0, 255-(30*i), 0);
ellisse(raggio, raggio, (120*i), (120*i));
riempimento(0, 100, 0);
}
for (int i = 0; i <= 6; i++) {
corsaPeso(1);
tratto(0, 55, 0);
line(raggio, raggio, raggio + cos(radianti(180+(30*i)))*w, raggio + sin(radianti(180+(30*i)))*w);
riempimento(0, 55, 0);
noColpo();
se (180+(30*i) >= 300) {
text(Integer.toString(180+(30*i)), (radius+10) + cos(radianti(180+(30*i)))*(w+10), (radius+10) + sin(radianti (180+(30*i)))*(w+10), 25,50);
} Else {
text(Integer.toString(180+(30*i)), raggio + cos(radianti(180+(30*i))))*w, raggio + sin(radianti(180+(30*i)))* w, 60,40);
}
}
noColpo();
riempimento(0);
retto(350,402,800,100);
riempimento(0, 100, 0);
text("Gradi: "+Integer.toString(gradi), 100, 380, 100, 50);
text("Codice schermo radar", 540, 380, 250, 50);
riempimento(0);
retto(70,60,150,100);
riempimento(0, 100, 0);
text("Tasto schermo:", 100, 50, 150, 50);
riempimento(0,50,0);
retto(30,53,10,10);
text("Prima scansione", 115, 70, 150, 50);
riempimento(0,110,0);
retto(30,73,10,10);
text("Seconda scansione", 115, 90, 150, 50);
riempimento(0,170,0);
retto(30,93,10,10);
text("Media", 115, 110, 150, 50);
riempimento(0, 255, 0);
testo("10", 455, 375, 200, 200);
riempimento(0, 255, 0);
testo("20", 455, 310, 200, 200);
riempimento(0, 255, 0);
testo("30", 455, 250, 200, 200);
riempimento(0, 255, 0);
testo("40", 455, 190, 200, 200);
riempimento(0, 255, 0);
testo("50", 455, 130, 200, 200);
}
void serialEvent(Serial arduinoport) {
Stringa xString = arduinoport.readStringUntil('\n');
se (xString != nullo) {
xStringa = taglia(xStringa);
Stringa getX = xString.substring(1, xString.indexOf("V"));
Stringa getV = xString.substring(xString.indexOf("V")+1, xString.length());
grado = Intero.parseInt(getX);
valore = Intero.parseInt(getV);
vecchioValore[grado] = nuovoValore[grado];
nuovoValore[grado] = valore;
primaEsegui++;
se (prima esecuzione > 330) {
prima esecuzione = 333;
}
}
}
Questo è sonar, non radar!