工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

部品と材料

部品数量備考
Arduino Nano Every1コンパクトで低消費電力。他のArduino互換ボードでも可
DS3231クロックモジュール1
HC-SR501 PIRモーションセンサー1前方の動きを検知してトリガー
ブザー(5Vピエゾ)1

アプリとオンラインサービス

プロジェクト概要

ベッドから出るのは至難の業。このモーションアクティブアラームクロックは、スヌーズ後に動きを検知することで、あなたを確実に起こし続けます。ベッドに戻るとアラームがリセットされ、設定時間だけ起き続けることを強制します。

組み立て

以下の部品を用意:

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

配線

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

コード

CodeセクションからDS3231ライブラリZIPをダウンロードし、Arduino IDEの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」で追加。

以下のスケッチをアップロード。初回アップロード後、日時設定行をコメントアウトしてRTCがリセット時も正しい時刻を保持するようにします。

#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7;
int pirValue;
int set_hour = 7;
int set_minute = 0;

void setup() {
  clock.begin();
  pinMode(button, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  // clock.setDateTime(__DATE__, __TIME__); // 初回アップロード後はコメントアウト必須
  pinMode(pirPin, INPUT);
}

void alarm(int minute){
  bool button_pressed = false;
  bool awake = false;
  bool movement = false;
  
  while(!button_pressed){
    for(int i = 0; i < 4; i++){
      tone(11, 523, 100);
      delay(100);
      tone(11, 784, 50);
      for(int i = 0; i < 20; i++){
        if(digitalRead(button) == LOW){
          button_pressed = true;
          awake = true;
          dt = clock.getDateTime();
          minute = dt.minute;
        }
        delay(65);
      }
    }
  }
  
  dt = clock.getDateTime();
  minute = dt.minute;
  
  while(awake){
    movement = false;
    dt = clock.getDateTime();
    for(int i = 0; i < 30; i++){
      if(digitalRead(pirPin)){ movement = true; }
    }
    digitalWrite(LED_BUILTIN, movement);
    
    if(!pirValue){
      delay(5000);
      for(int i = 0; i < 40; i++){
        if(digitalRead(pirPin)){ movement = true; }
      }
      if(!movement){
        alarm(minute); // 長時間動きがなければアラーム再開
      }
    }
    
    if(abs(dt.minute - minute) >= 1){
      tone(11, 698, 50);
      delay(100);
      tone(11, 698, 50);
      digitalWrite(LED_BUILTIN, 0);
      awake = false;
    }
    delay(100);
  }
}

void loop() {
  dt = clock.getDateTime();
  if(set_minute == dt.minute && set_hour == dt.hour){
    alarm(set_minute);
  }
  delay(10000);
}

センサー調整

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

HC-SR501をリピータートリガーモードに設定(ジャンパー位置を調整)。

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計
スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

感度を最大、遅延を最小に設定が最適:あなたの動きを確実に検知しつつ、ベッドに戻った際に見逃さないバランスです。

コンパクト化

ブレッドボードで動作確認後、部品をArduino Nano Everyにはんだ付けしてポケットサイズに。

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

3mmバルサ材(55×35×40mm)で軽量ケースを自作。PIRセンサー用大開口、micro-USBスロット、ブザー用開口を設けています。

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計
スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計
スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計
スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

完成品:

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計
スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計
スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

コード

アラームクロックArduinoコード

#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7;
int pirValue;
int set_hour = 7;
int set_minute = 0;

void setup() {
  clock.begin();
  pinMode(button, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  // clock.setDateTime(__DATE__, __TIME__); // !!初回アップロード後は必ずコメントアウト!!
  pinMode(pirPin, INPUT);
}

void alarm(int minute){
  bool button_pressed = false;
  bool awake = false;
  bool movement = false;
  
  while(!button_pressed){
    for(int i = 0; i < 4; i++){
      tone(11, 523, 100);
      delay(100);
      tone(11, 784, 50);
      for(int i = 0; i < 20; i++){
        if(digitalRead(button) == LOW){
          button_pressed = true;
          awake = true;
          dt = clock.getDateTime();
          minute = dt.minute;
        }
        delay(65);
      }
    }
  }
  
  dt = clock.getDateTime();
  minute = dt.minute;
  
  while(awake){
    movement = false;
    dt = clock.getDateTime();
    for(int i = 0; i < 30; i++){
      if(digitalRead(pirPin)){ movement = true; }
    }
    digitalWrite(LED_BUILTIN, movement);
    
    if(!pirValue){
      delay(5000);
      for(int i = 0; i < 40; i++){
        if(digitalRead(pirPin)){ movement = true; }
      }
      if(!movement){
        alarm(minute);
      }
    }
    
    if(abs(dt.minute - minute) >= 1){
      tone(11, 698, 50);
      delay(100);
      tone(11, 698, 50);
      digitalWrite(LED_BUILTIN, 0);
      awake = false;
    }
    delay(100);
  }
}

void loop() {
  dt = clock.getDateTime();
  if(set_minute == dt.minute && set_hour == dt.hour){
    alarm(set_minute);
  }
  delay(10000);
}

クロックライブラリ

DS3231ライブラリのZIPファイル。ダウンロードしてArduino → スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストールで追加。プレビューなし(ダウンロードのみ)。

回路図

Arduinoの5Vをブレッドボードのプラスレール、GNDをマイナスレールに接続。

スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計 スマートモーションアラームクロック:二度寝を防ぐ動作検知型目覚まし時計

製造プロセス

  1. DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
  2. 成功と安全なパンチング操作のための必須要因
  3. 平面研削性能に影響する重要因子
  4. CNC旋盤:オールインワン精密ツール
  5. 高精度製造に不可欠な横形マシニングセンタ(HMC)
  6. 旋盤用ショートバーフィーダー選定ガイド:生産効率・材料歩留まり・設置スペースの最適解
  7. ボーリングマシンの精密加工におけるメリットと仕様を徹底解説
  8. ダイレクトウォーターポンプが循環システムに与える影響
  9. インサートエンドミル完全ガイド:効率と性能を最大化
  10. SICK、IO-Link on PLC実践トレーニングでインダストリー4.0への第一歩を支援
  11. NEVSのトロルヘッタンでの革命的カーシェアリング構想:モビリティの新時代