KY-053

Per entsprechenden Befehlen auf dem 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.

Technische Daten

Schnittstelle I2C
ADC-Kanäle 4
Auflösung pro Kanal 16 Bit
Programmierbare Abtastrate 8 bis 860 SPS
Betriebsspannung 2 V bis 5,5 V
Analogeingangsspannung 0 V bis Betriebsspannung
I2C Logikspannung 0 V bis 5,5 V
I2C Adresse (Per Jumper Konfigurierbar) 0x48 bis 0x4B
Typischer Betriebsstrom 150μA

Änderung der I2C Adresse

Dieser Analog zu Digital Wandler (oder in kurz ADC) besitzt nicht nur eine I2C Adresse. Hierbei handelt es sich um einen ADC welcher 4 verschiedene I2C Adressen besitzen kann. Diese können frei gewählt werden aber im weiteren verlauf wird die Standard Adresse 0x48 benutzt.

In der folgenden Tabelle können Sie alle möglichen Adressen einsehen und auch wie diese zu erreichen sind. Hierbei ist hauptsächlich zu beachten das der ADDR Pin des ADC verantwortlich ist für die Änderung der Adresse.

Von Zu Adresse
ADDR Pin GND Pin 0x48
ADDR Pin VDD Pin 0x49
ADDR Pin SDA Pin 0x4A
ADDR Pin SCL Pin 0x4B

Pin Belegung

Codebeispiel Arduino

Anschlussbelegung Arduino

Arduino Sensor
5 V +V
Masse GND
Pin A5 SCL
Pin A4 SDA
- ADDR
- ALRT
- A0
- A1
- A2
- A3

Die Arduino-Boards verfügen bereits über einen integrierten 10 Bit-ADC mit 6 Kanälen. Werden weitere Kanäle, oder eine höhere Genauigkeit, benötigt, so kann der Arduino mit Hilfe des KY-053 Analog Digital Converter Moduls um 4 ADC Kanäle mit 12-Bit Genauigkeit erweitert werden.

Zur Ansteuerung empfehlen wir die Verwendung der https://github.com/adafruit/Adafruit_ADS1X15 Biblitohek, die von Adafruit unter der BSD-Lizenz veröffentlicht wurde.

Das unten stehende Beispiel basiert auf dieser Library. Hierzu empfehlen wir diese 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 das Codebeispiel und folgende Projekte zur Verfügung steht. Alternativ ist die Library auch im unten stehenden Download-Paket enthalten.

#include <Adafruit_ADS1X15.h>
#include <math.h>
 
// ADS1115-Modul ist initialisiert - alle weiteren Operationen mit
// dem ADC können mit Hilfe des "ads"-Objekts ausgeführt werden.
Adafruit_ADS1115 ads;
 
void setup (void)
{
  Serial.begin (9600);
   
  Serial.println ("Werte der analogen Eingänge des ADS1115 (A0..A3) werden ausgelesen und ausgegeben");
  Serial.println ("ADC Range: +/- 6.144V (1 bit = 0.1875mV)");
   
  // Dieses Modul verfügt über Signalverstärker an seinen Analogeingängen, 
  // deren Verstärkung in den unten stehenden Bereichen per Software konfiguriert werden kann.
  // Dies ist erforderlich, wenn ein bestimmter Spannungsbereich als Messergebnis 
  // erwartet wird und somit eine höhere Auflösung des Signals erhält.
  // 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 der eigentliche Vorgang, der die Messung im ADC startet.
  // Die "0" als Variable für diese Funktion definiert den verwendeten Kanal, der gemessen werden soll.
  // Soll z.B. der dritte Kanal gemessen werden, muss die "0" durch die "3" ersetzt werden.
  adc0 = ads.readADC_SingleEnded (0);
  adc1 = ads.readADC_SingleEnded (1);
  adc2 = ads.readADC_SingleEnded (2);
  adc3 = ads.readADC_SingleEnded (3);
   
  // Umrechnung der aufgezeichneten Werte in eine Spannung
  voltage0 = ads.computeVolts(adc0);
  voltage1 = ads.computeVolts(adc1);
  voltage2 = ads.computeVolts(adc2);
  voltage3 = ads.computeVolts(adc3);
   
  // Ausgabe der Werte auf der seriellen Schnittstelle
  Serial.print ("Analog input 0:"); Serial.print (voltage0); Serial.println (" V");
  Serial.print ("Analog input 1:"); Serial.print (voltage1); Serial.println (" V");
  Serial.print ("Analog input 2:"); Serial.print (voltage2); Serial.println (" V");
  Serial.print ("Analog input 3:"); Serial.print (voltage3); Serial.println (" V");
  Serial.println ("------------------------");
   
  delay (1000);
}

