KY-053 Analog Digital Converter: Unterschied zwischen den Versionen
Aus Linkerkit.de
Zeile 3: | Zeile 3: | ||
==Technische Daten / Kurzbeschreibung== | ==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 | + | 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. |
− | gemessen werden. Das Messergebnis wird kodiert auf den I2C-Bus ausgegeben. | + | |
'''Für dieses Modul wird eine entsprechende Software benötigt''' | '''Für dieses Modul wird eine entsprechende Software benötigt''' | ||
+ | |||
+ | |||
==Pin-Belegung== | ==Pin-Belegung== | ||
Zeile 19: | Zeile 20: | ||
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. | 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"> | + | <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> | </pre> | ||
Zeile 27: | Zeile 92: | ||
'''Beispielprogramm Download:''' | '''Beispielprogramm Download:''' | ||
− | |||
Zeile 73: | Zeile 137: | ||
||= | ||= | ||
||[Messspitze Analog 3] | ||[Messspitze Analog 3] | ||
− | | | + | |} |
+ | |||
+ | |||
==Codebeispiel Raspberry Pi== | ==Codebeispiel Raspberry Pi== | ||
− | + | <pre class="brush:py"> | |
− | https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code | + | # |
+ | #!/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-023 Joystick Module - 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.2 | ||
+ | |||
+ | # 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 | ||
+ | x_adc_channel = 0 # Channel 0 für die x-Achse | ||
+ | y_adc_channel = 1 # Channel 1 für die y-Achse | ||
+ | # adc_channel = 2 # Channel 2 | ||
+ | # adc_channel = 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 | ||
+ | x = adc.readADCSingleEnded(x_adc_channel, gain, sps) | ||
+ | y = adc.readADCSingleEnded(y_adc_channel, gain, sps) | ||
+ | |||
+ | # Ausgabe auf die Konsole | ||
+ | if GPIO.input(Button_PIN) == True: | ||
+ | print "X-Achse:", x,"mV, ","Y-Achse:", y,"mV, Button: nicht gedrückt" | ||
+ | else: | ||
+ | print "X-Achse:", x, "mV, ", "Y-Achse:", y, "mV, Button: gedrückt" | ||
+ | print "---------------------------------------" | ||
+ | |||
+ | # Reset + Delay | ||
+ | button_pressed = False | ||
+ | time.sleep(delayTime) | ||
+ | |||
+ | |||
+ | |||
+ | except KeyboardInterrupt: | ||
+ | GPIO.cleanup() | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | '''Anschlussbelegung Raspberry Pi:''' | ||
+ | |||
+ | 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-053: | ||
+ | |||
+ | {| style="height: 127px; padding-left: 30px;" width="436" | ||
+ | |- | ||
+ | ||VDD | ||
+ | ||= | ||
+ | ||3,3V | ||
+ | ||[Pin 01] | ||
+ | |- | ||
+ | ||GND | ||
+ | ||= | ||
+ | ||Masse | ||
+ | ||[Pin 09] | ||
+ | |- | ||
+ | ||SCL | ||
+ | ||= | ||
+ | ||GPIO03 / SCL | ||
+ | ||[Pin 05] | ||
+ | |- | ||
+ | ||SDA | ||
+ | ||= | ||
+ | ||GPIO02 / SDA | ||
+ | ||[Pin 03] | ||
+ | |- | ||
+ | ||A0 | ||
+ | ||= | ||
+ | ||s.o. | ||
+ | ||[Sensor: Signal] | ||
+ | |} | ||
+ | |||
+ | '''Beispielprogramm Download''' | ||
+ | |||
+ | Zu starten mit dem Befehl: | ||
+ | |||
+ | <pre class="brush:bash">sudo python KY-0039_HeartBeatDetector.py | ||
+ | </pre> | ||
− | |||
− | + | ==Erweiterte Funktionen des ADS1115 ADC== |
Version vom 6. April 2016, 10:07 Uhr
Inhaltsverzeichnis
Bild
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
Pin-Belegung
Die Pin-Belegung ist auf der Modulplatine aufgedruckt
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:
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
# #!/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-023 Joystick Module - 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.2 # 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 x_adc_channel = 0 # Channel 0 für die x-Achse y_adc_channel = 1 # Channel 1 für die y-Achse # adc_channel = 2 # Channel 2 # adc_channel = 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 x = adc.readADCSingleEnded(x_adc_channel, gain, sps) y = adc.readADCSingleEnded(y_adc_channel, gain, sps) # Ausgabe auf die Konsole if GPIO.input(Button_PIN) == True: print "X-Achse:", x,"mV, ","Y-Achse:", y,"mV, Button: nicht gedrückt" else: print "X-Achse:", x, "mV, ", "Y-Achse:", y, "mV, Button: gedrückt" print "---------------------------------------" # Reset + Delay button_pressed = False time.sleep(delayTime) except KeyboardInterrupt: GPIO.cleanup()
Anschlussbelegung Raspberry Pi:
Sensor KY-039
Signal | = | Analog 0 | [Pin A0 (ADS1115 - KY-053)] |
+V | = | 3,3V | [Pin 1] |
GND | = | Masse | [Pin 6] |
ADS1115 - KY-053:
VDD | = | 3,3V | [Pin 01] |
GND | = | Masse | [Pin 09] |
SCL | = | GPIO03 / SCL | [Pin 05] |
SDA | = | GPIO02 / SDA | [Pin 03] |
A0 | = | s.o. | [Sensor: Signal] |
Beispielprogramm Download
Zu starten mit dem Befehl:
sudo python KY-0039_HeartBeatDetector.py