Ultrasonic Garage parkering Assistant med Arduino och en ATtiny85 (3 / 4 steg)
Steg 3: Ladda upp koden till Arduino
Först, ladda hem och installera senaste Arduino IDE (1.0.5) här är en länk till data överför sida http://arduino.cc/en/Main/Software.Vi nu vad man ska installera NewPing biblioteket, här är en länk om att hämta och installera NewPing biblioteket http://playground.arduino.cc/Code/NewPing.
Om du tänker använda ATtiny måste sedan del av filen NewPing.cpp redigeras. Det finns två stora avsnitt i koden ägnas åt timers, kommentera alla här ute. NewPing.h kan lämnas ensam.
Det är viktigt att använda detta bibliotek och inte att utföra avståndsmätning manuellt. Anledningen är att när ping sensorn inte kan returnera ett avstånd, det kommer att försena en full sekund i stället för flera gånger per sekund som det ska. Detta är ett problem när du drar bilen och det finns inget svar från enheten under en kort period. I den tiden kan en bil flytta flera fötter och gör enheten värdelös. Detta bibliotek fixar som utfärdar således maintaing lyhördhet.
PIN-kod kommer att vara men du väljer att koppla upp din arduino ombord, så se till att justera denna kod för att arbeta med din krets. Kom ihåg, om du vill använda pwm för att få din färg ljusstyrka precis rätt se till att använda stift med en ~ symbol för din LED eller hänvisa till ATtiny85 pinut diagrammet för pwm stift. Jag tog inte med någon användning av den blå nålen, helt enkelt eftersom ATtiny85 inte har tillräckligt stift utan reprograming Återställ PIN-koden för att vara I/O. Jag brydde mig inte att göra så.
Du kanske vill lägga till några nya färger eller ändra den upp som passar ditt humör. Om du behöver mer exakta uppgifter, kan du sänka värdet intervall till 1 eller 2 (Tänk på att dess +/-, så en 2 för variabeln utbud kommer att ge en 4 tums intervall) eller ta upp det högre om du har rum att avvara. Du kan också redigera distanserar där varje färg av LED kommer att förändras. Jag hittade 120 och 50 inches vara precis rätt.
Uppdatering: LED har flyttats till stift 0 & 1. Metoden yellow() har uppdaterats för att inkludera PWM. Du kan behöva hitta vilka värden fungerar bäst med din LED.
Koden
#include < NewPing.h > //include NewPing biblioteket I/O pins värden att hålla reda på NewPing sonar (0, 1, 500); konstruktorn för NewPing sonar (triggerPin, echoPin, max_CM) void setup() Delay(100); Långsam program ner - spara batteri? currentButton = debounce(lastButton); läser knappen status och utför debounce, fixar oväntade knappen beteende om (lastButton == låg & & currentButton == hög) //when knappen sköt, ange önskat avstånd för parkering lastButton = currentButton; reset knappen status övre = set + intervall; + /-tums toleransintervallet om (avstånd < = övre & & avstånd > = lägre) //within ange område, sluta! om avstånd doest förändring för 250 cykler (30 SEK) stänga av LED -> kraft räddningen sätt } om (avstånd > = set + 120) //sensor blir innacurate på avstånd mycket längre än 120 tum tidigare = avstånd; uppdatera avstånd Dämpningstid metod att korrigera för spänningstoppar som orsakar oväntade resultat färg metoder.
int rLED = 0;
int gLED = 1;
int buttonPin = 2;
int echo = 3;
int trigger = 4;
int avstånd = 0;
int set = 0;
int övre = 0;
int lägre = 0;
int utbud = 3; utbudet är så det är dubbla värdet i tum
int count = 0;
booleska lastButton = låg; hålla reda på knappen status
booleska currentButton = låg;
int tidigare = 0; hålla reda på avstånd att identifiera när bilen är parkerad
int nuvarande = 0;
{
pinMode (gLED, produktionen);
pinMode (rLED, produktionen);
pinMode (buttonPin, ingång);
}
void loop()
{
avståndet = sonar.ping_in(); upptäcka avstånd i tum
IF(Distance == 0) avstånd = 500. om inga avstånd läses in på max avstånd
Nuvarande = avstånd; kontrollera hur länge bilen har parkerat för att komma in energisparläge
{
ställa in = avstånd; ny variabel för avståndet mätt
flashGreen(); flimmer grön LED 3 gånger
flashGreen();
flashGreen();
}
lägre = set - utbud;
{
avståndet varierar något som leder till falska rörelse detektering
om (nuvarande == tidigare || nuvarande == tidigare + 1 || nuvarande == tidigare - 1)
{
greve ++; öka räkna om bilen inte har flyttat
}
annat
{
Count = 0; ogillar räkna om det finns en significat förändring i avstånd
}
om (count > = 250)
{
Off();
count = 250; inte öka forever
}
annat
{
Red(); inom spänna, sluta. röda lysdioden på
}
IF(Distance > Upper)
{
Count = 0; om bilen rör sig långsamt nog, det kan aldrig återställa räkningen i ovan kod, vi återställa igen, bara i fall
{//no bil i garage inaktivera LED
Off();
}
om (avstånd < set + 120 & & avstånd > set + 50) //car upptäcks
{//if avstånd är mindre än set + 120 tum och större än set + 50 tum
Green();
}
om (avstånd < = set + 50 & & avstånd > övre) //wihtin 50 inches av visst avstånd, sakta ner
{
Yellow();
}
}
IF(Distance < Lower) //car är för nära, måste du säkerhetskopiera
{
Count = 0; samma situation för om bilen rör sig mycket långsamt
flashRed();
}
} //end av loop
Boolean debounce(boolean last)
{
booleska ström = digitalRead(buttonPin);
om (sista! = nuvarande)
{
Delay(5);
Nuvarande = digitalRead(buttonPin);
}
returnera aktuell;
}
void green()
{
digitalWrite (rLED, hög); på grund av pull-up resistor krets, är koden inverterad
digitalWrite (gLED, låg);
}
void red()
{
digitalWrite (gLED, hög);
digitalWrite (rLED, låg);
}
void yellow()
{
digitalWrite (rLED, 0);
digitalWrite (gLED, 100);
}
void flashRed()
{
digitalWrite (gLED, hög); blixt röd LED
digitalWrite (rLED, låg);
Delay(100);
digitalWrite (rLED, hög);
Delay(100);
}
void flashGreen()
{
digitalWrite (rLED, hög);
digitalWrite (gLED, låg); flimmer grön LED när knappen sköt
Delay(50);
digitalWrite(gLED,HIGH);
Delay(50);
}
void off()
{
digitalWrite (gLED, hög); stänga av lampan
digitalWrite (rLED, hög);
}
Slutet av koden
Kopiera och klistra in koden i Arduino IDE och slå uppladdning.
Igen, måste du redigera pin-koder för att rymma din krets och göra de ändringar du vill.