【ESP32】MH-Z19CセンサでCO2濃度を測定する

はじめに この記事では、ESP32 と MH-Z19C CO2センサ を UART で接続し、CO2濃度を読み取る方法をまとめます。配線、ライブラリ、サンプルコード、ゼロ点校正まで確認したあと、UART通信の基本も整理します。 MH-Z19C はUARTまたはPWMで値を取り出せますが、この記事ではライブラリを使ったUART方式で進めます。ESP32側ではハードウェアシリアル2を使い、センサの TX と RX の向きを間違えないことが重要です。 こんなことをやります。 CO2センサ(MH-Z19C)とESP32でCO2濃度の測定 CO2センサの校正 気象庁のCO2濃度データをグラフ化 MH-Z19Cで使われているUART(シリアル通信)の解説 先に要点 ESP32では、MH-Z19Cの TX を GPIO16 (RX2)、RX を GPIO17 (TX2) へつなぎます サンプルコードでは mhz19_uart ライブラリを使い、getCO2PPM() でCO2濃度を読みます ゼロ点校正は環境の影響を受けるため、やみくもに実行せず用途に合わせて扱います CO2濃度の話は換気の目安として扱い、この記事ではセンサの使い方と実験記録を中心にします つかうもの はじめに、この記事で使うものをご紹介します。 MH-Z19C 秋月電子通商で販売しているMH-Z19Cを使いました。 MH-Z19Cセンサは、 赤外線を使って空気中のCO2濃度を測定 します。MH-Z19Cセンサからデータを読み取るには、UART通信または、PWMで値を読み取る方法があります。本記事ではもっとも簡単な方法として、既存のライブラリを使ってUART方式でMH-Z19からCO2濃度を読み取る方法をご紹介いたします。 MH-Z19Cの概要 MH-Z19Cでは、UARTまたはPWM信号を読み取ってCO2濃度のデータを読み取ります。 今回はライブラリを使用しますが、ライブラリの仕組みとしてはUART通信でデータを読み取ってます。UARTについて記事の最後でくわしく解説してます。 MH-Z19Cの仕様 項目 値 電源電圧 5V 測定レンジ 400~5000ppm 消費電流 40mA以下、最大125mA インターフェース電圧 3.3V 出力 シリアルポート(UART、TTLレベル3.3V)、PWM MH-Z19Cライブラリのインストール MH-Z19CとUARTで簡単にやり取りできるライブラリを使用します。こちらの「nara256/mhz19_uart」を使わせてもらいました。 https://github.com/nara256/mhz19_uart 上記のページからzipでダウンロードして解凍してください。それをArduinoのライブラリディレクトリへ移動すればOKです。 私はPlatform IOで開発してますので、ディレクトリ構造は次のように配置しました。 . ├── include │ └── README ├── lib │ ├── README │ └── mhz19_uart │ ├── MHZ19_uart.cpp │ ├── MHZ19_uart.h │ └── examples │ └── demo │ └── demo.ino ├── platformio.ini ├── src │ └── main.cpp └── test └── README MH-Z19CだけでなくMH-Z19Bでも使えます。また、このライブラリはArduinoとESP32のどちらでも使うことができます。UART通信ですので、Arduinoの場合はソフトウェアシリアルを、ESP32の場合はハードウェアシリアルを使用します。配線だけ間違えないように注意してください。 ...

公開: 2022年5月21日 · 更新: 2026年4月29日 · Toshihiko Arai
ArduinoでXYペンプロッターを自作する手順|GRBL・CNCシールド・Inkscape

ArduinoでXYペンプロッターを自作する手順|GRBL・CNCシールド・Inkscape

