プログラミングつらい・・・そんな時はArduinoで”Hello World”

## Arduino？もう横文字はうんざりなんだよ・・・

まぁまぁそうおっしゃらずに。

手に職を付けたい、副業したい、自由な働き方を・・・
人それぞれ、理由は様々ですが私は割とカジュアルな理由からプログラミングの独学を始めました。

詳しい経緯は割愛しますが、難しすぎて挫折寸前。意を決してプログラミングを本気で学習できる環境に身を置くも「ワケガワカラナイヨ」「ツライヨ、ツライヨ」
情けないっちゃありゃしません。

プログラミングの学習の過程では、自分の書いたプログラムをコンソールで走らせたりweb上でなんか動かしたりしますが、**実際に何か起きた感じ**がしないんですよね。

本気で向いてないと思い、いよいよプログラマへの道を諦めかけたその時。
なぜか目に入った、とある電子工作YouTuberさんの動画を拝見し、**Arduino**なる機械を知りました。

C言語でもPythonでもいかなる言語学習でもそうですが、学習初めてまずは

`"Hello World!"`と文字を出力しますよね。

私がそうだったのですが、「ふ～ん・・・」ってのが率直な感想。

**Arduino**が活躍する電子工作系プログラミングの世界では`"Hello World"`にあたるプログラミングで、

**なんと電球が光ります**

そうです、**Arduino**にプログラミングすれば、そのプログラムがPCの外側で、「本当に動く」んです。

これは私にとって、~~2次嫁が3次元に降臨したかのような~~衝撃的感覚でした。

おかげで学習モチベが回復し、今では組み込みソフトウエア開発の職に就きたいと言う明確な目標も生まれ、プログラミングの勉強が楽しい！と思えるようになり日々充実しています。

前置きが長くなりましたが、プログラミングの習得に限界を感じ、諦める・・・その前に！

物は試しと思って一度**Arduino**やってみるのも、アリじゃなかろうか、という事で本記事を執筆しました。

こと開発の世界においては「小さな事から始める」事が大切だと、私の友人は語りました。
私自身この言葉に救われ、「出来た事」の積み重ねがモチベーションやアイデアを連れて来てくれると考えています。

というわけで、改めて**小さな開発**初めてみようではありませんか！

## 本記事を一読いただきたい方
- プログラミング学習始めたけど、しっくり来ない方
- C言語がガチで苦C方
- コスパの良い在宅趣味をお探しの方
- Arduino興味あるけど何からやっていいか分からない方

に向けて、ちょっとした楽しみが増えたらいいなと願っております。

では行こう。

## Arduinoってなんだよ！

こいつだよ！
「あるでぃ～の」「あるどぅい～の」「あるでゅい～の」なんて呼ばれてます。手のひらサイズで可愛いですね！
![ワイのある.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/593d7ac4-4300-35c5-426e-7221c9a5a141.jpeg)
要はマイコンなのですが、マイコンてなんだよとかは今回は触れません。

**プログラム書いたら動く奴(物理)**です。
例えばこんなことができます。

- ちっこいLED電球をピカっと光らせる
- 温度や湿度が測れる
- ミニ四駆のモーターみたいな奴回せる
- ボタン(物理)とか搭載できる
- 液晶画面とか組み合わせて気温とか表示できる
- 臭かったらくさいと知らせてくれる

何の役に立つんだよ・・・
いえいえ、今回はそんなこと置いておきましょう。
本体に加えて様々なパーツを繋ぐことで上記が実現できるというわけです。
ミニ四駆の改造みたいな感覚ですかね。

