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

DS1302RTCを備えたシンプルな目覚まし時計

コンポーネントと消耗品

>
リアルタイムクロック(RTC)
× 1
ブザー
× 1
Adafruit標準LCD-16x2白地に青
× 1
Arduino UNO
× 1

このプロジェクトについて

みなさん、こんにちは。このプロジェクトでは、ArduinoUNOボードを使って簡単な目覚まし時計を作ろうと思います。このプロジェクトは、以前に使用したさまざまなモジュールを組み合わせたものです。何かに悩まされている場合は、モジュールチュートリアルのウェブサイトで確認できます。これは、私が通常行う方法であるためです。個別に作業を行ってから、混合を開始します。 :D

このプロジェクトでは、次のものが必要になります。

  • Arduino UNOボード、または自分に合ったものを使用できます:
  • DS1302 RTCモジュール:
  • 4 * 4マトリックスキーパッドモジュール:
  • LCD I2C画面:
  • ブザーモジュール、または2ピンブザー:

何かに行き詰まっている場合は、上記のモジュールに関するこれらの以前のチュートリアルを確認できます:

キーパッド+ Arduino + LCDを使用してDS1302RTCモジュールをセットアップする方法

ArduinoボードとLCD画面でDS1302RTCモジュールを簡単に使用する方法

Arduino LCDI2Cの簡単な使用とシリアルモニターからの直接書き込みArduinoLCDI2Cの簡単な使用とシリアルモニターからの直接書き込み

Arduino uno + 4×4キーパッドマトリックス+ LCDi2c画面

Arduinoでブザー/ピエゾスピーカーを使用する方法

配線:

<図>

ライブラリとコード:

LCD i2cライブラリこれを選択するか、独自にダウンロードすることができます

キーパッドライブラリまたはArduinoIDEからダウンロードできます

RTC DS1302virtuabotixライブラリ

コード:

コードをダウンロード

コードの機能は非常に簡単です。モジュールを配線した後、「*」を押してDS1302 RTCの日時を設定できます。アラームを設定する場合は、「A」を押して現在の日時がディスプレイに表示されます。時間と分を設定できます。また、時間の前に「B」を押すか、呼び出し中にボタンを押すと、非アクティブにできます。

私はあなたがそれを気に入ってくれることを願っています、あなたが私に連絡することができるどんな問題でも。

