Fotocell tutorial! (7 / 7 steg)
Steg 7: BONUS! Behandlingen fotoceller utan analog pins
Eftersom fotoceller är i grunden motstånd, det är möjlighet att använda dem även om du inte har någon analog stiften på din mikrokontroller (eller om säga du vill ansluta mer än du har analog ingång stift). Det sätt vi gör detta är genom att utnyttja en grundläggande elektroniska egenskap av motstånd och kondensatorer. Det visar sig att om du tar en kondensator som ursprungligen lagrar ingen spänning, och Anslut den till makten (som 5V) genom en resistor, kommer det ta ut upp till nätspänningen långsamt. Ju större motståndet, den långsammare det är.
Denna fånga från ett oscilloskop visar vad som händer på det digitala stiftet (gul). Den blå linjen anger när skissen börjar räkna och när inventeringen är klar, ca 1.2ms senare.
Detta är eftersom kondensatorn fungerar som en hink och motståndet är som en tunn pipa. För att fylla en hink med en mycket tunn pipa tar nog tid som du kan räkna ut hur bred röret är av timing hur lång tid det tar för att fylla hinken upp halvvägs.
I detta fall våra "hink" är en 0.1uF keramiska kondensator. Du kan ändra kondensatorn nästan som du vill men tidpunkten värdena ändras också. 0.1uF verkar vara ett OK ställe att börja för dessa fotoceller. Om du vill mäta ljusare spänner, använda en 1uF kondensator. Om du vill mäta mörkare spänner, gå ner till 0.01uF.
/ * Fotocellen enkel testning skiss.
Anslut ena änden av fotocell till makten, den andra änden till stift 2.
Anslut ena änden av en 0.1uF kondensator från stift 2 till marken
För mer information se www.ladyada.net/learn/sensors/cds.html * /
int photocellPin = 2; LDR och cap är anslutna till pin2
int photocellReading; digital läsning
int ledPin = 13. Du kan bara använda den "inbyggda" LED
void setup(void) {
Vi skickar avlusningsinformation via seriell bildskärmen
Serial.BEGIN(9600);
pinMode (ledPin, produktionen); har en LED för utdata
}
void loop(void) {
Läs motståndet med RCtime teknik
photocellReading = RCtime(photocellPin);
om (photocellReading == 30000) {
om vi fick 30000 som innebär att gått vi"ut"
Serial.println ("ingenting ansluten!");
} annat {
Serial.Print ("RCtime läsning =");
Serial.println(photocellReading); den råa analoga behandlingen
Desto ljusare är det, ju snabbare det blinkar!
digitalWrite (ledPin, hög);
Delay(photocellReading);
digitalWrite (ledPin, låg);
Delay(photocellReading);
}
Delay(100);
}
Använder en digital pin för att mäta en resistor (som en FSR eller fotocell!)
Vi gör detta genom att ha motstånd matar strömmen i en kondensator och
räkna hur lång tid det tar för att få till Vcc/2 (för de flesta arduinos, som är 2.5V)
int RCtime (int RCpin) {
int läsa = 0; börja med 0
Ange PIN-koden till en utgång och dra till låg (marken)
pinMode (RCpin, OUTPUT);
digitalWrite (RCpin, låg);
Nu ange PIN-koden till en ingång och...
pinMode (RCpin, indata);
medan (digitalRead(RCpin) == låg) {/ / räkna hur lång tid det tar för att stiga upp till hög
behandlingen ++; steg att hålla reda på tid
om (läser == 30000) {
om vi fick detta långt, motståndet är så hög
det troligt att ingenting är ansluten!
bryta; lämna loopen
}
}
Antingen vi maxade OK på 30000 eller förhoppningsvis fick en läsning, returnera antalet
returnera behandlingen.
}