LoginSignup
10
17

More than 3 years have passed since last update.

Arduinoと初めて戯れる(Arduino入門)

Posted at

Arduino初心者がおもちゃを作るまで

デジタルアートが好きなので、IoT機器の組み立て勉強もできるだろうと思いArduinoに触れ始めました。
この記事ではArduinoの準備から作ったもの、躓いたポイントを紹介します。

Arduino入門

普段ソフト面のエンジニアリングばかりでハード的な知識はあまり無い人間です。電子回路図も雰囲気で読んでるし、抵抗の計算とか便利なソフトあるでしょ!?と他力本願な状態の自分がArduinoをいじり始めました。

準備

始めるに当たって機器が必須です。
自分が用意したのはある程度パーツが揃っているキットを購入しました。
(以下、Amazonのリンクになります)

Arduino機器

参考書

始めるにあたって事前情報としてこの書籍を購入してます。

ツール

参考書に必須アイテムとして載っていたので念のため電圧テスターを購入。

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を買いました。

とりあえずArduinoをいじりたいという人には必要ないかもしれません。100円ショップでワイヤーネットを買ってビニタイで固定するでも良いかと。

作った物

「人感センサーで明かりを付けたい」と漠然と考えていたので、当初はArduino+人感センサー+LEDでライトを作ることを考えてました。
Arduinoをいじっていくうちにやりたいことが増えたので、最終的にArduino+人感センサー+LED+サーボモーター+LEGOでおもちゃを作りました。

参考サイト

外観

写真の通り

Sensor_house_outview.jpg

写真右上にLEDライトを仕込んでます。
ドアの中のなめこさんをサーボモーターで動かしてます。
中央のコアみたいなドーム状のが人感センサーです。

Arduino本体とブレッドボード接続

各パーツは次の通りに接続しています。
ポイント

  • LEGO組み立ての邪魔にならない配線(片側にピンの差込を寄せてます)

arduino_sensor_LED.jpg

LEGO

LEGO組み立ては、細く作り方説明できないのでざっくりと紹介します。
ポイント

  • Arduino本体とブレッドボードを固定
  • サーボモーターの可動域確保
  • 人感センサーの固定
  • LEDを剥き出しにしない工夫

sensor_led_build_images.jpg

プログラム

// 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;
  }
}

動作

sensor_led_demo.gif

人が近づくと玄関に明かりが灯り家主が覗いてきます。カヮィィ…
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始めました)

10
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
17