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

日付、時刻、温度、湿度の表示

コンポーネントと消耗品

>
Arduino UNO
× 1
DHT11温度および湿度センサー(4ピン)
× 1
Maxim Integrated DS3231
× 1
抵抗10kオーム
× 1
Adafruit 128x64OLEDグラフィックディスプレイ
× 1
ブレッドボード(汎用)
× 1
ジャンパー線(汎用)
× 15

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

温度と湿度とともに、時刻、日付を表示できる独自のインターフェイスを作成したいと思ったことはありませんか?まあ、それはあなたが思っているよりもずっと簡単です。

以下に示すように、いくつかの重要なコンポーネントが必要です。

Arduino Uno / Nano

まず、マイクロコントローラーが必要になります。プロジェクトにArduinoUnoを使用しましたが、ArduinoNanoにも十分なピンがあります。

DHT11

DHT11は、非常に手頃な価格のデジタル温度および湿度センサーです。静電容量式湿度センサーとサーミスタを使用して周囲の空気を測定します。 2秒ごとに読み取りを行うことをお勧めするため、読み取りのタイミングは非常に重要です。

覚えておくべき小さなポイントがあります。 時間を一度設定したら、必ずその行にコメントを付けて、もう一度コンパイルしてください。 このように、RTCは時間を追跡し、時間は以前にコンパイルしたものに設定されません。

DS3231

DS3231は、一般的に使用されているDS1307モジュールと同じRTCモジュールです。 DS1307に比べてかなり安価で、はるかに正確です。統合された温度補償水晶発振器(TCXO)と水晶が含まれています。デバイスにはバッテリー入力が組み込まれており、デバイスへの主電源が遮断されたときに正確な計時を維持します。

128x64OLEDグラフィックディスプレイ

OLED画面にデータが表示されます。この画面サイズは非常にコンパクトで、画面は非常に明るいです。 Adafruit OLED画面は、画面の背面で調整できるSPIまたはI2Cインターフェイスを使用して制御できます。より手頃な価格の画面を使用することもできますが(eBayにはたくさんあります)、画面はAdafruitのライブラリを介して使用するヘッダーファイルで機能する必要があるため、どちらを購入するか注意してください。

コード

  • Time_Temp_Humidity_Display.ino
Time_Temp_Humidity_Display.ino Arduino
これは、プロジェクトをコンパイルするためのコードです。必要なヘッダーファイルを追加することを忘れないでください。プロジェクトがないと機能しません。
 // hackster.ioユーザーの皆さん!//日付、時刻、温度、湿度の表示///////////// //////////// OLEDの場合///////////////////////#include  #include  #include  #include  //ソフトウェアSPIを使用している場合(デフォルトの場合):#define OLED_MOSI 9 // MOSI aka SDA#define OLED_CLK 10 // CLK aka SCL#define OLED_DC 11 #define OLED_CS 12#define OLED_RESET 13Adafruit_SSD1306 display(OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);#if(SSD1306_LCDHEIGHT!=64)#error( "高さが正しくない、Adafruit_SSD1306.hを修正してください!");#endif // ////////////////////////////////////////////////// //////////////////////////////////// DHTの場合//////////// //////////////#include  dht DHT; #define DHT11_PIN 3int DHTtimer =0; ////////////////// ////////////////////////////////////////////////// ///////////////////// RTC(DS3231)の場合//////////////////////// //// SDAからA4、SCLからA5#define DS3231_I2C_A DDRESS 0x68 //通常の10進数を2進コードの10進数に変換するdecToBcd(byte val){return((val / 10 * 16)+(val%10));} // 2進化10進数を通常の10進数に変換するbytebcdToDec(byte val ){return((val / 16 * 10)+(val%16));} ////////////////////////////// /////////////////////////////// void setup(){Wire.begin(); Serial.begin(9600); //ここで初期時刻を設定し、時刻を設定した後、このセクションにコメントします// DS3231秒、分、時間、日、日付、月、年// setDS3231time(00,24,12,6,3,2,17); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();} //////////////////////////// DS3231コーディング///////////// ///////////// void setDS3231time(byte second、byte minutes、byte hour、byte dayOfWeek、bytedayOfMonth、byte month、byte year){//時刻と日付のデータをDS3231に設定Wire.beginTransmission( DS3231_I2C_ADDRESS); Wire.write(0); //次の入力を秒レジスタで開始するように設定しますWire.write(decToBcd(second)); //秒を設定しますWire.write(decToBcd(minute)); //分を設定しますWire.write(decToBcd(hour)); //時間を設定しますWire.write(decToBcd(dayOfWeek)); //曜日を設定します(1 =日曜日、7 =土曜日)Wire.write(decToBcd(dayOfMonth)); //日付を設定します(1から31)Wire.write(decToBcd(month)); //月を設定しますWire.write(decToBcd(year)); //年(0〜99)を設定Wire.endTransmission();} void readDS3231time(byte * second、byte * minutes、byte * hour、byte * dayOfWeek、byte * dayOfMonth、byte * month、byte * year){Wire。 beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // DS3231レジスタポインタを00hに設定Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS、7); //レジスタ00hから始まるDS3231から7バイトのデータを要求します* second =bcdToDec(Wire.read()&0x7f); *分=bcdToDec(Wire.read()); *時間=bcdToDec(Wire.read()&0x3f); * dayOfWeek =bcdToDec(Wire.read()); * dayOfMonth =bcdToDec(Wire.read()); *月=bcdToDec(Wire.read()); * year =bcdToDec(Wire.read());} void displayTime(){byte second、minute、hour、dayOfWeek、dayOfMonth、month、year; // DS3231からデータを取得しますreadDS3231time(&second、&minute、&hour、&dayOfWeek、&dayOfMonth、&month、&year); //シリアルモニターに送信しますSerial.print(hour、DEC); //表示時にバイト変数を10進数に変換しますSerial.print( ":"); if(minute <10){Serial.print( "0"); } Serial.print(minute、DEC); Serial.print( ":"); if(second <10){Serial.print( "0"); } Serial.print(second、DEC); Serial.print( ""); Serial.print(dayOfMonth、DEC); Serial.print( "/"); Serial.print(月、12月); Serial.print( "/"); Serial.print(年、12月); Serial.print( "曜日:"); ////////////////////////////////////// //////////////////////////// display.setCursor(50,0); display.print(dayOfMonth、DEC); display.print( "、"); display.setCursor(91,0); display.print( "20"); display.print(year、DEC); if(hour <10){display.setCursor(40,10); display.print( "0"); display.print(hour、DEC); display.print( ":"); } if(hour> 9){display.setCursor(40,10); display.print(hour、DEC); display.print( ":"); } if(minute <10){display.setCursor(58,10); display.print( "0"); display.print(minute、DEC); display.print( ":"); } if(minute> 9){display.setCursor(58,10); display.print(minute、DEC); display.print( ":"); } if(second <10){display.setCursor(75,10); display.print( "0"); display.print(second、DEC); } if(second> 9){display.setCursor(75,10); display.print(second、DEC); } ///////////////////////////////////////////////// ///////////////// ////////////////////////////// WEEK ///////////////////// switch(dayOfWeek){case 1:Serial.println( "Sunday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Sun");壊す;ケース2:Serial.println( "Monday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Mon");壊す;ケース3:Serial.println( "Tuesday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Tue");壊す;ケース4:Serial.println( "Wednesday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Wed");壊す;ケース5:Serial.println( "Thursday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Thur");壊す;ケース6:Serial.println( "Friday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Fri");壊す;ケース7:Serial.println( "Saturday"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print( "Sat");壊す; } //////////////////////////////月間///////////////// //// switch(month){ケース1:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Jan");壊す;ケース2:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Feb");壊す;ケース3:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Mar");壊す;ケース4:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Apr");壊す;ケース5:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "5月");壊す;ケース6:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Jun");壊す;ケース7:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Jul");壊す;ケース8:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Aug");壊す;ケース9:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Sep");壊す;ケース10:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Oct");壊す;ケース11:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Nov");壊す;ケース12:display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print( "Dec");壊す; } ///////////// HOUR HAND /////////////// float x1、y1、a、b; const float pi =3.14; a =((時間-15)* 30); b =(a * pi)/ 180; x1 =40 +(9 * cos(b)); y1 =41 +(9 * sin(b)); display.drawLine(40,41、x1、y1、WHITE); ///////////// MINUTE HAND ///////////////// float x1、y1、a、b; // const float pi =3.14; a =((分-15)* 6); b =(a * pi)/ 180; x1 =40 +(17 * cos(b)); y1 =41 +(17 * sin(b)); display.drawLine(40,41、x1、y1、WHITE); /////////////セカンドハンド/////////////////フロートx1、y1、a、b; a =((second-15)* 6); b =(a * pi)/ 180; x1 =40 +(19 * cos(b)); y1 =41 +(19 * sin(b)); display.drawLine(40,41、x1、y1、WHITE); ////////////////移動しないアナログ時計の部分////////////////display.drawCircle(40、41、 22、WHITE); display.drawCircle(40、41、1、WHITE); display.drawLine(40、20、40、25、WHITE); //12display.drawLine(40、63、40、58、WHITE); //6display.drawLine(62、41、57、41、WHITE); //3display.drawLine(19、41、24、41、WHITE); //9display.drawLine(50、24、47、28、WHITE); //1display.drawLine(57、31、53、34、WHITE); //2display.drawLine(60、51、54、48、WHITE); //4display.drawLine(51、58、48、54、WHITE); //5display.drawLine(29、58、32、54、WHITE); //7display.drawLine(21、51、25、48、WHITE); //8display.drawLine(22、31、27、33、WHITE); //10display.drawLine(30、23、32、28、WHITE); // 11} void ReadTempAndHum(){int chk =DHT.read11(DHT11_PIN); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,45); display.print( "Temp:"); display.print(DHT.temperature、0); display.print( "C"); display.setCursor(70,56); display.print( "ハム:"); display.print(DHT.humidity、0); display.print( "%"); Serial.print( "湿度:"); Serial.print(DHT.humidity、1); Serial.print( "%"); Serial.print( "|温度:"); Serial.print(DHT.temperature、1); Serial.println( "C");} void loop(){displayTime(); //リアルタイムクロックデータをシリアルモニターに表示します。DHTtimer=DHTtimer + 1; // DHTが2秒ごとにのみ読み取られるようにするために、2秒間カウントしますif(DHTtimer> 1){display.fillRect(70、45、128、64、BLACK); ReadTempAndHum(); DHTtimer =0; } delay(1000); display.display(); //時間と日付を表示する画面の部分がクリアされますdisplay.fillRect(0、0、64、64、BLACK); display.fillRect(0、0、128、20、BLACK);} 

カスタムパーツとエンクロージャー

adafruit_ssd1306-master_KOASsXZpW2.zip adafruit-gfx-library-master_2IU6g1UpF6.zip dht_library_Xgke1ZhPls.zip dht-sensor-library-master_Al4SeQRvaS.zip arduinortclibrary-master_hKLoSjCilY.zip

回路図

注:Fritzingで適切なOLED画面が見つかりませんでした。 OLEDからのピン配列がどこにあるかをさらに明確にする必要がある場合は、コードのコメントを確認してください。 breadboard_diagram_QvhPKCpIo5.fzz注:Fritzingで適切なOLED画面が見つかりませんでした。 OLEDからのピン配列がどこにあるかをさらに明確にする必要がある場合は、コードのコメントを確認してください。 Schematic_XKU0jQoWbx.fzz

製造プロセス

  1. コンデンサの充電と放電
  2. Pythonで現在の日付と時刻を取得するには?
  3. RaspberryPi温度および湿度ネットワークモニター
  4. PythonとRaspberryPiの温度センサー
  5. ラズベリーパイの簡単な温度と湿度
  6. 研究所の「気象観測所」
  7. ラズベリーパイ温度および光センサー
  8. 湿度センサーをチェックして校正する方法
  9. Java - 日付と時刻
  10. C++ 日付と時刻
  11. Python-日付と時刻