サイトロゴ

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

著者画像
Toshihiko Arai

はじめに

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

ゴール(完成イメージ)

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

https://www.youtube.com/shorts/KdyDYoDHnXA

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

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

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

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

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

Arduino IDEのライブラリマネージャーから「u8g2」の単語で検索し、次の写真の通り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型に変換してます。

関連記事