「sparkfun」タグアーカイブ

Wio Terminal でパルスオキシメータを制作

すき 0
0

前回はWio Terminalの基本機能の一部を堪能させていただきました。

Wio Terminal でカメラ画像を表示2 ー LovyanGFX 編 ー

今回は少し応用でWio Terminal を用いてパルスオキシメータを作ってみました。
トレンディーでしょ?ウフフ

 

 

心拍数センサ MAX30105

センサにはMAX30105を使用しました。
赤、緑、赤外線LEDと高感度光子検出器を搭載したモジュールで、
粉塵や血中酸素飽和度(SpO2)などを測ることができます。

Wio Terminalとの接続

MAX30105をWio Terminalの4ピンのGroveコネクタに接続します。

 

Wio Terminalの回路図を紐解くと2個のGroveコネクタの左側がハードウェアI2Cとつながっておりました。

 

パルスオキシメータ動作

酸素飽和度(SpO2)、脈拍数と心電図を表示しています。
心拍に合わせてブザーで音も出しています。

ブザー音の演出も功を奏し、いい感じの仕上がりとなりました♪

Arduino コード

MAX30105のライブラリは以下にございます。
 https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library

以下のサンプルコードを参考にコーディングしました。

 

Wio TerminalのLCD表示は以下を参考にいたしました。
 https://wiki.seeedstudio.com/Wio-Terminal-LCD-Linecharts/

 
ブザー音出力は以下を参考にしました。
 https://wiki.seeedstudio.com/Wio-Terminal-Buzzer/

 

 

参考

磁気浮遊の学習 ー磁気浮遊への道 1ー

0
0

これやりたいなとなんとなくずっと思っていまして

Electromagnetic Levitation

ただいきなりこれは難しいと判断し、以下のつり上げタイプを作ってみましたのでご報告します。

以下を参考に製作しました。
 Magnetic Levitation Tutorial
 

 

構成

前述のチュートリアルを参考に回路を製作しました。

磁気センサで磁力(つまり磁石との距離)を観測し、オペアンプで基準電圧と比較して電磁石に流す電流をON/OFFします。

基準電圧は可変抵抗で調整可能で、電磁石に流す電流をON/OFFする磁石の位置を調整できます。

電磁石で磁石を引く力と重力が釣り合うと磁石は空中にとどまります。
電磁石には逆起電力によるサージ保護のためにダイオードを並列接続しています。

部品

 

概要

磁気センサ

ホールセンサ A1324LUA-T が Linear Hall Effect Sensorといわれており、5V給電で磁気がない場合は2.5V、一方の磁極を近づけると電圧上昇、他方を近づけると電圧降下します。

このセンサにより磁石との距離及び極性を観測することができます。便利!

磁気浮遊装置外観

電磁石に磁気センサをマスキングテープで貼り付けて(磁石が近づいたら電圧が上昇する向き)、カメラ用アームと金具で固定しました。

 
回路はブレッドボードで構成しました。

動作

磁気センサで磁力(すなわちセンサと磁石間の距離)を測って基準電圧とオペアンプで比較して電磁石をON/OFFして距離を保ってます。

基準電圧はスライドボリュームで調整していい感じに浮くポイントを探ります。

動画ではオシロでNMOSのドレイン電圧を観ています。
PWM制御のようになって素敵な浮遊を実現していいることが分かります。

終わりに

さてディスクリート部品の組み合わせて磁気浮遊を実現することができました。
Linear Hall Effect Sensorなるセンサを知ることができ大変勉強になりました!

次回はこれを応用して電磁石のON/OFFをマイコンで制御してみたいなと思っております。

それでは次の道でお会いしましょう。

 

ATmega32U4ボードでMIDIライブラリを堪能

0
0

以前、ATmega32U4はMIDIライブラリの使用でUSB-MIDI機器として認識されるという耳寄り情報を入手しました。

 
これまではMoco for LUFAというファームを使用してArduinoマイコンをMIDI機器化してMIDIでのマシン制御を楽しんでおりました。

ArduinoをUSB-MIDIデバイス化してDAWでLED目ん玉コントロール

 
ATmega32U4であればArduino IDEでLEDライブラリを使うような感覚でMIDIライブラリを簡単に使用することができます。

↓家にあったATmega 32u4搭載ボード Adafruit Feather 32u4 Bluefruit LEで試してみましたが、本当に簡単にMIDI制御を楽しめました。

 

ここではATmega32U4開発ボードを用いてMIDIコントローラでLEDやサーボモータを制御してみました。

 

 
 

構成

ATmega32U4開発ボードをUSB-MIDI機器化してでLEDとサーボモータを制御します。

部品

  • ATmega32U4開発ボード

      
  • サーボモータ MG995

     
  • 赤LED & 100 Ohm抵抗  

MIDIライブラリ

以下のATmega32U4とARMボード専用のArduino用MIDIライブラリを使用します。

マイコンをUSB-MIDI機器化してDAWやMIDIコントローラからnoteオンやコントロールチェンジ(CC)などのMIDI信号を取得したり出力したりすることができます。

非常にありがたく有用なライブラリでございます。ありがとうございます。

 

Arduinoコード

MIDIライブラリのサンプルコード MIDIUSB_read.ino を参考にプログラミングしました。

MIDIコントローラのチャンネルと数値を取得してLEDとサーボを操作します。
 LED:Ch1 Control mode change(0xB0)のデータ0でOFF、127でON
 サーボ:Ch1 Pitch wheel range(0xE0)のデータ0~127で制御

MIDI制御

DAWは Reason 10を使用しました。Reasonの外部MIDIインストゥルメントで”SparkFun Pro Micro”を選択します。

 
MIDIコントローラはKORG USB MIDIキーボード NANOKEY2を使用し、ボタンとスライダをわりふりました。

動作

MIDIコントローラって本当にいいコントローラで、音楽だけに使うのはもったいないです。

 

ATmega32U4のおかげでMIDIをもっと拡張し、生活をよりよくできそうです。

電子工作において物理コントローラを製作したりするのは大変で高価だったりするのでMIDIコントローラを気軽に利用できることは幸せなことです。

 

参考

温度センサ で 水温計 作製

0
0

我が家の金魚水槽の水温を管理したいとお母ちゃんがいうので、センサを購入しました。

3つも入っていて低価格!嬉しいですね。センサが3つも手に入ったのでまずはハンディー水温計を作製しました。

水槽の水替え時に適切な温度調整が必要とのことで作りました。

 

 

構成

防水の温度センサで水温を測ります。即手値をOLEDディスプレイし表示します。

 

SparkFun マイクロOLEDモジュール

本モジュールは64×48 ピクセルのOLED ディスプレイ SSD1306搭載しており、通信方式はI2CとSPIのいずれかを選択できます。

詳細は以下
 ・チュートリアル
 ・回路図

基板上のジャンパーの接続によって各種設定変更可能です。 

 

 

 

 

 

 

ここでは通信方式をI2C (BS1:1, BS2:0)としてアドレスを0x3C (D/C:0)にしました。

D0ピンがSCL、D1がSDAとなります。

温度センサ

温度センサにはDS18B20を使用します。購入品は防水加工され1mケーブルが接続されています。

DS18B20は9ビット~12ビットの温度測定分解能を有し、1-Wireで通信を行います。1本の信号線を電源にプルアップするだけで測定値を得ることができます。

参考

 

Arduinoコード

SparkfunのOLED用ライブラリを使用しております。
 https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library

温度センサDS18B20用のライブラリとして以下の2つ使用します。
 https://github.com/PaulStoffregen/OneWire
 https://github.com/milesburton/Arduino-Temperature-Control-Library

センサで取得した測定値をOLEDに表示します。

 
 

 

水替え時の水温調整に活用いただいております 🙂 。

次は水槽常設用の制作にとりかかります!

買ったほうが安いとかどうか言わないでほしい

回転計を自作

0
0

今年はなんだかバーサライタ制作に凝っているのです。

“キング・オブ・ダークネス” EVIL の魔法陣を自作

いろいろなマイコンでバーサライタを作ってみて、構成変えてみたりして表示分解能(LEDの羽が1周する間に点滅を変更する回数)を調べるのですが、そもそも回転速度自体も把握しないと真っ当な評価できないですよね。
回転遅ければ点滅回数なんていくらでも上げれるのですから。

