KY-053

Des valeurs de tension analogiques avec une précision allant jusqu'à 16 bits peuvent être mesurées sur un maximum de 4 entrées via des commandes correspondantes sur le bus I2C. Le résultat de la mesure est codé en sortie sur le bus I2C.

Données techniques

interface I2C
Canaux ADC 4
Résolution par canal 16 Bit
Fréquence d'échantillonnage programmable 8 à 860 SPS
Tension de fonctionnement 2V à 5.5V
Tension d'entrée analogique 0V à la tension de fonctionnement
Tension logique I2C 0V à 5.5V
Adresse I2C (configurable par cavalier) 0x48 à 0x4B
Courant de fonctionnement typique 150μA

**Une bibliothèque correspondante est nécessaire pour ce module - voir les exemples de code ci-dessous.

Affectation des broches

L'affectation des broches est imprimée sur la carte du module

Exemple de code Arduino

Affectation des broches Arduino

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

Les cartes Arduino sont livrées avec un CAN 10 bits à 6 canaux. Cependant, si vous avez besoin de plus de canaux ou d'une plus grande précision, vous pouvez étendre l'Arduino de 4 canaux ADC avec une précision de 12 bits en utilisant le module convertisseur analogique numérique KY-053, qui est connecté à l'Arduino via I2C.

Il existe plusieurs façons de contrôler ce module - les bibliothèques ADS1X15 se sont avérées particulièrement accessibles, et sont disponibles chez Adafruit à l'adresse https://github.com/adafruit/Adafruit_ADS1X15. sous la licence BSD.

L'exemple ci-dessous utilise cette bibliothèque. Nous vous recommandons de la télécharger depuis Github, de la décompresser et de la copier dans le dossier des bibliothèques Arduino, qui se trouve par défaut à l'adresse (C:\User[nom d'utilisateur]\Documents\Arduino\libraries), afin qu'elle soit disponible pour cet exemple de code et les projets suivants. Sinon, il est également inclus dans le paquet de téléchargement ci-dessous.

#include "ADS1x15.h"
#include <math.h>
 
Adafruit_ADS1115 ads; 
 
void setup(void) 
{
  Serial.begin(9600);
   
  Serial.println("Les valeurs des entrées analogiques de l'ADS1115 (A0..A3) sont lues et sorties.");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 0.1875mV)");
   
 
  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;
   

  adc0 = ads.readADC_SingleEnded(0); 
  adc1 = ads.readADC_SingleEnded(1);
  adc2 = ads.readADC_SingleEnded(2);
  adc3 = ads.readADC_SingleEnded(3);

  gain_conversion_factor= 0.1875;

  voltage0 = (adc0 * gain_conversion_factor);
  voltage1 = (adc1 * gain_conversion_factor);
  voltage2 = (adc2 * gain_conversion_factor);
  voltage3 = (adc3 * gain_conversion_factor);

  Serial.print("Entrée analogique 0: "); Serial.print(voltage0);Serial.println("mV");
  Serial.print("Entrée analogique 1: "); Serial.print(voltage1);Serial.println("mV");
  Serial.print("Entrée analogique 2: "); Serial.print(voltage2);Serial.println("mV");
  Serial.print("Entrée analogique 3: "); Serial.print(voltage3);Serial.println("mV");
  Serial.println("------------------------");
   
  delay(1000);
}

Téléchargement d'un exemple de programme

KY053-Arduino.zip

Exemple de code Raspberry Pi

Affectation des broches Raspberry Pi

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

Contrairement à l'Arduino, le Raspberry Pi n'a pas d'entrées analogiques ou il n'y a pas d'ADC (convertisseur analogique numérique) intégré dans la puce du Raspberry Pi. Cela limite le Raspberry Pi si vous voulez utiliser des capteurs dont les valeurs ne sont pas émises numériquement [valeur de tension dépassée -> ON numérique | valeur de tension inférieure -> OFF numérique | exemple : bouton enfoncé [ON] bouton relâché [OFF]], mais dont la valeur doit être variable en continu (exemple : potentiomètre -> différente position = différente valeur de tension).

Pour contourner ce problème, notre kit de capteurs X40 possède un module avec un ADC 16 bits, le KY-053, que vous pouvez utiliser sur le Raspberry pour l'étendre avec 4 entrées analogiques. Il est connecté au Raspberry Pi via I2C, prend en charge la mesure analogique et transmet la valeur numériquement au Raspberry Pi.

Le programme utilise les bibliothèques Python ADS1x15 et I2C correspondantes d'Adafruit pour contrôler l'ADC ADS1115. Ceux-ci ont été publiés au lien suivant https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15 sous la licence MIT. Les bibliothèques requises ne sont pas incluses dans le paquet de téléchargement ci-dessous.

Vous pouvez installer cette bibliothèque avec la commande suivante :

sudo pip3 install adafruit-circuitpython-ads1x15

Le programme lit la tension actuelle appliquée aux 4 canaux de l'ADC ADS1115 et l'affiche dans la console. La variable "delayTime" peut être utilisée pour définir la pause entre les mesures.

Pour que le Raspberry Pi puisse communiquer avec le capteur sur le bus I2C, la fonction I2C doit d'abord être activée sur le Raspberry Pi. Pour ce faire, les lignes suivantes doivent être ajoutées à la fin du fichier "/boot/config.txt" :

dtparam=i2c_arm=on

Le fichier peut être édité avec la commande suivante :

sudo nano /boot/config.txt

Après la sauvegarde, redémarrez le système pour que l'I²C soit activé correctement :

sudo reboot

Avec la séquence de touches [Ctrl+X -> Y -> Enter], le fichier peut être sauvegardé et fermé après avoir ajouté la ligne du bas.

En outre, des bibliothèques supplémentaires sont nécessaires pour pouvoir utiliser I2C dans Python. Pour les installer, il faut entrer la commande suivante dans la console :

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

Après cela, l'exemple de code Python suivant peut être utilisé :

Pour ce faire, créez un nouveau fichier, puis copiez l'exemple dans ce fichier :

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

i2c = busio.I2C(board.SCL, board.SDA)

ads = ADS.ADS1115(i2c)

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)

La bibliothèque est également accompagnée d'un exemple de code. Vous pouvez le consulter sur le site web: https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15/tree/main/examples

Le script Python doit être exécuté avec Python 3.

Télécharger le programme type

KY053-RPi.zip

Pour commencer avec la commande

sudo python3 KY053.py

Fonctions avancées du CAN ADS1115

La fonction de l'ADS1115 utilisée dans les exemples de code présentés ci-dessus est appelée "Single Ended Conversion" et indique qu'une mesure est effectuée sur le seul canal sélectionné par rapport à la masse.

En plus de ce type de mesure, l'ADC ADS1115 dispose également, par exemple, de la fonction de mesure différentielle, de sorte qu'une tension différentielle entre deux entrées est mesurée (exemple : tension entre A0 et A1). En plus de la mesure unilatérale, il est possible d'activer la fonction de comparateur, qui ne fournit un résultat de mesure que lorsqu'un seuil de tension est dépassé.

Ces fonctions et d'autres fonctions, comme la modification du taux d'échantillonnage, sont programmées dans les bibliothèques Adafruit pour la configuration - voir la documentation des bibliothèques Adafruit pour plus de détails.