Pentru a citi cateva valori analogice putem folosi un convertor Analog/Digital care comunica cu Arduino prn interfata I2C. Un astfel de convertor este si modulul realizat cu PCF8591.
Acest modul se alimenteaza cu o tensiune cuprinsa intre 2.5 si 6V, 4 intrari ADC pe 8 biti, o iesire DAC si adresa interfetei I2C configurabila.
Preul acestui modul este de 18 lei si poate fi cumparat de aici.
Modulul este cel din poza de mai jos:

Pentru a putea folosi acest modu impreuna cu Arduino va trebui sa instalam libraria PCF8591_library, aceasta se gaseste in managerul de librarii din editorul IDE.
Pe acest modul regasim un fotorezistor (conectat la ADC0), un termistor NTC (conectat la ADVC1), un semireglabil (conectat la ADC3) si un led (conectat la DAC). Aceste componente ne ajuta sa testam functionalitatea modulului.
Primul test va fi facut pentru canalul ADC0, canal la care avem conectat fotorezistorul. Sketchul pentru testare este cel de mai jos:
#include "Arduino.h"
#include "PCF8591.h"
PCF8591 pcf8591(0x48);
void setup() {
Serial.begin(9600);
pcf8591.begin();
Serial.println("Initializare modul PCF8591...");
delay(1000);
}
void loop() {
PCF8591::AnalogInput ai = pcf8591.analogReadAll();
Serial.print("Valoare fotorezistor: ");
Serial.println(ai.ain0);
delay(1000);
}
La rularea codului vom observa in terminalul serial ca valoarea returnata de fotorezitor se va schimba in functie de nivelul luminos receptionat.
Un alt test este cel in care vom folosi semireglabilul. Sketchul este urmatorul:
#include "Arduino.h"
#include "PCF8591.h"
PCF8591 pcf8591(0x48);
void setup() {
Serial.begin(9600);
pcf8591.begin();
Serial.println("Initializare modul PCF8591...");
delay(1000);
}
void loop() {
PCF8591::AnalogInput ai = pcf8591.analogReadAll();
Serial.print("Valoare semireglabil: ");
Serial.println(ai.ain3);
delay(1000);
}
Un alt test pe care-l putem face este cel in care vom vedea in actiune si convertorul Digital/Analog. Pentru a face acest lucru vom folosi urmatorul sketch, rezultatul putand fi observat direct pe ledul existent pe modul:
#include "Arduino.h"
#include "PCF8591.h"
PCF8591 pcf8591(0x48);
void setup() {
Serial.begin(9600);
pcf8591.begin();
Serial.println("Initializare modul PCF8591...");
delay(1000);
}
void loop() {
Serial.println("Verificare functionare DAC... ");
pcf8591.analogWrite(0);
delay(500);
pcf8591.analogWrite(128);
delay(500);
pcf8591.analogWrite(255);
delay(500);
pcf8591.analogWrite(128);
delay(500);
pcf8591.analogWrite(0);
delay(1000);
}
Un alt schetck in care vom face un efect de fade-in/fade-out este mai jos:
#include "Arduino.h"
#include "PCF8591.h"
PCF8591 pcf8591(0x48);
void setup() {
Serial.begin(9600);
pcf8591.begin();
Serial.println("Initializare modul PCF8591...");
delay(1000);
}
void loop() {
Serial.println("Verificare functionare DAC... ");
for (int i=0; i<=255; i++) {
pcf8591.analogWrite(i);
delay(10);
}
delay(1000);
for (int z=255;z>=0;z--) {
pcf8591.analogWrite(z);
delay(10);
}
delay(1000);
}