Arduino 入門
Lesson 53
【Real Time Clock モジュール その4】
こにんちは、管理人のomoroyaです。
センサーの使い方の基本を学習する入門編。
世の中には、まだまだ色々なセンサーがあります。
これからも、色々なセンサーで遊んでいきます。
本記事はLesson 53 【Real Time Clock モジュール その4】です。
Lesson 52では「1602 LCD モジュール」を使って「デジタル時計」を作りました。
ライブラリを使わないためスケッチが長い・・・。
簡単に作るならライブラリ使用がおすすめ!
ということで、本Lessonではライブラリを使用した短めのスケッチを紹介します。
簡単にスケッチを描きたい場合、ライブラリ使用が便利。
機能が簡易的なものから、機能が豊富なものまでたくさんあります。
海外サイトが主ですが・・・。
本Lessonで使用する「Real Time Clock モジュール」は以下が同等品となります。
※搭載IC:DS1302 prime対応品 出荷元:Amazon
電池はCR2032 をご用意ください
1602 LCDモジュールはこちら。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
本LessonはLesson 52で学習した内容をライブラリを使うことでスケッチを短くします。
動作を学習するわけでない場合は、ライブラリを使うのが便利です。
下記は説明が同じとなるため、Lesson 52を学習している場合は飛ばしましょう。
LCD編では、「DS1302」から下記のデータを引っ張り出します。
1行目表示:「年レジスタ」「月レジスタ」「日レジスタ」「曜日レジスタ」
2行目表示:「時レジスタ」「分レジスタ」「秒レジスタ」
- 秒レジスタ:00~59
- 分レジスタ:00~59
- 時レジスタ:01~12(12時間制)/00~23(24時間制)
- 日レジスタ:01~31
- 月レジスタ:01~12
- 曜日レジスタ:1~7
- 年レジスタ:00~99
- ライトプロテクトレジスタ
Lesson 50でもお伝えしましたがデータシートは下記で閲覧可能です。
秋月電子で「DS1302」を検索。
もしくは、直接メーカーページを確認。(※メーカーページでDS1302で検索)
Lesson 53 目標
本Lessonの目標は以下です。
2.ライブラリを使って簡単なスケッチにする
3.LCDを使ったデジタル時計を作って遊ぶ
いつものように、遊ぶことが重要です。
動作の理屈を理解するためにはデータシートを読み込む必要があり!
回路がわからなくても遊べる、使える、作れるのがArduino の良いところ。
もちろん、データシート読めなくても遊べます。
準備
ではLessonの準備に取り掛かりましょう。
使用する電子部品は「RTCモジュール」「1602 LCD モジュール」「ポテンショメータ」の3つ。
LCDモジュールの輝度調整にポテンショメータ、いわゆる「可変抵抗器」「半固定抵抗器」などがあると便利です。
内容は、Lesson 52と同じ。
結線が残っていれば、そのまま使えます。
必要なもの
ここもLesson 52と同じ。
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - RTC リアル タイム クロック モジュール
- 1602 LCD ディスプレイモジュール → Lesson 16で解説しています。
- ポテンショメータ(可変抵抗器) → Lesson 12で解説しています。
- M-M Jumper wire(UNOと部品をつなぐための配線)
- M-F Jumper wire(UNOと部品をつなぐための配線)
※ブレッドボードはセンサとUNOを直接つなぐ場合不要です。
※ジャンパワイヤーは「M-M」「M-F」を必要に応じて使い分けてください。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
使用部品もLesson 52と同じ。
「RTCモジュール」の詳細は・・・
⇒ Arduino 入門 Lesson 50 【Real Time Clock モジュール】
「1602 LCD モジュール」の詳細は・・・
⇒ Arduino 入門 Lesson 16 【LCD モジュール編】
「可変抵抗器」「半固定抵抗器」の詳細は・・・
⇒ Arduino 入門 Lesson 12 【ポテンショメータ編】
をご確認ください。
実物写真だけ載せておきます。
RTCモジュール「DS1302」 実物写真
「RTCモジュール」の実物写真。
⇒ Arduino 入門 Lesson 50 【Real Time Clock モジュール】
1602 LCD モジュール 実物写真
こちらが「1602 LCD モジュール」の実物写真。
⇒ Arduino 入門 Lesson 16 【LCD モジュール編】
ポテンショメータ 実物写真
こちらが「可変抵抗器」「半固定抵抗器」の実物写真。
※ポテンショメータ
⇒ Arduino 入門 Lesson 12 【ポテンショメータ編】
各電子部品 仕様
各電子部品の仕様も各Lessonにてご確認ください。
「RTCモジュール」の詳細は・・・
⇒ Arduino 入門 Lesson 50 【Real Time Clock モジュール】
「1602 LCD モジュール」の詳細は・・・
⇒ Arduino 入門 Lesson 16 【LCD モジュール編】
「可変抵抗器」「半固定抵抗器」の詳細は・・・
⇒ Arduino 入門 Lesson 12 【ポテンショメータ編】
実践 回路作成とコード作成
ここからが本題になります。
Lesson 52ではライブラリを使わずにRTCモジュールを制御していました。
Lesson 53では、ライブラリを使うことでスケッチを簡単にします。
「1602 LCD モジュール」はArduino標準ライブラリを利用します。
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にライブラリを使ったスケッチを書いて、LCDモジュールを用いたデジタル時計を作っていきましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
回路図もLesson 52と同じ。
「RTCモジュール」「1602 LCD モジュール」「ポテンショメータ」をそれぞれ接続していきます。
Arduinoはデジタル入出力ピンを使用。
- RTCモジュール:2、3、4
- 1602 LCDモジュール:7、8、9、10、11、12
あとは、5VとGNDのみ。
回路図がこちら。
こちらがブレッドボード図。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
接続もLesson 52と同じ。
下図に示すように、用意した部品を使用して接続しましょう。
部品は「RTCモジュール」「1602 LCD モジュール」「ポテンショメータ」の3つ。
配線が、かなりややこしいですが・・・
Lesson 16の復習と思って接続していきましょう。
「RTCモジュール」と接続するジャンパーワイヤーはF-Mを使用してます。
使用するポートは、デジタル入出力ピンの
- RTCモジュール:2、3、4
- 1602 LCDモジュール:7、8、9、10、11、12
あとは電源である5V、GND。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。
コマンド説明
これまで学習してきた関数しか使いません。
新しいコマンドはなし。
サンプルコード
ここからがLesson 53の本題。
Lesson 52のスケッチをライブラリを使ったものに変更します。
使用するライブラリは「DS1302.h」。
良さげなものがないかと、海外サイトを巡りにめぐってきました。。。
Lesson 50のもとのとは異なります。
★このライブラリを使えば、2桁問題も何事もなく解決です。
//Lesson 52 デジタル時計を作って遊ぶスケッチ(for 1602 LCDモジュール) //ライブラリ使用による簡易化 //https://omoroya.com/ //使用部品 //RTCモジュール:https://omoroya.com/arduino-lesson50/ //1602 LCDモジュール:https://omoroya.com/arduino-lesson16/ //ポテンショメータ:https://omoroya.com/arduino-lesson12/ //RTCモジュール(DS1302)用ライブラリ #include <DS1302.h> //1602 LCDモジュール用ライブラリ #include <LiquidCrystal.h> // PINの割り当て(for RTC(DS1302) Module) DS1302 rtc(4, 3, 2); //4:SCLK(clk) 3:I/O(dat) 2:CE(rst) // 変数の生成とPINの割り当て(for 1602 LCD Module) // rs:7 en:8 d4:9 d5:10 d6:11 d7:12 に対応 LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { // LCDの行と列を設定 lcd.begin(16, 2); lcd.print("omoroya (^^)"); // 2行目の表示 lcd.setCursor(0, 1); lcd.print("Start Clock!"); delay(2000); lcd.clear(); //LCDの表示を消し、カーソルを左上隅に配置。 //time setting rtc.halt(false); rtc.writeProtect(false); rtc.setDOW(MONDAY); rtc.setTime(23, 59, 50); rtc.setDate(9, 5, 2021); rtc.writeProtect(true); } void loop(){ lcd.clear(); lcd.setCursor(0,0); //FORMAT setting //FORMAT_BIGENDIAN:2021-05-09;FORMAT_LITTLEENDIAN:09-05-2021 lcd.print(rtc.getDateStr(FORMAT_LONG,FORMAT_LITTLEENDIAN, '/')); //year, maonth, day //lcd.setCursor(11,0);//FORMAT_LITTLEENDIAN lcd.setCursor(11 ,0);//FORMAT_BIGENDIAN lcd.print(rtc.getDOWStr()); lcd.setCursor(14,0); lcd.print(". "); //hour, minutes, seconds lcd.setCursor(0, 1) ; lcd.print(rtc.getTimeStr()); delay(1000); }
ライブラリを使うことでLesson 52のスケッチが半分以下になりました。
動作確認
では、さっそく動作を確認していきます。
- 好きな時間に設定(スケッチ内で指定)
- 書き込み実行
「1602 LCD モジュール」にスケッチにて設定した時刻が表示されます。
本Lessonでは「2021年5月9日(日)23時59分50秒」に設定。
10秒後に「2021年5月10日(火)00時00分00秒」に変われば成功です。
■初期表示
- omoroya表示
■時計表示スタート
- 1行目:「09/05/2021 Sun.」
- 2行目:「23:59:50」
■10秒後
- 1行目:「10/05/2021 Mon.」
- 2行目:「00:00:00」
59秒 → 00秒 に変わる瞬間の写真を2枚。
自作していたときに悩んでいた2桁問題もまったく問題なし。
ライブラリってやっぱり便利!!!
まとめ
本Lessonは、以下を目標としました。
2.ライブラリを使って簡単なスケッチにする
3.LCDを使ったデジタル時計を作って遊ぶ
ライブラリを使うことで、やりたいことが簡単にできます。
探せば色々なライブラリを見つけられるので好みのライブラリをさがすのも1つの手段。
といっても海外のサイトになりますが・・・。
日本では、あまりないんですよね。
なんででしょうね、誰か教えてください!
Lesson 53 【Real Time Clock モジュール その4】 はここまで。
もっと、マイコンで遊ぶことが日本でも普及しないかなと最近思う管理人。
次回、Lesson 54は 【MQ-3 アルコールセンサ その1】。
MQセンサは色々な種類があります!
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
基盤に実装するときの回路とプログラムを教えてください。
コメントありがとうございます。
ブレッドボード上に作ったものを、そのまま基板に実装すればOKと考えます。
時間設定ができるボタンをつけることは可能でしょうか?
コメントありがとうございます。
はい、可能です。
ブレッドボードではできたのですがブレッドボードなしでするにはどうしたらいいですか?
コメントありがとうございます。
基板に実装したいということでしょうか?
通常のArduinoだと大きすぎるので・・・
Arduino nanoを使い、基板に実装するのが良いかと思います。
LCD1602ではなく、OELD 128*64(SSD1306) に時刻表示したいのですが可能でしょうか?
コメントありがとうございます。
Arduinoを使って、OELD 128*64(SSD1306) に時刻表示したいということかと思いますが可能です!
ライブラリを使用すれば比較的簡単に表示できると思います。
海外サイトのライブラリを入れてみたのですが
Arduino:1.8.9 (Windows 10), ボード:”Arduino/Genuino Uno”
sketch_jul03a:2:20: error: DS1302.h: No such file or directory
compilation terminated.
exit status 1
DS1302.h: No such file or directory
このようにエラーメッセージがでます。どうしたらいいでしょうか?
コメントありがとうございます。
この情報でわかることは下記のみです。
DS1302.hがない。
ライブラリがインストールされていない可能性が高い。
このプログラムを使って時計の制作を行っているのですがライブラリがどうしても見つかりませんどの海外サイトを使ったのか教えていただけないでしょうか。
コメントありがとうございます。
下記サイトだったかと思います。
http://www.rinkydinkelectronics.com/index.php