Rådjur Chaser (8 / 11 steg)
Steg 8: Kodning tid
Nu är det dags att skriva koden som gör allt för att arbeta tillsammans. Lyckligtvis för dig, jag räddade dig besväret att göra det själv och gick vidare och förberett det för dig.Innan du börjar kodning, se till att välja rätt styrelsen från kompilatorn. Vi använder en Arduino Mega 2560. Denna kod fungerar bara med nämnda styrelse, inget annat. Det fungerar inte med en Uno eller någon av de många andra Arduino styrelserna.
För att ändra styrelsen i Arduino kompilatorn gå till Verktyg -> styrelsen -> Arduino Mega 2560 eller Mega ADK.
Känn dig fri att ändra koden som du ser passformen.
/ * Rådjur Chaser
Denna skiss läser en PING))) ultraljud avståndsmätare och returnerar den
avståndet till närmaste objektet i intervallet. Det sedan lyser upp ett antal lysdioder när max
avståndet ändras.
Dessutom börjar det ett servo rörelse
Det gör skickar det en puls
till sensorn att inleda en behandling, då lyssnar efter en puls
för att återgå. Längden på den återkommande pulsen är proportionell mot
distansera av objektet från sensorn.
Krets:
* + V anslutning av PING))) kopplad till + 5V
* GND anslutning av PING))) kopplade till marken
* SIG anslutning av PING))) bifogas digital stift 7
skapad: 28 juli, 2013
av: Brian J. Mays
uppdaterad av:
*/
#include < Servo.h >
Servo myservo; skapa objekt för att styra servo servo
CONST int pingPin = 26. / / pin-kod sensorn produktion
lägger till i ljus
int RedLED = 36. LED är ansluten till digital pin 9 (pwm stift)
int GrnLED = 38. LED är ansluten till digital stift 10 (pwm stift)
int BluLED = 40; LED är ansluten till digital stift 11 (pwm stift)
int LED [3] = {RedLED, GrnLED, BluLED}; en matris att göra det lättare att cykla men LED-färger
int deer_counter = 0; Ange noll rådjur
void setup() {
initiera seriell kommunikation:
Serial.BEGIN(9600);
Som pins utgångsstift (lampor)
pinMode (RedLED, OUTPUT);
pinMode (GrnLED, OUTPUT);
pinMode (BluLED, OUTPUT);
}
void loop()
{
fastställa variabler för varaktigheten av ping,
och avstånd resultatet i tum och centimeter:
lång varaktighet, inches, maxInches;
PING))) utlöses av en hög puls av 2 eller fler mikrosekunder.
Ge en kort låg puls förhand för att säkerställa en ren hög puls:
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
Samma PIN-koden används för att läsa signalen från PING))): en hög
puls vars längd är tid (i mikrosekunder) från den sändande
ping till mottagning av dess eko av ett objekt.
pinMode (pingPin, ingång);
längd = pulseIn (pingPin, hög);
konvertera tiden till ett avstånd
tum = microsecondsToInches(duration);
ändra för avståndet till skydda
maxInches = 72.
Serial.Print(inches);
Serial.Print ("in");
Serial.println();
om (inches < maxInches)
{
deer_counter = deer_counter + 1.
Serial.Print ("rådjur Counter");
Serial.Print(deer_counter);
slå på servo
myservo.attach(9); tillmäter objektet servo servo på pin 9
Delay(15); Waits 15 MS för servo att nå ställning
Serial.Print ("koppla loss Servo");
Flash lampor
för (int fade = 255; blekna > = 0; blekna-= 5) {
analogWrite(RedLED, fade);
analogWrite(GrnLED, fade);
analogWrite(BluLED, fade);
Delay(50);
}
}
Koppla loss servo att stänga av efter om-uttryck
myservo.detach();
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: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
å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;
}