はじめに この記事は、Arduino と CNCシールド を使って XYペンプロッター を自作した記録です。GRBL でステッピングモータを動かすところから始めて、リニアガイドやタイミングベルトで X/Y 軸を作り、最後に Inkscape で Gコードを作って描画するところまでをまとめています。 完成済みのキット紹介ではなく、実際に試行錯誤しながら形にしていった過程 をそのまま残した記事です。これからペンプロッターや小型 CNC を自作したい方にとって、部品選びや進め方の参考になるはずです。 この記事で大まかに分かることは次のとおりです。 Arduino に GRBL を入れてステッピングモータを動かす流れ CNCシールド、リニアガイド、タイミングベルトを使った X/Y 軸づくり Inkscape で画像を Gコードにして描画するまでの流れ 最後に使った部品やソフトウェアの一覧 先に要点 まずは Arduino + CNCシールド + GRBL でモータを動かせる状態を作るのが最初の関門です 機構は リニアガイド + GT2 タイミングベルト で組むと、XY プロッターらしい形にしやすいです 描画まで進めるには、CNCjs と Inkscape の組み合わせが扱いやすいです この記事は「最短手順」より、完成までの全体像をつかむ入口記事として読むのが向いています ①CNCシールドでステッピングモータを動かすまで まずは、Arduino と CNCシールドで Gコード によるモータ制御ができる状態を作ります。ここが動けば、CNC 工作機械、レーザー加工機、3D プリンタなどにも応用しやすくなります。 ArduinoへGRBLをインストール ArduinoにGRBLというソフトウェアをインストールします。CNCシールドのバージョンによってGRBLのソフトウェアバージョンを選ぶ必要があるようです。 今回使用したCNCシールドはVer3.00でして、こちらのGRBL0.8(GRBL-Arduino-Library)をインストールしました。 下記ページの「Code」から「Download ZIP」を選択して、zipファイルでライブラリをダウンロードします。 https://github.com/Protoneer/GRBL-Arduino-Library その後、Arduino IDEで「Sketch」→「Include Library」→「Add .ZIP Library…」を選択して、ダウンロードしたzipファイルを追加します。 ...

公開: 2022年3月12日 · 更新: 2026年4月20日 · Toshihiko Arai
Arduino UnoからATtiny85へ書き込む配線イメージ

ArduinoからATtiny85へ書き込んでLチカする

はじめに ATtiny85 は一円玉にも満たない超小型のAVRマイコンです。Arduino言語でプログラムできるため、クロック設定や消費電流を工夫すれば電池駆動の小さなガジェットを作るのに重宝します。 ただし、ATtiny85はUSBポートを持たないため、Arduino Unoをプログラマとして使う「ArduinoISP」という仕組みが必要です。この記事では、Arduino Uno 経由でATtiny85にスケッチを書き込み、LEDを点滅させる(Lチカ) までの全手順を画像・動画つきで解説します。 必要なもの パーツ 用途 ATtiny85 書き込み先のマイコン Arduino Uno プログラマとして使用 ブレッドボード 配線用 100uF 電解コンデンサ 書き込みエラー防止に必須 LED Lチカ動作確認用 1kΩ 抵抗 LED電流制限用 最低限 ATtiny85・Arduino Uno・ブレッドボード・100uF電解コンデンサ の4点が必要です。コンデンサは書き込みエラーを防ぐために必須なので、最初から一緒に用意してください。LED と抵抗はLチカ動作確認用です。 ArduinoからATtiny85にスケッチを書き込むまでの作業手順 ArduinoからATtiny85にスケッチを書き込むまでの作業手順は、大きく次のとおりです。 Arduinoをプログラマにする(ArduinoISP) ATtiny85にブートローダを書き込む ArduinoからATtiny85にスケッチを書き込む ① Arduinoをプログラマにする(ArduinoISP) まずは、ArduinoをATtiny85のプログラマにするため、ArduinoにArduinoISPというプログラムを書き込みます。 ArduinoISPとは ArduinoISPとは、ArduinoをAVRライタの互換機にするためのファームウェアです。 ATtiny85は普通のArduinoとちがって、パソコンから直接ArduinoスケッチをATtiny85に書き込むことはできないため、プログラマというAVRライタが必要になります。 ここではArduino UNOをAVRライタにするワケですね。 ちなみに、「USBasp」や「AVRISP」など、専用のAVRライタも販売されてます。 ArduinoISPを書き込む 以下、macOSから作業をおこないました。Arduino IDEのメニューからFile→Examples→ArduinoISP→ArduinoISPを開きます。Arduino UNOをパソコンにつないで、そのままスケッチをアップロードして書き込みます。 以上で、Arduino UNOをAVRライタにできました。簡単ですね♫ ② ATtiny85にブートローダを書き込む 次に、ATtiny85にブートローダを書き込みます。 ブートローダとは ブートローダとは、マイコンにあらかじめ書き込んでおく小さなプログラムです。これによって、Arduino言語のような簡単なプログラミングでマイコンを動かせるワケです。 ATtiny85をArduino言語で動かすために、あらかじめブートローダを書き込んであげる必要があります。ただし、書き込むのは一度だけでOKです。 ATtinyボードの追加 まず、ATtinyのボードを追加するために次の作業を行ってください。 ArduinoIDEのメニューからPreferences...→Additional Board Manager URLsの項目にある「ウィンドウのようなアイコン」をクリックします。 そこに次のURLを追加してください。 ...

公開: 2022年1月28日 · 更新: 2026年5月20日 · Toshihiko Arai

【Arduino】リアルタイムクロック(DS3231)で現在時刻の表示

こんなこと、やります。 ArduinoでリアルタイムクロックDS3231を使う リアルタイムクロックに現在時刻をセットする シリアルモニタで現在時刻の表示 液晶ディスプレイで現在時刻の表示 DS3231は温度補償付きの高精度リアルタイムクロック(RTC)で、Arduinoから現在時刻を読み出して時計や記録のタイムスタンプに使えます。ポイントは、最初に一度だけ現在時刻を書き込んでおけば、あとはモジュール上のボタン電池でその時刻が保持され続けることです。この記事では、ライブラリのインストールとI2C配線から、シリアルモニタでの表示、さらにI2C接続のLCDに時刻を表示するところまでを順に扱います。 DS3231ライブラリのインストール Arduino IDEで簡単にDS3231を扱えるように、ライブラリをインストールしましょう。 Ardino IDEを立ち上げて、メニューから「Sketch」→「Include Library」→「Managed Libraries…」を選択し、「DS3232RTC」で検索して次のライブラリをインストールしてください。 「依存関係のライブラリをインストールしますか?」と問われますので、「Install all」を押します。 https://github.com/JChristensen/DS3232RTC Arduinoとリアルタイムクロックの配線 Arduinoとリアルタイムクロックの配線を次の通り行います。 Arduino UNOでは、SDAとA4、SCLとA5は導通してますので、A4、A5ピンを使ってもらっても大丈夫です。I2C通信の配線やアドレスの考え方は、ESP32でADS1115を使う方法|配線図・I2Cアドレス・サンプルコード も参考になります。 ArduinoとDS3231のプログラミング ArduinoとDS3231のプログラミングを行っていきます。RTCから現在時刻を取得するには、 一度だけ現在時刻をセットしてあげる必要 があります。 現在時間を書き込む 内容を現在時刻に合わせて書き換えてください。 #include <DS3232RTC.h> void setup() { setTime(15, 21, 0, 22, 1, 2022); RTC.set(now()); } void loop() { } 時刻はsetTime(時、分、秒、日、月、年の順で入力) で指定します。プログラムを一度だけArduinoで実行し、リアルタイムクロックに現在時刻を記録させます。 シリアルモニタで現在時刻を表示する シリアルモニタで現在時刻を表示させてみましょう。 #include <DS3232RTC.h> void setup() { Serial.begin(115200); } void loop() { tmElements_t tm; RTC.read(tm); Serial.print(tm.Year + 1970, DEC); Serial.print('/'); Serial.print(tm.Month, DEC); Serial.print('/'); Serial.print(tm.Day, DEC); Serial.print(' '); Serial.print(tm.Hour, DEC); Serial.print(':'); Serial.print(tm.Minute,DEC); Serial.print(':'); Serial.println(tm.Second,DEC); delay(1000); } こんな感じで、シリアルモニタに現在時刻が表示されれば成功です。 ...

公開: 2022年1月22日 · 更新: 2026年6月3日 · Toshihiko Arai
そうだ!Arduinoでヨーグルトメーカーをつくろう!

そうだ!Arduinoでヨーグルトメーカーをつくろう!

