Änderungen

KY-053 Analog Digital Converter

3.537 Byte hinzugefügt, 12:18, 29. Apr. 2016
/* Codebeispiel Raspberry Pi */
==Technische Daten / Kurzbeschreibung==
Per entsprechenden Befehlen auf den I2C-Bus, können auf bis zu 4 Eingängen analoge Spannungswerte mit bis zu 16-Bit Genauigkeit gemessen werden. Das Messergebnis wird kodiert auf den I2C-Bus ausgegeben.
   '''Für dieses Modul wird eine entsprechende Software benötigt- siehe Codebeispiele unten.'''
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. Alternativ ist diese auch im unten stehenden Download Paket ebenfalls enthalten.
<pre class="brush:cpp">#include <Wire.h>#include <Adafruit_ADS1015.h>
// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
'''Beispielprogramm Download:'''
[[Medium:KY-053-AnalogDigitalConverter.zip|KY-053-AnalogDigitalConverter.zip]]
'''Anschlussbelegung Arduino:'''
||[Messspitze Analog 3]
|}
 
==Codebeispiel Raspberry Pi==
<pre class="brushDer 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:py"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. 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-Raspberry-Pi-Python-Code https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]] 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 liest die aktuelle Spannung aus, die an den 4 Kanälen des ADS1115 ADC anliegen, und zeigt diese in der Konsole an. Über die Variable "delayTime", lässt sich die Pause zwischen den Messungen einstellen. 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
### Commercial use only after permission is requested and granted
###
### KY-023 Joystick Module 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
from Adafruit_ADS1x15 import ADS1x15
from time import sleep
 
# Weitere benoetigte Module werden importiert und eingerichtet
import time, signal, sys, os
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
 
# Benutzte Variablen werden initialisiert
delayTime = 0.25 # in Sekunden 
# Adresszuweisung ADS1x15 ADC
 ADS1015 = 0x00  0x00 # 12-bit ADCADS1115 = 0x01  0x01 # 16-bit 
# Verstaerkung (Gain) wird ausgewaehlt
gain = 4096  4096 # +/- 4.096V# gain = 2048  2048 # +/- 2.048V# gain = 1024  1024 # +/- 1.024V# gain = 512   512 # +/- 0.512V# gain = 256   256 # +/- 0.256V 
# Abtasterate des ADC (SampleRate) wird ausgewaehlt
# sps = 8    8 # 8 Samples pro Sekunde# sps = 16   16 # 16 Samples pro Sekunde# sps = 32   32 # 32 Samples pro Sekundesps = 64   64 # 64 Samples pro Sekunde# sps = 128  128 # 128 Samples pro Sekunde# sps = 250  250 # 250 Samples pro Sekunde# sps = 475  475 # 475 Samples pro Sekunde# sps = 860  860 # 860 Samples pro Sekunde 
# ADC-Channel (1-4) wird ausgewaehlt
x_adc_channel adc_channel_0 = 0    0 # Channel 0 für die x-Achsey_adc_channel adc_channel_1 = 1    1 # Channel 1 für die y-Achse# adc_channel adc_channel_2 = 2    2 # Channel 2# adc_channel adc_channel_3 = 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 while True:                 #Aktuelle Werte werden aufgenommen                x adc0 = adc.readADCSingleEnded(x_adc_channeladc_channel_0, gain, sps)                y adc1 = adc.readADCSingleEnded(y_adc_channeladc_channel_1, gain, sps)                 # Ausgabe auf die Konsole                if GPIO adc2 = adc.inputreadADCSingleEnded(Button_PIN) == True:                        print "X-Achse:"adc_channel_2, xgain,"mV, ","Y-Achse:", y,"mV, Button: nicht gedrückt"sps)                else:                        print "X-Achse:", x, "mV, ", "Y-Achse:", y, "mV, Button: gedrückt"                print "---------------------------------------"                 # Reset + Delay                button_pressed adc3 = False                timeadc.sleep(delayTime)   except KeyboardInterrupt:        GPIO.cleanupreadADCSingleEnded(adc_channel_3, gain, sps)
</pre> # 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 "---------------------------------------"
'''Anschlussbelegung Raspberry Pi:''' # Reset + Delay button_pressed = False time.sleep(delayTime)
Sensor KY-039
{| style="height: 85px; padding-left: 30px;" width="441"
|-
||Signal
||=
||Analog 0
||[Pin A0 (ADS1115 - KY-053)]
|-
||+V
||=
||3,3V
||[Pin 1]
|-
||GND
||=
||Masse
||[Pin 6]
|}
ADS1115 - KY-053except KeyboardInterrupt: GPIO.cleanup()</pre> '''Anschlussbelegung Raspberry Pi:'''
{| style="height: 127px222px; padding-left: 30px;" width="436657"
|-
||VDD
||=
||Masse
||[Pin 0906]
|-
||SCL
||GPIO02 / SDA
||[Pin 03]
|-
||ADDR
||=
||N.C.
||[-]
|-
||ALRT
||=
||N.C.
||[-]
|-
||A0
||=
||sMessspitze Analog 0||[Zu messende Spannung | z.oB.Sensorausgang]|-||A1||=||Messspitze Analog 1||[Sensor: SignalZu 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-0039_HeartBeatDetector053_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.
Bürokrat, Administrator
611
Bearbeitungen