Arduinoで可変電圧器【Seeeduino Xiao】

Arduino互換機の超小型マイコンSeeeduino Xiaoで、可変可能な小信号用電圧器を作ってみた。具体的には、0〜1000mVの範囲で約1mV間隔で可変できるものである。このような可変電圧器があると、回路実験にとても重宝する。Seeeduino XiaoならDACが内蔵されているのでとても簡単だ。皆さんも一台、可変電圧器を作ってみてはいかがだろうか。
はじめに
通常、Arduinoで電力を作り出すにはPWM信号のデューティ比を変化させるため、あくまでも擬似電圧にしかならない。しかし、Seeeduino XiaoではDACが標準で備わっているため、簡単にアナログ電圧を作れるのだ。
図の1番ピンがDACに割り当てられている。DACの分解能は10bit。
3.3V電源を可変抵抗で電圧を分圧し、アナログ入力で値を読み取って0〜1000mVの範囲でDACへ出力した。そして、アナログ入力で読み取った値はOLEDディスプレイを使って電圧表示させた。
配線
配線は図の通り。
可変抵抗は100kΩを使用した。可変抵抗の両端に3.3V電圧をかけ、真ん中のピンをA10に繋いだ。OLEDディスプレイには3.3V電源を供給し、SDA、SCLをSeeeduino
Xiaoの割り当てピンに繋ぐ。
A0ピンとGNDを使って、電圧をかけたい対象に接続する。ただし、電流はたくさん供給できないので注意しよう。LEDやモータなどの高負荷には向いていない。
プログラム
今回作った可変電圧のプログラムがこちら。
#include <U8g2lib.h>
#define DAC_PIN A0
#define POT_PIN A10
(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2
const float Vdd = 3.262;
void setup() {
.begin(9600);
Serial(POT_PIN, INPUT);
pinMode(10); // Set analog out resolution to max, 10-bits
analogWriteResolution.begin();
u8g2}
void loop() {
float v = analogRead(POT_PIN); // 10-bits
float dacVoltage = v / Vdd; // Output limit 0V~1V
(DAC_PIN, dacVoltage);
analogWrite
int voltage = v / 1023.0 * 1000;
(voltage);
displayOLCD// Serial.println(voltage);
(100);
delay
}
void displayOLCD(int voltage) {
char buf[10];
(buf, 10, "%d [mV]", voltage);
snprintf
.clearBuffer();
u8g2.setFont(u8g2_font_crox3hb_tf);
u8g2.drawStr(0, 16, buf);
u8g2.sendBuffer();
u8g2}
電圧の精度は0.01%の範囲に収まり、十分実用的である。この可変電圧器は、FETのgm(相互コンダクタンス)を測定するのに大いに役立った。

関連記事
- Arduinoと可変抵抗でLEDの明るさ制御
- ADコンバータADS1115の使い方【ESP32・Arduino】
- オペアンプで作るコンパレータ
- 【Raspberry Pi】ADコンバータMCP3008の使い方【SPI通信】
- Raspberry PiでSPI通信できるようにする設定【ADコンバータMAX1118】