こんにちは、ENGかぴです。
Arduinoは簡単にソフト開発ができるためマイコン開発の練習教材としても使用されます。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるため趣味や業務で簡単なアプリを作りたい場合にお勧めの開発環境です。
楽に開発ができて動作確認ができるためモジュール製作メーカもArduino開発環境でWiFi接続ができるモジュールやLPWA通信モジュールが販売しています。標準ライブラリを使いながらIoTモジュールの動作が確認できるため楽しさ満点です。
- ソフト開発と標準ライブラリの使い方
- Arduinoの開発環境をつくる
- VSCodeを使って開発する
- Grove Beginner Kit for Arduinoで動作確認
- 7セグメントLEDで数値を表現する
- LED8×8マトリクスで点灯パターンを作る
- RGB LEDを操作する
- DIをマルチプレクサで拡張する
- タイマ管理とDIのチャタリング防止の方法
- LCDで文字を表示する
- SPI通信を行う
- SDカードにデータを保存する
- Wire(I2C)通信を行う
- RTCを使って時刻情報を管理する
- GPSモジュールを使って時刻管理する
- 超音波距離センサーUS-015で距離を測定する
- パルス波形でブザーを鳴らす
- アナログ電圧をAD変換する
- ジョイスティックの情報を取得する
- デジタル加速度センサのデータを取得
- 9軸センサーモジュール(BMX055)のデータを取得
- 人感センサーを組み込んで検知する
- サーボモーターを操作する
- ステッピングモーターを操作する
- リモコンで遠隔操作する
- EthernetライブラリでLAN通信する
- Arduinoとトワイライト(TWELITE)でセンサー情報を表示する
- Arduinoと参考書籍の紹介
- まとめ:Arduinoでソフト学習のハードルを下げよう
- 関連リンク
ソフト開発と標準ライブラリの使い方
Arduinoはオープンハードフェアのライセンスのもと資料などが無料で公開されておりいろいろな互換機があります。資料がオープンであるためマイコン周辺回路などは自作することは容易にできます。
ArduinoはATMEL社のAVRシリーズで8ビットマイコンが使用されています。Arduino開発環境ではマイコンの制御が簡単にできるようにマイコンの設定について精通した有志によってライブラリ化されており関数をコールするだけで簡単に動作確認ができます。
当サイトの記事から標準ライブラリの使い方をまとめた書籍になります。Arduinoライブラリでよく使用されるWireやSPIの通信など使用例を入れて説明しています。
Arduinoの開発環境をつくる
Arduinoの開発環境であるArduino IDEのダウンロードからインストールまでの手順をまとめていきます。対象OSはWindows10です。
スケッチ例が準備されているためArduino環境でライブラリの使い方やソフト開発の方法を学習することができます。
スケッチ例から使えそうなコマンドをコピーしたりと実際にマイコンで動作させることで効率よく学習できます。スケッチ例を少し改造してシリアル通信をシリアルモニタで動作確認しています。
広告
PR:わからないを放置せず、あなたにあったスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
VSCodeを使って開発する
Arduinoの開発環境はArduino IDEのみでなくVSCodeを使用しても開発できます。VSCodeはマイクロソフト社が提供しているソフト開発用のエディターです。
Arduinoの開発環境に合わせたプラグインをインストールすることで機能拡張によりVSCodeを使ってArduinoのソフトが開発できます。
Grove Beginner Kit for Arduinoで動作確認
Grove Beginner Kit for Arduinoは初心者のためのスターターキットです。Arduino UNOと同じシリーズのマイコンを使用しているためArduinoと同様に使用できます。温湿度センサーやLEDなどの周辺回路が組み込まれているためArduino環境の開発やC言語(C++)の学習に最適です。
このスターターキットはUSBに接続するだけで付属している温湿度センサーなどの動作確認ができます。標準ライブラリの使い方など周辺回路を準備せずArduino環境に慣れたい方にお勧めしたいキットです。
照度センサーとブザーの動作確認を行いました。照度センサーの値が可変抵抗で設定した値以下になった時ブザーを鳴らしています。
気圧、温度センサーであるBMP280の動作確認を行いました。メーカーが提供しているBMP280用のドライバーAPIにArduinoのWireライブラリを組み込んで測定データを取得する方法とArduino IDEでライブラリを追加して測定データを取得する方法をまとめています。
湿度・温度のデータであるDHT11の動作確認を行いました。シングルバス方式で通信を行って測定データを取得する方法とArduino IDEでライブラリを追加して測定データを取得する方法をまとめています。
サウンドセンサーの動作確認を行いました。サウンドセンサーから取得した測定値が閾値を超えた時の測定値の様子をOLEDに履歴データとして表示しました。
加速度センサーであるLIS3DHTRの動作確認を行いました。加速度センサーの特徴であるFIFOを使って測定値の取得し、シングルクリック及びダブルクリックのイベント検出の様子をOLEDに表示して確認できるようにしました。
7セグメントLEDで数値を表現する
Arduino環境ではDOの操作が簡単にできます。複数のDOを組み合わせることで7セグメントLEDに数値を表現することができます。数値のパターンの作って7セグメントLEDに表示する方法をまとめています。MsTime2を使用して1秒ごとに0~99をカウントさせて動作確認を行いました。
応用例として温度センサーの情報を7セグメントLEDに表示して動作確認した方法についてまとめています。
LED8×8マトリクスで点灯パターンを作る
LED8×8マトリクスは8×8の行列にLEDを配置したモジュールです。ArduinoのDOを16本使用することで任意のパターンでLEDを点灯させることができます。パターン1~パターン4でLEDの点灯パターンを切り替えて動作確認を行いました。
RGB LEDを操作する
RGB LEDは赤・緑・青の光の三原色を調整することで様々なパターン色でLEDを点灯させることができます。Adafruit NeoPixelライブラリを追加してRGB LEDを操作して動作確認を行いました。
DIをマルチプレクサで拡張する
ArduinoのデジタルピンはLCDや7セグメントLEDなどを接続していると不足してしまうことがあります。マルチプレクサは制御用の3本のDOと一本のDI(DO)によって8つのDI(DO)のピンの情報を取得することができます。
7セグメントLEDは専用のドライバーICを使用することでデジタルピンを節約できますが、7セグメントLEDに限らずDI(DO)が拡張できるマルチプレクサの効果をまとめました。
タイマ管理とDIのチャタリング防止の方法
DIに信号を入力して判定させることがありますがDI信号がチャタリングによってDI信号が安定しないことがあります。
MsTimer2ライブラリを追加しタイマの設定を行いメイン関数内でベースタイマを作ってタイマの管理を行います。タイマ管理を行いながらDIのフィルタを作っています。
LCDで文字を表示する
LCDに文字を表示するために標準ライブラリとしてLiquidCrystalがあります。外部機器から取得したデータの情報をLCDに表示したりボタンで表示を切り替えてモードを選択したりと用途は様々です。
LiquidCrystalのライブラリを使用することで最小の組み合わせで制御線2本とデータ用の4本をつなぐことでLCD表示ができます。タイマを使用してカウント値をLCDに表示しボタンを押すと10進数と16進数表示に切り替えるソフトを作って動作確認しました。
PR:スキマ時間を有効に!スマホで学べる人気のオンライン資格講座【スタディング】まずは気になる講座を無料で体験しよう!
SPI通信を行う
Arduino環境ではSPI通信を行うために標準ライブラリとしてSPIライブラリがあります。BME280の製作メーカが提供しているAPIを使用して温度・気圧・湿度の計算を行いSPI通信でセンサー情報を取得する方法をまとめました。
BME280の製作メーカであるBOSCH社が提供しているAPIを使用することを推奨しているためAPIの実装方法についても説明しています。
SDカードにデータを保存する
SDカードライブラリを使用するとSDカードにデータを読み書きができます。SDカードへのアクセスはSPI通信を使用するためSPIライブラリと同時に使用します。Arduino UNOの拡張基板であるSD CARD SHILDを使ってSDカードにデータの読み書きを行って動作確認を行いました。
PR:アクセンチュアの転職なら【コンサルアクシスコンサルティング】
Wire(I2C)通信を行う
Wireライブラリを使ってI2C通信を行いBME280から温度・気圧・湿度のデータを取得しBOSCH社が提供しているAPIを組み込んで計測値を各種データに換算して表示しました。
Wireライブラリを使ってDHT20モジュールから湿度と温度のデータを取得してLCDに表示して動作確認を行いました。sprintf()関数を使ってLCD表示用のデータを生成する方法を説明しています。
RTCを使って時刻情報を管理する
Wireライブラリを使ってRTCモジュールにRX8900(秋月電子)を使用してRTCモジュールから書き込んだ時刻からの時間を取得しています。RTCモジュール専用のcppファイルとヘッダーファイルを作成しArduinoプロジェクトに組み込んで実装しました。
Arduinoプロジェクトで関数をコールするだけでデータが取得できるように簡単なAPIを実装しました。ファイルを分離したときの管理方法についても説明しています。
応用編として任意の時刻を設定するためにLCDで設定項目を表示しボタンを押して任意のデータがセットできるようにしました。時刻を表示するモードと時刻を設定するモード(サブモード)を切り替えて時刻設定する方法についてまとめています。
日時の設定範囲の上限に関する考え方やボタンの誤動作防止のための対策についてのテクニックについても説明しています。
GPSモジュールを使って時刻管理する
GPSモジュールAE-GYSFDMAXB(秋月電子)を使用してGPSモジュールから時刻情報をシリアル通信を使って取得しLCDに表示するようにしました。GPSモジュールに対する出力項目の設定し日付と時刻を管理しています。
GPSモジュールのパケットフォーマットであつNMEAフォーマットによるデータ生成の方法やシリアル通信でデータを受信して管理する方法についてまとめています。
GPSモジュールをライブラリを追加して時刻情報などを取得する方法をまとめています。日本時間に換算したときのあり得ない時間になる対策としてtime.hを使用して管理する方法を紹介しています。NMEAフォーマットの解釈を行わず手早く時刻情報や位置情報を取得したいに場合にお勧めの方法です。
応用編としてGPSモジュールとRTCモジュールでGPS時計を作りました。Wireライブラリとシリアル通信を使ってRTCモジュールとGPSモジュールの双方と通信を行い、お互いの利点と欠点を補完します。
RTCモジュールへの時刻設定がGPSモジュールの受信によって楽にできるようになり、RTCモジュールが時刻カウントを管理するため一度でもGPSから(世界標準時で15時までに)時刻データを受信できていれば、世界標準時から日本時間に換算したときの日付超えの問題も問題になりません。
超音波距離センサーUS-015で距離を測定する
Arduinoと超音波距離センサーを組み合わせることで距離を測定することができます。US-015は2cm~4mまで測定できます。
ArduinoのDOを使ってパルス波形をUS-015に入力することで音波が出力し対象物からの反射波の戻り時間から距離を算出します。
US-015の配置の仕方で距離データがばらつくため複数回のデータを平均化して対策をしました。また距離の測定に関して気づいた点についてもまとめています。
応用編として無線通信モジュールであるトワイライトと組み合わせることで距離データを無線で送信しパソコンでモニターできるようにした距離測定モジュールを製作しました。
パルス波形でブザーを鳴らす
標準ライブラリのanalogWrite()によってPWM波形を生成しブザーを鳴らしました。analogWrite()ではPWMのデューティ比が変更できるためデューティ比を変更してブザーに供給する電圧を変化させることで若干音程が変わります。
広告
アナログ電圧をAD変換する
標準ライブラリのanalogRead()を使って土壌センサーであるSEN0114のアナログ値を取得します。計測したデータから土壌の状態を確認しました。
MG812モジュールからアナログ電圧を取得してCO2濃度をシリアルモニターに表示して動作確認を行いました。MG812モジュールのエージングの結果とアナログ電圧をCO2濃度に換算する方法をまとめています。
PR:わからないを放置せず、あなたにあった最低限のスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
ジョイスティックの情報を取得する
ジョイスティックから取得したアナログ値をOLEDに表示します。またアナログ値を換算してジョイスティックの操作位置をOLEDに描いた図形上に表示する方法をまとめました。
デジタル加速度センサのデータを取得
ArduinoのWire(SPI)を使用すると加速度センサー(ADXL345)の加速度やタップ情報などを取得することができます。ADXL345モジュール(秋月電子)を使用して加速度を取得しています。ADXL345の特徴でもあるFIFO機能を使用して取得する方法をまとめました。
9軸センサーモジュール(BMX055)のデータを取得
Wireを使用して9軸センサーモジュールであるBMX055が測定したデータを取得する方法をまとめました。OLEDに測定したデータを表示すると同時にシリアルプロッタに測定データを表示して動作確認を行いました。
人感センサーを組み込んで検知する
Arduinoと人感センサーをSB612Aを組み込んで人体を検知してブザーとLEDで通知する人感センサーモジュールを製作しました。人感センサーSB612A(秋月電子)の使い方や感度の調整についてまとめています。
サーボモーターを操作する
サーボモーターを標準ライブラリで操作する方法をまとめました。スターターキットに付属されていたSG90を使って動作確認を行いました。
PR:RUNTEQ(ランテック )- マイベスト3年連続1位を獲得した実績を持つWebエンジニア養成プログラミングスクール
ステッピングモーターを操作する
DOを使ってステッピングモーターを操作する励磁パターンを生成することで時計/反時計回りに回転させることができます。DOを4つ使用する方法とStepperライブラリを使用する方法の2通りで動作確認しました。
リモコンで遠隔操作する
Arduinoのスターターキットに付属しているリモコンと赤外線受信機モジュールを使って遠隔操作を行う方法をまとめました。受信機の出力をDIで受けて通信フォーマットを解析する方法とIRremoteライブラリを使用する方法の2通りで動作確認しました。
EthernetライブラリでLAN通信する
ETHERNET SHIELDを実装してEthernetライブラリを使って動作確認を行いました。DHT20から取得した温湿度のデータをHTMLデータに含めてWebサーバーで応答することでパソコンのブラウザーに表示する方法をまとめました。
WebClientを実装してサーバーにDHT20から取得した温湿度のデータを送信します。ESP32をサーバーモードで動作させることでローカルサーバを模擬して動作確認を行いました。
UdpClientを実装してUDP通信を実装します。UDP通信の特徴はパケットを全体に送信するブロードキャストがあります。1対1のユニキャストとブロードキャスト通信の動作確認を行いました。
Arduinoとトワイライト(TWELITE)でセンサー情報を表示する
トワイライトを親機と子機に分けて子機側にはBME280と組み合わせてセンサー情報を取得し親機に無線通信を行います。親機はArduinoと組み合わせることで子機からのセンサー情報をLCD表示します。
子機ではI2C通信と無線通信を使用し親機では無線通信を受信しシリアル通信して親機にデータを送信します。
子機を部屋を変えて設置してセンサー情報をLCDに表示しているとArduinoと組み合わせることで応用範囲が広がることや無線通信をうまく使えている感覚になりセンサーを変えていろいろと試したくなってきました。
Arduinoと参考書籍の紹介
当サイトの記事から標準ライブラリの使い方をまとめた書籍になります。Arduinoライブラリでよく使用されるWireやSPIの通信など使用例を入れて説明しています。
Arduinoはオープンソースであるためスターターキッドは各種いろいろありますが、Arduino UNO本体だけでは動作確認するには部品が足りないのでスタータキットでまとめて購入するのがおすすめです。
Ethernetライブラリの動作確認を行う場合は別途ARDUINO ETHERNET SHIELDが必要なので追加して購入することをお勧めします。
このスターターキットはUSBに接続するだけで付属している温湿度センサーなどの動作確認ができます。標準ライブラリの使い方など周辺回路を準備せずArduino環境に慣れたい方にお勧めしたいキットです。
まとめ:Arduinoでソフト学習のハードルを下げよう
Arduinoはライブラリを使用することでSPIやI2C通信などが簡単に実現できるためマイコンの動作を勉強するには最適な環境です。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるため苦手意識をなくせることがメリットと言えます。
Arduinoはライブラリを使って各種機能を実現するためライブラリにない動作を組み込みたい場合は自作する必要があります。ライブラリは有志が作成したものであるためバグがある可能性もあり動作の保証はないのがデメリットです。
実際にセンサー情報を取得したりシリアルモニタに表示したりと動作確認しながら1つ1つの技術の成功を積み重ねていけばできることが増えていき自信がつくことでソフト開発に対するハードルが下がっていくことは間違いありません。
自信がつきマイコンの機能をフル活用してみようとレジスタの操作についてデータシートを見てみようと興味が湧いてくれば、あっという間に脱初心者となるでしょう。
私は業務に追われながらも独学していたためソフト開発に慣れるまでに10年程度かかってしまいました。ArduinoだけでなくPICマイコンやRXマイコン最近はIoTモジュールのソフト開発などをしていますが、早い段階でプログラミングを教養として身に着けておけば10年もかからなかったと感じています。
最近では無料体験できるプログラミングスクールも増えてきており、あなたに合った学習プランによって短期集中してプログラミングに親しめる環境があります。無料体験でもプログラミングに対する感覚を掴めておけばソフト開発に対するハードルが下がることは間違いありません。
関連リンク
Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。
Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方
Arduinoのようにソフト開発したり周辺回路と組み合わせてデータを取得させたりして電子製品を開発するエンジニアは組み込みエンジニアといいます。IoT社会実現と組み込みエンジニアの職種との関係についてまとめています。
IoTモジュールであるトワイライトでソフト開発と無線通信を行い動作確認したことについてリンクをまとめています。
トワイライト(TWELITE)のソフト開発と無線通信でできること
最後まで、読んでいただきありがとうございました。
Arduinoプラグインのアップデートによってインクルードパスなどの動作が不安定になることが残念な点ですがアシスト機能が使用できる状態であれば効率よくコーディングできるメリットがあります。