Il Modulo Convertitore ADC 16-bit 4 Canali ADS1115 può essere utilizzato con micro controllori senza convertitore ADC o per aumentare il numero degli I/O analogici oppure, ancora quando si desidera un ADC ad elevata precisione.
Indice
Il convertitore ADS1115
L’integrato utilizzato tipo ADS1115 offre una precisione di 16-bit con 860 campionamenti al secondo, i 4 ingressi possono essere configurati come 4 canali single-ended oppure come 2 canali differenziali.
Il modulo si interfaccia tramite I2C e può funzionare con una tensione di alimentazione compresa tra 2Vcc e 5Vcc, all’interno del chip ADS1115 sono anche presenti un amplificatore con un guadagno programmabile fino a 16 volte ed un comparatore.
L’indirizzo dell’interfaccia I2C può essere settato con 4 valori diversi permettendo di utilizzare fino a 4 ADS1115 su un singolo bus I2C.
Caratteristiche Principali:
-
Alimentazione da 2Vcc a 5Vcc
-
Bassissimo consumo: 150uA durante la conversione
-
4 Ingressi single-ended oppure 2 ingressi differenziali
-
Amplificatore a guadagno programmabile interno al chip
-
Comparatore programmabile
-
Uscita I2C
-
4 indirizzi programmabili
Dove trovare il modulo ADC 16-bit 4 Canali ADS111
Il Modulo Convertitore ADC 16-bit 4 Canali ADS111, può essere acquistato presso il sito Homotix, il codice prodotto è HMT1115
Se lo acquisterete presso il sito potrete usufruire di uno sconto inserendo il codice di sconto ADRIROBOT
Altra possibilità d’acquisto è presso il sito Futura Elettronica, codice articolo 2846-MODADS1115
Schema del modulo convertitore ADC 16-bit ADS1115
Lo schema elettrico è molto semplice, in quanto tutte funzioni sono svolte dall’integrato ADS1115, sono necessari solo pochi componenti esterni, tra cui due ferriti MMZ2012Y152BT000, impedenza 1500 Ω a 100MHz poste sulla linea di alimentazione e GND, e delle resistenza di pull up da 10 kΩ. sul bus I2C che servono per tenere le due linee SDA e SCL agganciate a 1 logico.
La tensione di alimentazione VDD può essere nel range di 2-5.5VDC La corrente assorbita è limitata a 150 uA durante la conversione.
La resistenza R3 posta sul pin ADDR, imposta il valore dell’indirizzo del modulo pari a quello di default ossia 0x48 (1001000) , ma è possibile attribuire altri valori che sono:
Valore indirizzo | Address collegato a |
0x48 (1001000) | GDD Default |
0x49 (1001001) | VDD |
0x4A (1001010) | SDA |
0x4B (1001011) | SCL |
Principali componenti del modulo
ADS111x Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs
MMZ2012Y152BT000 Chip Ferrite Beads
Foto del modulo
Disimballaggio del modulo
Il Modulo Convertitore ADC 16-bit 4 Canali ADS1115 è fornito in una bustina antistatica con una Pin strip da 10 pin maschio
La Pin strip andrà saldata al PCB a vostra cura. Se non avete esperienza vi consiglio la lettura dell’articolo Come eseguire delle buone saldature
Libreria di gestione per Arduino
Per facilitare la gestione del Modulo Convertitore ADC 16-bit 4 Canali ADS1115 è disponibile una speciale libreria che può essere scaricata facilmente facendo uso della funzione Gestione librerie dell”IDE
A questo punto basterà inserire nel campo ricerca “ADS1x15“, in questo modo apparirà la libreria creata dalla Adafruit.
Al termine dell’installazione apparirà la dicitura “INSTALLED”
Ora andando sotto la sezione Esempi, potrete trovare sotto la cartella “Esempi da librerie personalizzate” gli esempi inerenti la libreria Adafruit ADS1x16
Test di prova Modulo
Come abbiamo visto il Modulo Convertitore ADC 16-bit 4 Canali ADS1115 nasce per essere utilizzato con microcontrollori senza convertitore ADC o per aumentare il numero degli I/O analogici oppure, ancora quando si desidera un ADC ad elevata precisione.
In questo caso lo utilizzeremo per aumentare gli ingressi analogici di un modulo Wemos D1 mini, che di ingressi che possiede solamente uno.
Modulo WeMos D1 mini
Il Modulo WeMos D1 mini è basato sul microcontrollore Wi-Fi ESP8266 ESP-12F che può essere programmato utilizzando l’IDE di Arduino oppure NodeMCU. La semplicità della programmazione che può essere effettuata anche in modalità wireless e l’ampia disponibilità di shield aggiuntivi permettono di sviluppare il proprio progetto di “Internet delle cose” in tempi estremamente rapidi.
Il modulo WeMos D1 mini è dotato di una interfaccia USB realizzata tramite il convertitore seriale-USB CH340
Dal connettore USB viene anche prelevata l’alimentazione a 5V, un regolatore interno (tipo RT9013) si occupa di generare l’alimentazione a 3,3V per il modulo ESP-12F. Per evitare confusione tutti i pin di I/O sono chiaramente etichettati.
Nota: Tutti gli I/O supportano una tensione massima di 3,3V
Per altri shield per il modulo Wemos D1 mini vedere l’articolo Wemos D1 mini – Raccolta Shield disponibili
ModuloKY-023 XY axis joystick module
Il Modulo Convertitore ADS1115 sarà utilizzato per leggere i valori analogici forniti da due moduli KY-023 XY axis joystick module che fa parte della serie “37 In 1 Sensor Module Board Set Kit For Arduino“, il sensore è analogo a quello installato su joystick della playstation sullePS2, è un sensore di tipo analogico e fornisce le coordinate X e Y tramite i pin analogici.
La pressione del pulsante viene trasmesso tramite pin digitale.
Il modulo è essenzialmente composto da due potenziometri per le X-Y e da un micro switch per il pulsante
Schema dei collegamenti
Per i collegamenti occorre fare riferimento allo schema sotto riportato, per questo si è utilizzato una breadboard, per l’alimentazione si è utilizzato un apposto alimentatore da breadboard impostato per fornire 5V.
Per verificare i valori forniti dal convertitore si è montato sul modulo WeMos D1 mini il relativo OLED Shield .
Sia il Modulo Convertitore ADS1115 che l’ OLED Shield saranno gestiti dal Wemos D1 Mini attraverso tramite il bus I2C.
Modulo alimentatore per Breadboard | Bread board |
OLED Shield per Wemos D1 mini | Wemos d1 mini |
Filmato
Listato del programma
Per il funzionamento del programma, visto l’utilizzo del modulo OLED sono necessarie alcune librerie, per questo motivo vi dovrete riferire alla pagina OLED shield per come dovrete caricarle.
Programma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <Wire.h> #include <Adafruit_ADS1015.h> #include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_SSD1306.h" Adafruit_ADS1115 ads(0x48); #define OLED_RESET 0 // GPIO0 Adafruit_SSD1306 display(OLED_RESET); void setup(void) { Serial.begin(9600); Serial.println("Hello!"); Serial.println("Getting single-ended readings from AIN0..3"); Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)"); ads.begin(); // Impostazione modulo display con indirizzo I2C addr 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); delay(2000); // Cancellazione schermo e buffer display.clearDisplay(); // Messaggio iniziale display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.println(" ADRIROBOT"); display.println(" TEST "); display.println(" MODULO "); display.println(" ADS1115 "); display.display(); delay(2000); display.clearDisplay(); display.setTextColor(WHITE); display.setCursor(0, 0); } void loop() { int16_t adc0, adc1, adc2, adc3; adc0 = ads.readADC_SingleEnded(0); adc1 = ads.readADC_SingleEnded(1); adc2 = ads.readADC_SingleEnded(2); adc3 = ads.readADC_SingleEnded(3); Serial.print("AIN0: "); Serial.println(adc0); Serial.print("AIN1: "); Serial.println(adc1); Serial.print("AIN2: "); Serial.println(adc2); Serial.print("AIN3: "); Serial.println(adc3); Serial.println(" "); display.clearDisplay(); display.setCursor(0, 0); display.setTextColor(BLACK, WHITE); // Inverte il colore del testo display.print("Joystick 1"); display.setTextColor(WHITE); display.print("AIN0:"); adc0 = map(adc0, 0, 26700, 0, 3); // Scala di lettura ADC0 display.println(adc0); display.print("AIN1:"); adc1 = map(adc1, 0, 26700, 0, 3); // Scala di lettura ADC1 display.println(adc1); display.setTextColor(BLACK, WHITE); // Inverte il colore del testo display.print("Joystick 2"); display.setTextColor(WHITE); display.print("AIN2:"); adc2 = map(adc2, 0, 26700, 0, 3); // Scala di lettura ADC2 display.println(adc2); display.print("AIN3:"); adc3 = map(adc3, 0, 26700, 0, 3); // Scala di lettura ADC3 display.println(adc3); display.display(); delay(500); } |