コード

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.ino Arduino
UNO + RTC DS1302 + LCD i2c + 4x4キーパッドで動作します
(いくつかの問題を解決するために2018年12月4日に行われた主要な変更)
 //このコードはDS1302RTCモジュール+4 * 4キーパッド+ LCD i2c + Arduino +ブザーで使用する//モジュールを配線した後、LCDはデフォルトの日付と時刻または前に設定されたものを表示する//このプロジェクトの目的は、キーパッドからRTCモジュールを設定し、保存されたままにすることです//次に、画面に表示し、設定した後にalarm.//詳細については、Surtrtech.comまたはSurtrTechyoutubeチャネルを参照してください#include  //必要なライブラリ#include  #include  #include  #define I2C_ADDR 0x27 // LCD i2c stuff#define BACKLIGHT_PIN 3#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7LiquidCrystal_I2C lcd(I2C_ 、D5_pin、D6_pin、D7_pin); virtuabotixRTC myRTC(2、3、4); // RTCの配線(CLK、DAT、RST)//配線を変更する場合は、ここのピンも変更しますconst byte numRows =4; //キーパッドの行数constbyte numCols =4; //キーパッドの列数//キーマップは、キーパッドに表示されるのと同じように、行と列に従って押されるキーを定義しますkeymap [numRows] [numCols] ={{'1'、 '2'、 '3'、 ' A '}、{' 4 '、' 5 '、' 6 '、' B '}、{' 7 '、' 8 '、' 9 '、' C '}、{' * '、' 0 '、' # '、' D '}}; byte rowPins [numRows] ={12,11,10,9}; //行0から3 //ピンを変更する場合は、このtoobyte colPins [numCols] ={8,7,6,5};を変更する必要があります。 //列0〜3int i1、i2、i3、i4; char c1、c2、c3、c4; char keypressed、keypressedx; int A_hour =NULL; int A_minute =NULL; int AlarmIsActive =NULL; int buzzer =13; Keypad myKeypad =Keypad(makeKeymap(keymap)、rowPins、colPins、numRows、numCols); void setup(){Serial.begin(9600); lcd.begin(16,2); // LCDを初期化しますlcd.setBacklightPin(BACKLIGHT_PIN、POSITIVE); lcd.setBacklight(HIGH); lcd.home(); } void loop(){while(keypressed ==NO_KEY){//キーが押されていない限り、日付と時刻を表示し続けるので、数字が混乱しないように毎回画面をクリアする必要があります//そして、画面が正しく表示されるように、その少しの遅延を追加する必要があります。そうしないと、うまくいきませんでした。keypressed=myKeypad.getKey(); lcd.clear(); //ここで、LCDをクリアした後、モジュールから時間を取り、通常のLCD関数myRTC.updateTime();を使用して画面に出力します。 if(myRTC.hours ==A_hour &&myRTC.minutes ==A_minute &&AlarmIsActive ==1 &&myRTC.seconds> =0 &&myRTC.seconds <=2){while(keypressedx ==NO_KEY){tone(buzzer、1000); //トーンを変更したり、独自のサウンド遅延を作成したりできます(100);トーン(ブザー、2000); delay(100); lcd.clear(); lcd.print( "起きて!!!"); //アラームが鳴っているときに表示するメッセージkeypressedx =myKeypad.getKey(); }} keypressedx =NO_KEY; noTone(ブザー); lcd.setCursor(0,0); lcd.print(myRTC.dayofmonth); lcd.print( "/"); lcd.print(myRTC.month); lcd.print( "/"); lcd.print(myRTC.year); lcd.setCursor(0,1); lcd.print(myRTC.hours); lcd.print( ":"); lcd.print(myRTC.minutes); lcd.print( ":"); lcd.print(myRTC.seconds); delay(100); } if(keypressed =='*')//押されたキーを毎回チェックするので、 "*" {lcd.clear();を押した場合にのみセットアップに進みます。 lcd.print( "セットアップ"); delay(1000); lcd.clear(); lcd.print( "セットアップ年"); //これがどのように機能するかを理解できます。最初に「setup」が表示され、次に「setup year」が出力され、通常どおりに年を書き込むことができます(2-0-1-8)//自動的に設定に渡されます月...終了するまで//キーパッドのキーはすべてcharと見なされるため(c)、intに変換してから保存します(i)//計算を行い、年を取得します。月... intとしてRTCに注入できるようにしないとコンパイルされません// 4月のような月は3月に04、03と書く必要があります...それ以外の場合は次のパラメータに渡されません// RTC virtuabotixライブラリは、奇妙な日時(45/17/1990)(58:90:70)を受け入れないようにすでに設定されており、はい、古い日付はエラーと見なされますchar keypressed2 =myKeypad.waitForKey(); if(keypressed2!=NO_KEY &&keypressed2!='*' &&keypressed2!='#' &&keypressed2!='A' &&keypressed2!='B' &&keypressed2!='C' &&keypressed2!='D'){ c1 =keypressed2; lcd.setCursor(0、1); lcd.print(c1); } char keypressed3 =myKeypad.waitForKey(); if(keypressed3!=NO_KEY &&keypressed3!='*' &&keypressed3!='#' &&keypressed3!='A' &&keypressed3!='B' &&keypressed3!='C' &&keypressed3!='D'){ c2 =keypressed3; lcd.setCursor(1、1); lcd.print(c2); } char keypressed4 =myKeypad.waitForKey(); if(keypressed4!=NO_KEY &&keypressed4!='*' &&keypressed4!='#' &&keypressed4!='A' &&keypressed4!='B' &&keypressed4!='C' &&keypressed4!='D'){ c3 =keypressed4; lcd.setCursor(2、1); lcd.print(c3); } char keypressed5 =myKeypad.waitForKey(); if(keypressed5!=NO_KEY &&keypressed5!='*' &&keypressed5!='#' &&keypressed5!='A' &&keypressed5!='B' &&keypressed5!='C' &&keypressed5!='D'){ c4 =keypressed5; lcd.setCursor(3、1); lcd.print(c4); } i1 =(c1-48)* 1000; //押されたキーは文字に格納されます私はそれらをintに変換し、次にいくつかの乗算を行ってコードをxxxxのintとして取得しましたi2 =(c2-48)* 100; i3 =(c3-48)* 10; i4 =c4-48; int N_year =i1 + i2 + i3 + i4; delay(500); lcd.clear(); lcd.print( "セットアップ月"); //////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey(); //ここでは、4桁を入力するまですべてのプログラムが停止し、上記のコードと比較されますif(keypressed6!=NO_KEY &&keypressed6!='*' &&keypressed6!='#' &&keypressed6!='A' &&keypressed6 !='B' &&keypressed6!='C' &&keypressed6!='D'){c1 =keypressed6; lcd.setCursor(0、1); lcd.print(c1); } char keypressed7 =myKeypad.waitForKey(); if(keypressed7!=NO_KEY &&keypressed7!='*' &&keypressed7!='#' &&keypressed7!='A' &&keypressed7!='B' &&keypressed7!='C' &&keypressed7!='D'){ c2 =keypressed7; lcd.setCursor(1、1); lcd.print(c2); } i1 =(c1-48)* 10; i2 =c2-48; int N_month =i1 + i2; delay(500); lcd.clear(); lcd.print( "セットアップ日"); ////////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey(); //ここでは、4桁を入力するまですべてのプログラムが停止し、上記のコードと比較されますif(keypressed8!=NO_KEY &&keypressed8!='*' &&keypressed8!='#' &&keypressed8!='A' &&keypressed8 !='B' &&keypressed8!='C' &&keypressed8!='D'){c1 =keypressed8; lcd.setCursor(0、1); lcd.print(c1); } char keypressed9 =myKeypad.waitForKey(); if(keypressed9!=NO_KEY &&keypressed9!='*' &&keypressed9!='#' &&keypressed9!='A' &&keypressed9!='B' &&keypressed9!='C' &&keypressed9!='D'){ c2 =keypressed9; lcd.setCursor(1、1); lcd.print(c2); } i1 =(c1-48)* 10; i2 =c2-48; int N_day =i1 + i2; delay(500); lcd.clear(); lcd.print( "セットアップ時間"); //////////////////////////////////////// ////////////////////////////////////////////:char keypressed10 =myKeypad。 waitForKey(); //ここでは、4桁を入力するまですべてのプログラムが停止し、上記のコードと比較されますif(keypressed10!=NO_KEY &&keypressed10!='*' &&keypressed10!='#' &&keypressed10!='A' &&keypressed10 !='B' &&keypressed10!='C' &&keypressed10!='D'){c1 =keypressed10; lcd.setCursor(0、1); lcd.print(c1); } char keypressed11 =myKeypad.waitForKey(); if(keypressed11!=NO_KEY &&keypressed11!='*' &&keypressed11!='#' &&keypressed11!='A' &&keypressed11!='B' &&keypressed11!='C' &&keypressed11!='D'){ c2 =keypressed11; lcd.setCursor(1、1); lcd.print(c2); } i1 =(c1-48)* 10; i2 =c2-48; int N_hour =i1 + i2; delay(500); lcd.clear(); lcd.print( "セットアップ分"); //////////////////////////////////////// ////////////////////////////////////////////:char keypressed12 =myKeypad。 waitForKey(); //ここでは、4桁を入力するまですべてのプログラムが停止し、上記のコードと比較されますif(keypressed12!=NO_KEY &&keypressed12!='*' &&keypressed12!='#' &&keypressed12!='A' &&keypressed12 !='B' &&keypressed12!='C' &&keypressed12!='D'){c1 =keypressed12; lcd.setCursor(0、1); lcd.print(c1); } char keypressed13 =myKeypad.waitForKey(); if(keypressed13!=NO_KEY &&keypressed13!='*' &&keypressed13!='#' &&keypressed13!='A' &&keypressed13!='B' &&keypressed13!='C' &&keypressed13!='D'){ c2 =keypressed13; lcd.setCursor(1、1); lcd.print(c2); } i1 =(c1-48)* 10; i2 =c2-48; int N_minutes =i1 + i2; delay(500); lcd.clear(); myRTC.setDS1302Time(22、N_minutes、N_hour、1、N_day、N_month、N_year); // RTCモジュールに値に転送する日付と時刻の設定が完了したら// 22は秒を表し、必要に応じて設定を追加することもできます// 1は曜日を表します。画面に表示しない限り、変更しませんkeypressed =NO_KEY; //「*」キーは「keypressed」に保存されるので、その値を削除します。そうしないと、セットアップに戻ります} //////////////////// /////////////////////アラーム設定/////////////////////////// ////// if(keypressed =='A'){lcd.clear(); lcd.print( "アラーム設定"); delay(1000); lcd.clear(); lcd.print( "目覚まし時間を設定"); char keypressed14 =myKeypad.waitForKey(); //ここでは、4桁を入力するまですべてのプログラムが停止し、上記のコードと比較されますif(keypressed14!=NO_KEY &&keypressed14!='*' &&keypressed14!='#' &&keypressed14!='A' &&keypressed14 !='B' &&keypressed14!='C' &&keypressed14!='D'){c1 =keypressed14; lcd.setCursor(0、1); lcd.print(c1); } char keypressed15 =myKeypad.waitForKey(); if(keypressed15!=NO_KEY &&keypressed15!='*' &&keypressed15!='#' &&keypressed15!='A' &&keypressed15!='B' &&keypressed15!='C' &&keypressed15!='D'){ c2 =keypressed15; lcd.setCursor(1、1); lcd.print(c2); } i1 =(c1-48)* 10; i2 =c2-48; A_hour =i1 + i2; delay(500); lcd.clear(); lcd.print( "アラーム分を設定"); char keypressed16 =myKeypad.waitForKey(); //ここでは、4桁を入力するまですべてのプログラムが停止し、上記のコードと比較されますif(keypressed16!=NO_KEY &&keypressed16!='*' &&keypressed16!='#' &&keypressed16!='A' &&keypressed16 !='B' &&keypressed16!='C' &&keypressed16!='D'){c1 =keypressed16; lcd.setCursor(0、1); lcd.print(c1); } char keypressed17 =myKeypad.waitForKey(); if(keypressed17!=NO_KEY &&keypressed17!='*' &&keypressed17!='#' &&keypressed17!='A' &&keypressed17!='B' &&keypressed17!='C' &&keypressed17!='D'){ c2 =keypressed17; lcd.setCursor(1、1); lcd.print(c2); } i1 =(c1-48)* 10; i2 =c2-48; A_minute =i1 + i2; delay(500); lcd.clear(); AlarmIsActive =1; keypressed =NO_KEY; } if(keypressed =='B'){lcd.clear(); lcd.print( "アラームが非アクティブ化されました"); AlarmIsActive =0; keypressed =NO_KEY; delay(500); } else {myRTC.updateTime(); keypressed =NO_KEY; }} 

回路図


製造プロセス

  1. フライトシミュレータ用のArduinoを備えたLCDパネル
  2. Arduinoハメ撮りビジョンクロック
  3. Arduinoを使用したDIYの最もシンプルなIV9Numitron時計
  4. Simple Word Clock(Arduino)
  5. イスラムの祈りの時間とArduino時計
  6. マスタークロック
  7. ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
  8. Arduinoを搭載したシンプルな障害物センサー
  9. 時間設定とアラーム機能を備えたTM1637デジタル時計
  10. Arduino UNOを使用してLCDTFTスクリーンに画像を表示する!
  11. ロータリーエンコーダー付きDIYシンプル測定ホイール