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.
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.
Ce convertisseur analogique-numérique (ou en abrégé ADC) n'a pas qu'une seule adresse I2C. C'est un ADC qui peut avoir 4 adresses I2C différentes. Celles-ci peuvent être choisies librement, mais dans la suite du cours, l'adresse standard 0x48 est utilisée.
Dans le tableau suivant, vous pouvez voir toutes les adresses possibles et comment elles peuvent être atteintes. Il est principalement à noter que la broche ADDR de l'ADC est responsable du changement d'adresse.
De | A | Adresse |
---|---|---|
ADDR Pin | GND Pin | 0x48 |
ADDR Pin | VDD Pin | 0x49 |
ADDR Pin | SDA Pin | 0x4A |
ADDR Pin | SCL Pin | 0x4B |
L'affectation des broches est imprimée sur la carte du module
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 <Adafruit_ADS1X15.h>
#include <math.h>
// Le module ADS1115 est initialisé - toutes les opérations suivantes
// avec l'ADC peuvent être exécutées à l'aide de l'objet "ads".
Adafruit_ADS1115 ads;
void setup (void)
{
Serial.begin(9600);
Serial.println("Les valeurs de l'entrée analogique A1 de l'ADS1115 sont lues et sorties.");
Serial.println("Gamme ADC: +/- 4.096V 1 bit = 0.125mV");
// Te module dispose d'amplificateurs de signaux sur ses entrées analogiques,
// dont l'amplification peut être configurée par logiciel dans les plages ci-dessous.
// Ceci est souhaité dans le cas où une certaine plage de tension est attendue
// comme résultat de mesure et une plage est attendue comme résultat de mesure
// et ainsi une résolution plus élevée du signal est obtenue.
// 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;
// La commande "ads.readADC_SingleEnded(0)" est l'opération réelle qui lance la mesure dans l'ADC.
// Le "0" comme variable pour cette fonction définit le canal utilisé qui doit être mesuré.
// Si, par exemple, le troisième canal doit être mesuré, cette variable doit être remplacée par "3".
adc1 = ads.readADC_SingleEnded(1);
adc1 = ads.readADC_SingleEnded (1);
adc2 = ads.readADC_SingleEnded (2);
adc3 = ads.readADC_SingleEnded (3);
// Conversion des valeurs enregistrées en une tension
voltage0 = ads.computeVolts(adc0);
voltage1 = ads.computeVolts(adc1);
voltage2 = ads.computeVolts(adc2);
voltage3 = ads.computeVolts(adc3);
// Sortie des valeurs sur l'interface série
Serial.print ("Entrée analogique 0:"); Serial.print (voltage0); Serial.println (" V");
Serial.print ("Entrée analogique 1:"); Serial.print (voltage1); Serial.println (" V");
Serial.print ("Entrée analogique 2:"); Serial.print (voltage2); Serial.println (" V");
Serial.print ("Entrée analogique 3:"); Serial.print (voltage3); Serial.println (" V");
Serial.println ("------------------------");
delay (1000);
}