Nerf Sentry Gun (3 / 4 steg)
Steg 3: Koden!
Nu allt du behöver göra är att skriva kod för att göra alla dessa olika fungerar komponenterna tillsammans.Första börjar du med Servo sopa koden från Arduino Playground, vilket gör att servo ständigt sopa på sätt
Därefter skapar du en subrutin som finner den tid det tar för en Ultraljuds signal som ska skickas och återgå till inloppssidan av sensorn. Sedan anger det det här värdet till en variabel
här är exempelkoden
Hur man gör det
digitalWrite (Trig_pin, låg);
delayMicroseconds(2);
digitalWrite (Trig_pin, hög);
delayMicroseconds(5);
digitalWrite (Trig_pin, låg);
längd = pulseIn(Echo_pin,HIGH);
Serial.println (varaktighet, DEC);
Delay(50);
Sedan inom en för öglor av svep koden skapar ett tag loop. som säger när sedan varaktighetsvärde ligger under ett visst antal
servo pauserna, tänds och du kontrollera sensorn värdet igen.
Helt kommenterade kod med mitt projekt är kopplad
/*
Sentry Gun
Ett ultraljud givare är ständigt Skanna för att hitta avståndet till närmaste objektet
utifrån detta värde Servo motorn stannar (gun stoppar svepande) och tänds,
sedan kontrollerar sensor värde igen
Krets:
Servomotor är ansluten till Digital Pin 9 och Power Ground
LED är ansluten till digital stift 13
Ingången på Ultrasonic sensor är ansluten till stift 12
Produktion är ansluten till digital stift 7;
Skapad November 2013 av Krishna Peri
modifierade December 2013 av KRishna Peri
*/
#include < Servo.h >
#include < SoftwareSerial.h >
CONST int Trig_pin = 7. Utlösare Pulsoe för Ultrasonic Sensor
CONST int Echo_pin = 12; Recevies Echo för Ultrasonic Sensor
int ledpin = 13. ledde pin kommandot pin
lång varaktighet; Tid det tar för puls att studsa tillbaka till höger Ultrasonic Sensor
unsigned int längd = 1; avstånd för ultraljud
Servomotor; Servomotor som styr
int pos = 0; variabel att lagra servo position
int Dcmotor = 10; gör ingenting just nu
void setup() {
Serial.BEGIN(9600); Ställ in följetong bibliotek på 9600 bps
motor.attach(9); Servomotor är kopplad till pin 9
initiera puls stiftet som utdata:
pinMode (Trig_pin, OUTPUT);
initiera echo_pin PIN-koden som indata:
pinMode (Echo_pin, indata);
pinMode(ledpin,OUTPUT);
pinMode(Dcmotor,OUTPUT);
}
void loop()
{
för (pos = 0; pos < 180; pos += 2) / / kör servo i steg om 5 från 0 till 180
{
motor.write(POS);
Delay(15);
Sensorn ();
medan (varaktighet > 10 & & varaktighet < 400) {/ / om sensorn känner något att stänga
delayMicroseconds(30); pausar servo
digitalWrite(ledpin,HIGH); vänder på led
Sensor(); kontrollerar om objektet är fortfarande att stänga
}
digitalWrite(ledpin,LOW); stänger av led
}
för (pos = 180, pos > = 1; pos-= 2) / / samma som föregående for-slingan utom kör i motsatt riktning
{
motor.write(POS);
Delay(15);
Sensorn ();
medan (varaktighet > 10 & & varaktighet < 400) {
digitalWrite(ledpin,HIGH);
delayMicroseconds(30);
Sensor();
}
digitalWrite(ledpin,LOW);
}
}
void Sensor() {/ / kontrollerar avståndet från sensorn till närmaste objektet rakt fram
digitalWrite (Trig_pin, låg);
delayMicroseconds(2); förseningar
digitalWrite (Trig_pin, hög); börjar signal
delayMicroseconds(5); dröjsmål
digitalWrite (Trig_pin, låg); stopp signal
längd = pulseIn(Echo_pin,HIGH); kontrollerar vad värdet är
Serial.println (varaktighet, DEC); skriver ut värdet
Delay(50); förseningar
}