Soraken’s Style

つれづれ

Trinketのアナログ入力

前回(Trinketで模型用モータを回す(1))はTrinketでモータを回す簡単な実験でした。回すと言っても、単純にOn/Offしているだけで、”制御”しているとは甚だ言い難いレベルでしたね。まぁ、それでも最初の一歩的には全然OKでしょう。

 

さて、今回はもう少しTrinket(というか最終的には8pinoなんですけど)の基本的なところを試してみたいと思います。Trinketは以下のように、5個の出力ピンを持っていますが、そのピンはいろいろな用途に使えるようです。

f:id:soraken:20141229221844p:plain

(Adafruit : https://learn.adafruit.com/assets/13866 より参照)

 

今まで、digitalWrite()でOn/Off出力、analogWrite()でPWM出力と出力方向の制御を試してきましたので、今度は入力方向を試してみたいところです。というわけで、上手を見ると、入力に使えそうなピンが幾つかあります。ググってみると、analogRead()でピンに入力される信号の電圧を0〜1023の値にAD変換して取り込んでくれるみたいです。ピンに掛けられる電圧は5Vでいいようですので、いつものように、手持ちの部品を使って、回路をさくっと作ってみました。

f:id:soraken:20141229223822p:plain

ちょっと見づらいかもしれませんが、Trinketを中心に、まずPB0には前回と同じPWMの出力回路を接続しています。PB0の出力をQ1で受けて、最終的にQ2をドライブしています。Q2の出力側はTPで何でもつなげられるようにしておきました。

今回は更に、PB1に可変抵抗を繋いでいます。単純な抵抗分割で0〜5Vが出力できる物を使っています。

実際の回路はこんな感じです。

f:id:soraken:20141229225033p:plain

 相変わらず雑ですが、手前の可変抵抗でアナログ入力電圧を調整する感じですね。これくらいいい加減でもなんとかなります。

 

今回は、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)です。


Analog Input Test - YouTube

可変抵抗をグリグリ回すと、水色の入力電圧値が0〜5Vで振れています。これに伴って、出力のPWM波形のデューティーが変わっているのがわかります。あら簡単。

回路上の出力段のTPにLEDをつけて試してみると、ちゃんと調光できてます。これだけで、何かに使えそうですね。

 

という訳で、今回はやや手抜きですが、analogReadを使って電圧信号を入力するテストをやってみました。普通、AD変換とか言うと結構大変な物ですが、これは本当にお手軽でした。今度は、照度センサなんかをつけて、自動で部屋灯の調整をするとかしてもいいかもしれませんね。

(2015.01.23一部修正)