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

eDOT-Arduinoベースの精密時計および気象観測所

コンポーネントと消耗品

Microchip Technology ATMEGA 328P-PU
× 1
MAXIM MAX7219
× 6
BOSCHBME280-GY-BMEPブレイクアウトボード
× 1
Adafruit Luckylight8x8ドットマトリックスLEDディスプレイ-M1603095
× 6
DS3231
RTCクロック
× 1
Arduino Nano R3
× 1
Arduino UNO
× 1
eDOTcore
× 1

必要なツールとマシン

Flashforge Dreamer

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

>
Arduino IDE

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

eDOT

は、Arduinoベースの精密時計および気象観測所で、IRリモート受信機と自動輝度調整が組み込まれています。

このデバイスは、WIFIモジュールなどの追加のハードウェアで簡単に拡張できるように設計されています。

6つの8x8ドットマトリックスLEDディスプレイのおかげで、内部センサー、カスタムスクロールメッセージ、またはインターネットからのワイヤレス(RSSなど)からのさまざまな種類の情報を表示できます。

消費電力が非常に少なく、前面ガラスとボディの3Dプリントパーツを組み合わせたシンプルでエレガントなデザインです。

プロジェクトは現在開発中であり、更新されます。

Thingiverseで3Dパーツをダウンロード

<図>

<図>

その他のプロジェクトについては、私のYouTubeチャンネルもご覧ください:

https://www.youtube.com/channel/UCbIomyFKzBiLHqEb2xv9GHQ

B.O.M.

  • N.1 x3Dプリントされた左半身
  • N.1 x3Dプリントされた右半身
  • N.1 x3Dプリントされた左カバー
  • N.1 x3Dプリントされた右カバー
  • N.2 x3Dプリントされた足
  • N.12 x3Dプリントディスプレイのサポート
  • N.1 x光沢ガラス240x75x5(mm)
  • N.1xオレンジフィルター
  • N.6 x Adafruit 8x8ドットマトリックスディスプレイタイプLuckylightM1603095(白)
  • N.6 xMAX7219コントローラーボード
  • N.1 xUSBブレークアウトボード
  • N.1 xBME280ブレークアウトボード
  • N.1 xDS3231チップ
  • N.1 xIRレシーバータイプIRM-56384
  • N.1xフォトレジスタタイプLDR-07
  • N.1 x ATMEGA328PU(Arduinoカスタムボード)
  • N.6 x OMRON12mm触覚ボタン

eDOTcore PCB

最後に、eDOT用のコントロールボードの最初のプロトタイプを入手しました。

eDOTcoreプロジェクトページに移動

<図>

コード

  • eDOT:多用途の精密気象観測所と時計
