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

GPSに基づく安価で正確な時計

コンポーネントと消耗品

>
Arduino UNO
× 1
AdafruitRGBバックライトLCD-16x2
私の場合、簡単に接続できるnobrand LCD 20x4 Display mitI2Cアダプター
× 1
ブレッドボード(汎用)
× 1
ジャンパー線(汎用)
× 1
GPS受信機(汎用)
GY-GPS6Mv2 with ublox NEO-6M
× 1

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

>
Arduino IDE

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


これまで、時計プロジェクトにさまざまなRTCクロックを使用したり、NTPサーバーから時間を取得したりしています。このプロジェクトでは、別の情報源を紹介します。世界中のGPS衛星のNMEAストリングからの解析です。

今日のGPS受信機の安さに驚きました。GPS受信機を入手してください(私の場合はGY-GPS6Mv2を使用しています)。

<図>

a。)Windows PCでの最初の-オプションの-テスト:「u-center」をU-Bloxからのダウンロードとしてインストールします。

FTDIアダプターの助けを借りて、GPSブレイクアウトはPCのCOMポートへの道を見つけ、約1分後に軌道への固定(接続)を示します。この目的のために、ブレイクアウトの赤いコントロールランプが点滅します。

自動生成されたグラフィックにより、GPSをさらに試してみたいと思うようになります。 F8- [表示]メニューの[テキストコンソール]を使用すると、さまざまなNMEA文字列が配信されます。

b。)無料のオンラインサービスでデコードテストを実行できます:https://rl.se/gprmc

GPS受信機が機能していることが確認されたので、空が見えることを確認してください。文字列から必要な情報を抽出して、自分の希望に合わせることができます。

<図>

Adafruitライブラリ「AdafruitGPSLibrary」を使用しています。ArduinoIDEにインストールしている場合は、例を使って少し試してみることができます。

c。)回路

<図> <図> <図>

ArduinoA4>ディスプレイSDAArduinoA5>ディスプレイSCL

#include #include LiquidCrystal_I2C lcd(0x3F、20、4); // LCDアドレスを設定>多くの場合0x27または0x3F

>横になっているディスプレイ、おそらく16x2を使用しますか?

#include #include

GPS電源ピンを5Vに接続しますGPSアースピンをアースに接続しますGPSTX(送信)ピンをデジタルに接続します8 GPS RX(受信)ピンをデジタルに接続します7 //配線に合わせてピン番号を変更できます:SoftwareSerial mySerial(8 、7); Adafruit_GPS GPS(&mySerial);

> GPS受信機は3.3 / 5V耐性があります。

d。)私たちの時計は、時刻、日付、風速の表示、そして高度を表示する必要があります。時計が窓に止まるので、場所は必要ありません。

NMEA文字列は、UTC標準の時刻を提供します。ローカルタイムゾーンへの変換は私たち次第です。誰もより良い提案をしない限り、自分のタイムゾーン(ヨーロッパベルリン)に+1を追加します。

  int timezone =+1; //ヨーロッパ/ベルリン(UTC +0100)> NMEAはUTC指向です 

お好みに合わせてタイムゾーンを調整してください。可変時間は、GPS.hour(UTC値)の代わりにLCDディスプレイの出力のコードで使用されます。

  // LCDディスプレイへの出力
lcd.setCursor(5,0); //、0 =最初の行
int hour =(GPS.hour)+ timezone; // GPS.hourUTCを個々のタイムゾーンにフォーマットします
if(hour <10){lcd.print( '0'); }
lcd.print(hour、DEC); lcd.print( ':');

ヨーロッパでは、風速にノットの代わりに「km / h」を使用します。そこで、最初に定数を使用して値をノットからkm / hに変換し、次にそれをグループ化しました。> 1ノット=1.852キロメートル/時

  float speed =(GPS.speed)* 1.852; //速度/ノットから切り替え>速度/ km / h  

ウィキペディアによる評価:

  if(speed <=1){lcd.print( "Windstille");} 
else if((speed> 1)&&(speed <=9)){lcd.print( " leiser Zug ");}
else if((speed> 9)&&(speed <=46)){lcd.print(" Brise ");}
else if((speed> 46)&&(speed <=56)){lcd.print( "starker Wind");}
else if((speed> 56)&&(speed <=74)){lcd.print( "stuerm .wind");}
else if((speed> 74)&&(speed <=83)){lcd.print( "Sturm");}
else if((speed> 83)&&(speed <=102)){lcd.print( "schwerer Sturm");}
else if(speed> 102){lcd.print( "Orkan");}
else {lcd.print( "ohne Bewertung ");}

結果は次のようにディスプレイに表示され、もちろんあなた自身の希望に合わせることができます:

