電子工作・プログラミングノウハウを分かりやすく解説!見逃し厳禁!せでぃあのYouTube

Arduino UNO R4 MinimaはADCの分解能が変更可能!【新機能】

Arduino UNO R4 MinimaはADCの分解能が変更可能!【新機能】
  • URLをコピーしました!

この記事内には、プロモーションが含まれます。

こんにちは、せでぃあ(@cediablog)です。

Arduino UNO R3の後継機種であるArduino UNO R4 Minimaが発売され、本ブログではその新機能を紹介しています。

今回、新機能紹介記事の第4弾として「ADC(アナログデジタルコンバーター)の分解能変更という機能を紹介します。

ADC分解能変更を確認するための、配線が完了した状態写真
今回はこのような構成でADC分解能変更機能を確認します。
せでぃあ

ADC機能って何?という話から解説していきます。

この記事を読んでわかること
  • ADC(アナログデジタルコンバーター)と分解能変更方法について
  • ADC分解能変更機能を確認するための配線方法
  • Arduino IDEでのプログラミング例
この記事を書いた人
せでぃあ

せでぃあはこんな人物です

✅プライム企業に勤める電気・機械設計エンジニア

✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作

✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞

✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中

✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中

目次

購入方法と価格

Arduino公式サイトからも購入できますが、海外からの発送になるためコストや納期を考えたら国内サイトからの購入がおすすめです!

R4 Minimaが買える国内サイト

スイッチサイエンス:3,410円(税込み)+送料無料
秋月電子通商:3,190円(税込み)+送料

Amazon:3,246円(税込み)+送料

価格は変動することがありますので、リンク先にて現在価格を確認してください。

せでぃあ

Arduinoは気軽に始められるマイコンなので、おすすめです!

アナログ入力信号について

デジタル回路とアナログ回路のイメージ比較
デジタル回路とアナログ回路のイメージ

まずアナログ信号って何?というところから解説します。

信号は大きく分けて「デジタル信号」と「アナログ信号」に分けられます。

デジタル回路は「0(OFF)」か「1(ON)」の信号のみで構成されるのに対して、アナログ回路は連続的な変化をする信号で構成されます。

デジタル信号の一例

・LEDランプの点灯・消灯
・タクトスイッチのON・OFF

アナログ信号の一例

・可変抵抗器によって変化した電圧入力値
・明るさセンサー(CdSセル)の明るさ値

Arduinoではアナログ入力信号=0~5Vの入力電圧となります。

せでぃあ

アナログ入力信号は、変化する「値」だと思ってください。

Arduinoへのアナログ信号入力方法

Arduino UNO R4 Minimaのアナログ入力ソケット
Arduino UNO R3と同じく、6か所の入力ピンソケットがあります。

Arduino UNO R4には、6か所のアナログ入力ピンがあります。

このピンに+側の線を差し込み0~5Vの範囲で電圧をかけることで、Arduinoにアナログ信号を入力することができます。

アナログ入力回路について詳しく知りたい方は、こちらの記事がおすすめです。

ADC(アナログデジタルコンバーター)とは

アナログ入力信号をデジタルデータに変換するイメージ図
アナログ入力信号をデジタルデータに変換するイメージ図

ADC(アナログデジタルコンバーター)とは、アナログ入力信号をデジタル信号に変換する機能です。

アナログ入力ピンに入力された電圧0~5Vを、Arduino内部で0~1023の値に変換します。(デフォルト分解能10Bitの場合)

今回のテーマでは、可変抵抗器を使ってArduinoに入力する電圧を変化させ、LCDディスプレイにデジタル変換した値を表示させます。

ADC分解能とは

ADC分解能とは、「入力した電圧0~5Vをどれくらいのデジタル値に分解するか」というものです。

分解能10Bitの説明

Arduino UNO R4 Minimaの標準ADC分解能は10Bitです。

10Bitとは、2進数で10ケタ分使ってデジタル分解するということになります。

分解能10Bitの計算説明式

上記が分解能10Bitの最大値=1023の説明式です。

分解能10Bitのときは、アナログ入力電圧0~5Vをデジタル信号0~1023に変換されます。

デジタル値に対する電圧値

5(V)÷1023(Data)≒0.0049(V/Data)

せでぃあ

入力電圧が0.0049V変化すると、デジタル値が1変化することになります。

ADC分解能が変えられる

Arduino UNO R4 MinimaはADC分解能が10Bitから12Bit,14Bitに変えられます。

Arduino UNO R4 Minimaは、ADC分解能が10Bitから12Bit,14Bitに変えられます。

つまり、入力した0~5Vをより細かく表現できるようになるということです。

分解能のBit数の説明
分解能のBit数を2進数で表現するとこのようになります。

10Bitで表現できる範囲は、先ほど解説した通り「0~1023」となります。

分解能12Bitの表現範囲

12Bitのときは、10Bitの表現範囲に3072を加えます。
10Bitの表現範囲にこの値を加えると12Bitの表現範囲になります。

分解能12Bitの表現範囲の最大値は、1023+3072=4095となります。

分解能12Bitのときは、アナログ入力電圧0~5Vをデジタル信号0~4095に変換されるということです。

分解能12Bitの表現範囲

14Bitのときは、12Bitの表現範囲に12288を加えます。
12Bitの表現範囲にこの値を加えると14Bitの表現範囲になります。

分解能12Bitの表現範囲の最大値は、1023+3072+12288=16383となります。

分解能12Bitのときは、アナログ入力電圧0~5Vをデジタル信号0~46383に変換されるということです。

ADC分解能に応じた表現能力

デジタル値に対する電圧値

10Bit:5(V)÷1023(Data)≒0.0049(V/Data)
12Bit:5(V)÷4095(Data)≒0.0012(V/Data)
14Bit:5(V)÷16383(Data)≒0.0003(V/Data)

ADC分解能が14Bitの場合は、10Bitに比べて18倍もの精度で電圧値をデジタル表現できることになります。

ADC分解能の変更方法

ADC分解能は、Arduinoプログラムに記述することで変更が可能です。

プログラムでの分解能指示方法

analogReadResolution(分解能Bit数) ;

分解能Bit数の部分には10、12、14のいずれかを指定します。

分解能のデフォルト値は10(10Bit)です。

せでぃあ

たった1行のプログラムで、ADC分解能を変更できます。

Arduino UNO R3のADC分解能は10Bit固定

Arduino UNO R3のアナログ入力ピンソケット
Arduino UNO R3のアナログ入力ピンソケット

前世代のArduino UNO R3(写真は互換機)にも、ADC機能はあります。

Arduino UNO R3のADC分解能はUNO R4 Minimaと同じく10Bitです。

Arduino UNO R3は分解能を変えることができません。

ADC分解能変更機能の確認方法

ADC分解能変更を確認するための、配線が完了した状態写真
今回作成するADC分解能変更確認回路の配線状態写真

上記写真が今回実践する、ADC分解能変更を確認する回路になります。

動作としては、可変抵抗器によってArduinoのアナログ入力ピンに入力された電圧を(0~5Vの範囲で)変更させ、デジタル変換された値をLCDディスプレイに表示させるというものです。

タクトスイッチを押すごとに、ADC変換分解能が10Bit⇒12Bit⇒14Bitに切り替わります。

分解能が14Bitのときにタクトスイッチを押すと10Bitに戻ります。

LCD(液晶ディスプレイ)の表示内容説明

LCD(液晶ディスプレイ)の表示内容説明
LCDに表示される内容の解説

LCD(液晶ディスプレイ)には、3つの要素が表示されます。

LCD表示内容

①ADC分解能モード
②ADC分解能Bit数
③アナログ入力電圧をデジタル変換した値

せでぃあ

分解能Bit数に応じた、デジタル変換値の違いを確認します。

分解能モードは3種類

ADC分解能切り替えモードと分解能の説明
ADC分解能切り替えモードと分解能の説明

分解能モードは0、1、2の3種類あります。

各モードに対する分解能の割り当ては、上記説明図のようになります。

せでぃあ

プログラムの構成上、ADC分解能をモード別にするとわかりやすいので、このようなモードを準備しました。

ADC分解能切り替え動作確認回路で使うもの

ADC分解能切り替え動作確認回路で使うもの
配線が完了しプログラム転送できる状態写真
準備するもの
  1. パソコン
  2. Arduino本体
  3. USBケーブル(typeC)
  4. ブレッドボード
  5. 可変抵抗器
  6. タクトスイッチ
  7. 抵抗(1kΩ)
  8. LCDモジュール
  9. I2Cモジュール
  10. ジャンパー線(オスーオス)×7本
  11. ジャンパー線(オスーメス)×4本

今回はELEGOO社のスーパースターターキットに含まれる部品を使っています。

キットに含まれる部品は、機器名後に【キット】と記載しています。

コスパ最強のArduinoキットに含まれる、すべてのパーツを紹介しています。

パソコン

プログラムを作成するために必要です。

プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。

パソコンのOSはWindows、Macどちらでも対応可能です。

Arduino UNO R4 Minima本体

Aruino Uno R4 minimaの本体写真
Arduino UNO R4 Minima本体

今回は、Arduino純正品の「Arduino UNO R4 Minima」を使用します。

納期や価格面から、国内から発送される通販サイトからの購入がおすすめです。

R4 Minimaが買える国内サイト

Amazon
スイッチサイエンス
秋月電子通商

Arduino UNO R4 Minimaの始め方は、こちらを参考にしてみてください。

せでぃあ

ピン配置などの基本的な仕様は、UNO R3と同じです!

USBケーブル(TypeC)

TypeC USBケーブル
TypeCのUSBケーブル

UNO R3は本体に接続する側の端子形状が(TypeB)でしたが、R4 MinimaではTypeC形状になります。

パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。

せでぃあ

USBケーブルは別売りなので、買い忘れに注意してください。

ブレッドボード【キット】

ブレッドボードの機能説明図
ブレッドボードの機能説明図

たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。

説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能は同じです

ブレッドボードだけの購入も可能です。

可変抵抗器【キット】

可変抵抗器
今回使用する可変抵抗器

今回使用する可変抵抗器はツマミを回転させることで、10kΩまで変化させることができるものです。

可変抵抗器の端子機能の説明
可変抵抗器の端子機能の説明

極性はありませんが、ツマミを左右どちらに回転させたときにどういった動作をさせたいか?によって各固定端子への配線が変わります。

可変抵抗器については、こちらの記事にて詳しく説明しています。

タクトスイッチ【キット】

押しボタンの説明
押しボタンの説明

今回の回路では、タクトスイッチ(押しボタンスイッチ)を使用します。

押しボタンは押されている間のみ、上記写真での2点が内部でつながります。

このようなボタンをモーメンタリボタンといいます。

今回は扱いませんが、ボタンから手を離してもONしたままになるボタンをオルタネイトボタンといいます。

モーメンタリ・オルタネイトボタンについては以下記事にて詳しく説明しています。

抵抗(1kΩ)【キット】

1kΩ抵抗と色による見分け方
1kΩ抵抗と色による見分け方

1kΩの抵抗を1本使用し、押しボタンスイッチに接続します。

抵抗を接続するのは、押しボタンがOFFのときにArduino本体がノイズによる誤検出することを避けるためです。

この記事では詳しく説明しませんが、ボタンを押していないのに押されたと誤認識されることを避ける目的であるということだけ覚えておいてください。

抵抗カラーコードの見分け方については、こちらの記事で詳しく説明しています。

LCD1602モジュール【キット】

LCD1602モジュール
LCD1602モジュール

液晶ディスプレイ「LCD(Liquid Crystal Display)」モジュールになります。

数字や文字などを表示させることが可能です。

LCD(液晶ディスプレイ)については、こちらの記事にて詳しく説明しています。

I2Cモジュール

I2Cシリアルインタフェースボードモジュール
I2Cシリアルインターフェースボード

I2Cを使ってLCDを制御するために必要なモジュールです。

電源線2本と通信線2本の合計4本の配線だけで、LCDを制御することが可能になります。

I2C通信については、こちらの記事にて詳しく説明しています。

ジャンパー線(オスーオス)【キット】

キットに同梱されているジャンパー線(オスーオス)の説明
ジャンパー線

ジャンパー線を7本使用します。

Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。

ジャンパー線(オスーメス)【キット】

ジャンパー線(オス-メス)
ジャンパー線(オス-メス)

オス-メスジャンパー線を4本使用します。

I2CシリアルインターフェースボードとArduino本体を接続させるために使用します。

ADC分解能切り替え回路の配線図

ADC分解能切り替え回路の配線が完了した状態
配線が完了した状態
ADC分解能切り替え回路の配線図
ADC分解能切り替え回路の配線図

上図が配線説明図となりますので、これと同じ配線をすれば完成します。

機器が故障するおそれがあるので、接続するプラスマイナス極性には十分注意して配線してください。

今回はタクトスイッチをデジタル入力ソケット「2番」に接続しています。

1kΩ抵抗もタクトスイッチに接続していますが、スイッチOFF状態では確実に電位が0Vになるようにしています。

機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください。

せでぃあ

LCDモジュールなど複数のピンを同時にブレッドボードに挿入する場合は、なるべく垂直に差し込むようにしてください。

ナナメ挿入すると、ピンが曲がってしまう可能性があります。

ADC分解能切り替え動作プログラム

ADC分解能切り替え回路の配線が完了した状態
配線作業が完了した状態

配線が完了したところで、ADC分解能切り替え動作の確認プログラムを作っていきます。

Arduino IDEを開く

Arduinoの開発環境ソフトウェアである、Arduino IDEを開きます。

Arduino IDE2.2の画面
Arduino IDE2.2の画面

今回Arduino IDE2.2を使ってプログラムを作成しました。

プログラムを作成していきます。

USBケーブルで、Arduino UNO R4 Minimaと接続した状態で開くと、プルダウンから機種選択が可能です。

せでぃあ

機種選択は、プログラム作成後でも問題ありません。

Arduino IDE2.2のインストール方法については、こちらの記事にて紹介しています。

LiquidCrystal_I2Cライブラリのインストール

今回LCDディスプレイをI2C通信で制御するため、LiquidCrystal_I2Cライブラリのダウンロードとインストール作業が必要となります。

LiquidCrystal_I2Cライブラリのダウンロードとインストール方法を解説します。

mBlockでプログラミングをする場合は、本ライブラリインストール作業は不要です。

STEP
GitHubのサイトを開く
LiquidCrystal_I2Cライブラリのダウンロードサイトを開く。。

LiquidCrystal_I2Cライブラリのダウンロードサイトを開きます。

STEP
codeをクリックする
codeをクリックする。
STEP
ZIPファイルをダウンロードする
「Download ZIP」をクリックして、ZIPファイルをダウンロードする。

「Download ZIP」をクリックして、ZIPファイルをダウンロードします。

STEP
ArduinoIDEを開き、ライブラリをインストールする
ArduinoIDEを開き、ライブラリをインストールする。

ArduinoIDEを開き、「スケッチ」⇒「ライブラリをインクルード」⇒「.ZIP形式のライブラリをインストール…」の順に選択して、STEP3でダウンロードしたZIPファイルを選択。

インストールが行われ、ライブラリインストール作業が完了となります。

LiquidCrystal_I2Cライブラリの説明

今回はLCD1602の制御をするために、「LiquidCrystal_I2Cライブラリ」を使用します。

このライブラリを使うだけで、簡単にLCD表示を制御できます。

LiquidCrystal_I2Cライブラリの読み出し

プログラム冒頭の宣言部にてLiquidCrystalライブラリを読み出します。

#include <LiquidCrystal_I2C.h>

LiquidCrystal型変数の指定

プログラム冒頭の宣言部にてLiquidCrystal_I2C型の変数を定義します。

LiquidCrystal_I2C lcd(I2Cアドレス, 桁数, 行数)

変数「lcd」は例であり、任意の変数文字列を指定してください

init()

LCDの表示内容をクリアし、カーソルを左上に移動させます。

lcd型変数.init

clear()

LCDの表示内容をクリアします。

lcd型変数.clear()

setCursor( , )

カーソル位置を指定します。テキスト表示開始位置を指定することができます。

lcd型変数.setCursor(桁、行)

桁は左端が「0」、行は上段が「0=1行目」になります。

print(“表示させたい文字列”)

LCDに文字列を表示させます。

lcd型変数.print(“表示させたい文字列”)

backlight()

LCDバックライトを点灯させます。

lcd型変数.backlignt()

分解能を変更するための関数

ADC分解能は、Arduinoプログラムに記述することで変更が可能です。

プログラムでの分解能指示方法

analogReadResolution(分解能Bit数) ;

分解能Bit数の部分には10、12、14のいずれかを指定します。

指定分解能に応じた、プログラム指示方法

analogReadResolution(10) ; //分解能10Bit
analogReadResolution(12) ; //分解能12Bit
analogReadResolution(14) ; //分解能14Bit

この関数で分解能指示しない場合は、10Bit分解能で処理されます。

動作プログラム