はじめに この記事では、Arduinoでヨーグルトメーカーを自作した記録をまとめます。PTCヒーターで容器を温め、温度センサで状態を読み、リレーモジュールでヒーターをオン・オフする構成です。 最初は空気を温めようとして失敗しましたが、アルミクッカーを直接温める形に変えたことで、ヨーグルトを作れるところまで進みました。後半では、ケースに収めた Ver2 や、温度設定を変えて納豆づくりを試した話も載せています。 こんなことをやります。 Arduinoでヨーグルトメーカーをつくる PTCヒーター、リレーモジュール、OLED、温度センサを使う I2Cや1-Wire通信とかやってみる 先に要点 ヨーグルトづくりでは、牛乳を40℃前後で数時間保温する必要があります 空気を温めるより、アルミクッカーのような熱が伝わりやすい容器を温める方が効率的でした 温度センサ、リレー、OLEDを組み合わせると、現在温度を見ながらヒーターを制御できます 食品を扱うので、容器や温度センサはよく洗い、消毒してから使う前提で進めます Arduinoヨーグルトメーカーの構想 はじめに、Arduinoでヨーグルトメーカーをつくるための構想をお話します。 構想 牛乳に種となる少しのヨーグルトを入れ、40℃に温度を保って数時間ほどおくと新しくヨーグルトができます。 これをArduinoを使って実現するために、次のように構想を考えてみました。 まず40℃の一定の温度にするため、ヒーターが必要です。ヒーターのスイッチをオンオフを制御するためには、リレーモジュールが使えそうです。また、温度を測定するために温度センサも必要です。温度表示するモニタとしてはOLEDがよさそうです。 フィードバックとして得た温度によって、冷たければヒーターをオンにして温め、温まりすぎればヒーターをオフにして冷ますといったものです。 空気を温めても意味がない じつは最初、下の写真のようにヒーターを発泡スチロール保温容器に接着して空気を温めようとしてました。しかし試してみると、36℃程度しか空気の温度が上昇しませんでした。 そこで、( ゚д゚)ハッ!っと気がつきました。 「空気じゃない!牛乳を温めるんだ!」 牛乳を40℃に保てればよいのですから、アルミ容器にヒーターを付けて、牛乳を注げば良いのでは?という考えにたどり着きます。 熱伝導率とは? 熱伝導率とは、熱が高温から低温へ運ばれる現象(熱伝導)による、熱の移動のしやすさをあらわすものです。1秒間に1平方メートルの面積から、1ケルビン伝えるための熱量になります。 物体の状態や温度にもよって変わってきますが、おおよそ次の通りです。 素材 熱伝導率[W/(mK)] アルミ 221 空気 0.0241 ガラス 1 水 0.6 この表を見るとわかる通り、アルミが圧倒的に熱伝導率が高く、空気の熱伝導率は低いことがわかります。また、ガラスも意外と熱伝導率は低いですね。 熱伝導率と似て非なる比熱 熱伝導率と似ていて異なるものに「比熱」があります。 比熱とは、単位質量あたりの物質の温度を単位温度上昇させるために必要な熱量のことを表します。物質1kgを、1ケルビン伝えるために必要な熱量となります。 素材 比熱[J/(kgK)] アルミ 0.880 空気 1.007 ガラス 0.670 水 4.183 この表から、水をあたためるには、大きなエネルギーを必要とすることが分かります。また、アルミとガラスでは、ガラスのほうが小さいエネルギーで温められることになります。しかし、よく考えてみるとアルミは軽いですから、同じ1kgのアルミとガラスを考えますと「まぁ、そうなのかも」と納得できるのではないでしょうか。 アルミクッカー 幸い、キャンプで使うアルミクッカーやメスティンを持ち合わせております。アルミは熱伝導率がとても優れてますから、ヒータの温度も効率よく牛乳に伝わるはずです。 写真のようにアルミクッカーとヒーターをゴム紐ではさむようにして固定しました。 普段使いにも便利なアルミクッカー ちなみに私はキャンプだけでなく、普段の料理でアルミクッカーやメスティンを愛用しております。すぐに温まりますから、調理時間も短く済み、ガス代もお得なはず!洗い物も軽くて便利です!アルコールストーブのわずかな燃料でご飯も炊けちゃいます。 準備 必要なライブラリのインストールや、Arduinoと各センサモジュールの配線を説明します。 必要なライブラリ DS18B20の温度データを読み取るために、OneWireとDallasTemperatureライブラリをインストールします。 また、OLEDに文字表示をするためu8g2ライブラリをインストールしましょう。 Arduinoとセンサモジュールの配線 Arduinoとセンサモジュールを次のように配線します。ヒーターに供給する電源は12Vで1A以上のものを使用します。 OLEDはI2C通信ですので、ProMicroの場合はSDAを2番ピン、SCLを3番ピンへつなぎます。 ArduinoによってSDAとSCLの場所が異なりますので注意してください。 ...