先日[こちらの記事](https://qiita.com/wimps/items/1140a62279800d876b81)を執筆された方が通信機能付き**Arduino**で超オモシロなマシンを開発されていました。

今回の記事ではIoTネタまでたどり着きませんが、**Arduino**の基本がわかれば、生活のちょっとした「めんどくさい」を解決できるかもしれません。

## でもお高いんでしょう？
学習教材や技術書買って、だいたい2000円～4000円ぐらいかなぁと思います。
かくいう私はカッコいいと思って買ったオラ〇リーの参考書が文鎮と化している次第です。

私が購入した物は[こちら](https://www.amazon.co.jp/ELEGOO-ATmega328P-ATMEGA16U2-USB%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-Arduino%E7%94%A8/dp/B06Y5TBNQX/ref=pd_lpo_328_t_0/358-5088349-2359912?_encoding=UTF8&pd_rd_i=B06Y5TBNQX&pd_rd_r=78220a0f-4d47-4338-97d3-6ab6cd0a2b54&pd_rd_w=4gKvX&pd_rd_wg=x4Uq3&pf_rd_p=cb2cef9d-b0a3-4b58-a575-45abfc5e07e8&pf_rd_r=5DBA9CTY79Q47G4MZQH4&psc=1&refRID=5DBA9CTY79Q47G4MZQH4)です。
なんと1500円以下。

しかし本体だけではさすがに楽しみきれませんので、まずは[こちら](https://www.amazon.co.jp/ELEGOO-%E3%82%AD%E3%83%83%E3%83%88-%E3%83%AC%E3%83%99%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E4%BB%98-mega2560-Arduino%E7%94%A8/dp/B06XF2HZGT/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=arduino&qid=1613736548&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFKUUxJMTJOVVkwNFQmZW5jcnlwdGVkSWQ9QTEwMTA1MDMzTTM1VUdaUUlKOVNUJmVuY3J5cHRlZEFkSWQ9QTFIQkFFVE5FSFhaT1Mmd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl)をご覧ください。

**Arduino**本体に加えて、必要な基本アイテム全部入りの充実パッケージで4000円弱！
ギークな方々は電子部品ショップでトレイ片手に電球や抵抗を揃えるのも一興ですが、本記事を読まれている方には是非上記のセットをおすすめします。

もし**Arduino**をきっかけに電子工作にハマったら・・・
センサや部品がいちいち数10円～数100円で手に入ってしまうので、コスパ良好な趣味に化けるかもしれません。

## これ、えらい安いけど本物？
ですよねぇ・・・
実は**Arduino**はオープンソースプロジェクトとなっており、Arduino商標の使用さえしなければ商用開発もOKとのことです。
公式の設計図通りに作られたサードパーティの製品です。
つまり、中身は一緒なのでとりあえず始める時は安いのでOKです。
つよつよエンジニアの方ともなれば、Arduinoそのものを自作しちゃうツワモノもいらっしゃる程です。

## ええい！本物よこせ！！
電子工作に必要なものなら全て手に入る夢のようなショップ様のリンクを載せておきます。
購入段階から電子工作の世界をのぞいて見たい方は以下より揃えてみるのも楽しいかもしれません。

- [Arduino](https://akizukidenshi.com/catalog/g/gM-07385/) 本体
- [USBケーブル](https://akizukidenshi.com/catalog/g/gC-07605/)電源兼PCと接続
- [LED電球](https://akizukidenshi.com/catalog/g/gI-12605/) ピカっと光る
- [抵抗1KΩ](https://akizukidenshi.com/catalog/g/gR-25102/) 電流抑える
- [ブレッドボード](https://akizukidenshi.com/catalog/g/gP-05294/) 部品をプスっと差し込む
- [ジャンパー線](https://akizukidenshi.com/catalog/g/gC-05371/) 部品同士をつなげる！


## 何から始めればいいの？

まぁこれですよね。
冒頭でも少し触れましたが、今回は"Hello World!"しましょう。
**Arduino**の世界では通称Lチカという儀式がそれにあたります。

とはいえプログラミングには環境構築が必須！
VSCode？いらん（いるけど）今回はいらん。

[ArduinoIDE](https://www.arduino.cc/en/software)をダウンロードしてインストールだ！

とりあえず**Arduino**にソースコードを送る機能を持ったメモ帳だと思ってください。

インストールできたら開いてみよう。

![sketch_feb19a _ Arduino 1.8.13 2021_02_19 21_37_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/23226c04-e036-e857-dd66-826374a6d967.png)

おお、超シンプル・・・
ちなみに使用する言語はArduino言語というなんとも不思議な言語ですが、
その実態はほぼC++だといわれています。

**ちょっと！C言語とかクッソムズイ初心者キラー言語やんけ！**
大丈夫です！プログラミングはお作法こそ違えど基本的な考え方は同じなのと、今回は`"Hello World!"`のArduino版なのでご安心下さい。
C言語勉強中の方はそのまま知識が活用できます。

ちなみに、今回は触れませんが**Arduino**の開発環境にはライブラリが大量に存在し、かつ入手が簡単です。
たとえば「気圧センサ買ったぞ・・・うわ、なんやこれ説明書読んでもわけわからんし、天才しか動かすのむりやんけ！」って場合、そのセンサの名前で検索すればほぼ手に入るレベルで充実してます。

## 準備はOK?この世界の難関は「電子回路」

電子回路だと！？
そうです、電子回路を組む必要があります。
ここが~~めんどｋ~~少し敷居を上げている気がしますね。

その昔、技術・家庭科という科目がありまして・・・
退屈な数学や国語の教室の授業、その合間にやってきて「技術室」なる教室で学んだはんだ付け、ラジオ作り・・・
おお、なんだかおもしろかった記憶が！！！

ブレッドボードなる板に、部品や線をぶっさして使います。
はんだ付け不要！刺すだけ！

今回はこの板に諸々ぶっさしてLEDを光らせる回路を作成します。

ブレッドボードの基本については[こちらの記事](https://iot.keicode.com/electronics/what-is-breadboard.php)を参考にさせて頂いておりますので、ご一読下さい。

要点は
- 電源ライン(赤と青のライン間)→横
- それ以外→縦
- 真ん中のくぼみ→つながってない

というつながり方をしています。

では、実際の配線をやってみます！

## いざ、配線
まずは実際の配線をご覧ください。
![IMG_20210219_220741.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/6551ff45-a926-9e9c-0cf8-352116058d84.jpeg)
なんか未来ガジェット感が増しますね！
LEDの＋側(アノードと言います)に
Arduinoのデジタル出力(7番ピン)から配線します。
![Untitled Sketch 2_ブレッドボード.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/e08d28ae-7b63-37aa-6710-71da4b093606.jpeg)
雑で恐縮ですが、配線図です。
実際には「回路図」を用いるところですが、わかりやすい(当社比)のでこちらの図もご参考までに。
![IMG_20210219_220757.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/d3195250-1e21-70fc-76c9-6c3019f254f8.jpeg)
LEDは足の長い方が＋（アノードです。）
但し、そのままLEDを指すと壊れてしまう可能性が高くなります(電気流れ過ぎて発光体が切れます)
なので、カソード(-)側に抵抗を指してマイナス端子に電気が流れていくという回路となります。

![IMG_20210219_220826.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/029dcabc-4e0d-25d6-b7ad-12ed742ec899.jpeg)
この~~虫みたいな~~物体が抵抗です。電気の流れ過ぎを防いでくれます。
本格的な工作には必要な抵抗値を求めたりいろいろ知識が要りますが今回は
「とりあえずLEDが割れないように抵抗刺しとる」ぐらいの感じでご理解いただければと思います。

![IMG_20210219_220857.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/c54d49a1-4378-8205-aaf3-e342ac106576.jpeg)
7番ピンさんのご尊顔。

![IMG_20210219_220901.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/a9b75561-45e8-3413-0430-fd8ffe4ca4e8.jpeg)
GNDとはGROUND、＋マイナスのマイナスです。

本体のピンの役割の詳細は[こちらの記事](https://spiceman.jp/arduino-uno/)を参考にさせて頂いておりますのでご一読下さい。


## ほんまにこれで光るんかいな・・・
ほんまに光らせましょう。
先ほどインストールしたArduinoIDEでプログラムを書きます。
点けるだけでもいいのですが、
今回はプログラムでLEDを光らせる醍醐味を味わう為、点滅させてみましょう。
LEDがチカチカ・・・
電子工作の世界では有名な、あの**Lチカ**です！

```C:Lchika_sample.ino
void setup() {
  pinMode(7, OUTPUT);
}

void loop() {
  digitalWrite(7, HIGH);
  delay(1000);
  digitalWrite(7,LOW);
  delay(1000);
}

```

以上。

`void setup()`は一度だけ呼ばれる関数で、
`pinMode(7, OUTPUT)`で
7番ピンをアウトプットにするよ～と言ってあげます。
このピンが入力なのか出力なのか設定してあげる必要があります。
まぁお約束というやつです。

`void loop()`関数は無限ループです。
`digitalWrite(7, HIGH)`で7番ピン、発動！
`delay(1000)`で1秒待ってね(1000ms)
delayはギタリストの方ならエフェクタにあるのでわかりやすいかな。
`digitalWrite(7, LOW)`で7番ピン、沈まれ！
以下無限ループ・・・
というプログラムです。

Arduino言語では`setup`と`loop`は必ず必要な関数となります。
`void`ってなんぞや・・・・？
ヴォイド・・・？~~なんかカッコいいのでとりあえず書いて下さい~~
おまじないのようなものだとここでは思っておいてください。


では、プログラムが書けたらすこし設定を確認します。
上部の「ツール」をクリックし、「ボード」から`Arduino AVR Boards`　→`Arduino UNO`を選択。
同じく「ツール」からシリアルポート→COM5(Arduino UNO)を選択。
ここのシリアルポートは環境により差異があるかもしれないのでうまく行かなければ適宜変更してみてください。

![kakikomu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/168b0c81-c744-009c-ad5a-03c93905080c.jpeg)

設定を確認できたら「→」ボタンをクリックしてArduinoにプログラムを流し込みます。
なんかエラー出たぞって時はプログラムに誤字が無いかよ～く見て再度チャレンジ！

では、実行結果を見てみましょう。

![GIF-210219_224340.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/472e8946-ec14-23d8-ce9c-8cd56feca1ac.gif)

おおおお！ピッカピッカしましたね！
**"Hello World!"(物理)**

ちなみに一度プログラム流し込んでしまえば上書きするまでは
「LEDをピカピカさせる奴」として生き続けます。
なので電源を指すだけでLEDをピカピカさせるマシンとなったわけです。
自分の書いたプログラムで動く機械が出来るなんて、**ロマンの塊**じゃないですか！

### おまけ
Arduino本体にくっついてるLEDも任意に光らせることができます。
`pinMode(7, OUTPUT)`
`digitalWrite(7, HIGH)`
で指定していた7を13に書き換えると・・・？
実行結果は是非ご自身で確かめてみてください。

[私の過去記事](https://qiita.com/kohey0701/items/231e6afdb074fe671416)にてパワーアップしたLチカをご紹介しておりますので、興味の沸いた方は試しに作ってみてください。
配列や関数等、学習はじめはちょっと分かりづらい項目をArduino的に解説してみました。


## 終わりに

今回は、私が**Arduino**と出会ってからプログラミングが楽しくなったので、当時の私のようにプログラミング学習に行き詰っている方が少しでも楽しく学習できるきっかけになればと思い執筆致しました。
プログラミングってそんなこともできるんやなぁ～ぐらいに思って頂ければ嬉しく思います。

かくいう私も初心者でとりわけ詳しいわけではありませんが、勉強や趣味としてArduinoでワイワイできる仲間ができたらな～なんて願っております。