第七回 円卓会議 ~VFD時計製作その1~


活動報告

ラボメンの技術力向上も兼ねてVFD(蛍光表示管)を使った時計を作る会を開催

・・・が8時間かけても一日じゃハードの完成にすら至らなかったwww

・機能

ただの時計じゃ面白みもないので、人感センサーを使って二度寝防止機能も実装

・構成

手間を省くため市販のVFD表示キットをArduinoで制御

これをプロトタイプとし、ゆくゆくはコミケで頒布しようかな~と思っています!!!

 そして伝説へ(製品化へwww)




法学部のド素人がIoT、電子工作系コンテストで入賞するまでの道のり


プロローグ

サークルメンバー募集中(屮゜Д゜)屮

電子工作やプログラミングは小難しい理系のイメージがあると思うけど・・・・ 否定したいが、やっぱ難解!! 訳の分からない専門用語、数式が跋扈する世界。 でも最近はちょっと変わってきて、誰でも入れる世界になったとみんなに伝えたい!

その証拠に、法学部のバリバリな文系である自分でさえもガジェットを開発し、コンテストに応募でき、しかも・・・

賞を頂いちゃいました!(・`ω・)ドヤッ

しかも賞金までゲフンゲフン

憧れのギークなメイカー

と自慢はさておき、文系な人でも電子工作やプログラミングでものづくりをしたいという人は多くいると思う。  そこでナウでヤングでギークなメイカーへの過程をまとめていきたいと思うwww

多くの男子諸君は、中学の時にハッカー、クラッカー超カッケーとか、家電をパパっと修理できる人に憧れる不治の病「中二病ver男のロマン」を発症すると思うけど、自分もそうだった。

そしてプログラミング言語の一種、C言語に手を出してhello, worldで飽きそうになりポインターで撃沈したり、秋月電子でゲルマニウムラジオキットを買って、はんだづけが面倒でこれまた飽きて

しばらく冷めていて法学部に入ってしまったが、その頃とある動画に出会う。

剣菱Pさんの「 零からの電子工作 」シリーズである。 (こちら)

 

この動画は本当にド素人でも理解できるよう、電子工作の基本を解説した動画シリーズで、なんと60パート以上あるボリュームである!!

この中でマイコンという存在を知り、プログラミングの世界へも誘われてゆき、メイカー魂に火が灯るのである。

また、その時期は大学の講義に遅刻しまくる悩みがあり(ただのクズ)、絶対起きられる目覚ましを作りたいという願望もあった。

加えてもう一つ、メイカー魂をくすぶる要因

Arduinoの存在

である。

君と僕とArduino

Arduinoとはマイコンの一種だけど、そもそもマイコンとは何か?マイコンはまいくろこんぴゅ~た~の略で、その名前の通りとても小さなコンピュータである。

例えば、冷蔵庫は一定に温度を保たないといけないけど、扉開けたりする度に温度が変わってしまう。そこで冷蔵庫には温度の制御の為のマイコンとセンサーがあり、自動で調節している。

他にも洗濯機は、水入れて→回転して→水抜いてみたいな工程を自動でやらないといけないけど、これもマイコンによる制御だ。

つまり、色々なものを自動で制御するすんごい奴ということだ!!

具体的には、右の写真のような形をしている。他にも四角いもっと小さいものがあるが、小さすぎて人間の手に負えないので、電子工作ではこの形の物を使うのが一般的。

黒いチップに足がいっぱい生えてるけど、簡単にいえばこの足に制御したいものをくっつければいいだけだ。そして、この黒いチップにどう制御したいかプログラムを書き込めばよい・・・・

 

しかしここ数年前までは、このプログラムを書き込むのも、コード書くのも難しいしめんどくさかった。 そうArduinoが登場するまでは

マイコンにプログラムを書き込むには専用の書き込み器が必要だったし、マイコンは200円ぐらいで買えるけど、書き込み器は3千円近くする。そして、何よりプログラムを書くのがしんどい。例えば、LEDを点滅するのに今までは

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
  DDRC = 0xFF; 
  while(1)
  {
    PORTC = 0xFF; 
    _delay_ms(1000);
    PORTC= 0x00;
    _delay_ms(1000);
  }
}

こんな感じに、DDRCとかPORTCとかレジスタ??と呼ばれる物を2進数だったり16進数で扱っていたものをArduinoだと

void setup(){
 pinMode(13,OUTPUT);
}
void loop(){
  digitalWrite(13, HIGH);
  delay(1000); 
  digitalWrite(13, LOW);
  delay(1000);
}

こんな感じに13番の足をオン、オフしろという命令文が素人でも見ただけでなんとなくわかる。

Arduinoのプログラミング言語は簡単に作られているのである!

またマイコン本体も書き込み器と一体化して販売しており、USBケーブルがあればすぐ書き込めちゃうのです!!

このArduinoの登場により、センサーなどの部品もパッケージ化、モジュール化され、Arduinoに繋げるだけで電子工作ができ、ハードルが下がって誰でも気軽にものづくりできるようになった。

え?んじゃ完全に初心者向けのニワカなものじゃん! だっせー

と思う人もいるかもしれないけど、Arduinoはオープンソースであり、自分で一から作ることも可能である。そのため、多くの人は最初に市販の物を購入して知識をつけ、作りたいものにあわせて最終的には自作している。知識のある人でも、製品のプロトタイプを作るのに、気軽に扱えるArduinoを組み込んで使っている人も多くいる。

そもそもArduinoとは、物のことじゃなくてソフトウェアの話である。マイコンにArduinoのブートローダ、OSみたいな物を書き込んで、そこからさらにユーザーのプログラムが呼ばれているだけなので、Arduinoのブートローダを書き込んだマイコンは全てArduinoだし、根本的には製品に使われているマイコンとはかわらないのである。

あとのArduinoの詳しい話は、流行もあり書店で多くの入門書が売られているのでそちらでどうぞ!

IoTとラズベリーパイ

流れとしては、

動画で電子工作の基礎を学ぶ

Arduinoで実際にいじってみると同時にプログラミング言語の基礎をちょいかじる

なんか適当に作る(で生まれたのが壱号機である(こちら))

そしてマイコンの限界を感じる。

Arduinoは小さいだけあってやっぱ性能もお察しである。ただ単に何かを制御するだけなら必要十分だけど、インターネットに繋いでなんかやるとなると、画像とか読み込むのに容量と処理速度がいっぱいいっぱいである。そしてArduinoと出会って数カ月後ぐらいに都合よく

RaspberryPiというものが登場した!!!

いわゆるラズパイブームの到来である。 ラズパイはもはやマイクロなコンピュータじゃなくて、まさに日常で使っているであろうWindowsやMacとある意味変わらない、純然たるコンピュータである。 んじゃ何が違うって? 

まずは大きさ! なんと名刺サイズである! そして値段、5千円で買える!!(今は聞いてびっくり千円で買えるバージョンもある) つまり、気軽に自分の作ったものにフルスペックなPCを載せられるのである!!!他にもGPIOとよばれるマイコンの足見たいのがついてるので、直接自作回路に組み込めるのである。

これにより、マイコンでは難しかった音声認識、機械学習、画像認識などの技術を自分の作ったガジェットに使えるのである! そして世間は、IoTな時代へ突入

ラズパイはただのPCと遜色ないので、もちろんインターネットを活用することも簡単である。冷蔵庫、洗濯機などの家電をインターネットを介したラズパイで制御することにより、外出先で冷蔵庫の中身の確認や、洗濯機の操作もできるでしょう! 例えば、洗濯機がネットに繋がっていることにより「この家まったく洗濯機回してねーな! クリーニングの割引チラシいれとこ」 みたいなビジネスも出てくるであろう、これが物のインターネット、つまりIoTだ!!(たぶんww)これからはこのIoTの時代になってくらしいが、いち早くラズパイを使って先取りもできる。

 

プログラミング言語 「Java」

先ほど、ラズパイをならば

音声認識、機械学習、画像認識

などが使えると言ったが、そもそもそれらの技術を扱うには、プログラミング技術がないとむりぽ・・・(´・ω・`)

