### 4.3.2 Light Intensity Detector #### 4.3.2.1 Overzicht ![Img](./media/top1.png) De light intensity detector, ook wel de illuminance meter of Lux meter genoemd, is een gespecialiseerd instrument dat wordt gebruikt om de totale hoeveelheid licht (d.w.z. verlichtingssterkte) die op een oppervlak valt te meten. Het werkt voornamelijk op basis van het foto-elektrische effect. In dit project wordt de door de lichtsensor gedetecteerde helderheid in realtime op de OLED weergegeven. Wanneer deze een bepaalde waarde overschrijdt, geeft de speaker op de board een alarm als waarschuwing en herinnering. Light intensity detectors worden veel gebruikt in vrijwel alle situaties waarin het kwantificeren van “licht” vereist is, zoals buiten- en straatverlichting, binnenverlichtingsontwerp en -acceptatie, fotografie en videoproductie, architectuur en gezondheid, enz. ![Img](./media/bottom1.png) #### 4.3.2.2 Componentkennis ![Img](./media/2top.png) **Microbit Light Sensor** ![Img](./media/j101.png) Aangezien de micro:bit board geen eigen fotoresistor bevat, neemt de LED-matrix deze taak op zich. Het lichtsignaal wordt omgezet naar input, en de spanningsvervaltijd wordt bemonsterd zodat de gedetecteerde lichtintensiteit een relatieve waarde is. (**Opmerking**: de lichthelderheid wordt naar de seriële poort gestuurd en is een relatieve waarde.) **Microbit Speaker** ![Img](./media/j901.png) Micro: Bit board beschikt over een ingebouwde speaker, wat het maken van geluid in programma’s vergemakkelijkt. Het kan geluiden voortbrengen zoals giechels, begroetingen en geeuwen, evenals allerlei tonen, noten en ritmes. Bijvoorbeeld, het kan het nummer *Ode to Joy* spelen. ![Img](./media/2bottom.png) #### 4.3.2.3 Vereiste componenten | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/usb.png) |![Img](./media/4pin.png)|![Img](./media/batterycase.png)| | micro USB cable ×1 | 4 pin wire ×1 | battery holder ×1 | |![Img](./media/AAbattery.png)| | | |AA battery(**zelf mee te brengen**) ×6| | | #### 4.3.2.4 Aansluitschema ⚠️ **Let bij het aansluiten op de kleur van de draden.** | OLED display | wire color | micro:bit shield pin | micro:bit board pin | | :----------: | :--------: | :------------------: | :-----------------: | | GND | black | G | G | | VCC | red | V2 | V | | SDA | blue | 20 | P20 | | SCL | green | 19 | P19 | ![Img](./media/couj2.png) #### 4.3.2.5 Stroomdiagram van de code ![Img](./media/flow-chart-02.png) #### 4.3.2.6 Testcode ⚠️ **Tip 1: Voordat je de code naar de Microbit board downloadt, importeer je het bibliotheekbestand “oled_ssd1306\.py” verwijzend naar ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tip 2: De drempel in de “if()...elif()...” voorwaarde kan aangepast worden afhankelijk van de daadwerkelijke situatie.** **Complete code:** ```Python ''' Theme: Light intensity detector Function: OLED displays the light intensity and the microbit light sensor controls the 5×5 dot matrix and speaker Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com ''' # importeer gerelateerde bibliotheken from microbit import * from oled_ssd1306 import * import music val1 = Image("90909:""09990:""99999:""09990:""90909") # Stel patroon in val2 = Image("00000:""00900:""09990:""00900:""00000") # Stel patroon in # initialiseer en wis OLED initialize() # initialiseer OLED clear_oled() # wis OLED while True: clear_oled() # wis OLED Lightintensity = display.read_light_level() # Lees de lichtintensiteit gedetecteerd door de micro:bit lichtsensor en ken deze toe aan de variabele Lightintensity add_text(0, 0, 'Lightintensity:') # Toon de tekenreeks op de overeenkomstige positie van OLED add_text(16, 0, str(Lightintensity)) # Toon Lightintensity op de overeenkomstige positie van OLED if Lightintensity >= 100: # wanneer lichtintensiteit >= 100 display.show(val1) # LED-matrix toont patroon1 music.play("C5:1") # speaker speelt toon C5 sleep(50) music.play("D5:2") # speaker speelt toon D5 sleep(50) music.play("B5:4") # speaker speelt toon B5 sleep(50) elif Lightintensity > 0 and Lightintensity < 100: # wanneer 0 < lichtintensiteit < 100 display.show(val2) # LED-matrix toont patroon2 music.play("C3:1") # speaker speelt toon C3 else: # anders display.clear() # Zet de helderheid van alle LEDs op 0 (uit) music.reset() # geen toon sleep(1000) ``` ![Img](./media/line1.png) **Korte uitleg:** ① Importeer de libraries microbit, oled_ssd1306 en music. ```Python # importeer gerelateerde bibliotheken from microbit import * from oled_ssd1306 import * import music ``` ② Definieer twee patronen. ```Python val1 = Image("90909:""09990:""99999:""09990:""90909") # Stel patroon in val2 = Image("00000:""00900:""09990:""00900:""00000") # Stel patroon in ``` ③ Initialiseer OLED-pixels en wis de OLED. ```Python # initialiseer en wis OLED initialize() # initialiseer OLED clear_oled() # wis OLED ``` ④ Lees de helderheidswaarde via de micro:bit en toon deze op de OLED. ```Python Lightintensity = display.read_light_level() # Lees de lichtintensiteit gedetecteerd door de micro:bit lichtsensor en ken deze toe aan de variabele Lightintensity add_text(0, 0, 'Lightintensity:') # Toon de tekenreeks op de overeenkomstige positie van OLED add_text(16, 0, str(Lightintensity)) # Toon Lightintensity op de overeenkomstige positie van OLED ``` ⑤ Beslissingsstructuur: if()...elif()...else... Wanneer de gedetecteerde helderheid groter dan of gelijk aan 100 is, toont de 5×5 LED-matrix ![Img](./media/AAB2.png), en geeft de speaker alarmgeluid 1. ```Python if Lightintensity >= 100: # wanneer lichtintensiteit >= 100 display.show(val1) # LED-matrix toont patroon1 music.play("C5:1") # speaker speelt toon C5 sleep(50) music.play("D5:2") # speaker speelt toon D5 sleep(50) music.play("B5:4") # speaker speelt toon B5 sleep(50) ``` Als de gedetecteerde helderheid tussen 0 en 100 ligt, toont de 5×5 LED-matrix ![Img](./media/AAB1.png), en geeft de speaker alarmgeluid 2. ```Python elif Lightintensity > 0 and Lightintensity < 100: # wanneer 0 < lichtintensiteit < 100 display.show(val2) # LED-matrix toont patroon2 music.play("C3:1") # speaker speelt toon C3 ``` Anders toont de 5×5 LED-matrix niets en klinkt de speaker niet. ```Python else: # anders display.clear() # Zet de helderheid van alle LEDs op 0 (uit) music.reset() # geen toon ``` ⑥ Pauze van 1000 ms (1 s). ```Python sleep(1000) ``` #### 4.3.2.7 Testresultaat ![Img](./media/4top.png) Na het aansluiten en inschakelen via de micro USB-kabel, koppel externe voeding (6 AA-batterijen) om voldoende stroom te garanderen, en klik “Flash” om de code naar de micro:bit board te downloaden. ![Img](./media/A124.png) Na het uploaden van de testcode, druk op de resetknop aan de achterkant van de micro:bit. ![Img](./media/A455.png) De OLED toont realtime de door de lichtsensor gedetecteerde helderheidswaarde. Wanneer de gedetecteerde helderheid groter is dan 100, toont de 5×5 LED-matrix ![Img](./media/AAB2.png), en geeft de speaker alarmgeluid 1 als een hoog-niveau waarschuwing. Als de gedetecteerde helderheid tussen 0 en 100 ligt, toont de 5×5 LED-matrix ![Img](./media/AAB1.png), en geeft de speaker alarmgeluid 2 als een laag-niveau waarschuwing. Anders toont de 5×5 LED-matrix niets en klinkt de speaker niet. ![Img](./media/dongtu-2.gif) ⚠️ **Opmerking: De bouwstenen in het experiment zijn niet inbegrepen in deze kit.** (**Tip:** Als er geen resultaat zichtbaar is, druk dan op de resetknop van de micro:bit board.) ![Img](./media/4bottom.png)