KY-053 Analog Digital Converter: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Codebeispiel Arduino)
Zeile 20: 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">#include <Adafruit_ADS1015.h>
+
<pre class="brush:cpp">#include  
#include <Wire.h>
+
#include  
  
 
// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
 
// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
Zeile 92: Zeile 92:
 
'''Beispielprogramm Download:'''
 
'''Beispielprogramm Download:'''
  
 
+
[[Medium:KY-053-AnalogDigitalConverter.zip|KY-053-AnalogDigitalConverter.zip]]
  
 
'''Anschlussbelegung Arduino:'''
 
'''Anschlussbelegung Arduino:'''
Zeile 141: Zeile 141:
 
==Codebeispiel Raspberry Pi==
 
==Codebeispiel Raspberry Pi==
 
<pre class="brush:py">
 
<pre class="brush:py">
 
 
#
 
#
 
#!/usr/bin/python
 
#!/usr/bin/python
 
# coding=utf-8
 
# coding=utf-8
 
+
 
 
#############################################################################################################
 
#############################################################################################################
 
### Copyright by Joy-IT
 
### Copyright by Joy-IT
Zeile 151: Zeile 150:
 
### Commercial use only after permission is requested and granted
 
### Commercial use only after permission is requested and granted
 
###
 
###
### KY-023 Joystick Module - Raspberry Pi Python Code Example
+
### KY-053 Analog Digital Converter - Raspberry Pi Python Code Example
 
###
 
###
 
#############################################################################################################
 
#############################################################################################################
 
+
 
 
+
 
 
# Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi
 
# Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi
 
# Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht
 
# Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht
Zeile 161: Zeile 160:
 
from Adafruit_ADS1x15 import ADS1x15
 
from Adafruit_ADS1x15 import ADS1x15
 
from time import sleep
 
from time import sleep
 
+
 
 
# Weitere benoetigte Module werden importiert und eingerichtet
 
# Weitere benoetigte Module werden importiert und eingerichtet
 
import time, signal, sys, os
 
import time, signal, sys, os
Zeile 167: Zeile 166:
 
GPIO.setmode(GPIO.BCM)
 
GPIO.setmode(GPIO.BCM)
 
GPIO.setwarnings(False)
 
GPIO.setwarnings(False)
 
+
 
 
# Benutzte Variablen werden initialisiert
 
# Benutzte Variablen werden initialisiert
delayTime = 0.2
+
delayTime = 0.5 # in Sekunden
 
+
 
 
# Adresszuweisung ADS1x15 ADC
 
# Adresszuweisung ADS1x15 ADC
 
+
 
ADS1015 = 0x00  # 12-bit ADC
+
ADS1015 = 0x00  # 12-bit ADC
ADS1115 = 0x01  # 16-bit
+
ADS1115 = 0x01  # 16-bit
 
+
 
 
# Verstaerkung (Gain) wird ausgewaehlt
 
# Verstaerkung (Gain) wird ausgewaehlt
gain = 4096  # +/- 4.096V
+
gain = 4096  # +/- 4.096V
# gain = 2048  # +/- 2.048V
+
# gain = 2048  # +/- 2.048V
# gain = 1024  # +/- 1.024V
+
# gain = 1024  # +/- 1.024V
# gain = 512   # +/- 0.512V
+
# gain = 512  # +/- 0.512V
# gain = 256   # +/- 0.256V
+
# gain = 256  # +/- 0.256V
 
+
 
 
# Abtasterate des ADC (SampleRate) wird ausgewaehlt
 
# Abtasterate des ADC (SampleRate) wird ausgewaehlt
# sps = 8    # 8 Samples pro Sekunde
+
# sps = 8    # 8 Samples pro Sekunde
# sps = 16   # 16 Samples pro Sekunde
+
# sps = 16  # 16 Samples pro Sekunde
# sps = 32   # 32 Samples pro Sekunde
+
# sps = 32  # 32 Samples pro Sekunde
sps = 64   # 64 Samples pro Sekunde
+
sps = 64  # 64 Samples pro Sekunde
# sps = 128  # 128 Samples pro Sekunde
+
# sps = 128  # 128 Samples pro Sekunde
# sps = 250  # 250 Samples pro Sekunde
+
# sps = 250  # 250 Samples pro Sekunde
# sps = 475  # 475 Samples pro Sekunde
+
# sps = 475  # 475 Samples pro Sekunde
# sps = 860  # 860 Samples pro Sekunde
+
# sps = 860  # 860 Samples pro Sekunde
 
+
 
 
# ADC-Channel (1-4) wird ausgewaehlt
 
# ADC-Channel (1-4) wird ausgewaehlt
x_adc_channel = 0    # Channel 0 für die x-Achse
+
adc_channel_0 = 0    # Channel 0
y_adc_channel = 1    # Channel 1 für die y-Achse
+
adc_channel_1 = 1    # Channel 1
# adc_channel = 2    # Channel 2
+
adc_channel_2 = 2    # Channel 2
# adc_channel = 3    # Channel 3
+
adc_channel_3 = 3    # Channel 3
 
+
 
 
# Hier wird der ADC initialisiert - beim KY-053 verwendeten ADC handelt es sich um einen ADS1115 Chipsatz
 
# Hier wird der ADC initialisiert - beim KY-053 verwendeten ADC handelt es sich um einen ADS1115 Chipsatz
 
adc = ADS1x15(ic=ADS1115)
 
adc = ADS1x15(ic=ADS1115)
 
+
 
 
Button_PIN = 24
 
Button_PIN = 24
 
GPIO.setup(Button_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
 
GPIO.setup(Button_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
 
+
 
 
#############################################################################################################
 
#############################################################################################################
 
+
 
 
# ########
 
# ########
 
# Hauptprogrammschleife
 
# Hauptprogrammschleife
Zeile 212: Zeile 211:
 
# Das Programm liest die aktuellen Werte der Eingang-Pins
 
# Das Programm liest die aktuellen Werte der Eingang-Pins
 
# und gibt diese in der Konsole aus
 
# und gibt diese in der Konsole aus
 
+
 
 
try:
 
try:
        while True:
+
        while True:
                #Aktuelle Werte werden aufgenommen
+
                #Aktuelle Werte werden aufgenommen
                x = adc.readADCSingleEnded(x_adc_channel, gain, sps)
+
                adc0 = adc.readADCSingleEnded(adc_channel_0, gain, sps)
                y = adc.readADCSingleEnded(y_adc_channel, gain, sps)
+
                adc1 = adc.readADCSingleEnded(adc_channel_1, gain, sps)
 
+
                adc2 = adc.readADCSingleEnded(adc_channel_2, gain, sps)
                # Ausgabe auf die Konsole
+
                adc3 = adc.readADCSingleEnded(adc_channel_3, gain, sps)
                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()
+
  
 +
                # 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>
 
</pre>
  

Version vom 6. April 2016, 10:26 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:

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

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

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