Stap 12: Arduino en nabijheidssensor (Ping)
Ook wel genoemd een Ping sensor, naderingssensoren gebruiken een ultrasone pols te meten van de afstand tot een obstakel door echolocatie. Deze sensor is echt gemakkelijk om op te staan en draait, vereist het slechts drie verbindingen met de Arduino: grond, 5V, en een verbinding met een Arduino digitale pin (ik gebruikte pin 7). Arduino heeft een groot stuk van de code van de steekproef op hun website die ik hieronder heb herhaald voor de sensor van de nabijheid te krijgen up and running:
int pingPin = 7; void setup() { Serial.begin(9600); } void loop(){ //trigger ping by pulsing pingPin HIGH for 2 microseconds pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); //set pingPin to INPUT and count the amount of time it takes to receive a ping back pinMode(pingPin, INPUT); long duration = pulseIn(pingPin, HIGH); // convert the time into a distance long inches = microsecondsToInches(duration); long cm = microsecondsToCentimeters(duration); //print out the results Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); } long microsecondsToInches(long microseconds) { // According to Parallax's datasheet for the PING))), there are // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per // second). This gives the distance travelled by the ping, outbound // and return, so we divide by 2 to get the distance of the obstacle. // See: <a href="http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf"> <a href="http://www.parallax.com/dl/docs/prod/acc/28015-PI...</a"> <a href="http://www.parallax.com/dl/docs/prod/acc/28015-PI...</a"> http://www.parallax.com/dl/docs/prod/acc/28015-PI...</a>>> return microseconds / 74 / 2; } long microsecondsToCentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; }
Een ongewone ding over deze code is dat de pinMode van de pingPin wordt gewijzigd terwijl de Arduino loop wordt uitgevoerd. We hebben deze opdracht tot nu toe alleen gebruikt in de setup. Aangezien de pin wordt gebruikt als uitgang voor het verzenden van de ultrasone pols, en vervolgens als input om te luisteren voor de pols, het heeft moet modus dynamisch wijzigen. Ook wordt delayMicroseconds() gebruikt om een schermvertraging instellen voor een gegeven aantal microseconden (in tegenstelling tot delay(), die gebruik maakt van een argument in milliseconden maken een vertraging).
Vanaf hier is het een eenvoudige oefening van de map()-functie te gekke afstand tot wat voor soort MIDI-data die u geïnteresseerd, net als in de vorige stappen bent gebruiken. Hier zijn enkele voorbeelden van hoe u een sensor van de nabijheid kunt gebruiken:
Nabijheid gecontroleerd chiptunes-stijl zoemer:
Obstakel te vermijden robot - Ik hou van de manier waarop ze een motor hebt toegevoegd aan de ping-sensor doeltreffender te maken het een beetje: