回転計を自作
今年はなんだかバーサライタ制作に凝っているのです。
いろいろなマイコンでバーサライタを作ってみて、構成変えてみたりして表示分解能(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ディスプレイに表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include <Wire.h> #include <SFE_MicroOLED.h> // Include the SFE_MicroOLED library volatile int numRot = 0; volatile unsigned long rotTime[10], timeOld, timeNow, totalRotTime, rpm = 0; #define PIN_RESET 13 #define DC_JUMPER 0 MicroOLED oled(PIN_RESET, DC_JUMPER); // I2C declaration void setup() { Wire.begin(); oled.begin(); // Initialize the OLED delay(300); // Delay 1000 ms oled.clear(PAGE); // Clear the buffer. attachInterrupt(digitalPinToInterrupt(7), RotCount, FALLING ); oled.setFontType(0); } void loop(){ Serial.begin(115200); oled.clear(PAGE); oled.setCursor(0, 0); oled.println("RPM"); //Serial.println(totalRotTime); rpm = 60000000/totalRotTime * 10; oled.println(rpm); oled.display(); // Draw to the screen delay(100); // Delay 1000 ms } void RotCount() { timeNow = micros(); rotTime[numRot] = timeNow - timeOld; timeOld = timeNow; numRot++; //Serial.println(numRot); totalRotTime = 0; for(int i = 0; i < 10; i++){ totalRotTime += rotTime[i]; } if(numRot == 10) numRot = 0; } |
動作
バーサライタ制作にまじめに向き合うために回転計をこしらえました。#adafruit #Pololu #Sparkfun pic.twitter.com/gEwVFhtlOD
— HomeMadeGarbage (@H0meMadeGarbage) 2019年5月18日
これでバーサライタの回転数を測ることができます!
更なるバーサライタの高みを目指したいと思います。正統なる分解能評価をこの手にして。