Arduino, sensorer och MIDI- (12 / 16 steg)
Steg 12: Arduino och rörelsesensor (Ping)
Kallas även en Ping sensor, beröringsfria använda en Ultraljuds puls för att mäta avståndet till ett hinder av echolocation. Denna sensor är verkligen lätt att få och kör, det endast krävs tre anslutningar till Arduino: marken, 5V och en anslutning till en Arduino digital stift (jag använde stift 7). Arduino har en stor bit av exempelkod på deras hemsida som jag har upprepade nedan för att få den närhet sensorn och kör:
int pingPin = 7.
void setup() {
Serial.BEGIN(9600);
}
void loop() {
trigger ping med pulserande pingPin hög för 2 mikrosekunder
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
Ställ in pingPin på ingång och räkna hur lång tid det tar att ta emot en ping tillbaka
pinMode (pingPin, ingång);
lång varaktighet = pulseIn (pingPin, hög);
konvertera tiden till ett avstånd
länge tum = microsecondsToInches(duration);
långa cm = microsecondsToCentimeters(duration);
skriva ut resultaten
Serial.Print(inches);
Serial.Print ("in");
Serial.Print(cm);
Serial.Print("cm");
Serial.println();
Delay(100);
}
lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: < en href = "http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf" >< en href = "http://www.parallax.com/dl/docs/prod/acc/28015-PI... < / a" >< en href = "http://www.parallax.com/dl/docs/prod/acc/28015-PI... < / a" > http://www.parallax.com/dl/docs/prod/acc/28015-PI...</a>>>
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds)
{
Ljudets hastighet är 340 m/s eller 29 mikrosekunder per centimeter.
Ping reser ut och tillbaka, så för att hitta distansera av den
objekt vi tar hälften av den tillryggalagda.
återvända mikrosekunder / 29 / 2;
}
En ovanlig sak om denna kod är att pinMode av pingPin ändras medan Arduino loop() körs. Hittills har vi bara använt detta kommando i setup. Eftersom stiftet används som en utgång för att skicka ultraljud pulsen, och då som indata till lyssna efter pulsen, har har läge att ändra dynamiskt. Även används delayMicroseconds() för att ställa in en fördröjning för ett givet antal mikrosekunder (i motsats till delay(), som använder ett argument i millisekunder för att skapa en fördröjning).
Härifrån är det en enkel övning för att använda funktionen map() galna avståndet till oavsett vilken typ av MIDI-data som du är intresserad, precis som i föregående steg. Här är några exempel på hur du kan använda en rörelsesensor:
Närhet kontrollerade chiptunes stil summern:
Hinder att undvika robot - jag gillar hur de har bifogat en motor till ping sensorn för att göra det lite mer effektivt: