【Arduino】時定数によるコンデンサの静電容量測定

Arduinoで静電容量の測定する方法 Arduinoなどのマイコンボードでコンデンサの静電容量を測定するには、次の2つの方法が考えられます。 発振回路と組み合わせる コンデンサの時定数を利用する ここでは❷の「コンデンサの時定数を利用する」方法でコンデンサの静電容量を測定します。 時定数とは 時定数とは、コンデンサCに、E[V]の電圧を、抵抗R[Ω]の抵抗を介してかけた時、 コンデンサCの電圧がEの63.2%まで充電される時間 のことです。 つまり、 コンデンサの電圧が、電源電圧の63.2%になるまでの時間 が「時定数」です。 時定数をτとすると、抵抗値Rと静電容量Cは次の関係になることが知られてます。 $$τ = RC$$ 静電容量の算出 アナログ電圧を測れるピンを備えているArduinoでは、時定数を測ることは簡単です。 デジタルピンの5V電圧を、抵抗Rを介してコンデンサCへ充電します。コンデンサの電圧が、5Vの63.2%の電圧3.22Vになるまでの時間を計測すれば時定数が分かりますから、次の計算でコンデンサの静電容量を導き出すことができるはずです。 $$C = \frac{τ}{R}$$ Arduinoとコンデンサの配線図 こちらが、Arduinoでコンデンサを測定する配線図です。静電容量が未知なコンデンサCxと、抵抗RおよびArduinoを図のように配線します。 デジタルピンD2をHIGHにした瞬間、2MΩの抵抗を介して電流がコンデンサへ蓄電されていきます。コンデンサの両端の電圧は徐々に上がっていき、アナログ入力ピンのA5地点が、電源電圧の63.2%Vになるまで監視します。この時間を測定して時定数を導き出します。 ちなみに、デジタルピンD3と1kΩの抵抗は、コンデンサの電荷を放電してリセットさせるためのものです。 コンデンサの静電容量を測定するプログラム コンデンサの静電容量を測定するプログラムがこちらになります。 #include <Arduino.h> const int PULSE_PIN = 2; const int DIGITAL_READ_PIN = 3; const int ANALOG_READ_PIN = 5; const double E = 5.06; // GPIO電圧実測値 const double R = 2000000.0; // 2MΩ const double V = E * 0.632; void setup() { Serial.begin(9600); pinMode(PULSE_PIN, OUTPUT); digitalWrite(PULSE_PIN, LOW); } void discharge() { pinMode(DIGITAL_READ_PIN, OUTPUT); digitalWrite(DIGITAL_READ_PIN, LOW); delay(1000); pinMode(DIGITAL_READ_PIN, INPUT); delay(10); } unsigned long charge() { digitalWrite(PULSE_PIN, HIGH); return micros(); } void loop() { discharge(); unsigned long time_start = charge(); double volts = 0; while (volts < V) { volts = double(analogRead(ANALOG_READ_PIN)) / 1023.0 * E; } double T = micros() - time_start; // T: 時定数 double c; char *farad = "uF"; if (T < 2500) { c = T / R * 1000000; // pFに対応 farad = "pF"; } else if (T < 50000) { c = T / R * 1000; // nFに対応 farad = "nF"; } else { c = T / R; // uF } Serial.print(c); Serial.print(farad); Serial.println(); digitalWrite(PULSE_PIN, LOW); discharge(); } 実験してみた感想 実際、100pF〜10uFまで測定してみました。かなり良い精度でコンデンサの静電容量を測定することができたことに、正直驚きです。 ...

公開: 2021年1月12日 · 更新: 2026年4月26日 · Toshihiko Arai
【Arduino】Pro Microと静電容量式タッチセンサ(TTP223)

【Arduino】Pro Microと静電容量式タッチセンサ(TTP223)

はじめに この記事では、Arduino Pro Micro と 静電容量式タッチセンサ TTP223 をつないで、タッチでLEDを点灯させるところまで試します。TTP223 はジャンパ設定で出力の動きが変わるため、先にモードの意味を押さえてから配線すると迷いにくいです。 タッチセンサは機械的なスイッチと違い、押し込む部品がありません。壊れにくく、ケース越しに反応させやすいので、自作機器の操作ボタンとしても扱いやすいセンサです。 先に要点 TTP223 は、タッチされたときに HIGH または LOW を出力できる静電容量式タッチセンサです AHLB と TOG のジャンパ設定で、モーメンタリ/オルタネイトと出力極性を切り替えられます 今回は、タッチしている間だけ HIGH になるモーメンタリ設定で Lチカします Pro Micro 側では digitalRead() で状態を読むだけなので、最初のセンサ確認に向いています タッチセンサ「TTP223」の使い方 このタッチセンサの 電源電圧は、2V〜5.5V の範囲で使用できます。 タッチセンサには「223B 9NNH」というICチップが搭載されてます。このおかげで、 ジャンパピンによってタッチセンサのモードを次の通り変えることができます。 TOG(B) AHLB(A) 動作・機能 0 0 モーメンタリ タッチされたらHIGHを出力 0 1 モーメンタリ タッチされたらLOWを出力 1 0 オルタネイト 電源オン時にLOWの状態 1 1 オルタネイト 電源オン時にHIGHの状態 モーメンタリとは、タッチしている間だけオンになる動作 オルタネイトとは、タッチするたびにON・OFFが切り替わる動作 基板のAジャンパは「AHLB」、Bジャンパは「TOG」へ配線されているので注意しましょう。 今回は、タッチしている間だけONになるモーメンタリを使用します。また、タッチされたらHIGHの信号が出力されるモードに設定します。センサに触れている間だけ反応させたいなら、この設定から試すのが分かりやすいです。 ▼ 「223B 9NNH」データシート https://datasheet.lcsc.com/szlcsc/TTP223-BA6_C80757.pdf ArduinoとタッチセンサでLチカ それでは実際にタッチセンサを使ってみましょう。タッチセンサとArduinoでLチカをやっていきます。 タッチセンサとArduinoの配線 まずは、次の通りタッチセンサとArduinoを配線してください。 LEDのアノードをA10につなぎ、1kΩ程度の抵抗を介してGNDへ落とします。 タッチセンサ Arduino Vcc 5V I/O A9 GND GND タッチセンサでLチカするプログラム こちらの動画のように、タッチセンサでLチカするプログラムをArduinoに書き込みます。 ...

公開: 2021年1月3日 · 更新: 2026年4月29日 · Toshihiko Arai

【Arduino】シリアルLED(WS2812B)を制御する

はじめに この記事では、ArduinoでシリアルLED(WS2812B)を動かす方法をくわしく解説いたします。 シリアルLEDは、電流の許す限りいくつもの同じ シリアルLEDを数珠つなぎで増設 できるLEDです。中でもテープ状になっているシリアルLEDがよく使われます。好きな長さにカットして使うことができるので、広告看板や室内の装飾、クリスマスや小規模なプロジェクトにもお使いいただけます。シリアルLEDのライブラリを使って、Arduinoから簡単に色や明るさを制御できます。 シリアルLEDの制御に必要なデータ通信線はたったの1本です。ひとつのArduinoで数百個のシリアルLEDを制御するなんてことも不可能ではありません。しかも、各シリアルLEDは独立してRGBフルカラーで点灯可能です。 シリアルLEDとは シリアルLEDは、もともと中国のWorldSemi社が開発したもので「NeoPixel」と呼ばれてます。 Neo PixelのシリアルLEDは、ひとつひとつの単品でも購入可能ですが、テープの形のものや、マトリックスになっているものが便利です。 とくに、テープ状になっているシリアルLEDは、ハサミで好きな長さにカットして使用できます。表面は柔らかい透明な樹脂でコーティングされており、裏面には両面テープが貼られてます。 本記事では紹介するのは「WS2812B 」のシリアルLEDの制御方法となります。ご購入の際は、「WS2812B」という名前がついているものをお選びください。 開発環境 本記事でおこなった実験の開発環境は次の通りです。 項目 バージョン Arduinoデバイス Seeeduino XIAO シリアルLED BTF-LIGHTING WS2812B LEDテープライト 1m Arduino IDE 1.8.10 パソコン macOS Big Sur 11.0.1 ▼ 今回購入したBTF-LIGHTINGのLEDテープライトです。WS2812B LEDテープ のシリアルLEDが60個ついてます。 シリアルLEDの仕組み ここではシリアルLEDの仕組みを簡単に説明します。 シリアルLEDの構造 シリアルLED「WS2812B」を拡大した写真をご覧ください。 シリアルLEDをよく見ると、写真のようなICチップが埋め込まれてます。これによって、Arduinoなどから送られてきたデータを受け取り、赤・緑・青のRGBカラーを点灯できる仕組みです。 図中のDOUTには、次のシリアルLEDのDINへ接続されます。冒頭で述べたとおり、いくつものシリアルLEDを数珠つなぎのようして接続します。また、ひとつひとつのLEDは独立して色や明るさを変えられます。 シリアルLED Arduino VDD 5V VSS GND DIN デジタルピン DOUT 次のシリアルLEDのDIN シリアルLEDの制御信号の流れ シリアルLEDの制御信号の流れを簡単に説明します。 ひとつのシリアルLEDが DINから送られてきたデータを受信すると、先頭のデータだけ取り出し、残りのデータをDOUTから他のシリアルLEDへ渡す 流れになってます。それぞれのデータの中には、 赤・緑・青のLEDの明るさ情報 が入れられており、それに基づいて各シリアルLEDは点灯されるのです。 データが空になれば、その先のシリアルLEDには届きません。よって予め、 制御したいシリアルLEDの数分だけデータを作っておく 必要があります。ただし今回はAdafruitの出しているNeo Pixcelライブラリを使用するので、難しいプログラミング作業はほとんどありませんのでご安心ください。 ...

公開: 2020年12月20日 · 更新: 2026年3月19日 · Toshihiko Arai
超音波センサHC-SR04の使い方|ArduinoとRaspberry Piで解説

超音波センサHC-SR04の使い方|ArduinoとRaspberry Piで解説

はじめに この記事では、超音波センサ HC-SR04 を使って距離を測る方法をまとめます。Arduino での基本配線とサンプルコード、Raspberry Pi で使うときの電圧変換、サーボモータと組み合わせた物体追跡の実験まで扱います。 最初に大事なのは、HC-SR04 の Echo ピンからは 5V 信号が返ることです。Arduino UNO のような5V系ボードなら扱いやすいですが、Seeeduino XIAO や Raspberry Pi のような3.3V入力へ直結しないよう注意してください。 先に要点 HC-SR04 は、超音波を出して戻ってくるまでの時間から距離を計算します Arduino では Trigger を10マイクロ秒だけ HIGH にし、Echo の HIGH 時間を pulseIn() で読みます 3.3V系マイコンや Raspberry Pi では、5Vの Echo を分圧やレベル変換で下げてから入力します サーボモータと組み合わせると、距離変化を使った簡単な追跡実験にも発展できます 超音波センサの仕組みを解説 なんで超音波で距離が測定できるの? 超音波で距離が測定できる仕組みを説明しますね。 そもそも超音波とは、人間の耳には「聞こえない」または「聞こえにくい」音域の音のことです。とはいえ聞こえないだけであって音にはかわりありません。 超音波も音も、空気を振動させて遠くへ広がっていきます。そして、その 音の速さは決まっている のです。(ココ大事) 音の速さは、気温や気圧によっても変化しますが、たとえば 1気圧で20度のときでは「秒速343.7m/s」 であることが知られてます。 よって、音の速さが分かっているのであれば「音を出してからその音が戻ってくるまでの時間」を測れば距離が測定できます。 つまり距離の計算式は次のようになります。 $$ 距離 = 音速 \times \frac{往復時間}{2} $$ 音速の定義 また、音の速さを正確に知りたい場合は、次式で計算できます。ただし、この式は「1気圧で空気が乾燥している」という条件が付きます。また、tは摂氏温度、音速の単位はm/sです。 $$ 音速 = 331.5 + 0.61t$$ ...

公開: 2020年12月12日 · 更新: 2026年4月29日 · Toshihiko Arai
静電容量型の土壌湿度センサを使ってArduinoで土の水分量測定

静電容量型の土壌湿度センサを使ってArduinoで土の水分量測定

はじめに 静電容量型の土壌湿度センサを使ってArduinoやESP32で土の水分量を測定します。この記事では、センサの防水加工、配線、アナログ値の読み取り、0〜100への換算、自動水やり機やデータロガーへの発展までをまとめます。水やり管理に使う場合は、センサ値を絶対値として信じすぎず、土や鉢ごとに乾いた状態と湿った状態を測って基準を作るのが大事です。 まず用意するもの 静電容量式 土壌湿度センサ Arduino Uno ESP32 DevKitC ジャンパーワイヤ 最小構成なら 土壌湿度センサ と Arduino Uno か ESP32、それに ジャンパーワイヤ があれば動作確認できます。乾電池運用を考えている場合は、記事中でも触れている通り 定電圧化 のための DC-DC コンバータもあると安心です。 防水加工を施した静電容量型土壌湿度センサ 静電容量型の土壌湿度センサです。市販のCapacitive Soil Moisture Sensorを、実際の現場で使いやすいよう改造しました。 基板の防水加工 センサの反応速度の改善 ブレッドボードで刺せるジャンプワイヤーの実装 2Mのセンサケーブルを延長 植物の根を痛めないよう先端を丸く加工 ジャンプワイヤーのカラー対応は次のとおり。 ジャンプワイヤー 役割 赤 Vcc 黒 GND 白 アナログ出力電圧 土壌湿度センサの使い方 土壌湿度センサの電源電圧Vdd、アナログ出力電圧範囲、消費電流は次のとおり。ArduinoやESP32でご使用になれます。 項目 内容 電源電圧 3.3〜5.5V アナログ出力電圧範囲 0〜3V 消費電流 5mA 水分量が多い状態ではアナログ出力電圧値が低くなります。乾燥している状態ではアナログ電圧値は高くなります。 電源電圧は必ず定電圧を使用してください。乾電池で動かすと電圧降下によってアナログ出力電圧まで変化してしまいます。 乾電池を使いたい場合は、DC-DCコンバータなど使って定電圧を作って下さい。 以前乾電池で動かしてた時のこと。なぜか水分量が上昇してしまいました。不思議に思っていましたが実はこれ、電池の電圧降下が影響した結果だったんです。 土にどのくらい埋めれば良いのかですが、推奨されるのはセンサの半分程度です。 防水加工を施されたものなら気にせずに土中に埋めても大丈夫です。 センサによってはアナログ出力電圧にバラツキがあります。また土中への差し込み具合や、土の成分によっても出力が異なります。ここら辺は実際に使用しながらご研究なさってください。 マイコンボードとの配線 マイコンボードと土壌湿度センサの配線例を図に示しました。 電源電圧Vddは3.3Vまたは5Vのどちらでも構いません。アナログ電圧出力(AOUT)はマイコン側のアナログ入力へ。ADコンバータが使えるピンでしたらどこでも構いません。水分量に応じてアナログ出力電圧が0V〜3Vの範囲で変化します。 ...

公開: 2020年8月30日 · 更新: 2026年4月30日 · Toshihiko Arai