TM1637を使ってGPS時計を作ってみた
GPS時計は、3つの構成部品とジャンパーケーブルで実現できた。
構成部品
①GPSユニット:太陽誘電製の小型高感度GPSモジュールGYSFDMAXB
②表示ユニット:4桁7セグメントモジュール TM1637
③Arduino : NANO
Fritzing を使って回路を描いてみた。
木造家屋の、窓から約4mの壁に取り付けてみたが、本題なく表示できた。
Sketch
#include <TinyGPS++.h> #include <SoftwareSerial.h> #include "SevenSegmentTM1637.h" #include "SevenSegmentExtended.h" static const int RXPin = 4, TXPin = 3; // TX -> D4, RX -> D3 static const uint32_t GPSBaud = 9600; TinyGPSPlus gps; SoftwareSerial ss(RXPin, TXPin); const byte PIN_CLK = 6; // define CLK pin (any digital pin) const byte PIN_DIO = 7; // define DIO pin (any digital pin) SevenSegmentExtended display(PIN_CLK, PIN_DIO); int Satellites = 12; int hours = 0; int minutes = 0; int wasMinute = 99; // used for blanking leading zero int DSTEST = 9; int TwelveTwentyFour = 24; void setup() { Serial.begin(115200); ss.begin(GPSBaud); display.begin(); // initializes the display display.setBacklight(100); // set the brightness to 100 % delay(1000); // wait 1000 ms hours = 99; minutes = 99; display.printTime(hours, minutes, true); // display time pinMode(Satellites, INPUT_PULLUP); delay(1000); } void loop() { while (ss.available() > 0) if (gps.encode(ss.read())) displayInfo(); if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println(F("No GPS detected: check wiring.")); while (true); } } void displayInfo() { int SW5 = digitalRead(Satellites); if (SW5 == LOW) { display.print("Sat="); delay(500); display.clear(); int temp = gps.satellites.value(); Serial.print("temp = "); Serial.println(temp); display.print(gps.satellites.value()); Serial.print("Satellites Seen = "); Serial.println(gps.satellites.value()); delay(1000); } Serial.print(F("Location: ")); if (gps.location.isValid()) { Serial.print(gps.location.lat(), 6); Serial.print(F(",")); Serial.print(gps.location.lng(), 6); } else { Serial.print(F("INVALID")); } Serial.print(F(" Date/Time: ")); if (gps.date.isValid()) { Serial.print(gps.date.month()); Serial.print(F("/")); Serial.print(gps.date.day()); Serial.print(F("/")); Serial.print(gps.date.year()); } else { Serial.print(F("INVALID")); } Serial.print(F(" ")); if (gps.time.isValid()) { if (gps.time.hour() < 10) Serial.print(F("0")); Serial.print(gps.time.hour() + 9 ); // time ZONE mod Serial.print(F(":")); if (gps.time.minute() < 10) Serial.print(F("0")); Serial.print(gps.time.minute()); Serial.print(F(":")); if (gps.time.second() < 10) Serial.print(F("0")); Serial.print(gps.time.second()); Serial.print(F(".")); if (gps.time.centisecond() < 10) Serial.print(F("0")); Serial.print(gps.time.centisecond()); /////////////////To Clock LED Display///////////////////////////// int hours = gps.time.hour();
Serial.print(" DST = "); Serial.print(DSTEST); int timezonehr = DSTEST; hours = hours + timezonehr; if (hours > TwelveTwentyFour - 1) { hours = hours - TwelveTwentyFour; if (hours == 0) hours = 12; // make sure shows 12 at noon } else { if (hours < 0) { hours = hours + TwelveTwentyFour; } } /////////////////To Clock LED Display///////////////////////////// int minutes = gps.time.minute(); if (minutes != wasMinute) { Serial.print("Hours just before sent to LED "); Serial.println(hours); display.printTime(hours, minutes, false); // display time if ( hours <= 9) { display.print(" "); } wasMinute = minutes; } } else { Serial.print(F("INVALID")); } Serial.println(); }
参考にしたブログ
・7セグLED表示 その7 4文字-TM1637
・GPS Set Clock ・・・ Sketchは、このブログを引用して作成させて貰った。
Recent Comments