Beispielprogramm Download

KY053-Arduino.zip

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi

Raspberry Pi Sensor
3,3 V [Pin 1] +V
Masse [Pin 6] GND
GPIO 3 [Pin 5] SCL
GPIO 2 [Pin 3] SDA
- ADDR
- ALRT
- A0
- A1
- A2
- A3

Der Raspberry Pi besitzt im Gegensatz zum Arduino weder analoge Eingänge, noch einen integrierten Analog-Digital Converter. Dies schränkt den Raspberry Pi bei der Verwendung von analogen Sensoren ein. Um dennoch analoge Sensoren am Raspberry Pi verwenden zu können, kann der Raspberry Pi um unser KY-053 Analog Digital Converter Modul um 4 ADC Kanäle mit 12-Bit Genauigkeit erweitert werden.

Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1x15 und I2C Python-Libraries von Adafruit. Diese wurden unter dem folgenden Link https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15 unter der MIT-Lizenz veröffentlicht. Die benötigten Libraries sind nicht im unteren Download-Paket enthalten.

Die Bibliothek kann mit Hilfe des folgenden Befehls installiert werden:

sudo pip3 install adafruit-circuitpython-ads1x15

Damit eine Kommunikation zwischen dem ADC und dem Raspberry Pi möglich ist, muss zusätzlich die I2C-Schnittstelle des Raspberry Pis aktiviert werden. Öffnen Sie dazu die config.txt-Datei über den folgenden Befehl:

sudo nano /boot/config.txt

Fügen Sie die folgende Zeile an das Ende der Datei an:

dtparam=i2c_arm=on

Speichern Sie die Datei mit der Tastenkombination [STRG+O], bestätigen Sie mit [Enter] und verlassen Sie den Editor mit der Tastenkombination [STRG+X].

Zusätzlich ist die Installation der I2C-Bibliotheken notwendig. Installieren Sie diese über den folgenden Befehl...

sudo apt-get install python3-smbus i2c-tools -y

...und führen Sie dann im Anschluss einen Neustart durch:

sudo reboot

Hiernach kann das folgende Python-Code Beispiel verwendet werden:

sudo nano ADS1115.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
###
#############################################################################################################
import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn

# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)

# Create the ADC object using the I2C bus
ads = ADS.ADS1115(i2c)

# Create single-ended input on channels
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
chan2 = AnalogIn(ads, ADS.P2)
chan3 = AnalogIn(ads, ADS.P3)



while True:
    print("channel 0: ","{:>5}\t{:>5.3f}".format(chan0.value, chan0.voltage))
    print("channel 1: ","{:>5}\t{:>5.3f}".format(chan1.value, chan1.voltage))
    print("channel 2: ","{:>5}\t{:>5.3f}".format(chan2.value, chan2.voltage))
    print("channel 3: ","{:>5}\t{:>5.3f}".format(chan3.value, chan3.voltage))
    print("---------------------------------------------------")
    time.sleep(1)

Beispielprogramm Download

KY053-RPi.zip

Zu starten mit dem Befehl

sudo python3 KY053.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 die Funktion der differentiellen Messung, sodass eine Differenz-Spannung zwischen zwei Eingängen gemessen wird (Beispiel: Spannung zwischen A0 und A1). Zusätzlich zur Single-Ended Messung lässt sich auch die Comparator Funktion aktivieren, welche erst ein Messergebnis liefert, wenn eine Spannungsschwelle überschritten wird.

Diese Funktionen sind in den Adafruit Libraries zur Konfiguration einprogrammiert - Näheres finden Sie in der Dokumentation der Adafruit Libraries.