Arduino Unoのシールド基板で、アナログセンサのデバッガーを作ってみた

Arduino Unoのシールド基板で、アナログセンサのデバッガーを作ってみた

アナログセンサのデバッガーを、Arduinoシールドで作ってみました。analogRead値をOLEDに表示しているだけでですが、シリアルモニターで確認する手間が省けてだいぶラクになりましたのでその作り方をご紹介いたします。ここで言うデバッガーとは、プログラミングでよく使う機能と同様で、センサーが壊れていないかどうかを動作チェックするツールになります。

ゴール(完成イメージ)

アナログセンサデバッガーの完成イメージがこちらの動画になります。動画では、可変抵抗や土壌センサを接続して、ArduinoのADC(ADコンバータ)の値をOLEDに表示している様子をご覧いただけます。Arduino UnoのADCの分解能は10bitですので、0〜1023までの値を取ります。

つかうもの

はじめに、この記事で使うものをご紹介いたします。

Arduino Uno

KKHMFさんから出ているArduino Unoの互換品を使用しました。正規品より値段が安く買えるので選んでみました。本家のArduino Unoとまったく同様に動作します。

Arduino Unoであれば他の製品でも構いませんが、Arduino Uno専用のシールドを使いますのでESP32やPro microだと端子がハマりませんのでご注意ください。

▼ Arduinoがいっぱいありすぎてよく分からないという方は、こちらの記事で初心者向けの解説をしていますのでご参考になさってみてください。

Arduino Uno シールド

今回はじめてArduino Uno シールドというものを使ってみました。Arduino Unoの端子にピッタリ合うように作られているユニバーサル基板になります。KEYESTUDIOさんから販売されているものです。10枚セットなのでなかなかお買い得です。

こちらのシールドにはヘッダーピンは付属してませんので、別途用意しておいてください。

ブレッドボードで組む場合と違ってハンダ付の必要はありますが、ある程度やりたいことが決まっていて、日常的にそれを使いたい場合はこのように少しガッツリと電子回路を作っておくと便利そうです。万が一飽きたりして使わなくなっても、Arduino Unoからカンタンに脱着できますので、Arduinoボードの再利用は可能です。

OLED液晶ディスプレイモジュール

アナログセンサの値をディスプレイに表示するために、I2C接続できるOLEDの液晶ディスプレイモジュールを使いました。それほど大きなものは必要ないので、低価格で販売されているこちらの0.91インチで小型のものを使うことにしました。

\OLEDの使い方はこちら/

アナログセンサ

アナログセンサはなんでも構いません。土壌センサーやCdSセル、可変抵抗も立派なアナログデバイスです。

アナログセンサデバッガーのシールド基板制作

次の図のように、Arduino UnoとOLEDを配線します。OLEDの電源はArduinoの5Vに繋ぎます。また、OLEDのSCLとSDA端子をArduinoのSCLとSDA端子に接続します。

Arduino UnoとOLEDの配線図
Arduino UnoとOLEDの配線図

もちろん可変抵抗はさまざまなアナログセンサに置き換わるため、シールド基板への半田付けは行いません。その代わり写真のように、メスのピン端子を設置しておきました。端子のそばから配線が伸びていますが気にしないでください。オレオレ規格のアナログセンサ端子をつなげるようにした線ですので。

アナログセンサデバッガー
アナログセンサデバッガー

アナログセンサデバッガーのプログラミング

U8g2ライブラリのインストール(OLED SSD1306用)

Arduino IDEのライブラリマネージャーから「u8g2」の単語で検索し、次の写真の通りoliver氏によってリリースされているライブラリをインストールしておきます。

U8g2 by oliver
U8g2 by oliver

このU8g2ライブラリは、SSD1306のチップが搭載されたOLEDに文字の表示をカンタンにできるようにしてくれるライブラリです。I2C通信の難しい知識は必要なく、数行で文字表示ができるので大変便利です。 Githubリポジトリ にサンプル例がたくさん掲載されてますので、目を通しておくと良いと思います。

スケッチ(ソースコード)

アナログセンサデバッガーのスケッチは次の通りです。

/**
 * @file AnalogSensorDebugger.ino
 * @author Toshihiko Arai
 * @brief Dispaly adc value to OLED.
 * @version 1.0
 * @date 2022-11-08
 *
 * @copyright Copyright (c) https://101010.fun 2022
 *
 */
#include <U8g2lib.h>

#define SENSOR_PIN A0

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);

void setup(void) {
    pinMode(SENSOR_PIN, INPUT);

    u8g2.begin();
    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_8x13_tf);
    u8g2.drawStr(0, 10, "Analog Sensor");
    u8g2.drawStr(0, 23, "Debugger");
    u8g2.sendBuffer();
    delay(3000);
}

void loop(void) {
    int val = analogRead(SENSOR_PIN);
    char buf[10];
    snprintf(buf, 10, "%d", val);

    u8g2.clearBuffer();

    u8g2.setFont(u8g2_font_8x13_tf);
    u8g2.drawStr(0, 10, "ADC value:");
    u8g2.drawStr(0, 23, buf);
    // u8g2.setFont(u8g2_font_fub35_tf);
    // u8g2.drawStr(0, 35, "199.9");
    u8g2.sendBuffer();
    delay(100);
}

128x32のディスプレイなので U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C を宣言してますが、ディスプレイサイズが違う場合はそれに合わせて変更する必要がありますのでご注意ください。drawStr 関数が文字列で指定する必要があるため、int型を snprintf でchar型に変換してます。

「キッチンノート.fun」という料理サイトを立ち上げました!このサイトで紹介していた料理記事は、そちらへ移動しました。
記事に関するご質問などがあれば、
Twitter または お問い合わせ までご連絡ください。
人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容となっています。ほかのArduino書籍と比べて図や説明がとてもていねいで、読みやすかったです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事