popup mlv

作ったり、買ったり、遊んだり。

Arduinoで手洗い用20秒タイマーを作ってみた

f:id:popupin0x0:20200416160258j:plain Arduinoで手洗い用20秒タイマーを作ってみた話です。

きっかけは手洗いは20秒すればいいというネタを見たからです。防水のスマートフォンも石鹸であらってあげるといいです。

www.unicef.or.jp

www.bbc.com

とりあえず動くかサンプルを使って確かめてみましょう。まずはLCDの動作を確認してみましょう。これはA1602というものです。

f:id:popupin0x0:20200414200716j:plain

次は超音波センサーの動作確認です。実は2つのサンプルをくっつけるとなんとピンが被らずに動作させることができます。もう私のやることは殆どありません。もうすこし超音波センサーのことを書くと最短距離は2cmなので便利です。センサーの反応を10cmほどにすればいいと思います。

f:id:popupin0x0:20200414200704j:plain

完成?

ということで2つのコードをスパゲティーにしたらforとifをトッピングして完成です。なんとも雑な感じですが動けばいいのです。動作はtwitterに乗せておきます。10cm未満に手をかざしたら20秒カウントしてくれます。20秒数えるのが面倒なので作ったのですが洗面所に置けないので意味がありません。ハッピーバースデーを2回歌うと20秒です。

f:id:popupin0x0:20200414200508j:plain

#include <LiquidCrystal.h>

LiquidCrystal lcd( 4, 6, 10, 11, 12, 13 );
double value = 0;

void setup() {
  
  // LCD 初期化
  lcd.begin( 16, 2 );
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Hello, world!");

  // 超音波センサー
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(3, LOW);
  delayMicroseconds(2);
  digitalWrite(3, HIGH );
  delayMicroseconds(10);
  digitalWrite(3, LOW);
 
  value = pulseIn(2, HIGH);
  value = value / 2 * 340 * 100 / 1000000;
 
  Serial.println(value);
  delay(500);
  // LCD, センサー テスト
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(value);

  // 規定以下の距離になったらカウント
  if (value < 10) {
    s20();
    }
}

void s20(){
  // 20秒カウント 手でも洗え
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Start!");
  delay(2000);
  // 20秒カウント
  for (int i=20; i >= 0; i--){
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(i);
    }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Complete!");
  delay(2000);
}

完成!

実は前回のものまでで完成として役に立たないので私の誕生月ということで一人寂しくハッピーバースデー2回歌えばちょうど20秒ということで締めくくろうと思ったのですがいいものができました。今回は大きくて邪魔なLCDをなくしてビープ音にしました。私は歯磨きのときに30秒タイマーを使って4区分して歯磨きをしているのですが歯ブラシに内蔵されていて振動でわかるようになっているのです。ということでこっちのほうがいいかなと思いました。実際今も使っています。

f:id:popupin0x0:20200416160654j:plain

少し解説をするとセンサーは制度は良く誤作動もしません。寝ているときにご作動した場合はうるさいので少し厳しく3回の平均を取ることにしました。

f:id:popupin0x0:20200416160258j:plain

double value = 0;

// 音の長さを指定
int melo = 200;
// ブザーを接続したピン番号
int pin = 13;

void setup() {
  
  // 超音波センサー
  // Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
}

void loop() {
  // 平均した距離を出力 countの回数だけ平均
  int count = 3;
  int value_add = 0;
  for (int i=0; i <= count - 1; i++) {
    // 超音波センサー
    digitalWrite(3, LOW);
    delayMicroseconds(2);
    digitalWrite(3, HIGH );
    delayMicroseconds(10);
    digitalWrite(3, LOW);
    value = pulseIn(2, HIGH);
    value = value / 2 * 340 * 100 / 1000000;
    // Serial.println(value);
    value_add += value;
    delay(100);
    }
  value_add = value_add / count;
  // Serial.println(value_add);
  // 規定以下の距離になったらカウント 例10cm
  if (value_add < 10) {
    s20();
    }
}

void s20(){
  // 20秒カウント 手でも洗え
  // ド 音がなっている間待機
  tone(pin,262,melo);
  delay(melo);
  // 20秒カウント
  for (int i=0; i <= 20; i++){
    delay(1000);
    if(i == 10){
      // 2回鳴らす
      tone(pin,262,100);
      delay(100);
      delay(20);
      tone(pin,262,100);
      delay(100);
      }
    }
  // 終了
  tone(pin,262,500);
  delay(500);
}

さいごに

中古で買ったカメラがやたらといい匂いだったんですよね。なんと、ビオレの匂いでした。

f:id:popupin0x0:20200402005120j:plain

コンテイジョン(吹替版)

コンテイジョン(吹替版)

  • 発売日: 2013/11/26
  • メディア: Prime Video

参考

iot.keicode.com

yoshipc.net

fabkura.gitbooks.io