Gör en Attiny13 baserat IR-Närhetssensor för $2,42 (5 / 7 steg)
Steg 5: Tråd upp AVR (Arduino) och programmera chip
Installera Attiny13 Core13 från sourceforge. Här är en Instructable av diy_bloke med vägbeskrivningar och till en zipfil att ladda ner.
Här är MIT: s instruktioner för att ändra din miljö för att bränna Attiny.
Denna sida kan hjälpa om du har problem. Kolla kommentarerna.
Kabel i Arduino. Du kan upptackla det när planeringen är klar.
Ladda INO-filen och bränna den till Attiny13 chip.
Alternativt använda bara en AVR programmerare för att bränna hex filen eller Instructable författare nikkipugh har en super strip styrelsen sköld design för programmering attiny13 marker.
Du kan behöva en 10uf kondensatorn eller 120 ohms motstånd från Arduino är återställa till marken.
kod:
/*
Attiny13 Närhetssensor
Dustin Andrews 2012
Licens: Creative Commons Unported http://creativecommons.org/licenses/by/3.0/
*/
Göra några låga AVR pin skriver att spara instruktioner. 1010 1024. Nära!
#define SetPin(Bit) PORTB | = (1 << Bit)
#define ClearPin(Bit) PORTB & = ~ (1 << Bit)
koppla din IR ledde till detta stift. (chip pin 5?);
#define irOutPin 3
Detta stift går hög när sensorn upptäcker och hinder. chip PIN-kod (6)
#define outPin 1
tråd detta stift till din phototrans vcc -> phototrans -> pin4--> 1 M res -> gnd (chip pin3)
#define sensorInPin 2
void setup()
{
pinMode (irOutPin, produktionen);
pinMode (outPin, utgång);
pinMode (2, utgång);
analogReference (0), //analogread fungerar inte på Atiny13 utan denna linje. Fungerar inte på andra med det prob'ly.
}
void loop()
{
statiska lång skillnaden = 0;
osignerad statiska lång lastTime = 0;
SetPin(irOutPin);
delay1();
unsigned int r1 = analogRead(sensorInPin);
ClearPin(irOutPin);
delay1();
unsigned int r2 = analogRead(sensorInPin);
skillnaden += r1 - r2;
IF(Millis() - lastTime > 5) //might få ett jämnare svar med större förseningar
{
IF(Difference > 0)
{
SetPin(outPin);
}
annat
{
ClearPin(outPin);
}
skillnaden = 0;
lastTime = millis();
}
}
void delay1()
{
Delay(1) är för dyra i minnet. Varför är det så mycket billigare? : D
långa start = millis();
While(true)
{
IF(Millis() - start > 1) {bryta;}
}
}