KY-053 Analog Digital Converter: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
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:'''
  
[[Medium:KY-011_PWM.zip|KY-011_PWM.zip]]
 
  
  
Zeile 73: Zeile 137:
 
||=
 
||=
 
||[Messspitze Analog 3]
 
||[Messspitze Analog 3]
|-}
+
|}
 +
 
 +
 
 
==Codebeispiel Raspberry Pi==
 
==Codebeispiel Raspberry Pi==
Adafruit Raspberry Pi Python Library
+
<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>
  
ADS1115 Python Library
 
  
https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/tree/master/Adafruit_ADS1x15
+
==Erweiterte Funktionen des ADS1115 ADC==

Version vom 6. April 2016, 10:07 Uhr

Bild

KY-0053.png

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

KY-0053 PinBelegung.png

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


Erweiterte Funktionen des ADS1115 ADC