Arduino実験の最後に、アンプでの音量増幅を行なってみる(教科書202ページ)。その為に追加で用意したのは以下の部品。
- オーディオアンプIC NJM386BD
- ブレッドボード用ダイナミックスピーカー
- 電解コンデンサー220μF35V105℃ × 2
ちなみにこういった電子パーツ類の調達は、昔から秋月電子通商のネット通販サービスを利用している。だいたい欲しいものは手に入る有り難い存在だ。
回路は写真上のような感じで簡単、スケッチは踏切警報機で使用したものをそのまま流用する。このスケッチにはLED点滅の制御も含まれるが、今回その部分の回路は省略している。
[ スケッチ:toneMultiple1 ]
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
int analogValue = analogRead(A0);
if (analogValue< 150) {
int i;
for (i=0; i<10; i++) {
// play a note on pin 6 for 200 ms:
tone(6, 675, 500);
digitalWrite(13, HIGH);
delay(450);
// turn off tone function for pin 8:
noTone(6);
digitalWrite(13, LOW);
tone(6, 675, 500);
digitalWrite(12, HIGH);
delay(450);
// turn off tone function for pin 8:
digitalWrite(12, LOW);
noTone(6);
}
}
}
リレー制御に関して教科書に例題は載っていない(Arduinoと別に自己保持回路の例はある)が、使用機会は多そうなのでネット上でサンプルを探して実験を行なってみた。使用したリレーは 5V小型リレー 941H-2C-5D(接点容量:2A 2回路C接点)である。
[ スケッチ:Relay1 ]
void setup() {
pinMode(8,OUTPUT);
}
void loop() {
digitalWrite(8,HIGH);
delay(1000);
digitalWrite(8,LOW);
delay(1000);
}
自動運転に付き物なのはポイント切替、これもArduinoなら得意分野である。さいわい、実験基板にはモータードライバーが2セット実装されているので、もう1つを利用してポイントを制御してみよう(教科書170ページ)。但し、ご存じのようにポイントマシンは長時間電気を送り続けるとコイルが焼けてしまうので、一瞬だけHIGHにしてすぐLOWに戻す事を忘れてはいけない。教科書ではdelay(200)として0.2秒で処理している。
[ スケッチ:PwmPnt1 ]
void setup() {
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop() {
// 往路
analogWrite(10, 90);
digitalWrite(11, LOW);
delay(3000);
// 停止
analogWrite(10, LOW);
digitalWrite(11, LOW);
delay(5000);
// 復路
analogWrite(11, 90);
digitalWrite(10, LOW);
delay(2180);
// 停止
analogWrite(11, LOW);
digitalWrite(10, LOW);
delay(5000);
// ポイント切替
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
delay(200);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
// 往路
analogWrite(10, 90);
digitalWrite(11, LOW);
delay(3000);
// 停止
analogWrite(10, LOW);
digitalWrite(11, LOW);
delay(5000);
// 復路
analogWrite(11, 90);
digitalWrite(10, LOW);
delay(2180);
// 停止
analogWrite(11, LOW);
digitalWrite(10, LOW);
delay(5000);
// ポイント切替
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(200);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
次はいよいよパワーパック、PWM制御というヤツで(教科書158ページ)、今回よりモータードライバを活用した実験が続く。回路は写真の様な感じで、モータードライバ(TB6643KQ)含む出力側は実験キット基板上に実装されている(写真ピンクのマーキング部分)ものを使った。例によって不良パーツが含まれてないか心配だったが、今回は問題なし。他にスイッチングACアダプター(12V)、ボリューム、整流ダイオードは別途購入した。
[ スケッチ:Pwm1]
void setup() {
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
int vol = analogRead(A0)/4;
analogWrite(10, vol);
digitalWrite(11, LOW);
delay(50);
}
ここまでのまとめとして、光センサー、LED、サーボモーター、圧電ブザーを組み合わせ、踏切として組み上げてみる(教科書124ページ)。その前に、CdSセルが手元に少し余っていたので、キット基板上のものと入れ替え、動作するようにしておいた。スケッチは前回の光センサー+圧電ブザーのものに、LEDを加え、最後にサーボモーターのコントロールを加える。
[ スケッチ:Fumikiri1]
#include
Servo myservo; // create servo object to control a servo
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
int analogValue = analogRead(A0);
if (analogValue< 100) {
int i;
for (i=0; i<10; i++) {
// play a note on pin 6 for 200 ms:
tone(6, 675, 500);
digitalWrite(13, HIGH);
delay(450);
// turn off tone function for pin 8:
noTone(6);
digitalWrite(13, LOW);
tone(6, 675, 500);
digitalWrite(12, HIGH);
delay(450);
// turn off tone function for pin 8:
digitalWrite(12, LOW);
noTone(6);
myservo.write(90);
}
delay(1000);
myservo.write(0);
}
}