Trinketのアナログ入力
前回(Trinketで模型用モータを回す(1))はTrinketでモータを回す簡単な実験でした。回すと言っても、単純にOn/Offしているだけで、”制御”しているとは甚だ言い難いレベルでしたね。まぁ、それでも最初の一歩的には全然OKでしょう。
さて、今回はもう少しTrinket(というか最終的には8pinoなんですけど)の基本的なところを試してみたいと思います。Trinketは以下のように、5個の出力ピンを持っていますが、そのピンはいろいろな用途に使えるようです。
(Adafruit : https://learn.adafruit.com/assets/13866 より参照)
今まで、digitalWrite()でOn/Off出力、analogWrite()でPWM出力と出力方向の制御を試してきましたので、今度は入力方向を試してみたいところです。というわけで、上手を見ると、入力に使えそうなピンが幾つかあります。ググってみると、analogRead()でピンに入力される信号の電圧を0〜1023の値にAD変換して取り込んでくれるみたいです。ピンに掛けられる電圧は5Vでいいようですので、いつものように、手持ちの部品を使って、回路をさくっと作ってみました。
ちょっと見づらいかもしれませんが、Trinketを中心に、まずPB0には前回と同じPWMの出力回路を接続しています。PB0の出力をQ1で受けて、最終的にQ2をドライブしています。Q2の出力側はTPで何でもつなげられるようにしておきました。
今回は更に、PB1に可変抵抗を繋いでいます。単純な抵抗分割で0〜5Vが出力できる物を使っています。
実際の回路はこんな感じです。
相変わらず雑ですが、手前の可変抵抗でアナログ入力電圧を調整する感じですね。これくらいいい加減でもなんとかなります。
今回は、analogRead()でアナログ入力電圧を取り込んで、これを0〜255に変換して(4で割る)、analogWrite()でPWM値として出力するという単純なプログラムでテストしました。
/* AnalogRead Test Analog値を読み取って、PWMデューティー比に変えて出力する */ // Pin 1 has an LED connected on most Arduino boards. // give it a name: int out = 1; int val = 0; int time = 10; int dir = 1; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(out, OUTPUT); }
// the loop routine runs over and over again forever: void loop() { val = analogRead(1) / 4; analogWrite(out, val); delay(time); } |
結果はこんな感じ。オシロの水色は入力の電圧(回路図のTP2)、黄色はPWM出力(回路図のTP1)です。
可変抵抗をグリグリ回すと、水色の入力電圧値が0〜5Vで振れています。これに伴って、出力のPWM波形のデューティーが変わっているのがわかります。あら簡単。
回路上の出力段のTPにLEDをつけて試してみると、ちゃんと調光できてます。これだけで、何かに使えそうですね。
という訳で、今回はやや手抜きですが、analogReadを使って電圧信号を入力するテストをやってみました。普通、AD変換とか言うと結構大変な物ですが、これは本当にお手軽でした。今度は、照度センサなんかをつけて、自動で部屋灯の調整をするとかしてもいいかもしれませんね。
(2015.01.23一部修正)