Arduinoで簡単なプログラムは書けるようになったが、それはArduinoの世界のお話だし~ ラズパイと出会った事によって真面目にプログラミングに取り組むことになる。

Arduinoの言語は簡単に作られた物とはいえ、ベースはC/C++という世界で一番有名であろうプログラミング言語が元になっている。 ラズパイは基本、どんな言語も使えるので、どの言語でやっていこうと迷った・・・わけでもなくJavaをやろうと決めていた。

普通に考えて、C/C++やればいいんじゃんと思うかもしれないけど、ここで序盤に話した中学の時のC言語の思い出が蘇る。C言語にはポインターという仕組みがある、これが世間一般的にもCを学ぶ上で一番の壁になり、挫折する人が多いポイントである。そのため避けたかったのが本音であるが、もっと別にも理由もある。

一つに、一般的なPCはx86というCPUで動いているが、ラズパイはARMと呼ばれるCPUである。そのため、Windows PCで作った物 を、ラズパイに持って行っても動かないのである。んじゃラズパイで作ればいいじゃん! って話になるけど、フルスペックPCとはいえ、基本スマホぐらいの 処理速度しかないので、ラズパイで作業をすると時間がかかるし、LinuxというOSで動いているため操作も慣れないし、見知った Windowsでやりたいという理由である。そして個人的な理由だがAndroidアプリも作りたいと願望があったwww 

