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

ArduinoとBluetoothを備えたスマートコーヒーマシン

コンポーネントと消耗品

>
Arduino Nano R3
× 1
HC-05Bluetoothモジュール
× 1
HARDWARIODS18B20温度センサー1m
× 1

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

KaiMorichによって作成されたシリアルBluetoothターミナル
Arduino IDE

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

はじめに

グラフ付きのスマート自動コーヒーメーカーは、Bluetooth経由で制御できます...または淡水をロードするだけで、システムが自動的に起動します!

すべてのパーツは手作りで、すべての機能は私自身のアイデアです。

<図>

「テストモード」もコーディングしたので、コントローラーは外部温度センサー付きの多目的温度計として使用できます。

<図>

Arduino で開発 Nano / Uno、ST7920 ディスプレイを使用 、HC-05 Bluetooth アダプター、ダラスDS18B20 温度センサー 、ヒーターコイルを制御するリレー、LED付きボタン、ブザー、CD4017BEディケードカウンターがLEDバーを駆動します。

開始方法

  • 自動起動 :スタンバイモードでは、システムはバックグラウンドの温度を周期的に測定します。 淡水を入れると温度が下がります 、システムが起動します。
    この機能は、スマートフォンから「自動」を送信することで有効/無効にでき、設定はEEPROMメモリに保存されます。
  • ボタンを押す :コーヒーの製造を開始/中断するか、テストモードを終了します。
  • 「開始」メッセージを送信する スマートフォンから、または「停止 "。

ビデオ

すべての作業方法を示しています。

それがどのように作られたか、どのように見えるか...下をクリック/タップするだけです!

<図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>

コーヒー製造中の1回限りの分析

開始から60秒後、MCUは保存された初期値と現在の温度値を比較して、温度と経過時間のみに基づいて結論を導き出します。これは次のようになります。

  • "水を忘れました。 "-(温度が高すぎた)
  • " 2人用のコーヒー。 "-(水が少ない-気温が高い)
  • " 6人分のコーヒー。 "-(より多くの水-より少ない温度上昇)
  • "ヒーティングコイルエラー! "-(重要な温度上昇なし)

さらに、センサーエラー検出 コーヒーメーカーの電源が入っている限り、継続的に動作します。

<図>

ご覧のとおり、6回分の水を使用すると、同じ温度に到達するまでに時間がかかり、少量の水がはるかに早く到達しました。

水なしで開始すると非常に高温になりますが、フラットラインは温度が変化していないことを示しているため、ヒーターコイルエラーが発生します。

測定単位の変更

c 」を送信すると、測定単位を変更できます。 "または" f 「スマートフォンから、コーヒーの淹れ方でも、グラフに跡が残りません

<図>

保存された初期および以前の温度値が変換されます 私がコーディングしたプログラム関数呼び出しによって-統計と分析に使用されます。この設定はEEPROMメモリにも保存されます。

動的画面要素

画面がいっぱいになると、グラフは左に回転し始めます。

測定値に応じて、一部の画面要素が邪魔になる可能性があります。衝突を避けるために、それらの場所は動的です。

これらの6つの小さなアニメーション画像 私がコーディングしたものを示しています:

<図>

まあ、それは楽しい娯楽でした:

<図>

テストモード

これらすべてを作成するまでに、アイデアが浮かびました。グラフを他の目的に使用してみませんか?

<図>

そこで、テストモードをコーディングしました。外部温度センサーを取り付けるだけで、グラフ付きの多目的温度計として使用できます。

<図>

このように機能する方法では、グラフの極値は -20°C(-4°F)です。 および + 128°C(+ 262°F)

1 の間でスマートフォンから番号を送信する および 999999 秒単位の測定間隔として受け入れられるため、グラフの幅は 128秒の間です。 および 11。57日

Bluetooth通信

コマンドを受け入れてレポートを送信し、スマートフォンが接続または切断したかどうかを検出します。

<図>

送信されたメッセージは青色で、応答/レポートメッセージはコーヒーメーカーから緑色で送信されます。

LED制御

CD4027BEディケードカウンターはLEDバーを駆動し、温度測定のたびにMCUからCLKを受信し、位置を上げます。新しいコーヒー製造手順またはテストモードが開始されると、Atmega328PはRST信号を送信してデフォルトの位置を設定します。

<図>

ボタンには2つのピンしかない2色のLEDがあるので、私のシンプルで面白い解決策は、コードとその制御方法で確認できます。

  • ソリッドグリーン :スタンバイまたはコーヒーの準備ができている、コイルがオフになっている
  • ソリッドレッド :コーヒー製造中、ヒーターコイルがオンになっています
  • 赤/緑の順番 :テストモード
  • 赤く点滅 :エラーが発生しました。
    -センサーエラー、
    -ヒーターコイルエラー、または
    -水を忘れたため、コーヒーの製造手順がシステムによって中断されました

コード

  • スマートコーヒーメーカー-ŐsiGyula
スマートコーヒーメーカー-ŐsiGyula Arduino
 //プログラムコード-スマートコーヒーメーカー。 Arduino Nanoで開発され、ST7920ディスプレイ、HC-05 Bluetoothアダプター、// Dallas DS18B20温度センサー、リレー、ボタン、LED、ブザー、CD4017BEディケードカウンターを使用します。////コマンドと動作パラメーターを送信することでBluetooth経由で制御できます。またはボタンを使用して...または単に淡水をロードします!////機能://-グラフ:画面上の動的温度グラフ//-自動開始:淡水をロードすると温度が低下し、システムが起動します//これ「自動」を送信することで機能を有効/無効にでき、設定はEEPROMメモリに保存されます//-コーヒー製造中の分析:システムの起動後60秒で現在の温度値と初期温度値を比較します// be:// 1.水を忘れた(温度が高すぎる)// 2.二人用のコーヒー(水が少ない-温度上昇が高い)// 3.コーヒーフォーシックス(より多くの水-より少ない温度上昇)// 4.加熱コイルエラー(開始からの有意な温度上昇なし)//-センサーエラー検出(異常値の取得)//-摂氏または華氏の動作:切り替えることができますコーヒー製造中であっても、スマートフォンからC of Fを送信します。//初期および以前の温度値が変換され、統計と分析に使用されます。//この設定はEEPROMメモリに保存されます。//-テストモード:接続外部温度センサーシステムは多目的温度計として使用できます。//このモードでは、グラフの間隔は-20C / -4Fから+ 128C / + 262Fの間です。//1から999999までの数値の送信は次のように受け入れられます。測定間隔は秒単位であるため、//グラフの幅は128秒から11。57日の間です。//-Bluetooth通信:コマンドを受け入れて送信しますsは、スマートフォンが接続または切断したかどうかを報告、検出します// -LEDバー制御:MCUはCD4027BEディケードカウンターを制御し、LEDバーはすべての温度測定サイクルでステップします// ------------ -------------------------------------------------- -------------------------------------------------- ---------------- // //設計、構築、プログラム// GyulaOsiによる////無断転載禁止// ----ディスプレイ#include "U8glib。 h "// U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // OLEDディスプレイI2Cバス、SDA(TX)A4、SCL(RX)A5U8GLIB_ST7920_128X64 u8g(11、10、9、U8G_PIN_NONE); //コンストラクターPIN6-D11、PIN5-D10、PIN4-D9byteフレームを表示します=0; //ロゴポインタを開始します// ----ポートと制御された周辺機器// A0で導かれた赤// A1で導かれたgrnint int bright [2] ={0、500}; const byte buzzer =3; const byte cd4017beCLK =4; // CD4017BEの10年間のcounterconstバイトを制御しますcd4017beRST =5; constバイトbtn =13; constバイトリレー=12; // ---- System Strings#define strSize 3String str [strSize]; //システムイベントとレポートprintout#define reportSize 5const String reportStr [reportSize] ={"開始中..."、 "すぐにスタンバイ状態になります..."、 "停止しました。"、 "***テストモード***"、 "通常モード。"}; //#definestandbySize 5 // const StringstandbyStr [standbySize] ={"Press key"、 ">"、 "or"、 "send"、 "start"}; const String autostartStr [2 ] ={"Autostart off。"、 "Autostarton。"}; // ----システム状態の構造バイナリフラグ配列#defineflagElements 6bool binFlags [flagElements] ={0、1、1、0、0、0 }; // ----要素[i]目的init /スタンバイモードval // 0チェック済み0 // 1終了済み1 // 2スタンバイ1 // 3スタンバイメッセージ送信済み0 // 4コイル/センサーエラー0 // 5テストmode 0 // ----温度測定および関連機能#include "OneWire.h" #include "DallasTemperature.h" #define DS18B20 2 // D2OneWireでOneWireバスを設定temprWire(DS18B20); // OneWireバスで動作するようにDS18B20を設定しますDallasTemperatureセンサー(&temprWire); float tempr; //測定値floattemprInit; // 1回の比較の測定値のコピーfloattemprPrev; //周期的比較のための測定値のコピー#definemUnit 2float temprBottomLim [mUnit] ={0、26}; // temprの温度で自動開始ANDtemprの1回限りの分析constchar unit [mUnit] ={'F'、 'C​​'}; const String unitStr [mUnit] ={"華氏モード。"、 "摂氏モード"}; float TrendSens [mUnit] ={0、0.1}; //一定温度として評価される+/-範囲(F / C)// ***華氏の参照値は起動時に計算されます!booltrend [2] ={1、0}; //温度トレンドを以下のように記述します// ----要素[i]目的// 0変更// 1トレンド#definecheckSize 7const String checkStr [checkSize] ={"水が検出されました!"、 "発熱体エラー!"、 「6人分のコーヒー」、「2人分のコーヒー」、「水を忘れた!」、「センサーエラー!」、「コーヒーの準備ができました。」}; float temprCheck [mUnit] [checkSize] ={{}、{- 0.15、5、17、28、60、-127、110}}; // | <-REL-> | <-CONST-> | // [j] F / C // ---------------------------------------- ----- // ----要素[i]使用目的// 0自動開始rel値// 1コイルエラー検出rel値// 6つのrel値に対して2つの水// 2つのrel値に対して3つの水// 4水検出なしrel値// 5 D2const参照に信号なし// 6沸点const参照// ----グラフ宣言と変数#defineposYsize128byte posY [posYsize]; byte pointer =0; #define refrElements 42float temprRefr [refrElements];#define rangeElements 2 // min / max#define mode 2 //通常/テストmodefloatgraphRange [mUnit] [mode] [rangeElements] ={{{}、{}}、{{24、127.938889 + 2}、{-20、graphRange [1] [0] [1]}}}; // [k] 0 1 0 1 // [j] | 0 | 1 // ----要素[i] | | | | // 0 minFnorm maxFnorm minFtest maxFtest // 1 minCnorm maxCnorm minCtest maxCtestfloatgraphDiff [mUnit] [mode]; //温度による垂直ステップ// ----システムタイマー、制御および分析#include  lapsedMillis timer0; // 8ビット、PWMタイマー、関数elapsedMillis()unsigned long tmrPrev =0で使用; //間隔がupboolcyclic =0の場合、経過は前になります; const long tmrInt [5] ={500、2000、60000、640000、800000}; // ----要素[i]目的// 0 meas間隔(テストモード)、led ctrl // 1 meas間隔(通常モード)// 2 1回限りの分析(通常モード、コーヒー製造中)/循環分析(スタンバイモード)// 3スタンバイメッセージの送信(通常モード、コーヒー製造後)// 4システムスタンバイ(通常モード、コーヒー製造後)long copyof_tmrInt0 =tmrInt [0]; const String tmrInt0Str ="間隔が変更されました。"; // ----シリアル通信の構成constbyte btState =6; bool conn =0; const String connStr [2] ={"接続が失われました。"、 "スマートフォンが接続されました。"};#include  const int RX1 =7; const int TX1 =8; SoftwareSerial sUART(RX1、TX1); #define exRXSize 6char exRX [exRXSize]; //シリアルポートからデータを受信する変数// ----メモリ管理#include  #define occBytes 2const byte addr [occBytes] ={0、1}; bool sysSettings [occBytes]; // ----メモリマップaddr [i] |データ|説明|保存されたval // ---------------------------------------------- ------- // 0 |ブール|自動起動| 0:自動開始なし、1:自動開始// 1 |ブール| measユニット| 0:華氏、1:摂氏// ----ターミネータとクリーンアップクルーconstchar termCharSpc =''; const String termStr; const byte termByte =0; const bool termBool =0; const uint8_t frame0 [] U8G_PROGMEM ={0xFF、 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0x3F、0x00、0xFE、0xFF、0xFF、0xFF、0x07、0xFF、0xFF、0xFF、0x7F、0x00、0xFC、0xFF、0x7F、0xF0、0x3F、0x00、0xFE 0xFF、0x07、0xFF、0xFF、0xFF、0x7F、0x00、0xFC、0xFF、0x7F、0xF0、0x8F、0xFF、0xFF、0xFF、0xFF、0xFF、0x1F、0xFF、0xFF、0xFF、0x1F、0x 0xFF、0xFF、0x8F、0xF F、0xFF、0xFF、0xFF、0xFF、0x1F、0xFF、0xFF、0xFF、0x1F、0xFF、0xF1、0xFF、0xFF、0xFF、0x8F、0xFF、0x1F、0x7F、0x8C、0x3F、0x1E、0x 0x1F、0xFF、0xF1、0x00、0x18、0xC0、0x8F、0xFF、0x1F、0x7F、0x8C、0x3F、0x1E、0xFF、0x00、0xFE、0x1F、0xFF、0xF1、0x00、0x18、0xC0 0x1F、0x0C、0x3E、0x1E、0xFF、0xFF、0xF8、0x1F、0xFF、0x31、0xFE、0x7F、0xFC、0x8F、0xFF、0x1F、0x1F、0x0C、0x3E、0x1E、0xFF 0x31、0xFE、0x7F、0xFC、0x0F、0x0E、0x18、0x1F、0x0C、0x3E、0x1E、0xFC、0x00、0xF8、0x1F、0x7C、0x30、0xFE、0x7F、0xF0、0x0F 0x3E、0x1E、0xFC、0x00、0xF8、0x1F、0x7C、0x30、0xFE、0x7F、0xF0、0x0F、0xFE、0x18、0x1F、0x0C、0x3E、0x1E、0x3C、0x3E、0x1E、0x3C、0x3E、0x 0x7E、0xF0、0x0F、0xFE、0x18、0x1F、0x0C、0x3E、0x1E、0x3C、0x3E、0xF8、0x1F、0x7C、0xF0、0x00、0x7E、0xF0、0x0F、0x7E、0xF0、0x0F、0xFE、0xFE 0x3C、0x3E、0xF8、0x1F、0x7C、0xF0、0x3F、0x78、0xF0、0x0F、0xFE、0x18、0x1 F、0x0C、0x3E、0x1E、0x3C、0x3E、0xF8、0x1F、0x7C、0xF0、0x3F、0x78、0xF0、0x0F、0xFE、0x18、0x1F、0x0C、0x3E、0x1E、0x1 0xF0、0x3F、0x78、0xF0、0x0F、0xFE、0x18、0x1F、0x0C、0x3E、0x1E、0x3C、0x3E、0xF8、0x1F、0x7C、0xF0、0x3F、0x78、0xF0、0x3F、0x78、0xF0 0x80、0x07、0xF0、0x00、0xF8、0x7F、0x00、0x3C、0x00、0x1E、0xC0、0x3F、0x00、0x7E、0x00、0x3C、0x80、0x07、0xF0、0x00、0xF8、0x 0x1E、0xC0、0xFF、0xFF、0xFF、0x1F、0xFC、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0x1F、0xFC、0xFC 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0x7F、0x00、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0x7F、0x00、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF 0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x7E、0x06、0xE6、0x3F、0x06、0xC6、0x7F、0xFE、0xE7、0x3F、0x7E、0xFE、0xC7、0x7F、0x00、0x00、0x30 0x06、0x66、0x00、0x60、0x60、0x60、0x30、0x06、0x60、0x00、0x00、0x00、0x30、0x06、0x66、0x60、0x06、0x66、0x00、0x60、0x60、0x60、0x30、0x06 0x00、0x00、0x00、0x30、0x1E、0x66、0x60、0x06、0x66、0x00、0x60、0x60、0 x60、0x30、0x06、0x60、0x00、0x00、0x00、0x30、0x3E、0x66、0x60、0x06、0x66、0x00、0x60、0x60、0x60、0x30、0x06、0x60、0x00、0x00、0x00、0x3C 0xE6、0x61、0x1E、0xC7、0x3F、0x70、0xE0、0x3F、0x3C、0xFE、0xC3、0x3F、0x00、0x00、0x3C、0x7E、0xE6、0x61、0x1E、0xC7、0x3 0xFE、0xC3、0x3F、0x00、0x00、0x3C、0xDE、0xE7、0x61、0x1E、0x07、0x70、0x70、0xE0、0x1D、0x3C、0x1E、0x00、0x70、0x00、0x00、0x3C 0x1E、0x07、0x70、0x70、0xE0、0x31、0x3C、0x1E、0x00、0x70、0x00、0x00、0x3C、0x1E、0xE6、0x61、0x1E、0x07、0x70、0x70、0xE0、0x61 0x70、0x00、0x00、0x3C、0x1E、0xE6、0x61、0x1E、0x07、0x70、0x70、0xE0、0x61、0x3C、0x1E、0x00、0x70、0x00、0x00、0x7F、0x1E、0xE6 0x3F、0x70、0xE0、0x61、0x7E、0xFE、0xE7、0x3F、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0 x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、}; const uint8_t frame1 [] PROGMEM ={0xF8、// 11111000 00 0x21、// 00100001 01 0x22、// 00100010 02 0x24、// 00100100 03 0x08、// 00001000 04 0x10、// 00010000 05 0x24、// 00100100 06 0x44、// 01000100 07 0x0F、// 00001111 08 0x04、// 00000100 09 0x04、// 00000100 10 0x03、// 00000011 11 }; const uint8_t frame2 [] PROGMEM ={0x08、// 00001000 00 0x1C、// 00011100 01 0x3E、// 00111110 02 0x7F、// 01111111 03}; const uint8_t frame3 [] PROGMEM ={0x 7F、// 01111111 00 0x3E、// 00111110 01 0x1C、// 00011100 02 0x08、// 00001000 03}; void setup(){u8g.begin(); fillArrays(); pinMode(cd4017beCLK、OUTPUT); pinMode(cd4017beRST、OUTPUT); CD4017BE(0); // RESETをディケイドカウンターICに送信しますpinMode(btState、INPUT); pinMode(btn、INPUT); pinMode(リレー、出力); sUART.begin(9600); memo(2); // EEPROMセンサーからシステム設定をロードします.begin(); // DS18B20を開始しますtemprMeas(); temprInit =tempr;グラフ(2); //グラフを初期化ledHandler(0);} void loop(){sysControl(); checkBtn(); checkConn();処方箋(); u8g.firstPage(); do {draw(); } while(u8g.nextPage()); if(frame ==0){delay(3000);フレーム=1; scrClr(); }} // ----メモリ管理//パラメータを呼び出す// 2:起動時に読み取る// 0、1:適切なアドレスに書き込む// void memo(byte op){switch(op){case 2:for (バイトi =0; i  tmrInt [2])&&(!binFlags [5])){if(binFlags [2]){temprMeas(); if((tempr --temprInit <=temprCheck [sysSettings [1]] [0])&&(tempr  =temprCheck [sysSettings [1]] [6])&&(!binFlags [1])){//沸点コイルをチェック(0); strSelector(0、6); } if((timer0> tmrInt [3])&&(!binFlags [2])&&(!binFlags [3])){//スタンバイメッセージと2番目のセキュリティチェックstrSelector(1、1); binFlags [3] =1; if(!binFlags [1]){//ワンタイム解析コイル(0);の後にコイルが破損した場合//したがって、沸点はありませんでしたstrSelector(0、1); }} if(timer0> tmrInt [4]){//システムはスタンバイ状態になりますbinFlags [2] =1; strSelector(6、0); }} void temprMeas(){temprPrev =tempr; Sensors.requestTemperatures(); //センサーの読み取り値を更新if(sysSettings [1]){tempr =Sensors.getTempCByIndex(0); //温度を読み取ります} else {tempr =Sensors.getTempFByIndex(0); } if(tempr> =temprPrev + TrendSens [sysSettings [1]]){trend [0] =0;トレンド[1] =1; } if(tempr <=temprPrev + TrendSens [sysSettings [1]]){trend [0] =0;トレンド[1] =0; } if((tempr  temprPrev --trendSens [sysSettings [1]])){trend [0] =1; }} // ----コイル制御// 0:電源オフ// 1:電源オンvoidコイル(バイトop){スイッチ(op){ケース0:digitalWrite(relay、0); binFlags [1] =1; strSelector(1、2); ledHandler(0);壊す;ケース1:digitalWrite(relay、1); strSelector(6、0); CD4017BE(0);グラフ(1); for(byte i =0; i  0; i-){str [i] =termStr; } 戻る; } TX(); for(byte i =(strSize --1); i> 0; i-){//プリントアウトのロールstr [i] =str [i-1]; } buzz(4、1); } void draw(void){if(frame ==0){u8g.drawXBMP(0、0、128、64、frame0); } else {if(frame ==1){scr(); }}} void scr(void){if(binFlags [2]){#definestandbySize 4 const StringstandbyStr [standbySize] ={"Press key>>>>"、 "or"、 "send"、 "start"}; u8g.setFont(u8g_font_courB10); u8g.setPrintPos(2、12); u8g.print(standbyStr [0]); u8g.setPrintPos(14、26); u8g.print(standbyStr [1]); u8g.setPrintPos(30、40); u8g.print(standbyStr [2]); u8g.setColorIndex(!cyclic); u8g.drawBox(74、28、50、14); u8g.setColorIndex(cyclic); u8g.setPrintPos(76、40); u8g.print(standbyStr [3]); u8g.setColorIndex(1); } else {if((posY [0]> =20)||(posY [13]> =20)){u8g.drawBitmapP(5、0、1、12、frame1); } else {u8g.drawBitmapP(5、25、1、12、frame1); } if((posY [54]> =30)||(posY [112]> =30)){u8g.drawHLine(69、40、53); scrTempr(72、12); } else {scrTempr(72、44); } for(byte i =0; i  0){u8g.drawVLine(i、posY [i]、2); }}} u8g.setFont(u8g_font_6x12);バイトy =53; for(byte i =(strSize --1); i> 0; i-){u8g.setPrintPos(0、y); y =y + 9; u8g.print(str [i]); }} void scrTempr(byte tX、byte tY){u8g.drawVLine(2、4、39); u8g.drawHLine(0、40、69); u8g.drawHLine(0、posY [pointer-1]、5);バイトtXrel =2;バイトtYrel =11; if((tempr <100)&&(tempr> -10)){u8g.drawFrame(tX-tXrel、tY-tYrel、45、13); u8g.drawHLine(116、40、12); } else {u8g.drawFrame(tX-tXrel、tY-tYrel、51、13); u8g.drawHLine(122、40、6); } u8g.setFont(u8g_font_6x12); u8g.setPrintPos(tX、tY); u8g.print(tempr); u8g.print(char(176)); u8g.print(unit [sysSettings [1]]); if(trend [0]){return; } tXrel =12; if(trend [1]){u8g.drawBitmapP(tX-tXrel、tY-tYrel、1、4、frame2); } else {u8g.drawBitmapP(tX-tXrel、tY-tYrel、1、4、frame3); }} void scrClr(){u8g.firstPage(); do {} while(u8g.nextPage());} // ----グラフ配列のメンテナンス// paramを呼び出す// 0:step&fill // 1:clr // 2:initvoidgraph(byte op){ switch(op){case 0:if(pointer ==posYsize){for(byte i =0; i <(posYsize-1); i ++){posY [i] =posY [i + 1]; posY [i + 1] =termByte; }ポインタ=posYsize-1; } for(byte i =0; i  =temprRefr [i + 1])){posY [pointer] =i;戻る; } } 壊す;ケース1:for(byte i =0; i  0)&&(atof(exRX)> =1)&&(atof(exRX)<=999999)){copyof_tmrInt0 =(atof (exRX)* 1000); strSelector(5、0); } for(byte i =0; i  

回路図


製造プロセス

  1. QR、RFID、温度検証によるアクセス制御
  2. 温度および湿度データロガー
  3. LEDを制御するBluetoothを搭載したArduino!
  4. スマートシューズ(自動レーシングおよび発電)
  5. NextionディスプレイのBME280温度、湿度、および圧力
  6. ArduinoとMPU6050によるサーボモーターの制御
  7. OKGoogleのBluetooth音声制御アプライアンス
  8. u-blox LEA-6H 02GPSモジュールとArduinoおよびPython
  9. DHT11でBlynkの温度と湿度を読み取る方法
  10. Arduinoを使用したシンプルでスマートなロボットアーム
  11. Arduinoによる音声認識と合成