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

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
Zeile 10: Zeile 10:
  
 
==Software-Beispiel==
 
==Software-Beispiel==
https://learn.sparkfun.com/tutorials/bmp180-barometric-pressure-sensor-hookup-
+
==Codebeispiel Arduino==
 +
Die Arduino-Boards besitzen von Haus aus einen  10 Bit-ADC mit 6 Kanälen. Benötigt man jedoch mehr Kanäle 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 erweitern, welches per I2C an den Arduino angeschlossen wird.
 +
 
 +
Zur Ansteuerung dieses Moduls gibt es mehrere Möglichkeiten - als besonders zugänglich haben sich die ADS1X15 Libraries erwiesen, die die Firma Adafruit unter [[https://github.com/adafruit/Adafruit_ADS1X15 https://github.com/adafruit/Adafruit_ADS1X15]] unter der [[https://opensource.org/licenses/BSD-3-Clause 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.
 +
 
 +
<pre class="brush:cpp">#include
 +
#include
 +
 
 +
// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
 +
// können mit Hilfe des Objektes "ads" ausgeführt werden.
 +
Adafruit_ADS1115 ads;
 +
 
 +
void setup(void)
 +
{
 +
  Serial.begin(9600);
 +
 
 +
  Serial.println("Werte der analogen Eingaenge des ADS1115 (A0..A3) werden ausgelesen und ausgegeben");
 +
  Serial.println("ADC Range: +/- 6.144V (1 bit = 0.1875mV)");
 +
 
 +
  // Dieses Modul besitzt an seinen analogen Eingängen Signalverstärker, 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 eine höhere Auflösung des Signals
 +
  // erhält.
 +
  // Als Standardverstärkung ist Gain=[2/3] gewählt und kann durch Auskommentieren
 +
  // auf eine andere Verstärkung umgestellt werden.
 +
  //                                                                ADS1115
 +
  //                                                                ------- 
 +
  ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV
 +
  // ads.setGain(GAIN_ONE);        // 1x gain  +/- 4.096V  1 bit = 0.125mV
 +
  // ads.setGain(GAIN_TWO);        // 2x gain  +/- 2.048V  1 bit = 0.0625mV
 +
  // ads.setGain(GAIN_FOUR);      // 4x gain  +/- 1.024V  1 bit = 0.03125mV
 +
  // ads.setGain(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;
 +
  float voltage0, voltage1, voltage2, voltage3;
 +
  float gain_conversion_factor;
 +
 
 +
  // Der Befehl "ads.readADC_SingleEnded(0)" 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 werden, so muss diese mit der "3" ausgetauscht werden
 +
  adc0 = ads.readADC_SingleEnded(0);
 +
  adc1 = ads.readADC_SingleEnded(1);
 +
  adc2 = ads.readADC_SingleEnded(2);
 +
  adc3 = ads.readADC_SingleEnded(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 Schnittstelle
 +
  Serial.print("Analog Eingang 0: "); Serial.print(voltage0);Serial.println("mV");
 +
  Serial.print("Analog Eingang 1: "); Serial.print(voltage1);Serial.println("mV");
 +
  Serial.print("Analog Eingang 2: "); Serial.print(voltage2);Serial.println("mV");
 +
  Serial.print("Analog Eingang 3: "); Serial.print(voltage3);Serial.println("mV");
 +
  Serial.println("------------------------");
 +
 
 +
  delay(1000);
 +
}
 +
 
 +
</pre>
 +
 
 +
'''Beispielprogramm Download:'''
 +
 
 +
[[Medium:KY-053-AnalogDigitalConverter.zip|KY-053-AnalogDigitalConverter.zip]]
 +
 
 +
'''Anschlussbelegung Arduino:'''
 +
 
 +
{| style="height: 58px; padding-left: 30px;" width="228"
 +
|-
 +
||VDD
 +
||=
 +
||[Pin 5V]
 +
|-
 +
||GND
 +
||=
 +
||[Pin GND]
 +
|-
 +
||SCL
 +
||=
 +
||[Pin SCL]
 +
|-
 +
||SDA
 +
||=
 +
||[Pin SDA]
 +
|-
 +
||ADDR
 +
||=
 +
||[N.C.]
 +
|-
 +
||ALRT
 +
||=
 +
||[N.C.]
 +
|-
 +
||A0
 +
||=
 +
||[Messspitze Analog 0]
 +
|-
 +
||A1
 +
||=
 +
||[Messspitze Analog 1]
 +
|-
 +
||A2
 +
||=
 +
||[Messspitze Analog 2]
 +
|-
 +
||A3
 +
||=
 +
||[Messspitze Analog 3]
 +
|}
 +
 
 +
==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 [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 .
 +
 
 +
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:
 +
 
 +
    ''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.
 +
 
 +
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:
 +
 
 +
<pre class="brush:bash">sudo apt-get install python-smbus i2c-tools -y</pre>
 +
 
 +
Hiernach kann das folgende Python-Code Beispiel verwendet werden:
 +
 
 +
<pre class="brush:py">#
 +
#!/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()
 +
</pre>
 +
 
 +
'''Anschlussbelegung Raspberry Pi:'''
 +
 
 +
{| style="height: 222px; padding-left: 30px;" width="657"
 +
|-
 +
||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'''
 +
 
 +
 
 +
[[Medium:KY-053_RPi_AnalogDigitalConverter.zip|KY-053_RPi_AnalogDigitalConverter.zip]]
 +
 
 +
 
 +
Zu starten mit dem Befehl:
 +
 
 +
<pre class="brush:bash">sudo python KY-053_RPi_AnalogDigitalConverter.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.

Version vom 28. April 2016, 17:03 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

Software-Beispiel

Codebeispiel Arduino

Die Arduino-Boards besitzen von Haus aus einen  10 Bit-ADC mit 6 Kanälen. Benötigt man jedoch mehr Kanäle 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 erweitern, welches per I2C an den Arduino angeschlossen wird.

Zur Ansteuerung dieses Moduls gibt es mehrere Möglichkeiten - als besonders zugänglich haben sich die ADS1X15 Libraries erwiesen, die die Firma Adafruit unter [https://github.com/adafruit/Adafruit_ADS1X15] unter der [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.

#include 
#include 

// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
// können mit Hilfe des Objektes "ads" ausgeführt werden.
Adafruit_ADS1115 ads; 

void setup(void) 
{
  Serial.begin(9600);
  
  Serial.println("Werte der analogen Eingaenge des ADS1115 (A0..A3) werden ausgelesen und ausgegeben");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 0.1875mV)");
  
  // Dieses Modul besitzt an seinen analogen Eingängen Signalverstärker, 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 eine höhere Auflösung des Signals
  // erhält.
  // Als Standardverstärkung ist Gain=[2/3] gewählt und kann durch Auskommentieren
  // auf eine andere Verstärkung umgestellt werden.
  //                                                                ADS1115
  //                                                                -------  
  ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV 
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
  // ads.setGain(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;
  float voltage0, voltage1, voltage2, voltage3;
  float gain_conversion_factor;
  
  // Der Befehl "ads.readADC_SingleEnded(0)" 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 werden, so muss diese mit der "3" ausgetauscht werden
  adc0 = ads.readADC_SingleEnded(0); 
  adc1 = ads.readADC_SingleEnded(1);
  adc2 = ads.readADC_SingleEnded(2);
  adc3 = ads.readADC_SingleEnded(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 Schnittstelle
  Serial.print("Analog Eingang 0: "); Serial.print(voltage0);Serial.println("mV");
  Serial.print("Analog Eingang 1: "); Serial.print(voltage1);Serial.println("mV");
  Serial.print("Analog Eingang 2: "); Serial.print(voltage2);Serial.println("mV");
  Serial.print("Analog Eingang 3: "); Serial.print(voltage3);Serial.println("mV");
  Serial.println("------------------------");
  
  delay(1000);
}

Beispielprogramm Download:

KY-053-AnalogDigitalConverter.zip

Anschlussbelegung Arduino:

VDD = [Pin 5V]
GND = [Pin GND]
SCL = [Pin SCL]
SDA = [Pin SDA]
ADDR = [N.C.]
ALRT = [N.C.]
A0 = [Messspitze Analog 0]
A1 = [Messspitze Analog 1]
A2 = [Messspitze Analog 2]
A3 = [Messspitze Analog 3]

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

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:

    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:

#
#!/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

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.