Stap 7: BONUS! Lezing fotocellen zonder analoge pinnen
Omdat fotocellen zijn in principe weerstanden, zijn mogelijk om hen te gebruiken zelfs als u niet over een analoge beschikt pinnen op uw microcontroller (of als zeggen u verbinding wilt maken meer dan hebt u analoge input pinnen). De manier waarop we dit doen is door gebruik te maken van een eenvoudige elektronische eigenschap van weerstanden en condensatoren. Het blijkt dat als je een condensator die aanvankelijk geen spanning is opgeslagen, en sluit deze aan de macht (zoals 5V) door middel van een weerstand, zal het tot de netspanning langzaam oplaadt. Hoe groter de weerstand, de langzamer is.
Deze vangen van een oscilloscoop toont wat gebeurt op de digitale pin (geel). De blauwe lijn geeft aan wanneer de schets begint tellen en wanneer het tellen is voltooid, ongeveer 1.2ms later.
Dit is omdat de condensator gedraagt zich als een emmer en de weerstand als een dunne pijp is. Als u wilt een emmer vullen met een zeer dunne pijp duurt genoeg dat je hoe breed de pijp is achterhalen kunt door de timing van hoe lang het duurt om halverwege de emmer vullen.
In dit geval onze 'emmer' is een 0.1uF keramische condensator. U kunt de condensator bijna elke gewenste manier maar de timing waarden ook verandert. 0.1uF lijkt een OK-plek om te beginnen voor deze fotocellen. Als u meten helderder bereiken wilt, gebruiken een condensator van 1uF. Als u meten donkerder bereiken wilt, ga naar 0.01uF.
/ * Fotocel eenvoudige testen schets.
Sluit het ene uiteinde van de fotocel aan de macht, het andere uiteinde aan op pin 2.
Sluit één uiteinde van een 0.1uF condensator van pin 2 op grond
Voor meer informatie zie www.ladyada.net/learn/sensors/cds.html * /
int photocellPin = 2; de LDR en GLB zijn aangesloten op pin2
int photocellReading; de digitale lezing
int ledPin = 13; u kunt gewoon gebruik maken van de 'ingebouwde' LED
ongeldig setup(void) {}
We sturen foutopsporingsgegevens via de seriële monitor
Serial.begin(9600);
pinMode (ledPin, OUTPUT); hebben een LED voor uitvoer
}
ongeldig loop(void) {}
Lees de weerstand met behulp van de RCtime-techniek
photocellReading = RCtime(photocellPin);
Als (photocellReading == 30000) {}
Als we got 30000 betekent dat time-out we' '
Serial.println ("Nothing aangesloten!");
} else {}
Serial.Print ("RCtime lezing =");
Serial.println(photocellReading); de ruwe analoge lezing
Helderder het is, hoe sneller het knippert!
digitalWrite (ledPin, hoge);
delay(photocellReading);
digitalWrite (ledPin, laag);
delay(photocellReading);
}
delay(100);
}
Maakt gebruik van een digital pin voor het meten van een weerstand (zoals een FSR of fotocel!)
We doen dit door het hebben van de huidige weerstand feed in een condensator en
tellen hoe lang het duurt om naar Vcc/2 (voor de meeste arduinos, thats 2.5V)
int RCtime (int RCpin) {}
int lezing = 0; beginnen met 0
de PIN-code ingesteld op een uitgang en trek op laag (grond)
pinMode (RCpin, uitvoer);
digitalWrite (RCpin, laag);
Nu de pincode instellen op een ingang en...
pinMode (RCpin, INPUT);
terwijl (digitalRead(RCpin) == LOW) {/ / count hoe lang het duurt om het opstaan op hoog
lezing ++; _ / / verhogen als u wilt bijhouden van de tijd
Als (lezen == 30000) {}
Als we dit got ver, de weerstand is zo hoog
zijn waarschijnlijk dat niets is aangesloten!
breken; verlaten van de lus
}
}
OK ofwel we maxed op 30000 of hopelijk kreeg een lezing, keren de graaf
retourneren van lezing;
}