KY-052 Drucksensor / Temperatursensor - BMP180 -: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Software-Beispiel Raspberry Pi)
 
(9 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:
 
==Pin-Belegung==
 
==Pin-Belegung==
 
[[Datei:5_5V_G_SCL_SDA_3V.png|none|500x292px]]
 
[[Datei:5_5V_G_SCL_SDA_3V.png|none|500x292px]]
 +
 +
* *Dieser Sensor erlaubt es sowohl an 5V System, sowie an 3,3V Systemen angeschlossen und betrieben zu werden. <span style="color: #ff0000;">Hierbei ist zu beachten, dass nur einer der jeweiligen Spannungsversorgungspins angeschlossen wird; passend zum Spannungslevel des verwendeten Systems</span> - weiteres entnehmen Sie den unteren Beispielen zum Anschluss des Arduino (5V) oder des Rasperry Pi's (3,3V)
  
 
==Software-Beispiel Arduino==
 
==Software-Beispiel Arduino==
Zeile 109: Zeile 111:
 
|}
 
|}
  
==Codebeispiel Raspberry Pi==
+
==Software-Beispiel 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 [https://github.com/adafruit/Adafruit_Python_BMP Link] unter der [https://github.com/adafruit/Adafruit_Python_ADS1x15/blob/master/LICENSE MIT OpenSource-Lizenz] veröffentlicht. Die benötigten Libraries sind im unteren Download-Paket enthalten.
+
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 [https://github.com/adafruit/Adafruit_Python_BMP Link] unter der [https://github.com/adafruit/Adafruit_Python_ADS1x15/blob/master/LICENSE MIT OpenSource-Lizenz] veröffentlicht. 
  
Das Programm startet die MEssung am Sensor und gibt die gemessenen Wete für die .
+
Diese muss vorab erst installiert werden. Hierzu muss folgendermaßen vorgegangen werden:
  
Damit der Raspberry Pi mit dem Sensor auf dem I2C-Bus kommunizieren kann, muss vorab die I2C-Funktion beim Raspberry Pi aktiviert werden. Hierzu müssen folgende Zeilen am Ende der Datei "/boot/config.txt" hinzugefügt werden:
+
Zuerst muss, falls dies nicht auf dem Raspberry Pi geschehen ist, die GitHub-Software installiert werden:
 +
 
 +
<pre class="brush:bash">sudo apt-get install git
 +
</pre>
 +
Hierzu muss der Raspberry Pi mit dem Internet verbunden sein. Mit dem Befehl...
 +
 
 +
<pre class="brush:bash">git clone https://github.com/adafruit/Adafruit_Python_BMP.git
 +
</pre>
 +
... kann die aktuelle Version der Adafruit_BM085 Library heruntergeladen und entpackt werden
 +
 
 +
Danach wechseln wir mit...
 +
 
 +
<pre class="brush:bash">cd Adafruit_Python_BMP/
 +
</pre>
 +
... in den heruntergeladenen Ordner und intallieren mit...
 +
 
 +
<pre class="brush:bash">sudo python setup.py install
 +
</pre>
 +
... 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''
 
     ''dtparam=i2c_arm=on''
  
 
Die Datei kann mit folgenden Befehl editiert werden:
 
Die Datei kann mit folgenden Befehl editiert werden:
 +
  
 
<pre class="brush:bash">sudo nano /boot/config.txt
 
<pre class="brush:bash">sudo nano /boot/config.txt
 
</pre>
 
</pre>
 
 
Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.
 
Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.
  
Zeile 128: Zeile 150:
  
 
<pre class="brush:bash">sudo apt-get install python-smbus i2c-tools -y</pre>
 
<pre class="brush:bash">sudo apt-get install python-smbus i2c-tools -y</pre>
 +
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.
  
Hiernach kann das folgende Python-Code Beispiel verwendet werden:
+
<pre class="brush:py">#!/usr/bin/python
 
+
<pre class="brush:py">#
+
#!/usr/bin/python
+
 
# coding=utf-8
 
# coding=utf-8
 +
# Copyright (c) 2014 Adafruit Industries
  
#############################################################################################################
+
# Benoetigte Bibliotheken werden eingefügt und konfiguriert
### Copyright by Joy-IT
+
import Adafruit_BMP.BMP085 as BMP085
### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
+
import time
### Commercial use only after permission is requested and granted
+
###
+
### KY-053 Analog Digital Converter - Raspberry Pi Python Code Example
+
###
+
#############################################################################################################
+
  
 +
# Die Pause zwischen den Messungen kann hier eingestellt werden
 +
sleeptime = 1
  
# Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi
+
try:
# Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht
+
    # Sensor wird initialisiert
# [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]
+
    BMPSensor = BMP085.BMP085()
from Adafruit_ADS1x15 import ADS1x15
+
# Überprüfung ob Sensor richtig angeschlossen ist
from time import sleep
+
# Falls nicht, wird eine Fehlermeldung ausgegeben
 +
except IOError:
 +
    print("------------------------------")
 +
    print ("KY-053 Sensor nicht erkannt!")
 +
    print ("Überprüfen Sie die Verbindungen")
 +
    print("------------------------------")
 +
    while(True):
 +
        time.sleep(sleeptime)
 +
except KeyboardInterrupt:
 +
    GPIO.cleanup()
  
# 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
 
# Hauptprogrammschleife
# ########
+
# Das Programm startet die Messungen am Sensor und gibt
# Das Programm liest die aktuellen Werte der Eingang-Pins
+
# die gemessenen Werte in der Konsole aus
# und gibt diese in der Konsole aus
+
 
+
 
try:
 
try:
        while True:
+
    while(1):
                #Aktuelle Werte werden aufgenommen
+
        print("------------------------------")
                adc0 = adc.readADCSingleEnded(adc_channel_0, gain, sps)
+
        # Temperatur
                adc1 = adc.readADCSingleEnded(adc_channel_1, gain, sps)
+
        print('Temperatur = {0:0.2f}°C'.format(BMPSensor.read_temperature()))
                adc2 = adc.readADCSingleEnded(adc_channel_2, gain, sps)
+
        # Luftdruck
                adc3 = adc.readADCSingleEnded(adc_channel_3, gain, sps)
+
        print('Luftdruck = {0:0.2f}hPa'.format(BMPSensor.read_pressure()/100))
 
+
        # Meereshöhe
                # Ausgabe auf die Konsole
+
        print('Meereshöhe = {0:0.2f}m'.format(BMPSensor.read_altitude()))
                print "Messwert Channel 0:", adc0, "mV "
+
        print("------------------------------")
                print "Messwert Channel 1:", adc1, "mV "
+
        print("")
                print "Messwert Channel 2:", adc2, "mV "
+
        time.sleep(sleeptime)
                print "Messwert Channel 3:", adc3, "mV "
+
                print "---------------------------------------"
+
 
+
                # Reset + Delay
+
                button_pressed = False
+
                time.sleep(delayTime)
+
 
+
 
+
  
 +
# Aufraeumarbeiten nachdem das Programm beendet wurde
 
except KeyboardInterrupt:
 
except KeyboardInterrupt:
        GPIO.cleanup()
+
    GPIO.cleanup()
 
</pre>
 
</pre>
  
 
'''Anschlussbelegung Raspberry Pi:'''
 
'''Anschlussbelegung Raspberry Pi:'''
  
{| style="height: 222px; padding-left: 30px;" width="657"
+
{| style="height: 98px; padding-left: 30px;" width="253"
 
|-
 
|-
||VDD
+
||VCC
 
||=
 
||=
||3,3V
+
||-
||[Pin 01]
+
||[N.C]
 
|-
 
|-
 
||GND
 
||GND
Zeile 249: Zeile 222:
 
||=
 
||=
 
||GPIO02 / SDA
 
||GPIO02 / SDA
||[Pin 01]
+
||[Pin 03]
 
|-
 
|-
||ADDR
+
||3.3
 
||=
 
||=
||N.C.
+
||3,3V
||[-]
+
||[Pin 01]
|-
+
||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'''
 
'''Beispielprogramm Download'''
  
 
+
[[Medium:KY-052-RPi_DruckSensor_TemperaturSensor.zip|KY-052-RPi_DruckSensor_TemperaturSensor.zip]]
[[Medium:KY-053_RPi_AnalogDigitalConverter.zip|KY-053_RPi_AnalogDigitalConverter.zip]]
+
 
+
  
 
Zu starten mit dem Befehl:
 
Zu starten mit dem Befehl:
  
<pre class="brush:bash">sudo python KY-053_RPi_AnalogDigitalConverter.py
+
<pre class="brush:bash">sudo python KY-052-RPi_DruckSensor_TemperaturSensor.py
 
</pre>
 
</pre>
 
==Erweiterte Funktionen des ADS1115 ADC==
 
Die Funktion des ADS1115, die in den oben aufgezeigten Codebeispielen zur Verwendung kommt, nennt sich "Single Ended Conversion" und besagt, dass eine Messung am einzelnen ausgewählten Kanal gegen Masse erfolgt.
 
 
Neben dieser Art von Messung besitzt der ADS1115 ADC auch z.B. die Funktion der differentiellen Messung, sodass eine Differenz-Spannung zwischen zwei Eingängen gemessen wird (Beispiel: Spannung zwischen A0 und A1).
 
Zusätzlich zur Singe-Ended Messung lässt sich auch die Comparator Funktion aktivieren, welche erst ein Messergebnis liefert, wenn eine Spannungsschwelle überschritten wird.
 
 
Diese Funktionen und Funktionen, wie z.B. die Änderung der Abstastrate (Samplerate), sind in den Adafruit Libraries zur Konfiguration einprogrammiert - Näheres finden Sie in der Dokumentation der Adafruit Libraries.
 

Aktuelle Version vom 29. April 2016, 15:19 Uhr

Bild

KY-0052.png

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

5 5V G SCL SDA 3V.png
  • *Dieser Sensor erlaubt es sowohl an 5V System, sowie an 3,3V Systemen angeschlossen und betrieben zu werden. Hierbei ist zu beachten, dass nur einer der jeweiligen Spannungsversorgungspins angeschlossen wird; passend zum Spannungslevel des verwendeten Systems - weiteres entnehmen Sie den unteren Beispielen zum Anschluss des Arduino (5V) oder des Rasperry Pi's (3,3V)

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.]

Software-Beispiel 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 (c) 2014 Adafruit Industries

# Benoetigte Bibliotheken werden eingefügt und konfiguriert
import Adafruit_BMP.BMP085 as BMP085
import time

# Die Pause zwischen den Messungen kann hier eingestellt werden
sleeptime = 1

try:
    # Sensor wird initialisiert
    BMPSensor = BMP085.BMP085()
# Überprüfung ob Sensor richtig angeschlossen ist
# Falls nicht, wird eine Fehlermeldung ausgegeben
except IOError:
    print("------------------------------")
    print ("KY-053 Sensor nicht erkannt!")
    print ("Überprüfen Sie die Verbindungen")
    print("------------------------------")
    while(True):
        time.sleep(sleeptime)
except KeyboardInterrupt:
    GPIO.cleanup()


# Hauptprogrammschleife
# Das Programm startet die Messungen am Sensor und gibt
# die gemessenen Werte in der Konsole aus
try:
    while(1):
        print("------------------------------")
        # Temperatur
        print('Temperatur = {0:0.2f}°C'.format(BMPSensor.read_temperature()))
        # Luftdruck
        print('Luftdruck = {0:0.2f}hPa'.format(BMPSensor.read_pressure()/100))
        # Meereshöhe
        print('Meereshöhe = {0:0.2f}m'.format(BMPSensor.read_altitude()))
        print("------------------------------")
        print("")
        time.sleep(sleeptime)

# Aufraeumarbeiten nachdem das Programm beendet wurde
except KeyboardInterrupt:
    GPIO.cleanup()

Anschlussbelegung Raspberry Pi:

VCC = - [N.C]
GND = Masse [Pin 06]
SCL = GPIO03 / SCL [Pin 05]
SDA = GPIO02 / SDA [Pin 03]
3.3 = 3,3V [Pin 01]

Beispielprogramm Download

KY-052-RPi_DruckSensor_TemperaturSensor.zip

Zu starten mit dem Befehl:

sudo python KY-052-RPi_DruckSensor_TemperaturSensor.py