公開: 2021年10月4日 · 更新: 2026年4月29日 · Toshihiko Arai
においセンサ(TGS2450)で匂いを数値化するArduinoプロジェクト、基板も作ったよ

においセンサ(TGS2450)で匂いを数値化するArduinoプロジェクト、基板も作ったよ

はじめに においセンサTGS2450とESP32、M5StickC Plusを使って、匂いを数値化するプロジェクトです。TGS2450はメチルメルカプタンやアルコールに反応しやすいアナログガスセンサです。 この記事では、TGS2450をマイコンで扱えるようにする回路、Arduinoとの配線、ヒーターパルス制御、簡易的に0〜100点へ換算する流れをまとめます。アナログ値を読むため、Raspberry Piで使う場合はADコンバータが必要です。 動画を再生 においセンサモジュールの製作 秋月電子通商さんで販売されているTGS2450(においセンサ)ですが、そのままではArduinoなどのマイコンで扱うことができません。トランジスタを使ったちょっとした回路を組まなければならないのです。 そこでPCB基板を発注してにおいセンサモジュールを作ってみました。基板サイズは約44mmx28mmです。回路については後ほど説明します。 このにおいセンサモジュールは、ArduinoをはじめESP32やM5でも動作可能です。お好みのボードでお使いください。もちろんRaspberry Piでも扱うことは可能ですが、Raspberry Pi Pico以外の場合は アナログ電圧値を読み取るためのADコンバータが必要 となりますのでご注意ください。 センサーモジュールの販売は終了となりましたm(_ _)m TGS2450が感知できるガス TGS2450は空気中に含まれるガスの濃度に応じて抵抗値が変化するアナログセンサ です。検知しやすいガスは次の通りで、 硫黄化合物系ガスに対して好感度です。 ◎ メチルメルカプタン ◎ 硫化水素 ○ アルコール ○ アンモニア アルコールに対してかなり敏感に反応します。また、玉ねぎスライスに近づけるとさらに反応します。「必ずしも人間にとって臭いもの」に反応するとは限らないのですが、大まかに「におう」ものに反応していることは間違い無いです。 口臭チェッカーや硫黄化合物系ガス検知器、空気清浄器や換気扇コントロールなどへ応用 できます。 次のグラフはフィガロ技研さんが出している TGS2450のデータシート です。 Rsはセンサ抵抗値でガスによって変化します。Roは清浄大気中のセンサ抵抗値で一定です。Rsのセンサ抵抗値が低くなればなるほど、ガス濃度ppmが高くなっていることが分かります。また左側のグラフほど、においセンサ(TGS2450)で反応しやすいガスということになります。 実際ににおいセンサーで測定してみると、意外と部屋の中が臭うということに気づきます。人間の嗅覚は慣れてしまうので、他人はすぐに気づいても自分には分からないものです。一人暮らしの方は、匂いチェッカーとして活用してみてはいかがでしょうか?(笑)他にもアイデア次第で楽しいことができそうです♪ においセンサモジュールの回路図 下図はTGS2450をArduinoなどで使えるようにするための回路図です。私が製作したにおいセンサモジュールの回路も同様のものとなります。ご自身で製作する場合はこの回路図を参考になさってみてください。 回路図中のJ1はArduinoなどのマイコンボードへ、Q2はTGS2450のガスセンサーへ繋ぎます。 TGS2450は4ピンのセンサデバイスで、役割はそれぞれ次のとおりです。3番、4番ピンの制御をマイコン側で行うことになります。 ピン番号 名称 備考 1 Common GNDへ繋ぐ 2 N.C. 何も接続しない 3 Sensor electrode ガス濃度に応じて5.62Ω〜56.2kΩで変化 4 Heater パルスで1.6Vの電圧を印加する 先ほどの回路図を元に、TGS2450内部構造も合わせて表現したものが次の図を見た方が分かりやすいかもしれません。 ...

公開: 2021年7月5日 · 更新: 2026年5月2日 · Toshihiko Arai

