Inhoudsopgave:

LED-helderheid kalibreren: 5 stappen
LED-helderheid kalibreren: 5 stappen

Video: LED-helderheid kalibreren: 5 stappen

Video: LED-helderheid kalibreren: 5 stappen
Video: Je monitor kalibreren - kalibratie van een beeldscherm 2024, November
Anonim
LED-helderheid kalibreren
LED-helderheid kalibreren

Terwijl ik een sprookjeslicht aan het maken was, realiseerde ik me dat de PWM-waarde niet-lineair evenredig is met de helderheid van de LED. Simpel gezegd, als de PWM-waarde het dubbele is, is de helderheid niet het dubbele; vooral wanneer PWM dicht bij het maximum is, is elke verandering niet herkenbaar voor mijn ogen. Ik dacht dat het een eenvoudig kalibratieprobleem moest zijn! en zo heb ik dit project gemaakt! Het idee is om de helderheid van een LED te meten met een apparaat (lichtsterktesensor of fotoresistor) en een correlatie te vinden tussen de PWM-waarde en de helderheid. Later, als ik de helderheid instel op 50%, berekent Arduino de bijbehorende PWM en dimt de LED dienovereenkomstig.

Daarom heb ik een lichtsterktesensor en een LED nodig om de helderheid te meten. Met behulp van een SD-kaart zal ik de gegevens opslaan voor een latere aanpassingsprocedure. De aanpassing gebeurt in Excel (of een ander programma). De output wordt gebruikt in Arduino-code, en dat is alles! Het moet een keer gedaan worden. Dan kunt u de kalibratieparameter voor altijd gebruiken!

Stap 1: Onderdelen

1- WEMOS mini D1: Aliexpress 3€

2- TSL 2561 (helderheidssensor): Aliexpress 3€

3- SD-kaartmodule: Aliexpress 1€

4- LED

5- Weerstand 220 ohm

6- draden

totale kosten: 8 -10 €

Stap 2: Bedrading

Bedrading
Bedrading
Bedrading
Bedrading
Bedrading
Bedrading

SD-kaartmodule en lichtsensordraden mogen (de meeste) niet worden gewijzigd. Led moet worden aangesloten op een PWM-pin.

Stap 3: Coderen

Code
Code

Ik heb drie stukjes codes gecombineerd:

SD-kaart: gebruikt voorbeeld >SD > ReadWrite in Arduino IDE

TSL 2561: gebruikt Adafruit TSL2561 Library-voorbeeld (sensorapi); je zult het in voorbeelden vinden, als je de bibliotheek installeert (ik neem aan dat je weet hoe je een bibliotheek in Arduino IDE moet installeren).

LED-fading: gebruikte voorbeelden > Analoog > fading

De code zal, na het initialiseren van de modules, de led dimmen en de helderheid aflezen en opslaan op de SD-kaart. op deze manier zal ik wat gegevens verzamelen voor kalibratie.

Ik veranderde elk van de code volgens mijn behoeften. de definitieve code bijgevoegd.

Het signaal moet eruitzien als de bijgevoegde afbeelding. Helaas ben ik vergeten een foto te maken, dus ik verplaats het in Excel om je te laten zien hoe het zou moeten zijn.

OPMERKING: ik gebruik wemo mini D1 in plaats van Arduino. om de een of andere reden die ik niet weet, ligt de PWM tussen 0 en 1023. In Arduino zou het tussen 0-255 moeten zijn. Als je de code voor arduino wilt gebruiken, moet je ervoor zorgen (regel 90).

Stap 4: Montage en gebruik

Aanpassen en gebruiken
Aanpassen en gebruiken
Aanpassen en gebruiken
Aanpassen en gebruiken

na het verzamelen van gegevens, opende ik het bestand in Excel en plotte de gegevens (kijk naar de afbeelding). de eerste kolom is de PWM-waarde en de tweede is lux (uitlezing van de sensor, de eenheid maakt niet veel uit). Plot daarom lux (y-as) versus PWM (x-as). Zoals je kunt zien is de helderheid lineair evenredig met de PWM-waarde. Ik heb er een lijn op aangebracht.

Volg als volgt om een lijn te passen:

1- plot de gegevens (invoegen> scatterplot) ik neem aan dat je weet hoe.

2- klik met de rechtermuisknop op de geplotte gegevens

3- klik op trendlijn.

4- (in Excel 2013) aan de rechterkant verschijnt een paneel. Kies lineair. Kies onderaan voor "vergelijking weergeven op grafiek".

De lineaire relatie is anders dan mijn perceptie. Daarom denk ik dat er een logaritmische relatie moet zijn tussen mijn waarneming en de helderheid (dit is de eenvoudigste manier die in mij opkwam!). Dus ik nam de helling van de pasvorm. Het onderscheppen is niet belangrijk, omdat het afhangt van de omringende lichtvervuiling! in plaats daarvan heb ik 1 toegevoegd. Omdat Log10(0) oneindig is. Dus ik heb een intercept nodig om het probleem op te lossen. In mijn geval ziet de vergelijking er als volgt uit:

y =Log10 (0,08 x +1), y is de helderheid en x is de PWM-waarde (0-1023)

Ik heb de vergelijking genormaliseerd naar de maximale waarde. dan is het uitgangssignaal altijd tussen 0-100. op deze manier kan ik arduino om een bepaalde relatieve helderheid vragen, zonder me zorgen te maken over de maximale absolute helderheid.

y =Log10(0,08 x +1)*100/1,914

Omdat mijn invoer in Arduino de relatieve helderheid is, moet ik de vergelijking voor x (PWM) opnieuw rangschikken:

x = (10^(y*1.914/100) - 1) / 0.08

met behulp van deze vergelijking in de code kunnen we een lineaire helderheidsverandering krijgen. Dus je vraagt arduino om een helderheid (y) tussen 0-100, en arduino berekent de bijbehorende PWM-waarde. op deze manier, als de helderheid verdubbeld is, is je waarneming ook hetzelfde.

als je het in je code wilt gebruiken, kun je beter deze regels toevoegen:

helderheid=50; // in procenten

PWM = pow (10, helderheid*1.914/100)-1)/0.0793;

analoogWrite(ledpin, PWM);

OPMERKING: de normalisatie wordt gedaan voor een maximale PWM van 1023 (voor Wemos mini D1). Voor Arduino ligt PWM tussen 0-255. je moet het dienovereenkomstig berekenen.

OPMERKING 2: Ik heb een log-lineaire plot toegevoegd om te laten zien hoe onze perceptie en PWM-waarde gerelateerd zijn. je moet het niet gebruiken om te passen!

Stap 5: Conclusie

de kalibratie werkt prima voor mij. Wanneer de PWM-waarden groot zijn, kan ik het verschil zien. Vroeger als de grote waarden kon ik het effect van dimmen niet zien. In principe zijn de meeste wijzigingen doorgevoerd in een klein bereik van PWM. nu is het gekalibreerd!

elke LED, speciaal verschillende kleuren, moet zijn eigen kalibratieparameters hebben. Ik heb echter een blauwe LED gekalibreerd en de parameter voor een witte LED gebruikt en het resultaat was acceptabel. dus misschien kun je mijn kalibratieparameter gebruiken zonder jezelf lastig te vallen !!

Aanbevolen: