はじめに
ほたー おはようございます こんにちは
7月16日 大阪デジもく会に参加しました。
リンクを貼っておきますので興味のある方は確認いただければわかりやすくなります。なお会場の詳しいアクセス方法は参加者だけにしか公開していません。
https://dezimoku.connpass.com/event/252602/
もくもく会に参加するのも4回目になりました。前回のもくもく会で別のIT勉強会に参加すると決めていました。下のブログカードをクリックして目次にある「別のIT勉強会」に合わせると決めた理由が確認できます。
6月30日にTwitterアカウントを「色織まいは」に変更して次の日に降ってきたアイデアが電子工作でした。まいはさんはWebという手触りがないものよりは手作りの方が好みということでしょう。4日にはArduino Uno R3とELEGOO Arduino用UNO R3スターターキットを注文し、8日には全て届きました。リンクから購入元のサイトを開くことができます。
Arduinoは以前にも書いたようにシンプルな1タスクの動きをプログラムから開発できる小さなコンピューターのことです。電子工作について調べて最初はRaspberry Piを注文しようとしましたが、半導体不足により在庫がなくArduinoから始めることにしました。
Arduinoが届く目星が経ったところでconnpassから大阪デジもく会への参加ボタンを押しました。参加理由は近畿で開催される電子工作のもくもく会はここぐらいだったためです。
初めに申し上げますが、参加してよかったです。初心者の自分の拙い疑問にも確かな助言をいただきました。あと手練れというかプロ集団と言ってもよく、参加者の中でコミュニティができており、自分はそこにズケズケと入り込んだという形になりました。
それでは大阪デジもく会の所感を書いていきます。長くなりますがお付き合いのほどお願い申し上げます。(推定読了時間:17分、計測方法:VOICEPEAK)
大阪デジもく会 7月 所感
12時50分、会場に入ってまず目に付いたのがテーブルも木、本棚も木、壁も木で組まれた穏やかな空間でした。bgmが流れており、乗りやすい気分にします。天井から電源が吊るされており、電源はそこから供給します。
おしゃれなポニーテールが特徴の責任者の方(名前忘れました)に会場の利用方法やトイレの場所を伺い、準備が整って始めました。名前を覚えていない理由はメモを忘れていたためです。川西のもくもく会と違って最初に自己紹介することも最後に発表することもなく、もくもく作業を進めていました。
最初にArduinoでチュートリアルを進めると言っていたので「Arduinoで質問ない?」とポニーテールの方に聞かれました。そこで「純正品でLチカを試すとエラーが発生しています。」と答えました。実際にエラーを表示して検証した結果、純正品のマイコンが壊れていることが分かりました。スターターパックに付属されたArduinoのマイコンを純正品のものと交換しました。マイコンについてはLチカのセクションでどんなものか見せます。このようにエラーに対する回答をしていただき、この場にいる方々が手練れであることを感じ取りました。
参加者の一人がエイリアンのような触角が付いた被り物を作っており、実際に体験することができました。首を右に傾けると右に振れ、左に傾けると左に振れました。ジャイロセンサーの働きによるものです。面白い、手練れになればこんなに面白いものを作れるのかと思いました。
もくもく作業を進め16時、せっかくこの場にいるのだから趣味レベルで電子工作を続ける秘訣、これだけは絶対に言えることを聞きたいと思いました。参加者の一人である羽根つき帽子が特徴のdnjiroさんに聞くと「秘訣なんていらない、気が付けばやっている状態にする」と助言を受けました。隣に座っていた方からは「例えば電子工作イベントに応募する、ブログを書くといった自分を追い込むことをすると続く」と助言を受けました。確かにそうだ、自分はヒントが得られると他人に期待していた。しかし続けないと、挑戦しないと言っている言葉、住んでいる境地がわからない。この会場にいる方々のレベルには到底及ばないけど、始めたころは同じことをしている他人を真似て手探りしていたと聞くと勇気が湧いてきました。
加えてdnjiroさんからもう一言大事な助言をいただきました。
dnjiroさんは作っているアプリ9VAeが現在の状態になるまで6年以上かけたと聞きました。1人で取り組むしかなく、iOS / Android移植への試行錯誤に苦しんだ2年間があったと聞きました。そこを乗り越えて達成感と一緒に知識が付いたとも聞きました。実際に動いている様子を見て魚戸ホタルの触腕をびろんびろん、発行体ピカピカする動作に使えそうだと思いました。また自分が始めたまどろみみっくというコンテンツが花開くには年単位で時間をかける必要があると思いました。ちなみにdnjiroさんの名前を覚えている理由は名刺を受け取ったためです。
大阪デジもく会、再び参加したいと思いました。集積された知識量だけでなく楽しくもくもく作業しているので、自分も楽しく作りたいという気を起させます。また開催が月の第3週目と決まっていれば川西Pivotもくもく会との両立も十分に可能です。川西の方ではArduinoからサーバーへ送信したデータを処理するためのPHPのコードを作成しても良いかもしれません。7月は川西のもくもく会に参加する準備ができていませんが、8月は準備が整うなら参加したいと考えています。
あと懇親会に誘われましたが断りました。今回は大阪デジもく会への様子見を目的としており予定に入っていなかったためです。あることが分かったので次は参加します。
自分が電子工作で作りたいもの
ティータイムの時間を知らせるアラーム
色織まいはさんは仕事の合間にとるティータイムを楽しみにしています。休日もティータイムを設けて癒されています。生活の中でスマホアプリから通知が飛んできてスワイプしたことは皆さんもおありのことでしょう。通知は利用者の時間を奪い合うために存在していると自分は考えています。そんな通知機能が既にありますが、自作のアラームを作りたいと考えています。手作りだからこそ技術に対する理解も深まるというもの。加えて手作りを愛しているまいはさんへの理解にも繋がります。
実際にもくもく会の参加者にアラームを作りたいと伝えると次のように返ってきました。
ESP32はArduinoの種類の一つです。参加者の方にESP32を使っている方がおり見せていただきました。その方は親類の体調が悪くなった原因が室温や湿度にあると考え、Arduinoを用いて室温や湿度を測定し、パソコンにデータを送信していました。実際に動作を見てESP32も欲しいと思いました。ESP32にも種類がございますので本記事投稿後アラートに使った事例を調べて注文する予定です。
ポニーテールの方から次の助言を受けました。この助言の通りにまずアラートづくりに必要な部品と知識を揃えます。
作りたいものがあるならまずそれから取り組んだ方がいい。学びになるし続けられる。
もくもく会で取り組んだ電子工作の内容
今回の大阪デジもく会では下記の3点に取り組みました。
- デジタル入力(LEDオンオフスイッチ)
- サーボ(モータを用いたプロペラ回転)
- LCD Display(LEDバックライトに名前表示)
最初に言っておきますが、今理解できていることだけ書きます。取り組んだ電子工作はいずれもELEGOOスターターパックについてきたチュートリアルであり、完コピしました。パラメータの数字を上下したりしましたが、基本的なプログラムは変えていません。
使った部品と回路を組んだ結果を書き、部品の意味や回路がどういう意味をもっているかは書きません。それを書くなら1記事で書き、さらに言うとZennで投稿します。Zennで投稿した方が技術者に評価してもらえます。
参考記事も紹介します。「検索はこうしたらいい」という助言もいただきました。Google検索やYoutubeで下記の検索方法に従って検索すると大量の実践例が出てくるので、まず最初はそれを真似るようにします。
部品名 + Arduino
それでは取り組んだ内容の紹介にかかります。
デジタル入力(LEDオンオフスイッチ)
デジタル入力ではスイッチを押してLEDをオンオフする装置を作りました。アラームのオンオフにスイッチを使う可能性を踏まえて回路を組んでみました。必要な構成部品は次の画像の通りです。
- Arduino Uno R3
- ブレッドボード
- 赤色LED
- 220Ω 抵抗器
- ボタン ×2
- M-M ジャンパワイヤ × 7
そしてチュートリアルの通りに回路を組んで、プログラムを書き込んだ結果、スイッチを押すことでLEDのオンオフを切り替えることができました。画像のようにOFF状態でONボタンを押すとLEDが点灯し、ON状態でOFFボタンを押すと消灯します。
LEDのオンオフは条件分岐によって切り替えています。Arduinoに書き込んだプログラムの中から条件分岐に関するコードを取り出したものが以下のコードです。
void loop() // 繰り返し
{
// 左のボタンを押したとき
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH); // 赤色LEDをオンにする
}
// 右のボタンを押したとき
if (digitalRead(buttonBpin) == LOW)
{
digitalWrite(ledPin, LOW); // 赤色LEDをオフにする
}
}
digitalRead関数でスイッチの状態を読み取り、digitalWrite関数でLEDの状態を設定します。スイッチは通常HIGHで押されるとLOWに切り替わります。左のボタンがbuttonApin、右のボタンがbuttonBpinとすると、左右のボタンを押したときにLEDの点灯状態が切り替わる原理がdigitalWrite関数によるものだと分かります。
デジタル入力については以上です。
サーボ(モータを用いたプロペラ回転)
サーボではArduinoから電流を送ってモータを動かし、プロペラを回す装置を作成しました。モータを使って振動音でアラームする可能性を踏まえて回路を組んでみました。必要な構成部品は次の画像の通りです。
- Arduino Uno R3
- Servo Motor SG90(白背景で見えづらいがモータの下に3種類のプロペラあり)
- M-M ジャンパワイヤ × 3
そしてチュートリアルの通りに回路を組んで、プログラムを書き込んだ結果、起動音が鳴ってプロペラが回りました。実際にプロペラが回る様子を撮影したので以下に示します。動画ではArduinoのリセットボタンを押した後にプロペラが回る様子が確認できます。
動画内でArduinoに書き込んだプログラムは以下の通りです。分かりやすいようにプログラム本体の部分だけ取り出しています。
#include <Servo.h> // Servoライブラリをインポート
Servo myservo; // Servoクラスを生成
int pos = 0; // 位置を表す変数を定義する
void setup() {
Serial.begin(9600);
myservo.attach(9); // 9番ピンにServoクラスをアタッチする
}
void loop() {
for (pos = 0; pos <= 180; pos += 2) { // 0°から180°まで
// 1ステップごとに2°回転する
myservo.write(pos); // posという変数に現在の角度を書き込む
delay(15); // 180°に到達すると15ms待つ
}
for (pos = 180; pos >= 0; pos -= 1) { // 180°から0°まで
myservo.write(pos); // servoクラスに現在の角度を書き込む
delay(15); // 0°に到達すると15ms待つ
}
}
パラメータの数値を変えるとプロペラが到達する角度の上限、回る速度が変わります。実際にパラメータの数値を変えて様子を見て「面白いなあ」と思いました。
サーボについては以上です。
LCD Display(ディスプレイに名前表示)
LCD Displayではディスプレイに英数字を表示させる装置を作成しました。ディスプレイにはLEDバックライトがあり、1行最大16文字の2行を表示させることができます。アラームを文字で知らせる可能性を踏まえて回路を組んでみました。必要な構成部品は次の画像の通りです。
- Arduino Uno R3
- ブレッドボード
- Potentiometer
- LCD1602 Module
- M-M ジャンパワイヤ × 16
そしてチュートリアルの通りに回路を組んで、プログラムを書き込んだ結果、上の行に「Uoto Hotaru(^^)」と英数字を表示させることができました。下の行は起動してからの秒数を表すカウンタです。Potentiometerは回すとLEDバックライトの明るさを調整することができます。
英数字を表示させるのにArduinoに書き込んだプログラムは以下の通りです。分かりやすいようにプログラム本体の部分だけ取り出しています。
// 液晶ライブラリを呼び出す
#include <LiquidCrystal.h>
// インターフェイスピンの番号でライブラリを初期化します。
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
// 液晶ディスプレイに表示される列と行の数を液晶ライブラリに伝えます。
lcd.begin(16, 2);
// 画面の最初の行に表示されるメッセージを伝えます。。
lcd.print("Uoto Hotaru (^^)");
}
void loop() {
// カーソルの位置(次のテキストが表示される位置)を列0と行1に設定する
// (行のカウントは0から始まるので行1はディスプレイの2行目のこと)
lcd.setCursor(0, 1);
// 起動してからカウントした秒数を伝えます。
lcd.print(millis() / 1000);
}
デフォルトでは最初の行に表示するメッセージが”Hello World”でしたが”Uoto Hotaru”に変更しました。lcd.print関数に渡した値がディスプレイに表示されます。
LCDディスプレイについては以上です。
Lチカ
Lチカとは…と説明するより実際に動画を見てもらった方が早いと思います。
動画のようにArduinoのボード搭載LEDがチカチカするか検証する作業をLチカと言います。Arduino IDEには標準でサンプルプログラムがインストールされています。
最初に見せた動画で書き込んだプログラムは以下の通りです。
// setup関数は電源投入時、またはリセット時に一回だけ実行されます。
void setup() {
// LED_BUILTINのデジタルピンを出力モードに設定
pinMode(LED_BUILTIN, OUTPUT);
}
// loop関数は起動している限り、繰り返し実行されます。
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // LED点灯(HIGHは電圧を5Vにする)
delay(1000); // 1秒間待つ
digitalWrite(LED_BUILTIN, LOW); // LED消灯(LOWは電圧を0Vにする)
delay(1000); // 1秒間待つ
}
簡単に言うとpinMode関数でまず使用するデジタルピンを出力モードに設定し、digitalWrite関数で実際に出力を行う形となります。正直Lチカの解説にあまり時間をかけたくないと考えています。やりたいことに対して大事ではないためです。
さて大阪デジもく会所感でプログラム書き込み時にエラーが発生していたと書きました。エラー内容は「programmer is not responding」というもので応答しないことを意味します。参加者のPCから書き込んでも同様のエラーでした。そして原因はマイコンの故障と仮定し、Lチカが成功していたマイコンと交換したところ成功しました。
以下のスライダーにArduino本体とマイコンの画像を表示しています。画像内で①と書かれた箇所の左横にマイコンがございます。マイコン画像では赤丸で囲った場所に注目してもらえますか。半円状に欠けていることが分かります。
この欠けた部分はマイコンの取り付け位置を合わせるために用いられます。正しい方向だとスポッと入ります。逆方向に取り付けたときは抵抗を感じ、Lチカを試したところ成功しませんでした。このように一つ一つの違和感にも意味があります。Arduino本体の解説は気が向いたら行います。それよりも自分が作りたいものに時間を掛けよう。
最後に
説明が長くなりました。ここまで読んでいただいた方はお疲れ様です。
電子工作を始めてから4日になりました。
ある物事を習慣にしたければ21日間続けるということをflierで読んだ勉強が面白くなる瞬間という書籍から学習しました。21日の法則から逆算すると、あと17日続ければ慣れると思います。最初のつまらなくて退屈な段階をどう対処するかで結果は大きく変わっていきます。
ただし自分はまどろみみっくというコンテンツの責任者です。彼らの絵や物語も欲しい。彼らは自分たちに気が向いていないと感じるとご機嫌斜めになり離れ離れになるかもしれません。そうなってはイカ生一巻の終わり。
自分にとっては勉強に取り組む姿勢を守るより彼らを守り続ける選択を取りたい。なので8月下旬に電子工作に取り組んだ日数が21日になればいいと思っています。電子工作をしない日は絵を描いたり彼らについてのエッセイを書きます。最近絵を描いていないので近いうちに絵を描く予定です。
あと大阪デジもく会はまどろみみっくコンテンツの展開について考えさせられました。
少なくとも3月から始まった1回目のイカ生はこれから数年を活かす布石を置く期間だと考えています。カクヨム、Zenn、もくもく会、金長神社、いろんな場所に布石を置く。出来ないことが多く退屈な期間かもしれませんが乗り越えれば彼らと生きることが自然になります。
チュートリアルよりも作りたいものを実際に作り始める。それが気が付けばやっている状態にする道と感じました。
以上になります。
それでは最後まで読んでいただきありがとうございました。ほたー まいはー
IoTのようなことやりたいん。それならUnoじゃなくてESP32を使った方がええで。ESP32にはWifiが付いてるんよ。