KY-018 Fotowiderstand Modul
Aus SensorKit X40 Wiki
Inhaltsverzeichnis
Bild
Technische Daten / Kurzbeschreibung
Beinhaltet einen LDR-Widerstand, dessen Widerstandswert bei hellerer Umgebung kleiner wird.
Dieser Widerstand lässt sich mit Hilfe eines Spannungsteilers bestimmen, wo sich eine bekannte Spannung über einen bekannten und einen unbekannten (veränderlichen) Widerstand aufteilt. Mittels dieser gemessenen Spannung lässt sich dann der Widerstand berechnen - die genaue Berechnung ist in den unten stehenden Codebeispielen enthalten.
Pin-Belegung
Codebeispiel Arduino
Das Programm misst den aktuellen Spannungswert am Sensor, berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus.
int sensorPin = A5; // Hier wird der Eingangs-Pin deklariert // Serielle Ausgabe in 9600 Baud void setup() { Serial.begin(9600); } // Das Programm misst den aktuellen Spannungswert am Sensor, // berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen // Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus void loop() { // Aktueller Spannungswert wird gemessen... int rawValue = analogRead(sensorPin); float voltage = rawValue * (5.0/1023) * 1000; float resitance = 10000 * ( voltage / ( 5000.0 - voltage) ); // ... und hier auf die serielle Schnittstelle ausgegeben Serial.print("Spannungswert:"); Serial.print(voltage); Serial.print("mV"); Serial.print(", Widerstandswert:"); Serial.print(resitance); Serial.println("Ohm"); Serial.println("---------------------------------------"); delay(500); }
Anschlussbelegung Arduino:
Sensor GND | = | [Pin GND] |
Sensor +V | = | [Pin 5V] |
Sensor Signal | = | [Pin A5] |
Beispielprogramm Download
Codebeispiel Raspberry Pi
!! Achtung !! Analoger Sensor !! Achtung !!
Der Raspberry Pi besitzt im Gegensatz zum Arduino keine analogen Eingänge bzw. es ist kein ADC (analog digital Converter) im Chip des Raspberry Pi's integriert. Dies schränkt den Raspberry Pi ein, wenn man Sensoren einsetzen möchte, wo nicht digital Werte ausgegeben werden [Spannungswert überschritten -> digital EIN | Spannungswert unterschritten -> digital AUS | Beispiel: Knopf gedrückt [EIN] Knopf losgelassen [AUS]], sondern es sich hier um einen kontinuierlichen veränderlichen Wert handeln sollte (Beispiel: Potentiometer -> Andere Position = Anderer Spannungswert)
Um diese Problematik zu umgehen, besitzt unser Sensorkit X40 mit dem KY-053 ein Modul mit 16 Bit genauen ADC, welches Sie am Raspberry nutzen können, um diesen um 4 analoge Eingänge erweitern zu können. Dieses wird per I2C an den Raspberry Pi angeschlossen, übernimmt die analoge Messung und gibt den Wert digital an den Raspberry Pi weiter.
Somit empfehlen wir, bei analogen Sensoren dieses Sets das KY-053 Modul mit dem besagten ADC dazwischenzuschalten. Nähere Informationen finden Sie auf der Informationsseite zum KY-053 Analog Digital Converter
!! Achtung !! Analoger Sensor !! Achtung !!
Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1x15 und I2C Python-Libraries der Firma Adafruit. Diese wurden unter dem folgenden Link https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15] unter der BSD-Lizenz [Link] veröffentlicht. Die benötigten Libraries sind im unteren Download-Paket enthalten.
Das Programm misst den aktuellen Spannungswert am Sensor, berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus.
#!/usr/bin/python # coding=utf-8 ############################################################################################################# ### Copyright by Joy-IT ### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License ### Commercial use only after permission is requested and granted ### ### KY-053 Analog Digital Converter - Raspberry Pi Python Code Example ### ############################################################################################################# import time import board import busio import adafruit_ads1x15.ads1115 as ADS from adafruit_ads1x15.analog_in import AnalogIn # Create the I2C bus i2c = busio.I2C(board.SCL, board.SDA) # Create the ADC object using the I2C bus ads = ADS.ADS1115(i2c) voltageMax = 3.3 # Create single-ended input on channels chan0 = AnalogIn(ads, ADS.P0) chan1 = AnalogIn(ads, ADS.P1) chan2 = AnalogIn(ads, ADS.P2) chan3 = AnalogIn(ads, ADS.P3) while True: resistance = chan0.voltage / (voltageMax - chan0.voltage) * 10000 print("Spannungswert: ",'%.2f' % chan0.voltage,"V, Widerstand: ",'%.2f' % resistance, "Ω") print("---------------------------------------------------") time.sleep(1)
Anschlussbelegung Raspberry Pi:
Sensor
GND | = | GND | [Pin 06 (RPi)] |
+V | = | 3,3V | [Pin 01 (RPi)] |
analoges Signal | = | Analog 0 | [Pin A0 (ADS1115 - KY-053)] |
ADS1115 - KY-053:
VDD | = | 3,3V | [Pin 17] |
GND | = | Masse | [Pin 09] |
SCL | = | GPIO03 / SCL | [Pin 05] |
SDA | = | GPIO02 / SDA | [Pin 03] |
A0 | = | s.o. | [Sensor: analoges Signal] |
Beispielprogramm Download
Zu starten mit dem Befehl:
sudo python3 RPi_Single_Analog_Sensor.py