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  
+
<pre class="brush:cpp">#include <Adafruit_ADS1015.h>
#include  
+
#include <Wire.h>
  
 
// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
 
// ADS1115 Modul wird initialisiert - alle folgenden Operationen mit dem ADC
Zeile 138: Zeile 138:
 
||[Messspitze Analog 3]
 
||[Messspitze Analog 3]
 
|}
 
|}
 
  
 
==Codebeispiel Raspberry Pi==
 
==Codebeispiel Raspberry Pi==

Version vom 6. April 2016, 10:08 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 <Adafruit_ADS1015.h>
#include <Wire.h>

// 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