【Arduino】打楽器の音色をつくってみた【ドラムマシン】

はじめに この記事では、Arduinoとバンドパスフィルタを使ってドラムマシンのような打楽器音を作ってみたので、その実験を紹介をする。 実は先日、ブリッジドT型のバンドパスフィルタをつくっていた時に、アナログドラムマシンTR-808の回路にも使われていることが分かって早速実験してみたかったのだ。 パルス音をバンドパスフィルタに通すと、音程を持った音色として音が変化するのだ。これはバンドパスフィルタのインパルス応答に他ならない。 パルス信号を発生するにはArduinoがもっとも簡単だ。そこで、Arduinoでクリック音(パルス電圧)を発生させて、アナログ回路のバンドパスフィルタを通して打楽器のようなサウンドが作れるか実験してみた。 パルスジェネレータのArduinoプログラム Arduinoのプログラムは非常に簡単だ。デジタルピン2番を使って極短時間のパルス電圧を一定間隔で発生させているだけだ。 #include <Arduino.h> int D2 = 2; void setup() { pinMode(D2, OUTPUT); } void loop() { digitalWrite(D2, HIGH); digitalWrite(D2, LOW); delay(300); } このような短時間のパルス信号はさまざまな周波数成分をもつとされている。 実は、パルス信号はさまざまな周波数の余弦波を足し算することで作ることができるのだ。また、すべての周波数の余弦波を足し合わすことができれば、無限大に小さい時間で無限大の大きさを持つ信号になる。そしてこのような信号を、インパルスと呼ぶ。 ちなみに、今回の実験ではArduino Uno Rev3を使用したが、好きなArduino互換機でも構わない。さまざまなArduino互換機を使ってきたが、個人的には正規品のArduino Unoがおすすめである。Arduino互換機では「書き込みできなくなる現象」多々起きるが、Arduino Uno Revにしてからは一度も書き込みエラーが起きていない。よって、実験中のストレスがまるで違う。 バンドパスフィルタ バンドパスフィルタは、前回の記事で作ったブリッジドT型バンドパスフィルタを使う。 自分の場合は、バンドパスフィルタをブレッドーボードで使いやすくするために、このようにモジュール化してある。外部の可変抵抗で中心周波数を変化できるようにした。 モジュールは、銅基板をレジストペンで配線してエッチングして作っている。CADを使わなくても好きな基板を気軽に作ることができるので結構おすすめ。 打楽器の音色を作る実験 最後に、Arduinoでドラムマシンのような打楽器音を作る実験結果の紹介。ディケイドボックス(可変抵抗)をバンドパスフィルタに繋いで中心周波数を変えながら、Arduinoのパルス信号をフィルタリングしてみた。実験の模様を動画にしたのでご覧いただきたい。 https://www.youtube.com/watch?v=9FaXXm5JlX0 動画のように、バンドパスフィルタの中心周波数を変えることでさまざまな打楽器のような音色が作れる。中心周波数を低域にすれば、バスドラ(キック)やロータムのような音色になり、中音域付近ではタムやボンゴ、高域ではカスタネットから拍子木のような硬い音になる。バンドパスフィルタひとつでも、このようなさまざまな音色変化することに驚きだ。 Arduinoを使えば、複数チャネルでパルス信号を出せるのでもっと発展させれば本格的なリズムマシンが作れるかもしれない。 関連アイテム Arduino Uno 圧電スピーカー 可変抵抗 10kΩ

公開: 2021年2月5日 · 更新: 2026年2月24日 · Toshihiko Arai

【Arduino】非接触温度センサ(GY-906)を使う

