swerve が 2021年02月22日22時13分26秒 に編集
初版
タイトルの変更
夜起きてしまって時間を確認したいときに押すボタン
タグの変更
ATtiny
RTC
3Dプリンター
秋葉原2021
記事種類の変更
製作品
本文の変更
# 作ったもの オレンジ色の大きなボタンを押すとその時の時間の回数だけブザーが鳴るデバイス  # 動機 寝ている時に起きてしまったけれど今何時かが知りたい時ってありますよね?時間を確認した時に夜中だったり、起床時間までまだ時間があったら二度寝しますよね。 しかしながら暗い中でスマホや時計の明るい画面を見ると明るすぎて、目が痛くなったり、二度寝するには目が覚めすぎてしまうといった問題点があります。 そこで目を開けずに時間を確認するデバイスを製作しました。 # システム構成  ボタンが押さえたらRTCで取得した時刻を参照して、それに応じた回数のブザーが鳴ります。 # 回路構成 主な材料(入手先はあってるかは分かりませんが...) | 部品名 | 個数 | 備考 | |:---:|:---:|---| | ATtiny85-20PU | 1 | [入手先:秋月](https://akizukidenshi.com/catalog/g/gI-09573/) | | ICソケット 8ピン | 1 | [入手先:秋月](https://akizukidenshi.com/catalog/g/gP-00017/) | | DS1307使用リアルタイムクロック | 1 | [入手先:秋月](https://akizukidenshi.com/catalog/g/gK-15488/6/) | | 圧電スピーカー | 1 | [入手先:秋月](https://akizukidenshi.com/catalog/g/gP-04118/) | | XHコネクタ | 少々 | | | 三端子レギュレータ(5V) | 1 | | | ユニバーサル基板 | 1 | | | ボタン | 1 | | 回路図  # ハードウェア  設計はSolidWorksで行いました。 設計が終わったら3Dプリンターで印刷  基板と組み合わせるとこのようになりました。 側面にボタンがついており、これで電源のON/OFFを切り替えます。  # ソースコード ```arduino:ボタンが押されると時刻を取得し、時刻に応じてブザーから音を出すコード #include "RTClib.h" #define speaker 3 #define sw 1 #define ntone 350 #define htone 440 RTC_DS1307 rtc; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; void setup () { pinMode(speaker,OUTPUT); pinMode(sw,INPUT); Serial.begin(57600); if (! rtc.isrunning()) { Serial.println("RTC is NOT running, let's set the time!"); } rtc.adjust(DateTime(2020, 10, 31, 14, 24, 20));//最初にRTCの時刻をセットするとき以外はコメントアウト } void loop () { rtc.begin(); int i; int swp=0; delay(1000); DateTime now = rtc.now(); int hournum=0; int halfhour=0; hournum = now.hour(); swp==1; //swp=digitalRead(sw); if(swp==1){ if(hournum>12){ hournum=hournum-12; } else{ } if(hournum==0){ hournum=12; } else{ } if(now.minute()<45){ for(i=0;i<(hournum/4);i++){ tone(speaker,ntone); delay(500); tone(speaker,0); delay(50); } for(i=0;i<(hournum%4);i++){ tone(speaker,ntone); delay(100); tone(speaker,0); delay(50); } if(now.minute()>=15){ tone(speaker,htone); delay(100); tone(speaker,0); delay(50); } else{ } } else{ hournum=hournum+1; for(i=0;i<(hournum/4);i++){ tone(speaker,ntone); delay(500); tone(speaker,0); delay(50); } for(i=0;i<(hournum%4);i++){ tone(speaker,ntone); delay(100); tone(speaker,0); delay(50); } } delay(1000); } } ``` ブザーのなる回数は4進法で出力していて、12時間おきにリセットがかかっています。 # 完成した後での改良点、感想 9V電池を使用しましたが、容量が400mAh程度しかないらしく電池が持たないのでUSB給電にしたいですね。 # おわりに これで二度寝が捗ります。