2021年2月5日金曜日

キミへ贈るArduino

これはなに?

電子工作に使われる「Arduino」について知ってもらう記事です。初期投資も少なく手軽に行えるため、興味がわいたらぜひ初めてみてください。

もくじ

  1. Arduinoって何?
  2. Arduinoボードの種類
  3. Arduinoを使った開発

1.Arduinoって何?

ArduinoはArduinoマイコンボードArduino IDE(開発環境)の総称です。C言語ライクなArduino言語を使ってプログラミングを行います。ボードへの書き込みはArduinoボードとPCをUSBで繋ぎ、IDEの書き込みボタンを押すだけで完了です。専用機器を用意したり、回路を組んで流し込むなんてことは必要なくて敷居が低いです。

また、マイコンボードから開発環境まですべてオープンソースで公開されており、機能追加をしたり安価なパーツを使用して低コスト化を実現した互換ボードがあったりするのが特徴です。

説明からプログラム例まで超まとまっていたサイトがあるので詳しくはArduino のすすめを見てください。

2.Arduinoボードの種類

Arduino公式サイトのHARDWARE(https://www.arduino.cc/en/Main/Products)で現在流通しているArduinoを見ることができます。今回はUno、Nano、Leonardo、Micro、Megaに絞って軽く説明します。

 また、互換機について実体験に基づく注意点を書いておこうと思います。

2.1 Arduino Uno

最も標準的なArduinoボードです。マイコンはATmega328Pが使われています。

センサ入力等に使うアナログ入力ピンが6本(A0~A5)、電圧の高低について読み込み、書き出しが行えるデジタルピンが14本、そのうちの6本がPWM(Pulse Width Modulation)ピンです。

ちなみにPWMピンはServoライブラリを使うときに使用したりします。

また、どのボードでも言えることなのですが、アナログピンはデジタルピンとして使用することもできます。Unoの場合、アナログ入力を行わない場合は最大20本まで使用することができます。

2.2 Arduino Nano

Arduino Unoを小さくしたものです。後に説明するMicroより小さいです。マイコンはUno同様ATmega328Pが使われています。

各ピンはUno同様、アナログピンが8本(A0~A7) 、デジタルピンが14本、うち6本がPWMピンです。

ピンヘッダが実装されているため、ブレッドボードに直接差し込んで利用することができます。

2.3 Arduino Leonardo

Arduino UnoのマイコンをATmega32u4に変更したものです。このマイコンを積んでいるArduinoはHIDデバイスと認識させることが可能で、キーボードやマウスを作ることができます。UnoやNanoでもがんばればできるけど省略します。

アナログピンは12本(A0~A12、裏面に該当デジタルピンが記述されています。)、デジタルピンが14本あり、うちPWMピンが7本あります。複数用途があるピンがあるため、デジタルピンとして使用できるピンは最大20本です。

2.4 Arduino Micro

Arduino Leonardoを小型化したモデル。マイコンはLeonardoと同じくATmega32u4のため、これもマウスやキーボードを作ることができます。

各ピンもLeonardoと同じく、アナログピンが12本、デジタルピンが14本あり、うち7本がPWMピンです。アナログピンについては上記公式ページの「DOCUMENTATION」にある通りとなっています。こちらもデジタルピンは最大20本使用できます。

2.5 Arduino Mega 2560

 

いろいろデカいです。使われているマイコンはATMega2560です。メモリやフラッシュ(プログラムを書き込む場所)UnoやLeonardoに比べて大きいです。

アナログピンが16本、デジタルピンが54本、うち15本がPWMピンです。

2.6 互換機について注意点

1.で説明した通り、Arduinoはハードウェアまでオープンソースとなっているため、Amazonなんかでは互換機がたくさん発売されています。

基本、公式と使い勝手は変わらないのですが、経験上何回か躓いたことがあったので書いておきます。

2.6.1 USBで繋いだときに認識しない

Arduinoのプログラムを書き込むとき、シリアル通信を行って書き込むのですが、そのシリアル通信を行うチップが本家と異なる場合があり、繋いでも認識しない場合があります。

その場合、使用されているUSB-シリアルを確認してドライバを探し、インストールする必要があります。

認識後は本家同様に使用できます。

2.6.2 [重要]一部スペックが異なる場合がある。

めっちゃ大事です。

安いArduino互換機ではレギュレータ(入力電圧を変圧し、一定の電圧を出力するもの)が本家と違う場合があり、最大入力電圧が違う場合があります。

きちんと互換機のデータシートを見て使用してください。くれぐれも公式のデータシートを使わないことです。

ちなみにぼくはこのミスで部所有の互換Megaをひとつ壊しました。あーあ。

3. Arduinoを使った開発

基本的には2.で説明したボードを入手し、PCにArduino IDE(https://www.arduino.cc/en/software)を入れてプログラム書いて書き込んで終わり!って感じです。

…が、それで終わるのもあれなので、VSCode+プラグインを使用した環境を軽く書きます。Arduino IDEより書きやすいと思うので、ぜひ一度試してみてください。

3.1 Visual Studio Code(VSCode)

軽くてプラグインがいっぱいで便利なエディタです。(公式サイト)

Arduino以外にもCやPython、シェルスクリプト等を書くときにも使えますし、入れといて損はないと思います。

何か困ったことがあった時に情報が多いのも強みです。

3.2 プラグイン

この記事(https://qiita.com/narikei/items/847613a8f01a9e1527d7)が役に立ちます。

3.3 Arduino言語

翻訳したリファレンス(http://www.musashinodenpa.com/arduino/ref/)がとても参考になります。

基本、void setup()とvoid loop()で構成されます。setup()は起動時に一回のみ、loop()は起動後繰り返し実行されます。

また、Arduino言語ではプロトタイプ宣言が必要ありません。

あと、タブで記述ファイルを変更できます。機能ごとに分けてあげると使いまわしが効くでしょう。

まとめ

今回はArduinoを紹介しました。マイコンボードではこれだけではなく、ESP32とかSTM32とかあるんでぼくも使ってみたいねえ



2021年2月3日水曜日

キミへ贈るプログラミングのはじめ

これはなに? 

プログラミングというものを全く知らない方向けに、「プログラミングって何をするの?」「何が大事なの?」みたいなのを知ってもらうことを目的にした記事です。

ぼくの考えなどが多くありますが、このセカイの入り口となれば幸いです。また、興味がわいたらそこで終わらず、いろいろ調べて踏み出して欲しいです。

もくじ

  1. プログラミングって何するの?
  2. プログラミングに大事なのって何?
  3. 何をすればいいかな?

1.プログラミングって何するの?

簡単に言ってしまうと読んだ通りです。コンピュータへの命令であるプログラムを、CやPythonといったプログラミング言語を利用して作っていくことがプログラミングです。

…まあここで説明を終えてしまったらこの記事の意味無くなってしまうのでもう少し詳しく説明します。

  

1.1 プログラムって何?

言葉の意味としては「計画」が当てはまります。

今回の「プログラム」はコンピュータプログラムを指していて、コンピュータへの命令を記述したもの、となっています。

しかし、コンピュータには様々な種類があります。普段使っているような PCやスマートフォンはもちろん、電卓や洗濯機などの電子制御が行われている機器(組み込み機器とよく呼ばれます)もコンピュータといえます。

これより、一口にプログラムといっても、組み込み制御のようなハードウェアに近いものから、インターネットのサイトを構築するような人間に近いものまで多岐にわたっています。


1.2 プログラミング言語って?

コンピュータへの命令を人間が行いやすくするためのものです。

また、これで記述された指示書がソースコードと呼ばれています。プログラムの素です。

先ほど説明したプログラムが多様にあるように、プログラミング言語も用途にわけて豊富にあります。したがって、名前を知ってるとかで一つの言語を選んでやみくもに覚えるのではなく、やりたいことに合わせて言語を使い分けるのが大事だと思います。(これは声を大にして言いたい)

 

1.2.1[発展]コンパイラ型とインタプリタ型

難しい話なので飛ばしてもいいです。必要になったら見ればいいと思います。

プログラミング言語のひとつの分け方として、コンパイラ型とインタプリタ型があります。

まず、コンピュータは機械語を読んで動くのですが、人間にはとても取り扱いにくいため(できないことはない、すごい人はできるらしい)、いったん人間に近いプログラミング言語で指示を記述し、それをコンピュータの機械語に翻訳してあげています。

このときの翻訳の仕方で分類がされています。


コンパイラ型

ソースコードを読み込んで、すべて機械語に翻訳してあげるものです。この翻訳作業をコンパイルと言い、ソースコードを書いたり弄っても実行するにはコンパイルを行わなければなりません。

しかし、実行時にコンピュータは機械語を読むだけなので、とても処理が速いという特徴があります。

コンパイラ型で代表的な言語としては、C、C++、Go、Java、Kotlinなどが挙げられます。

(C、C++、Goは実物の機械語に翻訳されて、Java、Kotlinは仮想マシンの機械語に翻訳されるんすけど、詳しくは言いません、気になったら調べてみるといいかもね)

 

インタプリタ型

ソースコードを翻訳しながら実行するものです。コンパイルが必要ない分、ソースコードを変更するだけでプログラムが動きますが、実行と同時に翻訳するため処理が遅くなります。

インタプリタ型で代表的な言語としては、Python、Rubyなどが挙げられます。

 1.2.2 [発展]オブジェクト指向

[執筆予定]

2.プログラミングに大事なのって何?

1を読んでいただけたらプログラミングというものが何となくはわかったと思います。

では、そんなプログラミングには何が大事だと思いますか?自分は

  • やりたいものを見つける
  • 処理を組み立てられるようになる

だと思っています。 

やりたいことを見つける

1で説明した通り、プログラミングといってもいろんな種類があります。そのため、自分がやりたいことがない場合、苦痛でしかないと思います。

プログラミングは手段であり、道具です。目的ではありません。ぜひやりたいことを見つけてください。

処理を組み立てられるようになる

どんなプログラムも、「順次」「分岐」「反復」の動作で構成されています。これを理解し、やりたいこと・実装したいものを組み立てられるようになるのが大事だと思います。

最初はメモ帳や裏紙にフローチャートを書いて、慣れてきたら頭でやればいいと思います。

また、処理はできるだけ細かく考えることも大事です。反復動作の際の1ステップが予期しない動作を行ってしまうことはよくあることです。一度書いてうまくいかないときなどに諦めず、じっくり細かく考えることを意識するのがいいと思います。

3.何をすればいいかな?

まずは2.で説明した「やりたいことを見つける」「処理を組み立てられるようになる」をどうにかしておきましょう。その後はやりたいことの言語を作りながら学べばいいと思います。

最初は一から作ろうとせず、他人が書いたプログラムを読んで動作や言語の書き方を学び、少し書き換えて自分好みの動作をさせたりするのが有効かもしれません。ぼくもそうなので…

以下からはやりたいこと別に言語や道具のヒントを書いておきます。しかし、自分もすべてに精通しているわけではないですし、まだまだ未熟だと思っていますので、この記事を鵜呑みにするのではなく、自分でも調べてみてやっていってください。

ロボット等、実際にモノを動かしたい!

Arduinoを購入し、C言語ライクなArduino言語で開発を行うのが楽だと思います。情報もライブラリも豊富なので入門としてはとても優秀だと思います。後日記事を書く予定です。

また、IoTのようなものが作りたい場合、Raspberry Piというものがあります。これを利用しPython言語でプログラミングを行うことで軽いものは作れます。

ゲームを作りたい!

Unityを導入してC#言語でいろいろやればいいらしい(やったことはない)

スマホアプリを作りたい!

デバイスによって使用する言語やソフトが違います。

Androidスマホ向けであればAndroid Studioを導入し、JavaかKotlin言語で開発することができます。

iOS向けはやってないのでわかりませんが、Macが必要でSwift言語を使用するはずです。現時点でぼくはやっていませんしやる気もないので調べてください。

クロスプラットフォーム(様々なデバイスに対応させる)であればXamarinやFlutter、React Nativeなどのフレームワーク(開発基盤)があります。これもやってないので詳しくは調べてください。

PCソフトを作りたい!

コマンドを打って操作を行うCUI(Command User Interfaceの略です)ソフトであれば、C言語が手っ取り早いと思います。より多機能にしたい場合はC++言語が便利だと思われます。C++ヤバイって聞くけど舐めるくらいならCに毛が生えたくらいなので恐れなくてもいいかも…ただ怖い人がいっぱいいるのも事実なのでノーコメントで…

画面操作するタイプ(GUI: Graphical UI)でWindowsであれば.NETという便利なものがあります。(これもやってないから調べてね)

クロスプラットフォームで開発したい場合はJavaやKotlinなどがあります。Pythonもクロスプラットフォームで動き、大体なんでもできます。

Webページを作りたい!

見た目の中身にはHTMLとCSSというものが使われています。作り方はわかんないです…ぜったい便利なものがあると思いますがあんまり興味ないので…

あとがき

書いていて自分の未熟さをとても感じました。この記事を読んで少しでも興味を持った方、一緒に精進しませんか?