Étape 5: Le Cobra Code (pas Python) HAH !
Voici le code de l’Arduino qui je suis en cours d’exécution. C’est une modification de leur échantillon de capteur à ultrasons Ping.Réglage de la variable « numReadings » à une valeur plus élevée entraînera moins bruyants lectures, mais aussi un plus grand décalage dans le temps de réaction.
Profitez !
Copier à partir d’ici...
#include < Servo.h >
Servo myservo ; Créez l’objet servo pour contrôler un servo
int val ; valeur de plage mappée pour servo contrôle
const int pingPin = 7 ; Broche de signal du capteur de parallaxe ping
const int numReadings = 5 ; supérieure à lisse plus, provoque également des temps de latence plus
int lectures [numReadings] ; les lectures de l’entrée analogique
int index = 0 ; l’index de la lecture courante
total int = 0 ; le total cumulé
moyenne d’int = 0 ; la moyenne
int lastValue = 0 ;
void setup() {}
initialiser la communication série :
Serial.Begin(9600) ;
myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo
effacer la mémoire tampon la valeur lissage
pour (int thisReading = 0; thisReading < numReadings ; thisReading ++)
lectures [thisReading] = 0 ;
}
void loop()
{
créer des variables pour la durée du ping,
et le résultat de la distance en pouces et en centimètres :
longue durée, pouces, cm ;
int fadeValue = 0 ;
Le PING))) est déclenché par une impulsion forte de 2 ou plusieurs microsecondes.
Donner une brève impulsion faible au préalable pour s’assurer une impulsion propre élevée :
pinMode (pingPin, sortie) ;
digitalWrite (pingPin, basse) ;
delayMicroseconds(2) ;
digitalWrite (pingPin, HIGH) ;
delayMicroseconds(5) ;
digitalWrite (pingPin, basse) ;
Le même NIP est utilisé pour lire le signal de la commande PING))): un sommet
impulsion dont la durée est la durée (en microsecondes) de l’envoi
du ping à la réception de son écho hors d’un objet.
pinMode (pingPin, entrée) ;
durée = pulseIn (pingPin, HIGH) ;
convertir l’heure dans un lointain
po = microsecondsToInches(duration) ;
cm = microsecondsToCentimeters(duration) ;
code de lissage commence ici
soustraire la dernière lecture :
Total = total - lectures [index] ;
lecture de la sonde :
lectures [index] = cm;//analogRead(inputPin) ;
Ajouter la lecture au total :
Total = total + lectures [index] ;
avancer vers la position suivante dans le tableau :
index = index + 1 ;
Si nous sommes à la fin du tableau...
Si (index > = numReadings)
.. Wrap autour du début :
index = 0 ;
calculer la moyenne :
moyenne = total / numReadings ;
lissage de code se termine ici
plage de valeurs de remapper et déplacer le servo
Val = moyenne ;
Val = carte (val, 10, 0, 40, 179) ; valeur de l’échelle à utiliser avec le Pro tour demi tour servo analogue (valeur comprise entre 0 et 180)
if(Average < 25)
{myservo.write(val);} définit la position du servo selon la valeur à l’échelle si à une certaine distance
Delay(10) ; laisser refroidir le servo en bas, ou quelque chose
}
long microsecondsToInches(long microseconds)
{
Selon fiche technique de parallaxe pour le PING))), il y a
73,746 microsecondes par pouce (c'est-à-dire son voyage à 1130 pieds /
en second lieu). Cela donne la distance parcourue par le ping, sortant
et revenez, pour nous diviser par 2 pour obtenir la distance de l’obstacle.
Voir : http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retourner les microsecondes / 74 / 2 ;
}
long microsecondsToCentimeters(long microseconds)
{
La vitesse du son est de 340 m/s ou 29 microsecondes par centimètre.
Le ping déplace dehors et en arrière, afin de trouver la distance de la
objet, que nous prenons la moitié de la distance parcourue.
retourner les microsecondes / 29 / 2 ;
}
Ici...