modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

M5StickCPlusとリレーユニット

M5Stack用ミニリレーユニットを使った際のメモ

モノ

サンプルコード

github.com

スケッチサンプル:M5Stack -> Unit -> RELAY

コード

Grove接続なので、G32を使用

動作確認

NO端子に接続しているので、HIGHで点灯

M5StickC Plusで加湿器を自動化する

ENV.II Hatで湿度を計測し、IR Unitで加湿器を動作させ、室内の湿度を一定に保つ。

参考

modalsoul.hatenablog.com

modalsoul.hatenablog.com

modalsoul.hatenablog.com

仕様

  • 湿度は40~60%に保つ1
  • 加湿器の電源操作はオン・オフ同一コマンドでトグルスイッチになっている
  • 5分間隔で計測し、
    • 湿度が下限を下回った場合、かつ、前回計測時を下回っている場合、加湿器をスイッチ・オン
    • 湿度が上限を上回った場合、かつ、前回計測時を上回っている場合、加湿器をスイッチ・オフ
    • 湿度が適正範囲外、かつ、湿度変化がないケースは考慮しない

コード

M5Stack用赤外線送受信ユニットでリモコンの送信

赤外線リモコンのコマンドをM5StickC Plusで送信するために、M5Stack用赤外線送受信ユニットを使った際のメモ

受信はこちら modalsoul.hatenablog.com

ライブラリ

github.com

サンプル

IRremote -> IRsendDemo を参照

コード

#include <M5StickCPlus.h>
#include <IRremote.h>

// int ir_send_pin = 32; // IR Unit
int ir_send_pin = 9; // M5StickC Plus

IRsend irsend(ir_send_pin);

unsigned long POWER = 0x00ff00ff;

void setup()
{
}

void loop() {
    for (int i = 0; i < 3; i++) {
        irsend.sendNEC(POWER, 32);
        delay(40);
    }
    delay(5000); //5 second delay between each signal burst
}

Grove接続のIR Unitを使う場合はG32。M5StickC Plus本体の場合はG9。

※ 送信可能な距離はIR Unitで1m、本体で30cmくらいが限界。

プロトコルにあったメソッドを使用する。

今回はNECなのでsendNECで、第1引数にHEX値、第2引数にbit数を指定

M5Stack用赤外線送受信ユニットでリモコンの受信

赤外線リモコンの送信パターンを調べるために、M5Stack用赤外線送受信ユニットを使った際のメモ

モノ

www.switch-science.com

ライブラリ

github.com

サンプル

IRremote -> IRrecvDump を参照

コード

Grove接続なので赤外線受信はG33を使用。

起動後、赤外線受信部分にリモコンの赤外線を照射。読み取った赤外線を送信するには、プロトコルとHEX値、bit数がわかればOK。

f:id:modal_soul:20210103000020j:plain

この例だと、プロトコルNEC、HEX値は0x1a35da2、bit数は32bit

M5StickC ENV II Hatで温度、湿度、気圧、磁界を計測

M5StickC Plusの上部にある8ピンに接続できる環境センサモジュールで計測した際のメモ

モノ

Hat

www.switch-science.com

今回はこちらのHatタイプを使用

Grove

Grove接続するタイプ。組み込まれているセンサ類は↑のHatと同じ。

ライブラリ

Adafruit_BMP280

github.com

BMP280を使うためのライブラリ。気圧を計測する場合必要。

温度・湿度のみ計測したいのでなくてもよかったが、サンプルコードを動かすためにインストールした

サンプルコード

github.com

M5StickCでENV II Hatを動かすサンプルコード

コード

サンプルコードをM5StickC Plus用に修正したもの

M5StickC.h -> M5StickCPlus.hに変えただけ

M5StickC Plus + M5Stack用指紋センサユニットで指紋認証

M5StickC PlusとFINGER UNIT(FPC1020A)の覚書

f:id:modal_soul:20201228001133j:plain

モノ

M5StickC Plus

FINGER UNIT

www.switch-science.com

Groveケーブルで接続するタイプ。今回はこちらを使用。

FINGER HAT

www.switch-science.com

Hatモジュールタイプ。FPC1020SC

環境構築

IDEインストール

Arduino IDEを使用

https://www.arduino.cc/en/softwarewww.arduino.cc

ライブラリインストール

M5StickC Plus

github.com

M5Stack

github.com

ボードマネージャーインストール

ESP32ボードマネージャーインストール

https://dl.espressif.com/dl/package_esp32_index.json

コード

M5Stack -> Unit -> FINGER_UNIT_FPC1020Aのサンプルを参考

使用するPINを変更すればFINGER HATでも同じく動作を確認できた。

トラブルシュート

指紋を登録してもuserNumが1固定になり、Matchingにも失敗する事象が発生した。

setup で登録済みのすべてのユーザー情報を消去することで、登録・Matchingに成功した。

LeetCode 12. Integer to Roman

LeetCode Problem No.12.

No.11 is here.

modalsoul.hatenablog.com

12. Integer to Roman

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.

Example 1

Input: 3
Output: "III"

Example 2

Input: 4
Output: "IV"

Example 3

Input: 9
Output: "IX"

Example 4

Input: 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.

Example 5

Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

Code

object Solution {
  def intToRoman(num: Int): String = {
    def toRoman(i:String, v:String, x:String, n:Int) = {
      if(n == 4) i+v else if(n == 9) i+x else if(n < 4) i*n else v + (i * (n%5))
    }
    val i = toRoman("I", "V", "X", num%10)
    val x = toRoman("X", "L", "C", num%100/10)
    val c = toRoman("C", "D", "M", num%1000/100)
    val m = "M" * (num%10000/1000)
    m+c+x+i
  }
}

Methods

D: 1, 10, 100
I: D
V: 5*D
X: 10*D
  • In case n < 4, I by n
  • In case n = 4, V
  • In case n > 4, V and I by n%5
  • In case n = 9, IX

Results

Runtime: 480 ms, faster than 76.19% of Scala online submissions for Integer to Roman. Memory Usage: 49 MB, less than 100.00% of Scala online submissions for Integer to Roman.