Arduino初心者がおもちゃを作るまで
デジタルアートが好きなので、IoT機器の組み立て勉強もできるだろうと思いArduinoに触れ始めました。
この記事ではArduinoの準備から作ったもの、躓いたポイントを紹介します。
Arduino入門
普段ソフト面のエンジニアリングばかりでハード的な知識はあまり無い人間です。電子回路図も雰囲気で読んでるし、抵抗の計算とか便利なソフトあるでしょ!?と他力本願な状態の自分がArduinoをいじり始めました。
準備
始めるに当たって機器が必須です。
自分が用意したのはある程度パーツが揃っているキットを購入しました。
(以下、Amazonのリンクになります)
Arduino機器
-
UNIROI 30種セット arduino用キット 初心者 uno r3ボード+LEDセット+ブレッドボード UA002
- (使ったもの:Arduino Uno本体、LED、ジャンパーピン)
-
OSOYOO(オソヨー) Arduino RFIDセキュリティシステムDIYスターターキット RFID実験研究キット
- (使ったもの:人感センサー、サーボモーター)
-
HiLetgo® 3個セット HC-SR501人体赤外線感応モジュール
- (買っただけで使いませんでした…)
参考書
始めるにあたって事前情報としてこの書籍を購入してます。
ツール
参考書に必須アイテムとして載っていたので念のため電圧テスターを購入。
-
Miniデジタル・マルチメータ C-Timvasion LCDディスプレイ
- (買ってまだ使ってません…)
Arduinoアカウント
Arduinoのアカウントを作成してArduinoのプログラムを作成するツールを入手。
Arduino - Home
プログラミング環境
-
Windows10
- Arduino Web Editor
- Arduino Create Agent プラグインのDL/インストール
-
Mac OS 10.15
- Arduino IDE(1.8.10~) DL/インストール
- Arduino Create Agent プラグインのDL/インストール
ArduinoではWebでオンラインエディターがあるため、最初のうちはIDEのダウンロードはしませんでした。
始めにWindows 10でArduinoをいじって、組み上げたものを調整する時にMacでいじるようにしました。
Arduinoの台
センサーやサーボモーターを固定しないと正確な動作確認ができないのでLEGOを買いました。
-
LEGO クラシック 黄色のアイデアボックス スペシャル
- 全パーツの半分ちょっとくらいを使いました。広めの地盤がついてるのでコレに
とりあえずArduinoをいじりたいという人には必要ないかもしれません。100円ショップでワイヤーネットを買ってビニタイで固定するでも良いかと。
作った物
「人感センサーで明かりを付けたい」と漠然と考えていたので、当初はArduino+人感センサー+LEDでライトを作ることを考えてました。
Arduinoをいじっていくうちにやりたいことが増えたので、最終的にArduino+人感センサー+LED+サーボモーター+LEGOでおもちゃを作りました。
参考サイト
- PWMを使ってLEDの明るさと出力を制御する
- 【Arduino】Arduino Nano(互換機)で人感センサ付けてLEDを光らせる - かっこいいブログ名つけたい
- Arduino電子工作の基本④ LEDの明るさを調節する
- マイクロサーボ SG-90 を Arduino で制御する
外観
写真の通り
写真右上にLEDライトを仕込んでます。
ドアの中のなめこさんをサーボモーターで動かしてます。
中央のコアみたいなドーム状のが人感センサーです。
Arduino本体とブレッドボード接続
各パーツは次の通りに接続しています。
ポイント
- LEGO組み立ての邪魔にならない配線(片側にピンの差込を寄せてます)
LEGO
LEGO組み立ては、細く作り方説明できないのでざっくりと紹介します。
ポイント
- Arduino本体とブレッドボードを固定
- サーボモーターの可動域確保
- 人感センサーの固定
- LEDを剥き出しにしない工夫
プログラム
// Servo - Version: Latest
#include <Servo.h>
#define LED_PIN 3
#define PIR_PIN 8
#define SERVO_PIN 9
const bool IS_DEBUG = false;
const int INITIAL_ANGLE = 86;
const int ACTIVE_ANGLE = 176;
bool is_reacts = false;
bool is_active = false;
int count = 0;
int cycle = 15;
Servo servo;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(PIR_PIN, INPUT_PULLUP);
servo.attach(SERVO_PIN);
servo.write(INITIAL_ANGLE);
Serial.begin(9600);
// 初期化時は点灯状態
is_active = true;
// 初回サイクルを短めに設定
count = cycle - 5;
Serial.println("initialized UNO");
}
void loop() {
// 1秒間隔
delay(1000);
count++;
if(IS_DEBUG) {
String s_active = String(is_active);
String s_reacts = String(is_reacts);
Serial.println("info[so,ten]:" + s_reacts +", " + s_active);
s_active = s_reacts = "";
}
// 1サイクル区切りでチェック
if (count == cycle){
count = 0;
if (is_active && !is_reacts){
// Light off
is_active = false;
analogWrite(LED_PIN, 0);
// Servo Reset
servo.write(INITIAL_ANGLE);
Serial.println("off");
}
is_reacts = false;
}
if (count < cycle){
// 消灯時にセンサーの反応があったら
if (!is_active && is_reacts){
// 点灯
analogWrite(LED_PIN, 250);
is_active = true;
servo.write(ACTIVE_ANGLE);
// 再カウント
count = 0;
Serial.println("on");
}
}
// センサに反応があった場合
if (digitalRead(PIR_PIN) == HIGH){
is_reacts = true;
}
}
動作
人が近づくと玄関に明かりが灯り家主が覗いてきます。カヮィィ…
15秒間隔で人がいるかいないかを判定し、いなければ消灯して家の中に戻ります。
残念ながらまだドアの開閉はできません。
つまづいた事(2019年11月時点
Windows10でArduinoの制御を作成している時は問題なかったのですが、Macで調整を始めた時につまづきました。
WebEditorでArduinoに書き込みしようとするとエラーとなります。
Start command:
fork/exec /Users/xxxx/.arduino-create/arduino/avrdude/6.3.0-arduino14/bin/avrdude:
bad CPU type in executable
Mac 10.15(Catalina)でのシリアルポートへのアクセス方法が違うようで、IDEのVer.1.8.10ではこれに対応されているようです。
OnlineEditorの方がまだ対応仕切れていない?ようで、MacではIDEから書き込むようにしました。
(いずれ直ると思いますが。
作成後感
Arduinoの組み立てとプログラミングにそれぞれ3時間ほど使い、LEGOの組み立てに5〜6時間かかりました。
入門レベルの工作なので、これからArduinoに触れようと思っている方の一助になれば。
今回は人感センサーとサーボモーターを使いましたが、これを基にグレードアップさせつつ、LED電飾やIoT機器作成の足掛かりにしていこうと思います。
作ったおもちゃで遊んだ記録も残してます。技術的なことから離れるため続きはブログに書きました。
デジタルアートに憧れて(Arduino始めました)