そこで Java という言語である。 Cの次または同等程度に人気、シェアがありスマホでも使われている言語である。 そして、どんなCPUでも動くという 特徴とガベージコレクションとオブジェクト指向という便利な仕組みもある。おまけにサーブレットやJSPなどの仕組みもあるので、WEBもいけるのである。(あれ神言語じゃね?) これらの特徴は他のPHPやPythonなどのスクリプト言語にも言えることだけど、スクリプト言語はどうしても実行速度が 遅いのが難点・・・とは言っても、初心者の作る小さなアプリに速度なんて関係ないんだけどねwww

なので、特にこだわりがなければ Pythonという言語はラズパイに親和性が高いのでおすすめしとくけど、C/C++、Java、C#などのコンパイラ言語、型が強い言語は、コードを書 く際に補完や、エラーチェックをリアルタイムでものすんごいしてくれるので初心者だからこそ、スクリプト言語でなくコンパイラ言語であるJavaをおすす めする!!

そして、Arduinoで学んだ基本的な変数、関数、if文、for文、while文などの構文は、実はどのプログラミング 言語もほぼ共通である、そのためすんなり覚えられると思う! またArduinoというハードウェアから入ることにより、PCの仕組みを意識しつつ組める という利点もある。 例えばメモリーとアドレスの関係からJavaの参照やオブジェクト指向もすんなり理解できた気がする。

プログラミング学習とモチベーション

プログラミング学習する上での経験談を言っとく!

実際、今まで中学、高校の時もプログラミングを勉強しようと幾度もやる気になったことはあるが、途中で飽きてしまう。結局、プログラミングを目的にしちゃうやり方では、モチベーションを維持できないのだ! 他にも、先に理論や文法を覚えないとできないと考えてしまう人もいるだろうけど

「習うより慣れよ」と言いたい。

プログラミングはあくまで手段であり道具なのだから、やはり「絶対起きられる目覚ましを作りたい」と明確な目標があるとすんなり覚えられた。Javaを勉強 する際も、いきなり大きな物はできないから、目覚ましに繋がる「タイマー」を作りながら覚えた。 最低限のメソッドとかクラスとかの概念さえチラっとみとけば後はひたすらググるだけである。(横の わかりやすいjava をちら見しながら)

タイマーにはウィンドウがあって、数字を 表示する所があって、ボタンがある。 なら[ java ウィンドウ表示 ]とか[ java ボタン]と検索すればすぐ出てくる、後は組み合わせるだけだ。 その中でウィンドウはJFrameクラスを継承して作った方がいいとなって、継承???みたいなことになると思うけど、サンプルコードがあってこう動くんだと紹介されてるから、それをコピペして適当に変更して実行、ああこうなるんだの繰り返 しでやってけばそのうち継承ってそういう意味かと気づいて応用できるようになる。また、Javaのようなコンパイラ言語は前に言ったように、エディター (eclipseなどのIDE)が間違った書き方をするとエラーになるよと教えてくれて、こうした方がいいとも教えてくれるのでそれに従うだけで形になっ てしまう!!

つまり、なんでもいいから作りながら覚えるのが最短の学習法だ!

まとめ

剣菱Pさんの 零からの電子工作 をみて基礎をなんとなく学ぶ
(書籍的には 電子工作入門以前 が同じ感じでええ!)

Arduinoを買って、Lチカとか、アラーム付デジタル時計とかを作ってみる

(ここで電子工作の基礎とプログラミングの基礎を学べる!一石二鳥!)

Raspbery PI を買ってホームオートメーションにチャレンジ!!

(高度なプログラミング、Linuxのコマンドなどを学ぶ!)

中華3Dプリンターを買い、3DCADなどを学ぶ

記事はこちら

コンテストに応募してみる、 入賞しちゃった ←今ココ

サークルメンバーを集め、色々な物を作りたい!!

ということでメンバー募集中です! 詳しくは募集要項を見てね!