Änderungen

KY-052 Drucksensor / Temperatursensor - BMP180 -

3.180 Byte entfernt, 15:19, 29. Apr. 2016
/* Software-Beispiel Raspberry Pi */
[[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==Software"color: #ff0000;">Hierbei ist zu beachten, dass nur einer der jeweiligen Spannungsversorgungspins angeschlossen wird; passend zum Spannungslevel des verwendeten Systems</span> -Beispiel====Codebeispiel weiteres entnehmen Sie den unteren Beispielen zum Anschluss des Arduino==Die Arduino-Boards besitzen von Haus aus einen  10 Bit-ADC mit 6 Kanälen. Benötigt man jedoch mehr Kanäle (5V) oder eine höhere Genauigkeit, dann kann man den Arduino mittels des KY-053 Analog Digital Converter Moduls um 4 ADC Kanäle mit 12-Bit Genauigkeit erweiternRasperry Pi's (3, welches per I2C an den Arduino angeschlossen wird.3V)
Zur Ansteuerung dieses Moduls ==Software-Beispiel Arduino==Dieser Sensor gibt es mehrere Möglichkeiten - sein Messergebnis nicht als besonders zugänglich haben sich die ADS1X15 Libraries erwiesenSignal auf einen Ausgangspin aus, die die Firma Adafruit unter [[https://githubsondern kommuniziert diesen per I2C-Bus.com/adafruit/Adafruit_ADS1X15 https://github.com/adafruit/Adafruit_ADS1X15]] unter Über diesen lässt sich der [[https://opensource.org/licenses/BSD-3-Clause BSD-Lizenz]] veröffentlicht hatSensor ansteuern und die jeweiligen Messungen zum Druck und der Temperatur starten und auswerten.
Das unten stehende Beispiel verwendet diese besagte Library - hierzu empfehlen wir diese von Github herunterzuladen, zu entpacken und im ArduinoZur Ansteuerung dieses Sensormoduls gibt es mehrere Möglichkeiten -als besonders zugänglich hat sich die Adafruit_BMP085 Library-Ordnererwiesen, welcher sich standardmäßig die die Firma Adafruit unter (Cdem folgenden [https:\Benutzer\//github.com/adafruit/Adafruit_BMP085_Unified Link] unter der OpenSource [Benutzernamehttps://opensource.org/licenses/BSD-3-Clause BSD-Lizenz BSD-Lizenz]\Dokumente\Arduino\libraries) befindet, zu kopieren, damit diese für dieses Codebeispiel und folgende Projekte zur Verfügung steht veröffentlicht hat.
<pre class="brush:cpp">#include #include  // ADS1115 Modul wird initialisiert Das unten stehende Beispiel verwendet diese besagte Library - alle folgenden Operationen mit dem ADC// können mit Hilfe des Objektes "ads" ausgeführt werdenhierzu 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.Adafruit_ADS1115 ads;
<pre class="brush:cpp">// 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("Werte der analogen Eingaenge des ADS1115 (A0..A3) werden ausgelesen und ausgegeben"); Serial.println("ADC Range: +/KY- 6.144V (1 bit = 0.1875mV)052 SensorTest:");
// Dieses Modul besitzt an seinen analogen Eingängen SignalverstärkerFalls der Sensor nicht erkannt wurde, deren // Verstärkung per Software in den unten stehenden Bereichen konfiguriert werden // können. // Dieses ist in dem Fall gewünscht, wenn ein bestimmter Spannungsbereich // als messergebnis erwartet wird und man so hier eine höhere Auflösung des SignalsFehlermeldung gezeigt // erhältif(!BMPSensor. // Als Standardverstärkung ist Gain=[2/3] gewählt und kann durch Auskommentieren // auf eine andere Verstärkung umgestellt werden. // ADS1115 // ------- ads.setGainbegin(GAIN_TWOTHIRDS); // 2/3x gain +/- 6.144V 1 bit = 0.1875mV ) // ads{ Serial.setGainprintln(GAIN_ONE); // 1x gain +/"KY- 4.096V 1 bit = 0.125mV // ads.setGain(GAIN_TWO053-Sensor nicht erkannt!"); // 2x gain +/- 2.048V 1 bit = 0.0625mV // ads Serial.setGainprint(GAIN_FOUR"Bitte ueberpruefen Sie die Verbindung"); // 4x gain +/- 1.024V 1 bit = 0.03125mV // ads.setGain while(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.015625mV // ads.setGain(GAIN_SIXTEEN); // 16x gain +/- 0.256V 1 bit = 0.0078125mV ads.begin();}
}
void loop(void)
{
uint16_t adc0, adc1, adc2, adc3;// Initialisierung Adafruit BMP Library float voltage0, voltage1, voltage2, voltage3sensors_event_t event; float gain_conversion_factor; // Der Befehl "adsBMPSensor.readADC_SingleEndedgetEvent(0&event)" ist die eigentliche Operation, die die Messung im ADC startet.; // die "0" als Variable für diese Funktion definiert den verwendeten Channel, der gemessen werden soll // Soll z.B. der dritte Channel gemessen werdenMessung wird gestartet, so muss diese mit der "3" ausgetauscht werdenfalls Sensor bereit adc0 = ads.readADC_SingleEndedif (0); adc1 = adsevent.readADC_SingleEnded(1pressure); adc2 = ads.readADC_SingleEnded(2);{ adc3 = ads Serial.readADC_SingleEndedprintln(3); // Dieser Wert wird für die Umrechnung in eine Spannung benötigt "- dieser ´hängt von der eingestellten Verstärkung ab. // Der passende Wert zur Verstärkung sollte aus der oben aufgezeigten Tabelle entnommen werden gain_conversion_factor= 0.1875; // Umrechnung der aufgezeichneten Werte in eine Spannung voltage0 = (adc0 * gain_conversion_factor-----------------------"); voltage1 = (adc1 * gain_conversion_factor); voltage2 = (adc2 * gain_conversion_factor); voltage3 = (adc3 * gain_conversion_factor); // Ausgabe der Werte auf die serielle SchnittstelleMessung des Luftdrucks Serial.print("Analog Eingang 0Luftdruck: "); Serial.print(voltage0event.pressure); Serial.println("mVhPa"); Serial // Messung der aktuellen Temperatur float temperature; BMPSensor.printgetTemperature("Analog Eingang 1: "&temperature); Serial.print(voltage1);Serial.println("mVTemperatur: "); Serial.print("Analog Eingang 2: "temperature); Serial.printwrite(voltage2176);// UniCode-Angabe eines char-Symbols für das "°-Symbol" Serial.println("mVC"); // Berechnung der Hoehe ueber dem Meeresspiegel, // aus den aufgenommenen Daten (SLP=1013.25 hPa) float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; Serial.print("Analog Eingang 3Meereshoehe: "); Serial.print(voltage3BMPSensor.pressureToAltitude(seaLevelPressure, event.pressure, temperature)); Serial.println("mVm"); Serial.println("------------------------"); Serial.println(""); } // Fehlermeldung falls Sensor nicht ausgelesen werden kann else { Serial.println("Sensor-Fehler"); }
delay(1000);
}
 
</pre>
 
'''Beispielprogramm Download:'''
[[Medium:KY-053052-AnalogDigitalConverterDruckSensor_TemperaturSensor.zip|KY-053052-AnalogDigitalConverterDruckSensor_TemperaturSensor.zip]]
'''Anschlussbelegung Arduino:'''
{| style="height: 58px; padding-left: 30px;" width="228"
|-
||VDDVCC
||=
||[Pin 5V]
||[Pin SDA]
|-
||ADDR3,3
||=
||[N.C.]
|-
||ALRT
||=
||[N.C.]
|-
||A0
||=
||[Messspitze Analog 0]
|-
||A1
||=
||[Messspitze Analog 1]
|-
||A2
||=
||[Messspitze Analog 2]
|-
||A3
||=
||[Messspitze Analog 3]
|}
==Codebeispiel 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 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:
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''
Die Datei kann mit folgenden Befehl editiert werden:
 
<pre class="brush:bash">sudo nano /boot/config.txt
</pre>
 
Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.
<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
# coding=utf-8
# Copyright (c) 2014 Adafruit Industries
#############################################################################################################Benoetigte Bibliotheken werden eingefügt und konfiguriert### Copyright by Joy-IT### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3import Adafruit_BMP.0 Unported License### Commercial use only after permission is requested and granted###### KY-053 Analog Digital Converter - Raspberry Pi Python Code Example###BMP085 as BMP085#############################################################################################################import time
# Die Pause zwischen den Messungen kann hier eingestellt werden
sleeptime = 1
try: # Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry PiSensor wird initialisiert BMPSensor = BMP085.BMP085()# Diese Überprüfung ob Sensor richtig angeschlossen ist unter folgendem Link unter der BSD Lizenz veroeffentlicht# [httpsFalls nicht, wird eine Fehlermeldung ausgegebenexcept IOError://github.com/adafruit/Adafruit print("-Raspberry-Pi-Python-Code]--------------------------")from Adafruit_ADS1x15 import ADS1x15 print ("KY-053 Sensor nicht erkannt!")from print ("Überprüfen Sie die Verbindungen") print("------------------------------") while(True): time import .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
# ######### Das Programm liest startet die aktuellen Werte der Eingang-PinsMessungen am Sensor und gibt# und gibt diese die gemessenen Werte in der Konsole aus 
try:
while True(1): print("------------------------------") #Aktuelle Werte werden aufgenommenTemperatur adc0 print('Temperatur = adc{0:0.readADCSingleEnded2f}°C'.format(adc_channel_0, gain, sps) adc1 = adcBMPSensor.readADCSingleEndedread_temperature(adc_channel_1, gain, sps))) adc2 # Luftdruck print('Luftdruck = adc{0:0.readADCSingleEnded2f}hPa'.format(adc_channel_2, gain, sps) adc3 = adcBMPSensor.readADCSingleEndedread_pressure(adc_channel_3, gain, sps)/100) # Ausgabe auf die KonsoleMeereshöhe print "Messwert Channel ('Meereshöhe = {0:", adc0, "mV "0.2f}m'.format(BMPSensor.read_altitude())) print "Messwert Channel 1:", adc1, "mV " print "Messwert Channel 2:", adc2, "mV " print "Messwert Channel 3:", adc3, "mV " print ("---------------------------------------") print("") # Reset + Delay button_pressed = False time.sleep(delayTimesleeptime)  
# Aufraeumarbeiten nachdem das Programm beendet wurde
except KeyboardInterrupt:
GPIO.cleanup()
</pre>
'''Anschlussbelegung Raspberry Pi:'''
{| style="height: 222px98px; padding-left: 30px;" width="657253"
|-
||VDDVCC
||=
||3,3V-||[Pin 01N.C]
|-
||GND
||=
||GPIO02 / SDA
||[Pin 0103]
|-
||ADDR3.3
||=
||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,3V||[Zu messende Spannung | z.B. SensorausgangPin 01]
|}
'''Beispielprogramm Download'''
 [[Medium:KY-053_RPi_AnalogDigitalConverter052-RPi_DruckSensor_TemperaturSensor.zip|KY-053_RPi_AnalogDigitalConverter052-RPi_DruckSensor_TemperaturSensor.zip]] 
Zu starten mit dem Befehl:
<pre class="brush:bash">sudo python KY-053_RPi_AnalogDigitalConverter052-RPi_DruckSensor_TemperaturSensor.py
</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.
Bürokrat, Administrator
611
Bearbeitungen