Arduino Unoで内蔵メモリEEPROMを使って状態を保存する方法

はじめに Arduino Unoでデータを保存するには、SDカードを使う方法のほかに、内蔵EEPROMへ保存する方法があります。EEPROMは容量こそ小さいものの、電源を切っても残したい設定値やスイッチ状態を保存するには扱いやすいです。この記事ではEEPROMの読み書き、2つのLED状態を1バイトにまとめるビット演算、タクトスイッチで状態を切り替える例をまとめます。 Arduino Uno R3のEEPROM EEPROM(Electrically Erasable Programmable Read-Only Memory)は電気的に消去でき、プログラムで書き換え可能な不揮発性メモリです。Arduino Uno R3で1024バイトのEEPROMが内蔵されています。わずか1kB程度のメモリではありますが、プリセット値やちょっとした状態保存であれば十分使えます。ちなみにArduino Uno R4ではEEPROMの値は8kBへ拡張されてます。 EEPROMの使い方 Arduino IDEではEEPROMが簡単に使えるようにライブラリが内蔵されています。スケッチでEEPROMを使う場合は下記ヘッダをインクルードします。 #include <EEPROM.h> 次のようにしてEEPROMのサイズを取得できます。 unsigned int eeprom_size = EEPROM.length(); Serial.println(eeprom_size); データを読み込むread() read() 関数を使ってEEPROMから保存されている値を読み込みます。address には0〜1023の範囲で値を指定します。 int value = EEPROM.read(address) データを書き込むwrite() EEPROMへデータを書き込むには write() 関数を使います。 int value = 16 EEPROM.write(address, value) ただしArduino Uno R3は8ビットマイコンですから、write()で書き込める値 value は8ビットになります。つまり0〜255までの値となります。それ以上大きい値を書き込む場合は分割してメモリへ保存するなどの工夫が必要となります。 他にもEEPROMライブラリには update() get() put() といった関数が存在しますが、ここで紹介した read() と write() の2つを使えば十分事足りります。 EEPROMは何度でも無制限に書けるメモリではないため、センサ値のように毎秒変わるデータを保存し続ける用途には向きません。今回のように、ボタン操作で状態が変わったときだけ保存する使い方なら、EEPROMの性質に合っています。 https://docs.arduino.cc/learn/built-in-libraries/eeprom 【実践】2つのLEDの状態を保存する 2進数を使って2つのLEDの状態を記録する LEDの状態保存には次のように2進数を使うと便利です。今後、状態管理が複数に増えたときもプログラムを完結に書くことができます。 10進数 二進数 LED1 LED2 0 0x00 オフ オフ 1 0x01 オフ オン 2 0x10 オン オフ 3 0x11 オン オン Arduinoとタクトスイッチ、LEDの配線 ここでは実際にArduino Unoを使って、タクトスイッチでLEDを点灯させ、その状態をEEPROMに書き込んで保存してみます。Arduinoとタクトスイッチ、LEDは次のように配線しました。抵抗は220Ω〜1kΩ程度で構いません。タクトスイッチの片側はGNDに接地し、もう一方をArduinoのデジタルピンへ接続させます。 ...

公開: 2023年7月24日 · 更新: 2026年4月30日 · Toshihiko Arai
LANケーブルを自作する方法|RJ45のかしめ方とArduino配線で使うときの注意点

LANケーブルを自作する方法|RJ45のかしめ方とArduino配線で使うときの注意点