はじめに この記事では、非接触温度センサGY-906(MLX90614)をArduinoから読み取り、対象物の温度と外気温を取得する方法をまとめます。基本のArduino配線から、M5StickC Plusでの表示、手ブレやノイズを抑えるためのメディアンフィルタまで扱います。温度計の代わりに厳密な測定をするというより、触れないものの温度変化を手軽に見る用途に向いたセンサです。 準備 GY-906ライブラリのインストール Arduino IDEをお使いの場合は、ライブラリマネージャで「Adafruit MLX90614」検索し 「Adafruit-MLX90614-Library」のバージョン1.1.x をインストールします。最新の2.0.0を使うと、本記事のプログラムでは動かない可能性があります。 https://github.com/adafruit/Adafruit-MLX90614-Library Arduinoで非接触温度センサGY-906を使う Arduinoで非接触温度センサGY-906を使ってターゲットの温度と、外気温を取得してみます。 ArduinoとGY-906の配線 ArduinoとGY-906の配線図です。 Arduinoの3.3Vをセンサモジュールへ供給し、SCLとSDAをそれぞれつなぎます。GY-906センサモジュールは、プルアップ抵抗が内蔵されているのでそのまま繋ぐことが可能です。 ソースコード(Arduino版) こちらがGY-906を使った基本的なプログラムになります。 #include <Arduino.h> #include <Wire.h> #include <Adafruit_MLX90614.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); void setup() { Serial.begin(9600); mlx.begin(); } void loop() { Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C"); // Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); // Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F"); Serial.println(); delay(1000); } ソースコードの解説 プログラム中のObjectが「対象物の赤外線から得た温度」です。Ambientは環境温度、つまり外気温を意味します。センサ自体が熱せられてしまうと、外気温も上がってしまうので注意しましょう。 プログラムでは摂氏温度を取得しましたが、華氏温度で取得したい場合は、readObjectTempFを使ってください。 ...

公開: 2021年1月24日 · 更新: 2026年4月30日 · Toshihiko Arai

【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

ESP32でLチカするまでの設定

はじめに この記事では、Arduino IDEでESP32の開発ができるようにし、最初の動作確認としてLチカ(LED点滅)まで進めます。ESP32のボードURL追加、Boards Managerでのインストール、LEDと抵抗の配線、Board/Portの選択を順番に確認します。はじめてESP32を触る場合は、まずこの手順で「書き込める状態」を作っておくと、その後のセンサ実験やBluetooth通信へ進みやすくなります。 開発環境 私の開発環境はこちらになります。Windowsでもほとんど同じ内容でできますので、適宜読み替えてください。 項目 バージョン ESP32ボード ESPRESSIF ESP32-WROOM-32D(ESP32 DevkitC V4) Arduino IDE Version 2.1.2-nightly-20230815 パソコン macOS Ventura 13.5 ESP32とは、上海に拠点を置く Espressif Systems社が開発したSoC(チップ) になります。下の写真の銀色の四角部分とWiFiアンテナ部分が本来のESP32になります。それ以外の部分は各社で自由に作られてます。 またESP32は Wi-FiとBluetoothの無線通信を標準で備えて ます。 クロックス周波数も240MHzと高速 で、ハイスペックながら低価格で購入できるマイコンボードです。ちなみにArduino Uno R3のクロック周波数が16MHz、Raspberry Pi Pico W が133MHzです。 ESP32はESP-IDFというツールで開発することができますが、 Arduino IDEを使ってArduino言語でも開発が可能 となってます。Arduinoをやったことある人でしたら、ESP32の開発もすんなりできるはずです。ここら辺がESP32が人気な理由でもあるでしょう。 さて、Amazonなどで検索しますとESP32のボードは種類が豊富でどれを選べば良いか分からないという方も多いと思います。結論から言いますと、 技適が通っていて38ピンある「ESP32 DevkitC」をおすすめ します。下記の製品どちらも技適が通っていてESP32 DevkitCとして開発できるのでトラブルが少ないと思います。実際私の仕事でも多用しているボードです。 Arduino IDE のインストール それでは実際にESP32の開発を進めていきましょう。Arduino IDEをお持ちでない場合は、下記ページからダウンロードします。184.3MBのdmgファイルでした。 https://www.arduino.cc/en/software 上記のページから macOS(Version 10.14: “Mojave” or newer, 64 bits) をダウンロードしました。Arduino IDEはWindowsやLinuxでも動かすことができます。ダウンロードする際に寄付画面が出てきますが、 無料でダウンロードする場合には「JUST DOWNLOAD」を選択 すれば大丈夫です。 Arduino IDEの設定 はじめにArduino IDEでESP32を開発するために、いくつかの設定が必要になります。難しそうに思うかもしれませんが、手順通り進めれば大丈夫ですので頑張りましょう。 ...

公開: 2021年1月5日 · 更新: 2026年4月30日 · Toshihiko Arai