Fotocel-zelfstudie!

Fotocellen oftewel CdS-cellen, fotoresistors, LDR (lichtafhankelijke weerstand) ...

Wat is een fotocel?

Fotocellen zijn sensoren waarmee je licht kunt detecteren. Ze zijn klein, goedkoop, energiezuinig, gebruiksvriendelijk en slijten niet. Om die reden komen ze vaak voor in speelgoed, gadgets en apparaten. Ze worden vaak verwezen naar CdS-cellen (ze zijn gemaakt van cadmiumsulfide), lichtafhankelijke weerstanden (LDR) en fotoresistors.

Een fotocel is in feite een weerstand die zijn resistieve waarde (in ohm) verandert, afhankelijk van hoeveel licht er op het kronkelige gezicht schijnt. Ze zijn zeer goedkoop, gemakkelijk verkrijgbaar in vele maten en specificaties, maar zijn zeer onnauwkeurig. Elke fotocelsensor werkt iets anders dan de andere, zelfs als ze uit dezelfde batch komen. De variaties kunnen erg groot zijn, 50% of hoger! Om deze reden mogen ze niet worden gebruikt om te proberen precieze lichtniveaus in lux of millicandela te bepalen. In plaats daarvan kunt u verwachten dat u alleen basisveranderingen in het licht kunt bepalen

Voor de meeste lichtgevoelige toepassingen zoals "is het licht of donker uit", "is er iets voor de sensor (dat licht zou blokkeren)", "is er iets dat een laserstraal onderbreekt" (break-beam sensoren), of "welke van meerdere sensoren heeft het meeste licht", fotocellen kunnen een goede keuze zijn!

Enkele basisstatistieken

Deze statistieken zijn voor de fotocel in de Adafruit-winkel die veel weg heeft van de PDV-P8001. Bijna alle fotocellen hebben iets andere specificaties, hoewel ze vrijwel allemaal hetzelfde werken. Als er een gegevensblad is, moet je ernaar verwijzen

  • Grootte: rond, 5 mm (0, 2 ") diameter. (Andere fotocellen kunnen tot 11 mm / 0, 4" diameter krijgen!)
  • Prijs $ 1, 50 bij de Adafruit-winkel
  • Weerstandsbereik: 200 K ohm (donker) tot 10 K ohm (10 lux helderheid)
  • Gevoeligheidsbereik: CdS-cellen reageren op licht tussen golflengten van 400 nm (violet) en 600 nm (oranje), met een piek van ongeveer 520 nm (groen).
  • Voeding: vrijwel alles tot 100V, verbruikt gemiddeld minder dan 1mA stroom (afhankelijk van voedingsspanning)
  • Datasheet en een ander Datasheet
  • Twee toepassingsnotities over het gebruik en de selectie van fotocellen waar bijna al deze grafieken uit zijn gehaald

Stap 1: Licht meten met een fotocel


Zoals we al zeiden, verandert de weerstand van een fotocel naarmate het gezicht wordt blootgesteld aan meer licht. Als het donker is, ziet de sensor eruit als een grote weerstand tot 10 M ohm, naarmate het lichtniveau toeneemt, daalt de weerstand. Deze grafiek geeft ongeveer de weerstand van de sensor aan bij verschillende lichtniveaus. Onthoud dat elke fotocel een beetje anders zal zijn, dus gebruik dit alleen als richtlijn!

(Zie onderstaande grafiek Weerstand versus verlichting)
Merk op dat de grafiek niet lineair is, het is een log-loggrafiek!

Fotocellen, met name de gewone CdS-cellen die u waarschijnlijk zult vinden, zijn niet gevoelig voor al het licht. Ze zijn met name gevoelig voor licht tussen 700 nm (rood) en 500 nm (groen) licht.

Kortom, blauw licht is niet zo effectief om de sensor te activeren als groen / geel licht!

Wat is in godsnaam lux?

De meeste datasheets gebruiken lux om de weerstand bij bepaalde lichtniveaus aan te geven. Maar wat is lux? Het is geen methode die we meestal gebruiken om helderheid te beschrijven, dus het is moeilijk te meten. Hier is een tabel aangepast van een Wikipedia-artikel over het onderwerp!
(Zie onderstaande verlichtingstabel)

Stap 2: Uw fotocel testen en aansluiten


Uw fotocel testen

De eenvoudigste manier om te bepalen hoe uw fotocel werkt, is door een multimeter in weerstandsmeetmodus op de twee draden aan te sluiten en te zien hoe de weerstand verandert wanneer u de sensor met uw hand beschaduwt, lichten uitdoet, enz. Omdat de weerstand veel verandert, een automatisch bereikbare meter werkt hier goed. Zorg er anders voor dat u verschillende bereiken probeert, tussen 1 M ohm en 1 K ohm voordat u 'opgeeft'

Verbinding maken met uw fotocel

Omdat fotocellen in feite weerstanden zijn, zijn ze niet gepolariseerd. Dat betekent dat je ze 'hoe dan ook' kunt verbinden en ze werken prima!

Fotocellen zijn behoorlijk winterhard, u kunt ze gemakkelijk solderen, de kabels vastklemmen, ze in breadboards steken, krokodillenklemmen gebruiken, enz. De enige zorg die u moet nemen, is te voorkomen dat u de kabels direct bij de geëpoxeerde sensor buigt, omdat deze kunnen afbreken indien te vaak gebogen.

Stap 3: Projectvoorbeelden



Lawaaimaker die de frequentie verandert op basis van het lichtniveau.


Motorwaarde en richtingscontrole met fotoresistoren en microcontroller


Lijnvolgende robot die fotocellen gebruikt om het licht te detecteren dat terugkaatst van wit / zwarte strepen

Een andere robot, deze heeft twee sensoren en beweegt naar het licht (ze worden Braitenberg-voertuigen genoemd)


Gebruik een fotocel en zaklaseraanwijzer om een ​​breakbeam sensor te creëren

Stap 4: Analoge spanningsleesmethode


De eenvoudigste manier om een ​​resistieve sensor te meten, is door het ene uiteinde op Power aan te sluiten en het andere op een pull-down-weerstand op aarde. Vervolgens wordt het punt tussen de vaste pulldown- weerstand en de variabele fotocelweerstand aangesloten op de analoge ingang van een microcontroller zoals een Arduino (afgebeeld)
(Zie schakelschema hieronder)

Voor dit voorbeeld laat ik het zien met een 5V-voeding, maar merk op dat je dit net zo gemakkelijk kunt gebruiken met een 3.3v-voeding. In deze configuratie varieert de analoge spanningswaarde van 0V (aarde) tot ongeveer 5V (of ongeveer hetzelfde als de voedingsspanning).

De manier waarop dit werkt, is dat naarmate de weerstand van de fotocel afneemt, de totale weerstand van de fotocel en de pulldown-weerstand afneemt van meer dan 600 K ohm tot 10 K ohm. Dat betekent dat de stroom die door beide weerstanden vloeit toeneemt, wat er weer voor zorgt dat de spanning over de vaste 10K ohm weerstand toeneemt. Het is nogal een truc!

(Zie eerste tabel hieronder)
Deze tabel geeft de geschatte analoge spanning aan op basis van het sensorlicht / weerstand met een 5V-voeding en 10K ohm pulldown-weerstand

Als u van plan bent om de sensor in een helder gebied te hebben en een pulldown van 10K ohm te gebruiken, zal deze snel verzadigen. Dat betekent dat het het 'plafond' van 5V raakt en geen onderscheid kan maken tussen nogal helder en echt helder. In dat geval moet u de pulldown van 10K ohm vervangen door een pulldown van 1K ohm. In dat geval zal het ook geen verschillen in donker niveau kunnen detecteren, maar het zal beter heldere lichtverschillen kunnen detecteren. Dit is een afweging waarover u moet beslissen!

(Zie tweede tabel hieronder)
Deze tabel geeft de geschatte analoge spanning aan op basis van het sensorlicht / weerstand met een 5V-voeding en 1K pulldown-weerstand

Merk op dat onze methode geen lineaire spanning levert met betrekking tot helderheid! Elke sensor zal ook anders zijn. Naarmate het lichtniveau toeneemt, gaat de analoge spanning omhoog, ook al daalt de weerstand:

Vo = Vcc (R / (R + fotocel))

Dat wil zeggen, de spanning is evenredig met het omgekeerde van de fotocelweerstand, die op zijn beurt omgekeerd evenredig is met de lichtniveaus

Stap 5: eenvoudige demonstratie van gebruik


Deze schets neemt de analoge spanningsmeting en gebruikt die om te bepalen hoe helder de rode LED is. Hoe donkerder het is, hoe feller de LED zal zijn! Onthoud dat de LED moet worden aangesloten op een PWM-pin om dit te laten werken, ik gebruik pin 11 in dit voorbeeld.

In deze voorbeelden wordt ervan uitgegaan dat u enkele basis Arduino-programma's kent. Als je dat niet doet, misschien wat tijd besteden aan het herzien van de basis in de Arduino-zelfstudie?

/ * Fotocel eenvoudige testschets.

Sluit het ene uiteinde van de fotocel aan op 5V, het andere uiteinde op analoog 0.
Sluit vervolgens het ene uiteinde van een 10K-weerstand van analoog 0 aan op aarde
Verbind de LED van pin 11 via een weerstand met aarde
Voor meer informatie zie www.ladyada.net/learn/sensors/cds.html * /

int fotocellPin = 0; // de cel en 10K pulldown zijn verbonden met a0
int fotocel Lezen; // de analoge aflezing van de sensorverdeler
int LEDpin = 11; // sluit rode LED aan op pin 11 (PWM pin)
int LEDbrightness; //
ongeldig setup (ongeldig) {
// We sturen foutopsporingsinformatie via de seriële monitor
Serial.begin (9600);
}

leegte lus (nietig) {
photocellReading = analogRead (photocellPin);

Serial.print ("Analog reading =");
Serial.println (fotocellezen); // de ruwe analoge lezing

// LED wordt helderder naarmate het donkerder is bij de sensor
// dat betekent dat we de aflezing moeten omkeren van 0-1023 terug naar 1023-0
fotocelReading = 1023 - fotocelReading;
// nu moeten we 0-1023 tot 0-255 toewijzen, want dat is het bereik dat analogWrite gebruikt
LEDbrightness = kaart (fotocelReading, 0, 1023, 0, 255);
analogWrite (LEDpin, LEDbrightness);

vertraging (100);
}

Misschien wil je verschillende pulldown-weerstanden proberen, afhankelijk van het lichtniveau dat je wilt detecteren!

Stap 6: Eenvoudige code voor analoge lichtmetingen:


Deze code voert geen berekeningen uit, hij print alleen uit wat hij interpreteert als de hoeveelheid licht op een kwalitatieve manier. Voor de meeste projecten is dit vrijwel alles wat nodig is!

/ * Fotocel eenvoudige testschets.

Sluit het ene uiteinde van de fotocel aan op 5V, het andere uiteinde op analoog 0.
Sluit vervolgens het ene uiteinde van een 10K-weerstand van analoog 0 aan op aarde

Voor meer informatie zie www.ladyada.net/learn/sensors/cds.html * /

int fotocellPin = 0; // de cel en 10K pulldown zijn verbonden met a0
int fotocel Lezen; // de analoge aflezing van de analoge weerstandsverdeler

ongeldig setup (ongeldig) {
// We sturen foutopsporingsinformatie via de seriële monitor
Serial.begin (9600);
}

leegte lus (nietig) {
photocellReading = analogRead (photocellPin);

Serial.print ("Analog reading =");
Serial.print (fotocellezen); // de ruwe analoge lezing

// We zullen een paar drempels hebben, kwalitatief bepaald
if (fotocelReading <10) {
Serial.println ("- Dark");
} else if (photocellReading <200) {
Serial.println ("- Dim");
} else if (photocellReading <500) {
Serial.println ("- Light");
} else if (photocellReading <800) {
Serial.println ("- Bright");
} anders {
Serial.println ("- Zeer helder");
}
vertraging (1000);
}

Om het te testen, begon ik in een zonovergoten (maar schaduwrijke) kamer en bedekte de sensor met mijn hand en bedekte hem vervolgens met een stuk verduisterende stof.

