برای قدرت بیشتر برد آردوینو می توانیم از DAC (تبدیل دیجیتال به آنالوگ) از طریق برد بریک اوت استفاده کنیم. آموزش مفصل آردوینو و DAC در این مقاله برای بهترین درک ارائه شده است. در اینجا از برد بریک اوت مبتنی بر DAC آی سی MCP4725 استفاده می شود که یک مبدل دیجیتال به آنالوگ 12 بیتی با حافظه EEPROM است، این آی سی از قدرت کم استفاده می کند و خروجی با دقت بالایی ارائه می دهد.
این آی سی در بسته sot عرضه می شود، بنابراین بهتر است در این آموزش از برد I2C بریک اوت MCP4725 از Sparkfun استفاده کنیم. با استفاده از این برد با دادن ورودی دیجیتال با فرمت I2C به آردوینو می توان ولتاژ آنالوگ دریافت کنیم.
ویژگی ها و کاربردهای MCP4725
این آی سی وضوح 12 بیت و حافظه دائمی روی برد (EEPROM) را ارائه می دهد. آن را میتوان با پایه آدرس خارجی A0 آدرسدهی کرد و در حالت عادی یا مصرف کم کار میکند. طیف وسیعی از ولتاژ منبع تغذیه ورودی را از 2.7 ولت تا 5.5 ولت از یک منبع تغذیه می گیرد. این آی سی هشت آدرس را از طریق I2C ارائه می دهد و دارای محدوده دمایی گسترده: -40 درجه سانتیگراد تا +125 درجه سانتیگراد است.
کاربردها
- کالیبراسیون سنسور
- لوازم جانبی کامپیوتر
- سیستم های جمع آوری داده
- ابزار دقیق قابل حمل کم توان
سازوکار مدار
پایه 5 ولت و پایه GND برد آردوینو را به پایه VCC و GND برد بریک اوت وصل کنید. سپس پایه های A4 (SDA)، A5 (SCL) را به پایه I2C برد بریک اوت MCP 4725 وصل کنید. اگر از بردهای آردوینو دیگری استفاده میکنید به پایه های I2C متصل کنید. پایه خروجی MCP4725 به پایه آنالوگ A0 متصل می شود به این صورت که می توانیم ولتاژ آنالوگ بدست آمده از MCP4725 را در مانیتور سریال اندازه گیری و نمایش دهیم، همچنین می توانید با استفاده از ولت متر یا مولتی متر دیجیتال اندازه گیری کنید.
Arduino MCP4725 Code
/*
* Arduino Digital to Analog Coverter MCP4725 Interface code
* Library from Adafruit-MCP4725
* see text at www.theorycircuit.com
*/
#include <Wire.h> //wire library
#include <Adafruit_MCP4725.h> // MCP4725 library from adafruit
#define analogVin A0 // Analog voltage input to A0
Adafruit_MCP4725 MCP4725;
void setup(void) {
Serial.begin(9600);
MCP4725.begin(0x60); // Default I2C Address of MCP4725 breakout board (sparkfun)
}
void loop(void) {
uint32_t MCP4725_value;
int adcValueRead = 0;
float voltageRead = 0;
float MCP4725_expected_output;
for (MCP4725_value = 0; MCP4725_value < 4096; MCP4725_value = MCP4725_value + 15)
{
MCP4725_expected_output = (5.0/4096.0) * MCP4725_value;
MCP4725.setVoltage(MCP4725_value, false);
delay(250);
adcValueRead = analogRead(analogVin);
voltageRead = (adcValueRead * 5.0 )/ 1024.0;
Serial.print("MCP4725 Value: ");
Serial.print(MCP4725_value);
Serial.print("\tExpected Voltage: ");
Serial.print(MCP4725_expected_output,3);
Serial.print("\tArduino ADC Value: ");
Serial.print(adcValueRead);
Serial.print("\tArduino Voltage: ");
Serial.println(voltageRead,3);
}
}
کتابخانه