◆以前からやりたかったNゲージの踏切電子工作です。アルデュイーノのプログラムを使ってSG90というサーボモーターをコントロールします。完成品は色々出ていますが、アマゾンさんでマイコンボード(900円)、サーボモーター(5個で1500円)で作れました。あとはカンカンカンの警報音とLEDの点滅が残っています。
◆まだ試作の段階ですが、動画に撮りましたのでご覧ください。
◆「アルデュイーノ・ナノ」というウノと同じ配列番号のマイコンボードです。このようにコンパクトで使いやすいです。電源コネクターはスマホと同じタイプCとなっています。
◆仕組みは線路の二か所に「リードスイッチ」を設置しています。
◆反対側です。リードスイッチは極性がないので、どちらか一方をグランド(マイナス)につなぎます。
◆そして車両の裏側に、100均の丸い磁石を貼り付けています。これが通るとリードスイッチがONとなり、通り過ぎるとOFFになります。
◆このように仕組みは簡単です。サーボモーターには爪楊枝を代用して付けています。
◆プログラムは、ここに貼っておきます。各行は1から始まり最後は33です。コピペで使えると思います。
--------------------------------------------------------------------
#include <Servo.h>
Servo myServo; // サーボモーターの命令を作成
int switchPin = 2; // リードスイッチのピン番号(①と②をタコ足配線)
int servoPin = 9; // サーボモーターのピン番号
int pos = 0; // サーボモーターの位置
bool isUp = false; // 遮断棒の状態(起動時に上がっている状態にする)
void setup() {
myServo.attach(servoPin); // サーボモーターをピンに接続
pinMode(switchPin, INPUT_PULLUP); // リードスイッチピンを入力モードに設定
}
void loop() {
if (digitalRead(switchPin) == LOW) { // ①②いずれかのスイッチが入ったら動作開始
delay(15); // デバウンス処理
if (digitalRead(switchPin) == LOW) {
isUp = !isUp; // 状態を反転
if (isUp) {
for (pos = 0; pos <= 70; pos += 1) { // 遮断棒がゆっくり下がる
myServo.write(pos);
delay(40); // 上がる遮断棒の速度調整
}
} else {
for (pos = 70; pos >= 0; pos -= 1) { // 遮断棒がゆっくり上がる
myServo.write(pos);
delay(40); // 下がる遮断棒の速度調整
}
}
while (digitalRead(switchPin) == LOW); // ①②いずれかのスイッチが入るまで待機
}
}
}
-------------------------------------------------------------------
◆追伸:ご質問もお受けします。