/* 作品名:UNO R4 Minima ADC_Resolution */
/* 作成者:せでぃあ https://cediablog.com */
/* アナログ⇒デジタル変換分解能切り替え表示プログラム */
#include <LiquidCrystal_I2C.h>  // ライブラリのインクルード
// LiquidCrystal_I2C型変数の宣言
LiquidCrystal_I2C lcd(0x27, 16, 2);  // 0x27のアドレス,16列2行のLCDを使用
//入出力ソケット番号指定
const int BTN_SOCKET = 2;   //タクトスイッチ入力ソケット番号
const int VOL_SOCKET = A0;  //ボリューム入力ソケット番号
//解像度モード初期化(0:10bit , 1:12bit , 2:14bit)
int MODE = 0;
//改造度bit変数初期化
int BIT = 0;
void setup() {
  //プログラム起動時1回だけ処理される回路
  //入出力の割り当て
  pinMode(BTN_SOCKET, INPUT);  //2番ピンは入力として使用
  //LCD初期化
  lcd.init();       // LCDの初期化
  lcd.backlight();  // LCDバックライトの点灯
}
void loop() {
  //プログラム起動後ループ処理される回路
  int analog_val;  //アナログ入力値を格納する変数
  analogReadResolution(BIT);            //アナログ入力解像度
  analog_val = analogRead(VOL_SOCKET);  //アナログ入力値を代入
  if (digitalRead(BTN_SOCKET) == HIGH) {  //押しボタンがONのとき
    if (MODE >= 2) {                      //解像度モードが2以上のとき
      MODE = 0;                           //解像度モードを0にする
    } else {                              //解像度モードが1以下のとき
      MODE = MODE + 1;                    //解像度モードを+1の値にする
    }
    while (digitalRead(BTN_SOCKET) == HIGH) {  //押しボタンが押されたままのときに待機させる
    }
  }
  if (MODE == 0) {  //解像度モード「0:10bit(0-1023)」
    BIT = 10;       //アナログ入力解像度10bit
  } else if (MODE == 1) {  //解像度モード「1:12bit(0-4096)」
    BIT = 12;              //アナログ入力解像度12bit
  } else if (MODE == 2) {  //解像度モード「2:14bit(0-16383)」
    BIT = 14;              //アナログ入力解像度14bit
  }
  //LCDディスプレイをクリア
  lcd.clear();
  //LCD上段に温度データを表示
  lcd.setCursor(0, 0);   // カーソルの位置を指定(1文字目、上段)
  lcd.print("MODE");     // 文字の表示
  lcd.setCursor(5, 0);   // カーソルの位置を指定(4文字目、上段)
  lcd.print(MODE);       // 文字の表示
  lcd.setCursor(9, 0);   // カーソルの位置を指定(1文字目、上段)
  lcd.print(BIT);        // 文字の表示
  lcd.setCursor(12, 0);  // カーソルの位置を指定(4文字目、上段)
  lcd.print("bit");      // 文字の表示
  //LCD下段に湿度データを表示
  lcd.setCursor(0, 1);    // カーソルの位置を指定(1文字目、上段)
  lcd.print("val=");      // 文字の表示
  lcd.setCursor(4, 1);    // カーソルの位置を指定(1文字目、上段)
  lcd.print(analog_val);  // 文字の表示
  delay(200);  //0.2秒ウェイト
}

タクトスイッチを押すたびに、ADC分解能モードが切り替わる回路になっています。

モードとADC分解能の対照表

モード0:10Bit
モード1:12Bit
モード2:14Bi
t

せでぃあ

モード2の状態でタクトスイッチを押すとモード0に戻り、以降繰り返し動作となります。

動作確認

せでぃあブログちゃんねるより

ブログ運営の励みになりますので、チャンネル登録をお願いします!

プログラムをArduino本体に転送したら、動作確認します。

押しボタンを押すと、ADC分解能が10Bit⇒12Bit⇒14Bitと変化していきます。

可変抵抗器のツマミを回しながら、各ADC分解能に応じたLCDディスプレイに表示される変換値の変化を確認してください。

せでぃあ

ADC分解能の範囲で数値が変動することがわかります。

まとめ

Arduino UNO R4 Minimaになって、ADC分解能がUNO R3の10Bitからさらに細かくすることが可能になりました。

Arduino UNO R4 MinimaはCPUの演算処理速度が、UNO R3の3倍に進化しています。

これにより、細かい電圧の変化を素早く読み取って判断することが可能となったと言えます。

ちなみに秋月電子通商でのArduino UNO R4 Minimaの税込み販売価格は以下となっており、R4のほうが安いです。

・R3:3630円+送料
・R4:3190円+送料 

純正品を買うならR4 Minimaの購入がおすすめです。

以上で、Arduino UNO R4 MinimaのADC分解能の変更機能についての紹介を終わります。

せでぃあ

ぜひあなたも新機能を使って遊んでみてください!

最後まで読んでいただき、ありがとうございました。

Arduino R3互換品キットなら、本体と30以上の電子パーツが入って5,000円程度と高コスパです。

ELEGOOのArduino互換キットは本ブログのLESSONシリーズでも活用しています。

Arduino UNO R4 Minimaの新機能を紹介しています。

\ プライベートブランド商品が充実! /

応援ありがとうございます(^^)/

Arduino UNO R4 MinimaはADCの分解能が変更可能!【新機能】

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次