分かってはいたのですが、バーサライタ自体の制作に夢中で手が回らず とりあえず新品に近い電池でモータ回して表示分解能を評価しておりました。

でも一歩踏み出して決めたのです。回転計を自作しよう!

 

 

構成

フォトリフレクタQTR-1Aで回転物を検出して時間を測ります。回転数(RPM)をOLEDディスプレイし表示します。

  • マイコン Adafruit Itsy Bitsy M0 Express

    このマイコンの詳細は以下に記載しております。
     https://homemadegarbage.com/eye-pendant
    I2CのSDA, SCLピンはプルアップ抵抗内蔵でないため抵抗を外付けする必要があります。
     
  • SparkFun マイクロOLEDモジュール

     
  • フォトリフレクタ QTR-1A

 

オモテ

 

ウラ

SparkFun マイクロOLEDモジュール

本モジュールは64×48 ピクセルのOLED ディスプレイ SSD1306搭載しており、通信方式はI2CとSPIのいずれかを選択できます。

詳細は以下
 ・チュートリアル
 ・回路図

基板上のジャンパーの接続によって各種設定変更可能です。 

 

 

 

 

 

 

ここでは通信方式をI2C (BS1:1, BS2:0)としてアドレスを0x3C (D/C:0)にしました。

D0ピンがSCL、D1がSDAとなります。

 

Arduinoコード

SparkfunのOLED用ライブラリを使用しております。
 https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library

フォトリフレクタの出力で割り込んで回転速度を計測しています。10周の時間を測ってRPMを導出しOLEDディスプレイに表示します。

 
 

動作

これでバーサライタの回転数を測ることができます!

更なるバーサライタの高みを目指したいと思います。正統なる分解能評価をこの手にして。

モーションセンサ MPU9250 の DMP 動作確認

0
0

以前、各種モーションセンサを比較してみたのですが

スマート靴占い 『 IしたoTんきになぁ〜れ 』

9軸センサMPU9250のDMP動作が確認できず断念しておりました。
DMP(Digital Motion Processor)とはモーションセンサMPUシリーズに内蔵された自身の姿勢角を算出する機能です。

今回はsparkfunのライブラリでMPU9250のDMP動作が確認できましたので記載します。

構成

sparkfunのMPU9250のDMPライブラリがARM Cortex-M0ベースの SAMD ファミリのみ対応だったのでマイコンはAdafruit Itsy Bitsy M0 Expressを使用しました。

部品

  • マイコン Adafruit Itsy Bitsy M0 Express

     
  • 9軸モーションセンサ MPU9250

MPU9250

6軸センサMPU6500(3軸加速度+3軸ジャイロ)と3軸コンパスAK8963を搭載した9軸モーションセンサです。

DMPライブラリとして以下を使用しました。
 https://github.com/sparkfun/SparkFun_MPU-9250-DMP_Arduino_Library

ARM Cortex-M0ベースの SAMDマイコンのみに対応しており、Arduino UNOなどには容量不足でコンパイルできません。。。

ライブラリのプログラム例 MPU9250_DMP_Quaternion を動作させてみました。

ただし26行目は以下のように修正しています。

 

いい感じにクォータニオンが得られています♪

Adafruit Itsy Bitsy M0 Express

Arduino M0シリーズで小さくてかわいいので購入してみました。

スイッチサイエンスのサイトによると、どのピンでもNeoPixel8000個以上を時間消費せずに点灯可能とか記載あるのですごそうですね。。。今度試してみます。

Arduino IDE用設定

以下を参考に実施しました。
 https://learn.adafruit.com/introducing-itsy-bitsy-m0/using-with-arduino-ide

Arduino IDEのボードマネージャで以下のパッケージをインストールします。

  • Arduino SAMD Boards (32-bits ARM Cortex-Mo+)

     
  • Adafruit SAMD Boards

 
インストール後に以下でボードを設定してコンパイルが可能になります。Win7と8はドライバインストールが必要です。

DMP動作確認

以下のMPU6050用のクォータニオンでグラフィック動かすProcessingプログラムを使用して、MPU9250のDMP動作を確認しました。
 https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/examples/MPU6050_DMP6/Processing/MPUTeapot/MPUTeapot.pde

