7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

M5Stack と Smart Node でポモドーロタイマー作ってみた

Last updated at Posted at 2018-12-12

はじめに

この記事はM5Stack Advent Calendar 2018の11日目の記事です。
個人的に予定が間に合わず、実際に公開する日は12/12になってしまいました。すいません。
今回M5StackのモジュールであるSmart Nodeを購入したので、それを使ってみたという話です。

M5Stackとは

簡単に説明すると、Wi-FiとBLEとディスプレイとMicroSDスロットとボタンとバッテリーなどが入っている 5000円程度のマイクロコントローラで、Arduino IDEを使って開発ができます。

アドベントカレンダーなので、ここでは詳しい説明は省略させていただきます。下記など参照ください。
Switch Science - M5Stackであそぼう

色々搭載されているので、本体だけでも面白いものが作れるのですが、ユーザーが拡張できるようになっています。
2018年に日本に入ってきてから、毎月のようにどんどん拡張モジュールなどが発売されています。

500-2000円ほどお金を出せば、人感センサーやGPSや温度センサーなどが使えるようになります。

日本で購入する場合はSwitch-Scienceから、中国から直接購入する場合はAliExpressの公式ストアから購入できます。

自分は秋月やセンサーや部品なども色々接続して今まで勉強がてら作ってきました。

まず最初に作ったのがデジタル名刺

それと、簡易測距計

今回買ったモジュール

そんな感じで、アイデアと部品さえ揃ってしまえば、デッサンをするように動くプロトタイプが作れるM5Stackですが、今回新しいモジュールを購入しました。

以下スペック。

  • NeoPixel 12個
  • マイク2つ,
  • 赤外線LED4つ
  • 赤外線受光部1つ
  • バッテリー 500mAh
  • スピーカー1つ
  • 温度/湿度センサー(DHT12)

価格: 2000程度

今流行りのスマートスピーカーやスマートリモコンが自作できそうな拡張モジュールです。

これを買って、年内に色々スマートリモコンや自作スマートスピーカーなど作りたいなと思っていたのですが、なかなか時間が取れず、今回はNeoPixelの部分を使ってみました。

作りたいもの

プロジェクト - スケッチ 1.jpg

自分は普段から集中力が持たない性格なので、作業をする時はポモドーロテクニックという25分作業して、5分作業を中断して休むという方法で集中力を保っています。
普段はiPhoneアプリか、Mac/PCのポモドーロタイマーのアプリで測って作業しているのですが、

  • iPhoneやPCの画面をそのために使いたくない
  • ちょうどよい感じにカスタマイズしたい

という思いがあり、自作ポモドーロタイマーを作りたいとつくづく思っていました。

最終的には、赤外線リモコンのパターンを Arduino IRremoteなどのライブラリを使って、部屋のライトを若干雰囲気を変えるとか、スマホに通知だけ送るとか、自分用Slackに活動記録として投げたいと思っています。

今回はこのタイマー表示部分をSmart nodeで作ってみました。

できたもの

単純にSmart nodeのLEDのリングの部分を使って、時間がなんとなく分かるようになっています。
動画は短縮版の30秒です。

ソースコード

#include <NeoPixelBus.h>

#include <WiFi.h>

const uint16_t PixelCount = 12; // this example assumes 4 pixels, making it smaller will cause a failure
const uint8_t PixelPin = 15;  // make sure to set this to the correct pin, ignored for Esp8266

#define colorSaturation 128

NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

RgbColor red(colorSaturation, 0, 0);
RgbColor blue(0, 0, colorSaturation);


RgbColor black(0);

float pomodoro_max_minutes = 25;

void LEDAnimation(RgbColor color){
    for(int i = 0; i < 12; i++ ){
        for(int j = 0; j < 12; j++ ){
            strip.SetPixelColor(j, black);
        }
        strip.SetPixelColor(i, color);
        strip.Show();
        delay(100);
    }
}

void setup()
{
    
    Serial.begin(115200);
    delay(2000);
    Serial.println();
    Serial.println("Initializing...");
    Serial.flush();

    // this resets all the neopixels to an off state
    strip.Begin();
    strip.Show();

    LEDAnimation(blue);
    
    Serial.println();
    Serial.println("Running...");
    timer_millis_start = millis();
    for(int i = 0; i < 12; i++ ){
        strip.SetPixelColor(i, black);
        strip.Show();
    }
}

void loop(){
    float minutes = (float)(millis() - timer_millis_start ) / 1000 / 60;
    int LED_number = minutes / (float)pomodoro_max_minutes * 12.0;

    Serial.print(minutes);Serial.print(",");Serial.print(LED_number);Serial.print("\n");

    if(minutes < pomodoro_max_minutes){
        for(int i = 0; i < LED_number; i++ ){
            strip.SetPixelColor(i, red);
            strip.Show();
        }
    }   
    else{
        while(true){
            LEDAnimation(red);
        }
    }
    delay(500);
}

本当はNTPで時刻取得などして、外部のサービスなどに記録するのを考えていたのですが、時間の関係でLEDの表示部分だけ実装して動いてる雰囲気だけ確認してみました。

Firebaseとかで、Webページから設定したり、タイマースタートしたり、活動記録見れたら面白いなと思っています。
今後、なにか思いついたらまた実装してみます。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?