Étape 7: Fait!-CODE et théorie
Vous trouverez des douzaines de variations sur la façon d’exécuter le capteur de PING, essentiellement le fonctionnement concret du capteur se déroule dans le cycle boucle () qui implémente le protocole pour le fonctionnement de la composante PING.
Basé sur ses propres, vous pouvez contrôler le fonctionnement du capteur à travers une série d’impulsions. En résumé, nous pouvons dire que vous utilisez une broche numérique pour mesurer une broche analogique.
Amélioration: Si vous voulez faire cool, vous pouvez également insérer un type de capteur de température TMP36 pour améliorer la lecture, c’est parce que comme vous le savez, son voyage à une vitesse de 343 m / s, ce ment de valeur n’est pas absolu, car il dépend de la température de l’air, la bibliographie montre cette relation entre la vitesse du son (C) et la température de l’air (t) C = 331,5 + (0,6 * t) , sachant la température (et ici, il aide le capteur) nous avons finalement mis quelques lignes de code permettant d’implémenter la lecture.
#include < Servo.h >
#include < LiquidCrystal.h >
Innovente lcd (3, 4, 5, 6, 11, 12) ;
Servo PingServo ;
Servo LeftServo ;
Servo RightServo ;
int ultraSoundSignal = 7 ; Broche signal ultrason
int val = 0 ;
val2 int = 0 ;
int ultrasoundValue = 0 ;
timecount int = 0 ; Echo counterint
ledPin = 13 ; LED connectée à la broche numérique 13
void setup() {}
LCD.Begin (16, 2) ;
Serial.Begin (9600) ;
pinMode(8,OUTPUT) ;
pinMode(9,OUTPUT) ;
LeftServo.attach(8) ;
RightServo.attach(9) ;
PingServo.attach(10) ;
pinMode (ledPin, sortie) ;
}
void moveServoLeftTo (int angle, int duration) {}
contrôle le servo se déplacer pour un angle donné et pour un nombre donné de millisecondes
LeftServo.write(angle) ;
pour (; durée > 0; Durée = 20) {}
chaque itération du cycle pour le nombre spécifié de millisecondes en soustrayant 20ms
delay(20) ;
}
}
void moveServoRightTo (int angle, int duration) {}
RightServo.write(angle) ;
pour (; durée > 0; Durée = 20) {}
Delay(20) ;
}
}
void loop() {}
Funzioni Ping)))
timecount = 0 ;
Val = 0 ;
pinMode (ultraSoundSignal, sortie) ; Signalpin commutateur de sortie
digitalWrite (ultraSoundSignal, basse) ; Envoyer de faibles impulsions
delayMicroseconds(2) ; Attendez 2 microsecondes
digitalWrite (ultraSoundSignal, HIGH) ; Envoyer des impulsions haute
delayMicroseconds(5) ; Attendez 5 microsecondes
digitalWrite (ultraSoundSignal, basse) ; Sursis
pinMode (ultraSoundSignal, entrée) ; Signalpin interrupteur à l’entrée
Val = digitalRead(ultraSoundSignal) ; Ajouter la valeur du signal de val
while(Val == Low) {/ / boucle jusqu'à ce que la goupille lit une valeur élevée
Val = digitalRead(ultraSoundSignal) ;
}
while(Val == High) {/ / boucle jusqu'à ce que la goupille lit une valeur élevée
Val = digitalRead(ultraSoundSignal) ;
timecount = timecount + 1 ; Compter le temps des impulsions echo}
ultrasoundValue = timecount ; Ajouter pulsée echo à ultrasoundValue
LCD.Clear() ;
lcd.setCursor(0,0) ;
LCD.Print ("OBSTACLE cm") ;
LCD.Print(timecount/10) ;
Delay(200) ;
Si (timecount > 0) {}
digitalWrite (ledPin, HIGH);}
Fonctions du servo :
Si {(ultrasoundValue > 500)
moveServoLeftTo(45,50) ; servo déplace de la gauche de 45 ° pour 500 millisecondes
moveServoRightTo(180,50) ;
}
Si {(ultrasoundValue < 500)
moveServoLeftTo(180,40) ;
moveServoRightTo(180,40) ;
}
Si {(ultrasoundValue < 100)
moveServoLeftTo(180,100) ;
moveServoRightTo(45,100) ;
}
}