今日の自動化システムは、家庭、オフィス、大企業など、あらゆる場所にあり、すべてに自動化システムが装備されています。レストラン/ホテルも最近の自動化の傾向を採用しており、注文を受けるための食品やタブレットを配達するロボットを設置しています。タブレットのようなこれらのデジタルメニューカードを使用して、顧客は簡単にアイテムを選択できます。この情報はレストランのキッチンに送信され、ディスプレイにも表示されます。
このプロジェクトでは、Arduino、TFTディスプレイ、および433MHzRF送信機/受信機モジュールを使用してスマートレストランプロジェクトを構築しています。ここでの送信機セクションは、Arduino Uno、TFTディスプレイ、RF送信機で構成され、顧客はこれを使用して食品を選択して注文できます。受信機セクションはArduinoUno、LCDモジュール、RF受信機、およびブザーで構成されており、注文アイテムを追跡するためにレストランの厨房に設置されます。
必要なコンポーネント
- Arduino Uno(2)
- 433MHzRF送信機および受信機
- 2.4 "TFTLCDタッチシールド
- 16 * 2LCDモジュール
- I 2 Cモジュール
TFTLCDタッチシールドとArduinoのインターフェース
2.4 "TFT LCDタッチシールドは、タッチスクリーンとSDカードソケットも付属するマルチカラーのArduino UNO / Mega互換TFTディスプレイです。このTFTディスプレイモジュールは、明るいバックライトとカラフルな240X320ピクセルディスプレイを備えています。また、個別のRGBで構成されています。白黒ディスプレイよりもはるかに優れた解像度を提供するピクセルコントロール。
TFTディスプレイとArduinoのインターフェースは非常に簡単で、前のチュートリアルで説明しました。下の画像に示すように、TFTディスプレイをArduinoUnoボードに取り付けるだけで済みます。
TFT LCDは、次のようなポータブルアプリケーションの構築に非常に役立ちます。
- Arduinoタッチスクリーン電卓
- Arduinoを使用したスマートフォン制御のデジタルコードロック
- ArduinoSMART目覚まし時計
- ArduinoおよびTFTLCDを備えたNeoPixelLEDストリップ
また、ここですべてのTFTLCDベースのプロジェクトを確認してください。
回路図
スマートレストランメニュー注文システムプロジェクトは、RF送信機と受信機のセクションで構成されています。送信機側と受信機側の両方がデータ処理にArduinoUnoを使用します。以前は、ワイヤレスドアベルやハンドジェスチャ制御ロボットなどのプロジェクトを構築するために、Arduinoで同じ433 MHzRFモジュールを使用していました。送信機と受信機のセクションの回路図を以下に示します。
送信機セクション回路
このプロジェクトの送信機セクションは、Arduino Uno、RF送信機、TFTディスプレイシールドで構成されています。このセクションは、TFTディスプレイに表示されるメニューから注文するために使用されます。Arduino Unoは、すべてのデータを処理する送信機側の頭脳であり、RF送信機モジュールを使用して、選択したデータを受信機に送信します。RFトランスミッタモジュールのデータピンはArduinoのデジタルピン12に接続され、VCCピンとGNDピンはArduinoの5VピンとGNDピンに接続されます。
受信機セクション回路
このプロジェクトのレシーバーセクションは、Arduino Uno、RFレシーバー、16 * 2 LCDモジュール、およびI2Cモジュールで構成されています。RF受信機は送信機セクションからデータを受信するために使用され、LCDモジュールは受信したデータを表示するために使用されます。ブザーは、新しい注文が行われるたびに音を出すために使用されます。RFレシーバーのデータピンはArduinoのデジタルピン11に接続され、VCCとGNDピンはArduinoの5VとGNDピンに接続されます。ブザーの正のピンはArduinoのデジタルピン2に接続され、負のピンはArduinoのGNDピンに接続されます。I2CモジュールのSCLピンとSDAピンはアナログピンA5とA4Arduinoに接続され、VCCピンとGNDピンはArduinoの5VピンとGNDピンに接続されています。
コードの説明
レストランのこのスマート注文システムのRF送信機側と受信機側の完全なコードは、ドキュメントの最後に記載されています。このプロジェクトで使用されるすべてのライブラリは、指定されたリンクからダウンロードできます。
- レディオヘッドライブラリ
- SPFD5408ライブラリ
RadioHeadライブラリはRF送信機/受信機モジュールに使用され、SPFD5408ライブラリはTFTディスプレイに使用されます。
送信機セクションコード:
必要なすべてのライブラリを含めてコードを開始します。 RH_ASK.h ライブラリは、送信機モジュールと受信機モジュール間の通信に使用されます。 SPFD5408_Adafruit_GFX.h は、TFTディスプレイ用のコアグラフィックライブラリです。
#include
その後、呼び出されたオブジェクトの作成 「ドライバーの ための RH_ASKを 。
RH_ASKドライバー;
その後、TFTディスプレイのキャリブレーションされたX軸とY軸の最小値と最大値を定義します。
#define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905
次に、drawHome関数内で、TFT画面のレイアウトを描画します。ここでは、 tft.fillScreen を使用して背景色を設定します。
tft.drawRoundRect関数は、塗りつぶされた長方形を作成するために使用されます。 tft.drawRoundRect 関数の構文を以下に示します。
tft.drawRoundRect(int16_t x0、int16_t y0、int16_t w、int16_t h、int16_t radius、uint16_t color)
どこ:
x0 =長方形の始点のX座標
y0 =長方形の始点のY座標
w =長方形の幅
h =長方形の高さ
radius =丸い角の半径
color =長方形の色。
tft.fillRoundRect 関数は、塗りつぶされた長方形を描画するために使用されます。 tft.fillRoundRect 関数の構文を以下に示します。
tft.fillRoundRect(int16_t x0、int16_t y0、int16_t w、int16_t h、int16_t radius、uint16_t color)tft.fillScreen(WHITE); tft.drawRoundRect(0、0、319、240、8、WHITE); //ページの境界線tft.fillRoundRect(30、40、100、40、8、GOLD); tft.drawRoundRect(30、40、100、40、8、WHITE); // Dish1 tft.fillRoundRect(30、90、100、40、8、GOLD); tft.drawRoundRect(30、90、100、40、8、WHITE); // Dish2 tft.fillRoundRect(30、140、100、40、8、GOLD); // Dish3 tft.drawRoundRect(30、140、100、40、8、WHITE);
TFT画面でボタンを作成したら、ボタンにテキストを表示します。 tft.setCursor は、テキストを開始する場所からカーソルを設定するために使用されます。
tft.setCursor(60、0); tft.setTextSize(3); tft.setTextColor(LIME); tft.print( "メニュー"); tft.setTextSize(2); tft.setTextColor(WHITE); tft.setCursor(37、47); tft.print( "Dish1");
ボイド送信 機能内では、1秒ごとに受信側にデータを送信します。
voidtransmit(){driver.send((uint8_t *)msg、strlen(msg)); driver.waitPacketSent(); delay(1000); }
voidループ 関数内で、ts.getPoint関数を使用して生のADC値を読み取ります。
TSPoint p = ts.getPoint();
次に、 map 関数を使用して、生のADC値をピクセル座標に変換します。
px = map(px、TS_MAXX、TS_MINX、0、320); py = map(py、TS_MAXY、TS_MINY、0、240);
Raw ADC値をピクセル座標に変換した後、 Dish1 ボタンのピクセル座標を入力し、誰かがこの領域の間の画面に触れた場合は、メッセージを受信側に送信します。
if(px> 180 && px <280 && py> 190 && py <230 && pz> MINPRESSURE && pz <MAXPRESSURE){Serial.println( "Dish1"); msg = "Dish1"; 送信(); tft.fillRoundRect(30、40、100、40、8、WHITE); delay(70); tft.fillRoundRect(30、40、100、40、8、GOLD); tft.drawRoundRect(30、40、100、40、8、WHITE); tft.setCursor(37、47); tft.println( "Dish1"); delay(70); }
他のすべてのボタンについても同じ手順に従います。
受信機セクションコード
RFレシーバーのセクションコードには、RFレシーバーとLCDモジュールのライブラリを含めます。ArduinoとRF受信機間のSPI通信を確立するための SPI.h ライブラリも含まれて い ます。
#include
void loop 関数内で、送信されたメッセージを継続的にチェックします。また、受信モジュールがメッセージを受信した場合は、LCDモジュールにメッセージを表示し、ビープ音を鳴らします。
if(driver.recv(buf、&buflen))//ノンブロッキング{int i; digitalWrite(ブザー、HIGH); delay(1000); digitalWrite(buzzer、LOW);。lcd.print( "T1:"); lcd.print((char *)buf);
Arduinoを使用したスマートレストランプロジェクトのテスト
すべてのハードウェアを接続し、送信機と受信機の両方のセクションのコードをアップロードしたら、プロジェクトをテストします。プロジェクトをテストするには、TFTディスプレイのボタンを押します。レシーバー側に接続されたLCDモジュールに、テーブル番号がT1の皿名が表示されます。受信側のLCDに何も表示されない場合は、TFT画面が機能しているかどうかを確認してください。
これは、ArduinoとTFTディスプレイを使用してSmart Restaurant Menu OrderingSystemプロジェクトを構築する方法です。画面の向きを変更してボタンを追加することもできます。
完全なコードを含む作業ビデオを以下に示します。