Stap 7: BONUS! Fotocellen lezen zonder analoge pinnen


Omdat fotocellen in feite weerstanden zijn, is het mogelijk om ze te gebruiken, zelfs als je geen analoge pinnen op je microcontroller hebt (of als je zegt dat je meer wilt aansluiten dan je analoge ingangspinnen hebt). De manier waarop we dit doen, is profiteren van een basale elektronische eigenschap van weerstanden en condensatoren. Het blijkt dat als u een condensator neemt die aanvankelijk geen spanning opslaat en deze vervolgens via een weerstand op stroom (zoals 5V) aansluit, deze langzaam tot de voedingsspanning wordt opgeladen. Hoe groter de weerstand, hoe langzamer hij is.

Deze opname van een oscilloscoop laat zien wat er gebeurt op de digitale pin (geel). De blauwe lijn geeft aan wanneer de schets begint te tellen en wanneer het tellen is voltooid, ongeveer 1, 2 ms later.

Dit komt omdat de condensator werkt als een emmer en de weerstand is als een dunne buis. Het vullen van een emmer met een zeer dunne pijp kost voldoende tijd om erachter te komen hoe breed de pijp is door te timen hoe lang het duurt om de emmer halverwege te vullen.

In dit geval is onze 'emmer' een keramische condensator van 0, 1 uF. U kunt de condensator bijna op elke gewenste manier wijzigen, maar de timingwaarden veranderen ook. 0.1uF lijkt een prima startpunt voor deze fotocellen. Als u helderdere bereiken wilt meten, gebruik dan een 1uF-condensator. Als u donkerdere bereiken wilt meten, ga dan naar 0, 01 uF.

/ * Fotocel eenvoudige testschets.
Sluit het ene uiteinde van de fotocel aan op stroom, het andere uiteinde op pin 2.
Sluit vervolgens het ene uiteinde van een condensator van 0, 1 uF aan van pin 2 naar aarde
Voor meer informatie zie www.ladyada.net/learn/sensors/cds.html * /

int fotocellPin = 2; // de LDR en cap zijn verbonden met pin2
int fotocel Lezen; // de digitale lezing
int ledPin = 13; // u kunt gewoon de 'ingebouwde' LED gebruiken

ongeldig setup (ongeldig) {
// We sturen foutopsporingsinformatie via de seriële monitor
Serial.begin (9600);
pinMode (ledPin, OUTPUT); // hebben een LED voor output
}

leegte lus (nietig) {
// lees de weerstand met behulp van de RCtime-techniek
photocellReading = RCtime (photocellPin);

if (fotocelReading == 30000) {
// als we 30000 hebben, betekent dit dat we 'een time-out hebben'
Serial.println ("Niets verbonden!");
} anders {
Serial.print ("RCtime reading =");
Serial.println (fotocellezen); // de ruwe analoge lezing

// Hoe helderder het is, hoe sneller het knippert!
digitalWrite (ledPin, HIGH);
vertraging (fotocellezen);
digitalWrite (ledPin, LOW);
vertraging (fotocellezen);
}
vertraging (100);
}

// Gebruikt een digitale pin om een ​​weerstand te meten (zoals een FSR of fotocel!)
// We doen dit door de weerstand stroom in een condensator te laten voeren en
// tellen hoe lang het duurt om bij Vcc / 2 te komen (voor de meeste arduinos is dat 2.5V)
int RCtime (int RCpin) {
int lezen = 0; // begin met 0

// zet de pin op een output en trek naar LOW (ground)
pinMode (RCpin, OUTPUT);
digitalWrite (RCpin, LOW);

// Stel nu de pin in op een invoer en ...
pinMode (RCpin, INPUT);
while (digitalRead (RCpin) == LOW) {// tel hoe lang het duurt om naar HIGH te stijgen
++ lezen; // increment om de tijd bij te houden

if (lezen == 30000) {
// als we zover zijn gekomen, is de weerstand zo hoog
// het is waarschijnlijk dat er niets is aangesloten!
breken; // verlaat de lus
}
}
// OK of we hebben een maximum van 30000 bereikt of hopelijk een meting gekregen, tel de telling terug

teruglezen;
}

Verwante Artikelen