<図>

ループ内で更新頻度を2秒のままにしました。16x2の表示を優先して、秒と高さを無視する傾向があります。

<図> <図>

さまざまなGPSオプションを楽しんでください!

ヨーロッパでは、DCF77無線信号の評価も利用できます。ただし、これは非常に高価であり、その取り扱いは非常に敏感であると言われています。

コード

  • GPS_SoftwareSerial_Parsing_ilo
GPS_SoftwareSerial_Parsing_ilo C / C ++
Adafruitsの例を少し調整しました
 // MTK3329 / MTK3339ドライバーを使用したAdafruitGPSモジュールのテストコード////このコードは、プログラムがより多くの「自由」を持つことを可能にする割り込みでGPSモジュールをリッスンする方法を示しています-新しいNMEAセンテンスが利用可能になったときに//解析するだけです!次に、必要に応じてデータにアクセスします。////テスト済みでAdafruit UltimateGPSモジュールで正常に動作します// MTK33x9チップセットを使用します// ------> http://www.adafruit.com/products/746/ /今日Adafruitエレクトロニクスショップで1つ受け取り、オープンソースのハードウェアとソフトウェアのサポートを手伝ってください! -ada //変更済み2020年1月2日-IngoLohs // GPRMCおよびGPGGAデコーダー:https://rl.se/gprmc#include  #include  LiquidCrystal_I2C lcd(0x3F、20,4); // 16文字で2行のディスプレイの場合はLCDアドレスを0x27に設定し、2004年のlcdディスプレイの場合は> 0x3Fを設定します#include  #include  // GPS電源ピンを5V /に接続します/ GPSアースピンをアースに接続します// GPS TX(送信)ピンをデジタル8に接続します// GPS RX(受信)ピンをデジタル7に接続します//配線に合わせてピン番号を変更できます:SoftwareSerial mySerial( 8、7); Adafruit_GPS GPS(&mySerial); // GPSECHOを「false」に設定してGPSデータのシリアルコンソールへのエコーをオフにします//生のGPSセンテンスをデバッグして聞きたい場合は「true」に設定します# GPSECHOtrueintタイムゾーン=+ 1を定義します。 //ヨーロッパ/ベルリン(UTC +0100)> NMEAはUTC指向ですvoidsetup(){lcd.init(); lcd.backlight(); // 115200で接続して、GPSを十分に速く読み取り、文字を落とさずにエコーできるようにします//また、Serial.begin(115200);を吐き出します。 delay(5000); Serial.println( "Adafruit GPSライブラリの基本テスト!"); // 9600 NMEAは、Adafruit MTKGPSのデフォルトのボーレートです。4800GPS.begin(9600);を使用するものもあります。 //>私の場合、UBLOX 6Mを使用します:GY-GPS6Mv2 //この行のコメントを解除して、高度GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);を含むRMC(推奨最小値)およびGGA(修正データ)をオンにします。 //この行のコメントを解除して、「最小推奨」データのみをオンにします//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); //データの解析には、RMCのみまたはRMC + GGA以外のものを使用することはお勧めしません。//パーサーは現時点では他の文を気にしないため、//更新レートを設定しますGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hzの更新レート//解析コードが適切に機能し、データを並べ替える時間があり、// 1 Hzを超えるものを使用することはお勧めしません//アンテナステータスの更新をリクエストし、コメントします静かにするために外に出るGPS.sendCommand(PGCMD_ANTENNA); delay(1000); //ファームウェアバージョンを要求しますmySerial.println(PMTK_Q_RELEASE);} uint32_t timer =millis(); void loop()//何度も実行します{char c =GPS.read(); //デバッグしたい場合は、これを行うのに良い時期です! if((c)&&(GPSECHO))Serial.write(c); //センテンスを受信した場合、チェックサムをチェックして解析できます... if(GPS.newNMEAreceived()){//ここで注意が必要なのは、NMEAセンテンスまたはデータを出力する場合です。他の文章を聞いてキャッチする! // OUTPUT_ALLDATAを使用してデータを出力しようとする場合は、十分に注意してください//Serial.println(GPS.lastNMEA()); //これにより、newNMEAreceived()フラグもfalseに設定されますif(!GPS.parse(GPS.lastNMEA()))//これにより、newNMEAreceived()フラグもfalseに設定されますreturn; //文の解析に失敗する可能性があります。その場合は、別の文を待つ必要があります} // millis()またはタイマーがラップアラウンドする場合は、リセットするだけですif(timer> millis())timer =millis(); //約2秒ごとに、現在の統計を出力しますif(millis()-timer> 2000){timer =millis(); //タイマーをリセットしますSerial.print( "\ nTime:"); if(GPS.hour <10){Serial.print( '0'); } Serial.print(GPS.hour、DEC); Serial.print( ':'); if(GPS.minute <10){Serial.print( '0'); } Serial.print(GPS.minute、DEC); Serial.print( ':'); if(GPS.seconds <10){Serial.print( '0'); } Serial.print(GPS.seconds、DEC); Serial.print( '。'); if(GPS.milliseconds <10){Serial.print( "00"); } else if(GPS.milliseconds> 9 &&GPS.milliseconds <100){Serial.print( "0"); } Serial.println(GPS.milliseconds); Serial.print( "日付:"); Serial.print(GPS.day、DEC); Serial.print( '/'); Serial.print(GPS.month、DEC); Serial.print( "/ 20"); Serial.println(GPS.year、DEC); Serial.print( "修正:"); Serial.print((int)GPS.fix); Serial.print( "品質:"); Serial.println((int)GPS.fixquality); // LCDディスプレイに出力lcd.setCursor(5,0); //、0 =最初の行inthour =(GPS.hour)+ timezone; // GPS.hour UTCを個々のタイムゾーンにフォーマットしますif(hour <10){lcd.print( '0'); } lcd.print(hour、DEC); lcd.print( ':'); if(GPS.minute <10){lcd.print( '0'); } lcd.print(GPS.minute、DEC); lcd.print( ':'); if(GPS.seconds <10){lcd.print( '0'); } lcd.print(GPS.seconds、DEC); // LCDディスプレイに出力lcd.setCursor(5,1); //、0 =2行目if(GPS.day <10){lcd.print( '0'); } lcd.print(GPS.day、DEC); lcd.print( '。'); if(GPS.month <10){lcd.print( '0'); } lcd.print(GPS.month、DEC); lcd.print( '。'); lcd.print(GPS.year、DEC); if(GPS.fix){//衛星接続はありますか?はいの場合、さらに値があります:Serial.print( "Location:"); Serial.print(GPS.latitude、4); Serial.print(GPS.lat); Serial.print( "、"); Serial.print(GPS.longitude、4); Serial.println(GPS.lon); Serial.print( "速度(ノット):"); Serial.println(GPS.speed); Serial.print( "角度:"); Serial.println(GPS.angle); Serial.print( "高度:"); Serial.println(GPS.altitude); Serial.print( "衛星:"); Serial.println((int)GPS.satellites); lcd.setCursor(0,2); //、2 =3行目// 1ノット=1,852キロメートル/時フロート速度=(GPS.speed)* 1.852; // Speed / Knotenから切り替え> Speed / km / h //lcd.print("Speed km / h: "); lcd.print(speed); //BewertungederWindstärkenachhttps://de.wikipedia.org/wiki/Windgeschwindigkeit/* Beschreibung --Geschwindigkeit in km / h * Windstille --0-1 * leiser Zug-2-9 * leichte Brise-10-19 * schwache Brise-20-28 *mäßigeBrise-29-37* frische Brise-38-46 * starker Wind-47-56 *stürmischerWind-57-74* Sturm-75-83 * schwerer Sturm-84-102 * Orkan-> 103 * / if(speed <=1){lcd.print( "Windstille");} else if((speed> 1)&&(speed <=9)){lcd.print( "leiser Zug");} else if((speed> 9)&&(speed <=46)){lcd.print( "Brise");} else if((speed> 46)&&(speed <=56)){lcd.print( "starker Wind ");} else if((speed> 56)&&(speed <=74)){lcd.print(" stuerm .wind ");} else if((speed> 74)&&(speed <=83)){ lcd.print( "Sturm");} else if((speed> 83)&&(speed <=102)){lcd.print( " schwerer Sturm ");} else if(speed> 102){lcd.print(" Orkan ");} else {lcd.print(" ohne Bewertung ");} lcd.setCursor(0,3); //、3 =4行目lcd.print( "Hoehe:"); lcd.print(GPS.altitude); }}} 

製造プロセス

  1. DIYの安いグローブコントローラーとプロペラカー
  2. LEDとピエゾスピーカーを備えたDHT11センサー
  3. GPSデータロガー、空間分析、およびAzureIoTハブ。
  4. 温度および湿度データロガー
  5. ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
  6. アナログスタイルのLEDPOVクロック
  7. お誕生日おめでとう:光と音
  8. u-blox LEA-6H 02GPSモジュールとArduinoおよびPython
  9. ArduinoおよびOLEDベースのセルオートマトン
  10. 新しい高速アルゴリズムを備えたArduinoベースのRPMカウンター
  11. ギタースピードピックとストンプペダル!