KY-052 Drucksensor / Temperatursensor - BMP180 -
Aus Linkerkit.de
Inhaltsverzeichnis
Bild
Technische Daten / Kurzbeschreibung
Dieser Drucksensor misst den Luftdruck am Sensorausgang (kleines Loch am silbernen Sensorgehäuse) und gibt das Ergebnis kodiert auf den I2C-Bus aus. Für diesen Sensor wird eine entsprechende Software benötigt
Pin-Belegung
Software-Beispiel Arduino
Dieser Sensor gibt sein Messergebnis nicht als Signal auf einen Ausgangspin aus, sondern kommuniziert diesen per I2C-Bus. Über diesen lässt sich der Sensor ansteuern und die jeweiligen Messungen zum Druck und der Temperatur starten und auswerten.
Zur Ansteuerung dieses Sensormoduls gibt es mehrere Möglichkeiten - als besonders zugänglich hat sich die Adafruit_BMP085 Library erwiesen, die die Firma Adafruit unter dem folgenden Link unter der OpenSource BSD-Lizenz BSD-Lizenz veröffentlicht hat.
Das unten stehende Beispiel verwendet diese besagte Library - hierzu empfehlen wir diese von Github herunterzuladen, zu entpacken und im Arduino-Library-Ordner, welcher sich standardmäßig unter (C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries) befindet, zu kopieren, damit diese für dieses Codebeispiel und folgende Projekte zur Verfügung steht. Alternativ ist diese auch im unten stehenden Download Paket ebenfalls enthalten.
// Benoetigte Libraries werden eingefügt und konfiguriert #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP085_U.h> Adafruit_BMP085_Unified BMPSensor = Adafruit_BMP085_Unified(10085); void setup(void) { Serial.begin(9600); Serial.println("KY-052 SensorTest:"); // Falls der Sensor nicht erkannt wurde, wird hier eine Fehlermeldung gezeigt if(!BMPSensor.begin()) { Serial.println("KY-053-Sensor nicht erkannt!"); Serial.print("Bitte ueberpruefen Sie die Verbindung"); while(1); } } void loop(void) { // Initialisierung Adafruit BMP Library sensors_event_t event; BMPSensor.getEvent(&event); // Messung wird gestartet, falls Sensor bereit if (event.pressure) { Serial.println("------------------------"); // Messung des Luftdrucks Serial.print("Luftdruck: "); Serial.print(event.pressure); Serial.println(" hPa"); // Messung der aktuellen Temperatur float temperature; BMPSensor.getTemperature(&temperature); Serial.print("Temperatur: "); Serial.print(temperature); Serial.write(176); // UniCode-Angabe eines char-Symbols für das "°-Symbol" Serial.println(" C"); // Berechnung der Hoehe ueber dem Meeresspiegel, // aus den aufgenommenen Daten (SLP=1013.25 hPa) float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; Serial.print("Meereshoehe: "); Serial.print(BMPSensor.pressureToAltitude(seaLevelPressure, event.pressure, temperature)); Serial.println(" m"); Serial.println("------------------------"); Serial.println(""); } // Fehlermeldung falls Sensor nicht ausgelesen werden kann else { Serial.println("Sensor-Fehler"); } delay(1000); }
Beispielprogramm Download:
KY-052-DruckSensor_TemperaturSensor.zip
Anschlussbelegung Arduino:
VCC | = | [Pin 5V] |
GND | = | [Pin GND] |
SCL | = | [Pin SCL] |
SDA | = | [Pin SDA] |
3,3 | = | [N.C.] |
Codebeispiel Raspberry Pi
Das Programm nutzt zur Ansteuerung des BMP180, der auf diesem Sensor-Modul verbaut ist, die entsprechenden BMP085/180 und I2C Python-Libraries der Firma Adafruit. Diese wurden unter dem folgenden Link unter der MIT OpenSource-Lizenz veröffentlicht.
Diese muss vorab erst installiert werden. Hierzu muss folgendermaßen vorgegangen werden:
Zuerst muss, falls dies nicht auf dem Raspberry Pi geschehen ist, die GitHub-Software installiert werden:
sudo apt-get install git
Hierzu muss der Raspberry Pi mit dem Internet verbunden sein. Mit dem Befehl...
git clone https://github.com/adafruit/Adafruit_Python_BMP.git
... kann die aktuelle Version der Adafruit_BM085 Library heruntergeladen und entpackt werden
Danach wechseln wir mit...
cd Adafruit_Python_BMP/
... in den heruntergeladenen Ordner und intallieren mit...
sudo python setup.py install
... die Library. Hiernach kann die Library genutzt werden.
Damit der Raspberry Pi mit dem Sensor auf dem I2C-Bus kommunizieren kann, muss auch vorab die I2C-Funktion beim Raspberry Pi aktiviert werden. Hierzu müssen folgende Zeilen am Ende der Datei "/boot/config.txt" hinzugefügt werden:
dtparam=i2c_arm=on
Die Datei kann mit folgenden Befehl editiert werden:
sudo nano /boot/config.txt
Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.
Außerdem werden zusätzliche Bibliotheken benötigt, um I2C innerhalb Python nutzen zu können. Um diese zu installieren muss folgender Befehl in die Konsole eingegeben werden:
sudo apt-get install python-smbus i2c-tools -y
Hiernach kann das folgende Python-Code Beispiel verwendet werden. Das Programm startet die Messung am Sensor und gibt die gemessenen Werte für den Luftdruck, der Temperatur und der Höhe überm Meeresspiegel 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 ### ############################################################################################################# # Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi # Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht # [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code] from Adafruit_ADS1x15 import ADS1x15 from time import sleep # Weitere benoetigte Module werden importiert und eingerichtet import time, signal, sys, os import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Benutzte Variablen werden initialisiert delayTime = 0.5 # in Sekunden # Adresszuweisung ADS1x15 ADC ADS1015 = 0x00 # 12-bit ADC ADS1115 = 0x01 # 16-bit # Verstaerkung (Gain) wird ausgewaehlt gain = 4096 # +/- 4.096V # gain = 2048 # +/- 2.048V # gain = 1024 # +/- 1.024V # gain = 512 # +/- 0.512V # gain = 256 # +/- 0.256V # Abtasterate des ADC (SampleRate) wird ausgewaehlt # sps = 8 # 8 Samples pro Sekunde # sps = 16 # 16 Samples pro Sekunde # sps = 32 # 32 Samples pro Sekunde sps = 64 # 64 Samples pro Sekunde # sps = 128 # 128 Samples pro Sekunde # sps = 250 # 250 Samples pro Sekunde # sps = 475 # 475 Samples pro Sekunde # sps = 860 # 860 Samples pro Sekunde # ADC-Channel (1-4) wird ausgewaehlt adc_channel_0 = 0 # Channel 0 adc_channel_1 = 1 # Channel 1 adc_channel_2 = 2 # Channel 2 adc_channel_3 = 3 # Channel 3 # Hier wird der ADC initialisiert - beim KY-053 verwendeten ADC handelt es sich um einen ADS1115 Chipsatz adc = ADS1x15(ic=ADS1115) Button_PIN = 24 GPIO.setup(Button_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP) ############################################################################################################# # ######## # Hauptprogrammschleife # ######## # Das Programm liest die aktuellen Werte der Eingang-Pins # und gibt diese in der Konsole aus try: while True: #Aktuelle Werte werden aufgenommen adc0 = adc.readADCSingleEnded(adc_channel_0, gain, sps) adc1 = adc.readADCSingleEnded(adc_channel_1, gain, sps) adc2 = adc.readADCSingleEnded(adc_channel_2, gain, sps) adc3 = adc.readADCSingleEnded(adc_channel_3, gain, sps) # Ausgabe auf die Konsole print "Messwert Channel 0:", adc0, "mV " print "Messwert Channel 1:", adc1, "mV " print "Messwert Channel 2:", adc2, "mV " print "Messwert Channel 3:", adc3, "mV " print "---------------------------------------" # Reset + Delay button_pressed = False time.sleep(delayTime) except KeyboardInterrupt: GPIO.cleanup()
Anschlussbelegung Raspberry Pi:
VDD | = | 3,3V | [Pin 01] |
GND | = | Masse | [Pin 06] |
SCL | = | GPIO03 / SCL | [Pin 05] |
SDA | = | GPIO02 / SDA | [Pin 01] |
ADDR | = | N.C. | [-] |
ALRT | = | N.C. | [-] |
A0 | = | Messspitze Analog 0 | [Zu messende Spannung | z.B. Sensorausgang] |
A1 | = | Messspitze Analog 1 | [Zu messende Spannung | z.B. Sensorausgang] |
A2 | = | Messspitze Analog 2 | [Zu messende Spannung | z.B. Sensorausgang] |
A3 | = | Messspitze Analog 3 | [Zu messende Spannung | z.B. Sensorausgang] |
Beispielprogramm Download
KY-053_RPi_AnalogDigitalConverter.zip
Zu starten mit dem Befehl:
sudo python KY-053_RPi_AnalogDigitalConverter.py