はじめに この記事では、CAT5E の LAN ケーブルと RJ45 プラグを使って、LAN ケーブルを自作する手順をまとめています。 前半では、被覆を剥くところからプラグをかしめて LAN テスター で確認するところまでを写真付きで説明します。後半では、完成した LAN ケーブルを Arduino や ESP32 とセンサの間に使い、I2C や 1-Wire を長めに引き回したときに気づいた注意点も整理します。 こんなときに読む記事です。 LAN ケーブルを自分で作りたい RJ45 プラグの配線順を確認しながら作業したい Arduino や ESP32 のセンサ配線を LAN ケーブルでまとめたい 先に要点 一般的なストレート配線なら T568B の順番で両端をそろえればOKです 自作後は LAN テスター で 1 本ずつ確認した方が確実です I2C を長く引く用途では CAT5E だと不安定になることがありました 1-Wire は 4.7kΩ の外部プルアップ抵抗を入れると安定しやすくなりました LANケーブルの作り方 まずは CAT5E の LAN ケーブルを用意します。 ニッパーなどを使って、LAN ケーブルの被覆を 2cm ほど剥き、ツイストペアをほぐします。 ストレートケーブルとして使うなら、T568B の順番にそろえるのが一般的です。下図の並びで作業すると分かりやすいです。 茶色 白茶 緑 白青 青 白緑 オレンジ 白オレンジ 緑 と 青 の並びだけ少し迷いやすいので、ここは途中で何度か見直した方が安全です。 ...

公開: 2023年5月13日 · 更新: 2026年4月20日 · 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とNTCサーミスタを使って温度を測定する方法をまとめます。まず分圧回路で抵抗値を読み取り、B定数の近似式で温度へ変換し、精度を上げたい場合は3点測定からスタインハート式で校正します。温度制御や環境センサを作る前に、サーミスタの計算と誤差の出方を確認するための記事です。 こんなこと、やります。 サーミスタの使い方、計算方法を学ぶ Arduinoとサーミスタを使って温度の測定 サーミスタの温度校正 サーミスタ ここではサーミスタについて解説します。 サーミスタとは サーミスタとは、温度変化にともなって抵抗値が変化する抵抗器です。 温度のthermalと抵抗器のresistorを合わせ、サーミスタという名称になりました。 温度センサに使用されるサーミスタは、 NTC(negative temperature coefficient)といって、温度が上昇すると抵抗値が減少する タイプのものです。 温度が上昇すると抵抗値が上昇するものは、PTC(positive temperature coefficient)と呼び、ヒューズの役割として使ったり、一定温度を保つPTCヒーターに利用されます。 ちなみにこちらのPTCヒーターを使ってヨーグルトメーカーをつくったこともあります。 本記事では、温度センサとしてよく使われるNTCタイプのサーミスタを扱います。 NTCサーミスタの特性・近似式 サーミスタは、温度変化に対して抵抗値が変わる素子 であることは説明しました。しかし、サーミスタと温度と抵抗の関係は非線形です。よって、サーミスタの抵抗値から温度を得るためには、NTCサーミスタの特性を近似させた次式を利用します。 $$ R=R_0exp{B(\frac{1}{T}-\frac{1}{T_0})} \tag{1} $$ ここで、Bは B定数 と呼ばれるもので、サーミスタのデータシートに掲載されてます。 また、 Tの単位はケルビン になります。摂氏温度を取得するには次式で変換します。 $$T(K)=t(℃)+273.15 \tag{2}$$ さて、式1をTについて展開すると次のとおりです。 $$\frac{1}{T} = \frac{1}{T_0}+\frac{1}{B}ln\frac{R}{R_0} \tag{3}$$ 式3の逆数をとれば、Tについて算出できます。 さらに高精度で近似させる「スタインハート式」というものがありますが、式3でも実用的な温度測定ができますので「スタインハート式」については省略します。 必要なパラメータ(103JT-050) サーミスタで温度測定に必要なパラメータを確認します。今回使用するサーミスタは103JT-050ですので、 データシートより各パラメータは次のとおりになります。 項目 値 備考 B定数 3435K ±1%(25℃の時) (T_0) 273.15K 0℃の時 (R_0) 27.7kΩ 0℃の時 (R_{25}) 10kΩ ±1%(25℃の時) 抵抗・温度特性のシミュレーション サーミスタ103JT-050のデータシートから、理論値をプロットしてみました。また、式1の近似式と103JT-050のパラメータから抵抗値を計算し、 抵抗と温度特性のシミュレーション をしてみました。 次のグラフは、 サーミスタ103JTの抵抗・温度特性における、理論値と近似値の関係 を表したものです。 さらに、0℃以上に絞ってみてみます。すると下図のとおり、かなり高い精度で近似できることが分かりました。 ...

公開: 2021年10月11日 · 更新: 2026年4月30日 · 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