Arduinoコード

MPU9250_DMP_Quaternion.inoを参考にプログラムしました。

クォータニオンをProcessing用に配列にして送信します。

動作

ProcessingのMPUTeapot.pdeを起動して、実行でMPU9250のDMPによって算出されたクォータニオンで飛行機がうごいきます。

USBポート設定はProcessingコード上でうまいこと実施してください(71行目)。

まとめ

やっとMPU9250でDMP動作が確認できました。オフセット調整などを手動でせずとも安定した姿勢角取得が確認できました。

やったーー!MPU9250はBNO055より安価ですので活用方法ひろがりそうですね!いまのところM0マイコンでしか動かせないが。。

導電布 EeonTex で モーションセンシンググローブ DigiTe

0
0

ずいぶん前に感圧導電布を購入したまま埃かぶってたので、手袋に貼り付けてモーションセンシングしてみました。

その名もモーションセンシンググローブ DigiTe(デジ手)。
 

構成

指の動きを感圧導電布で検出してBLEで信号送信し、PCで指の動きに応じた音声を再生します。

全体ブロック図

 

モーションセンシンググローブ DigiTe 回路図

部品

  • EeonTex 感圧導電布

  • 導電糸
  • BLE搭載マイコンAdafruit Feather 32u4 Bluefruit LE
  • リチウムイオンポリマー電池400mAh
  • 抵抗器 4.7kohm
  • ブレッドボード

     

手袋製作

感圧導電布を1cm×5cmほどに切って、配線ハンダ付け用に両端を導電糸で縫い付けて両面テープで手袋の指に貼り付けます。

 
指を曲げると圧力によって感圧導電布の両端の抵抗値が減少します。

 
同様に残りの指にも貼り付け。

 
ちょっと強引ですが、ブレッドボードも手袋に貼り付けてBLE搭載マイコンFeather 32u4と部品を載せて配線します。

 

Arduinoコード

Feather 32u4の詳細設定は以下のとおりです。

Blynk で BLE 制御ラジコン!

Feather 32u4用のBLEライブラリをインストールします。
 https://github.com/adafruit/Adafruit_BluefruitLE_nRF51

このライブラリのコード例 bleuart_datamode.ino を参考にプログラムしました。

マイコン起動時に各指の感圧導電布の初期抵抗を測定(指は伸ばした状態)し、曲げた際に30%抵抗が減少すると曲げられた指が検出されます。

指の動きが変化すると、伸びた指の数を算出しBLE送信します。
 

Node-RED設定

グローブからのBLE信号をPCで受けて音声出力させるためにNode-REDを使用しました。

以下のノードをインストールして使用しています。

ノードの設定

左から順に各ノードの設定について説明します。
 

Injectノード

次段のBLE入力ノードを起動するためのノードです。

ペイロードをJSONとして以下を入力します。

このノードを起動することで60秒間、グローブからのBLE信号を受信することができます。ずっと受信したいので、繰り返しを1分間で設定しています。
 

BLE入力ノード

BLEデータ受信用のノードです。グローブを起動した状態でダブルクリックして以下の編集ボタンをクリックします。

以下の”Select from scan result”をチェックして、Scan Resultで “Adafruit Bluefruit LE”を選択して”更新”をクリックします。

この状態でデプロイしてInjectノードを起動すると、グローブからのBLE信号を受信し続けます(ピリオドを無限にするやり方が分からなかった。。。)。
 

Functionノード -データパース-

以下のように入力し、BLE信号から指の数をパースします。

 

Functionノード -条件分岐-

以下のように入力し、指の数(1〜5)によって出力を分岐します。

 

audioノード

それぞれ再生するmp3データをパス込みで指定します。

ここではBLEデータ(指の数)が1のとき「いち」、2のとき「に」…と再生するようにしました。長女ちゃんの声を録音しました。
 

動作

応用してじゃんけんバージョンも

ちょっと試作感満載ですがモーションセンシンググローブができました。
まだまだ導電布たくさんあるし、なかなか使えるなぁ 🙄 。

曲げセンサより経済的だしね!

追記

18/8/22

Adafruit様のブログで紹介いただきました!