eDOT:多用途の精密気象観測所と時計 Arduino
 // eDOT:多用途の精密気象観測所と時計// HISTORY // 11/12/2105測定キャリブレーション係数を追加// 2016年9月6日自動表示輝度を追加// 2016年9月6日タスクスケジューラを追加// 2016年7月8日eDOTスプラッシュスクリーンを追加#include  #include  #include  #include  #include  #include  #include  #include "RTClib.h" #include  Adafruit_BME280 bme; // I2CRTC_DS3231 rtc; int pinCS =10; // CSをこのピンに接続し、DINをMOSIに、CLKをSCKに接続します(http://arduino.cc/en/Reference/SPIを参照)int numberOfHorizo​​ntalDisplays =7; int numberOfVerticalDisplays =1; Max72xxPanel matrix =Max72xxPanel(pinCS、numberOfHorizo​​ntalDisplays、 numberOfVerticalDisplays);#define TEMPERATURE 0#define HUMIDITY 1#define PRESSURE 2#define TIME 3#define DAY 4#define DATE 5float temp; float tempavg; char tempf [8]; float hum; float humavg; char humf [8]; float press; float pressavg; char pressf [8]; int screen =0; //初期画面長previousLEDMillis =0; // LEDディスプレイの場合updatelongLEDInterval =5000; //画面間の遅延intscreenMax =5; // screenboolの最大数screenChanged =true; //画面ステータスfloatlightens; float screenBrt =0; float lightsensavg; Average  avetemp(60); //温度の平均(80サンプル)Average  avehum(60); //湿度の平均(80サンプル)Average  avepress(60); //圧力の平均(80サンプル)Average  avelightsens(40); //圧力の平均(80サンプル)//キャリブレーション係数float temp_o =-1.70; float temp_s =1.0; float temp_lin; float hum_o =2.45; float hum_s =1.0; float hum_lin; float press_o =0.0; float press_s =1.0; float press_lin; //明るさセンサーの補正floatbrt_o =-4; float brt_s =1.35; Scheduled Task1; Scheduled Task2; void setup(){Task1.start(); Task2.start(); Wire.begin(); // I2Cを開始しますbme.begin(0x76); matrix.setIntensity(screenBrt); //明るさには0から15までの値を使用します//自分のニーズに合わせて調整します//matrix.setPosition(0、0、0); //最初の表示は<0、0>にあります// matrix.setPosition(1、1、0); // 2番目の表示は<1、0>にありますmatrix.setRotation(0、1); //表示方向を調整しますmatrix.setRotation(1、1); //表示方向を調整しますmatrix.setRotation(2、1); //表示方向を調整しますmatrix.setRotation(3、1); //表示方向を調整しますmatrix.setRotation(4、1); //表示方向を調整しますmatrix.setRotation(5、1); //表示方向を調整しますmatrix.setRotation(6、1); //表示方向を調整しますmatrix.setRotation(7、1); //表示方向を調整します/ * matrix.setRotation(8、1); //表示方向を調整しますmatrix.setRotation(9、1); //表示方向を調整します* / rtc.begin(); // matrix.setRotation(3、2); //最後の表示についても同じホールド//rtc.adjust(DateTime(F(__ DATE __)、F(__ TIME__))); // rtc.adjust(DateTime(2016、02、28、16、44、0)); //Serial.begin(9600); // eDOT SPLASHSCREEN matrix.fillScreen(0); matrix.write(); matrix.setCursor(12,0); matrix.print( "eDOT"); for(screenBrt =0; screenBrt <=15; screenBrt ++){delay(25); matrix.setIntensity(screenBrt); //明るさmatrix.write();に0から15までの値を使用します} delay(250); for(screenBrt =15; screenBrt> =0; screenBrt-){delay(50); matrix.setIntensity(screenBrt); //明るさmatrix.write();に0から15までの値を使用します} delay(500); matrix.fillScreen(0); matrix.write(); delay(1000);} void loop(){Task1.check(acq1,500); Task2.check(acq2,20);} void acq1(){//データ取得と平均化temp =bme.readTemperature(); avetemp.push(temp); tempavg =avetemp.mean(); hum =bme.readHumidity(); avehum.push(hum); humavg =avehum.mean(); press =bme.readPressure(); avepress.push(press); pressavg =avepress.mean(); DateTime now =rtc.now(); outSec =now.second(); outMin =now.minute(); outHour =now.hour(); outday =now.day(); outmonth =now.month(); outyear =now.year()-2000; dow =now.dayOfTheWeek(); } void acq2(){lightens =analogRead(A3); avelightsens.push(lightsens); lightsensavg =avelightsens.mean(); screenBrt =Constraint(((lightsensavg / 1023 * 15)* brt_s + brt_o)、0、15); matrix.setIntensity(screenBrt); //データの線形化temp_lin =tempavg * temp_s + temp_o; hum_lin =humavg * hum_s + hum_o; press_lin =pressavg * press_s + press_o; unsigned long currentLEDMillis =millis(); //Serial.println(screenBrt); if(currentLEDMillis --previousLEDMillis> LEDInterval)//最後に表示を変更した時間を保存します{previousLEDMillis =currentLEDMillis; screen ++; if(screen> screenMax)screen =0; //サイクルが完了すると、初期画面にリセットしますscreenChanged =true; } // if(screenChanged)//画面変更時に測定値を更新// {// screenChanged =false; //次の反復のためにリセットswitch(screen){case TEMPERATURE:dtostrf(temp_lin、4、2、tempf); //小数点以下2桁で5桁にフォーマットmatrix.setCursor(6,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(tempf); //現在の温度を出力matrix.drawRect(37,0,2,2,255); //グレードシンボルを描画しますmatrix.setCursor(40,0); matrix.print( "C"); matrix.write(); //現在のデータを表示するmatrix.fillScreen(0); // displaybreak; case HUMIDITYをクリアします:dtostrf(hum_lin、4、2、humf); //小数点以下2桁で5桁にフォーマットmatrix.setCursor(6,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(humf); //現在の温度を出力matrix.setCursor(37,0); matrix.print( "%"); matrix.write(); //現在のデータを表示するmatrix.fillScreen(0); // displaybreak; case PRESSUREをクリアします:dtostrf(press_lin、6、0、pressf); //小数点以下2桁で5桁にフォーマットmatrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(pressf); //現在の温度を出力matrix.setCursor(37,0); matrix.print( "Pa"); matrix.write(); //現在のデータを表示するmatrix.fillScreen(0); // displaybreak; case TIME:// dtostrf(press_lin、6、0、pressf);をクリアします//小数点以下2桁で5桁にフォーマットmatrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255); if(outHour <10){matrix.print( "0"); } matrix.print(outHour、0); //現在の時間を出力matrix.print( ":"); if(outMin <10){matrix.print( "0"); } matrix.print(outMin、0); //現在の議事録を出力matrix.print( ":"); if(outSec <10){matrix.print( "0"); } matrix.print(outSec、0); //現在の秒を出力matrix.write(); //現在のデータを表示するmatrix.fillScreen(0); // displaybreak; case DATE:// dtostrf(press_lin、6、0、pressf);をクリアします//小数点以下2桁で5桁にフォーマットmatrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255); if(outday <10){matrix.print( "0"); } matrix.print(outday、0); //現在の時間を出力matrix.print( "/"); if(outmonth <10){matrix.print( "0"); } matrix.print(outmonth、0); //現在の議事録を出力matrix.print( "/"); matrix.print(outyear、0); //現在の秒を出力matrix.write(); //現在のデータを表示するmatrix.fillScreen(0); // displaybreak; case DAY:// dtostrf(press_lin、6、0、pressf);をクリアします//小数点以下2桁で5桁にフォーマットmatrix.setCursor(15,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(daysOfTheWeek [dow]); matrix.write(); //現在のデータを表示するmatrix.fillScreen(0); // displaybreakをクリアします; }} 

製造プロセス

  1. ラズベリーパイをベースにした気象観測所
  2. Raspberry Pi2ウェザーステーション
  3. Weather Station V 2.0
  4. Arduinoハメ撮りビジョンクロック
  5. マスタークロック
  6. ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
  7. $ 10ポータブルArduinoウェザーステーション(AWS)
  8. ArduinoおよびOLEDベースのセルオートマトン
  9. ThingSpeak Arduino Weather Station
  10. ArduinoとGoogleスプレッドシートに基づく出席システム
  11. Arduino、Windows、Azureをベースにした転倒検知システム