Stap 5: De Code van de Cobra (niet Python) HAH!
Hier is de code van de Arduino waarop ik ben. Het is een wijziging van hun Ping ultrasone sensor monster.Aanpassing van de variabele "numReadings" op een hogere waarde resulteert in minder lawaaierige lezingen, maar ook een grotere vertraging in de reactietijd.
Geniet van!
Kopiëren vanaf hier...
#include < Servo.h >
Servo myservo; maken van servo-object om te bepalen van een servo
int val; bereik toegewezen waarde voor servo control
Const int pingPin = 7; Parallax ping sensor van signaal pin
Const int numReadings = 5; hoger te glad ingesteld meer, zorgt ook voor meer latency
int lezingen [numReadings]; de lezingen van de analoge ingang
int index = 0; de index van de huidige lezing
int totaal = 0; het lopend totaal
int gemiddelde = 0; het gemiddelde
int lastValue = 0;
VOID Setup {}
seriële communicatiepoorten te initialiseren:
Serial.begin(9600);
myservo.attach(9); de servo op pin 9 hecht aan de servo-object
de smoothing waarde buffer leeg
voor (int thisReading = 0; thisReading < numReadings; thisReading ++)
lezingen [thisReading] = 0;
}
void loop
{
stellen variabelen voor de duur van de ping,
en het resultaat van de afstand in inches en centimeters:
lange duur, inch, cm;
int fadeValue = 0;
De PING))) wordt geactiveerd door een hoge pols van 2 of meer microseconden.
Geef een korte lage puls vooraf om een schoon hoog puls:
pinMode (pingPin, OUTPUT);
digitalWrite (pingPin, laag);
delayMicroseconds(2);
digitalWrite (pingPin, hoge);
delayMicroseconds(5);
digitalWrite (pingPin, laag);
Dezelfde pincode wordt gebruikt voor het lezen van het signaal van de PING))): een hoog
Pulse waarvan de duur de tijd (in microseconden) van de verzending is
voor de ping naar de receptie van de echo off van een object.
pinMode (pingPin, INPUT);
duur = pulseIn (pingPin, hoge);
de tijd omzetten in een afstand
duim = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
smoothing code begint hier
de laatste lezing aftrekken:
totaal = totaal - lezingen [index];
lezen van de sensor:
lezingen [index] = cm;//analogRead(inputPin);
de lezing aan het totaal toevoegen
totaal = totaal + lezingen [index];
verder naar de volgende positie in de matrix:
index = index + 1;
Als we aan het einde van de array...
Als (index > = numReadings)
.. .wrap rond naar het begin:
index = 0;
het gemiddelde berekenen:
gemiddelde = totaal / numReadings;
smoothing code eindigt hier
remap waardebereik en verplaatsen van de servo
Val = gemiddelde;
Val = kaart (val, 10, 40, 0, 179); de waarde van het schaalbereik gebruiken met de Tower Pro halve draai analoge servo (waarde tussen 0 en 180)
if(Average < 25)
{myservo.write(val);} stelt u de positie van de servo volgens de geschaalde waarde indien binnen een bepaalde afstand
delay(10); Laat de servo-koel neer, of iets
}
lange microsecondsToInches(long microseconds)
{
Volgens de Parallax gegevensblad voor de PING))), er zijn
73.746 microseconden per inch (dwz geluid reist aan 1130 voeten per
seconde). Dit geeft de afstand die is afgelegd door de ping, uitgaande
en terug te keren, zodat wij door 2 delen te krijgen van de afstand van het obstakel.
Zie: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retourneren van microseconden / 74 / 2;
}
lange microsecondsToCentimeters(long microseconds)
{
De snelheid van het geluid is 340 m/s of 29 microseconden per vierkante centimeter.
De ping reist uit en terug, zo vind je de afstand van de
we de helft van de afgelegde afstand nemen-object.
retourneren van microseconden / 29 / 2;
}
Naar hier...