期末專題報告2
組長 F94089032 劉永勝
組員一 E24099025 李宇洋
組員二 E24099059 陳旭祺
前情提要
防疫旅館自動送餐車
在確認餐點與放置餐點後前往消費者的門口送餐,
讓消費者不需要直接與旅館員工或外送員接觸,減少染疫風險。
報告大綱
模組修改與
開發版比較
循跡功能
說明與實踐
車上模組
說明與實踐
後端
說明與實踐
陳旭祺
負責
劉永勝
負責
李宇洋
負責
流程介紹
( 紅 色 代 表 修 改 或 新 增 )
為什麼要使用ESP32晶片?
項目 Arduino UNO ESP8266 ESP32
MCU
AVR
ATMega328P
Tensilica Xtensa
LX106
Tensilica Xtensa
LX6
核心 單核20 MHz 單核80/160 MHz 雙核160/240 MHz
資料寬度 8 bit 32 bit 32 bit
SRAM 16 KB 160 KB 512 KB
Flash 32 KB 1-4 MB 4-32 MB
GPIO 13 8 18
ADC(類比) 8 1 18
PWM 6 8 16
類比解析度 1023 1023 4095
項目 Arduino UNO ESP8266 ESP32
12C組數 1 1 2
SPI組數 1 1 3
12S組數 1 1 2
UART組數 1 1 3 (硬體)
OTA更新 x 支援 支援
內建WiFi x 802.11b/g/n 802.11b/g/n
內建藍芽 x x BLE 4.2
內建觸控電容 x x 10
內建溫度感測 x x 1
內建霍爾感測 x x 1
網路售價(NT) 200 200 200
Multi-thread,可背景跑蜂鳴器
1. 更大的記憶體
2. 留給使用者彈性大,可根據需求修改分區表
3. 支援動態配置,可以直接操作heap區。
皆會用到
1. 藍芽 -跟maga板連線
2. WIFI-跟server連線
三者價格都差不多
進度1 – 車體
Arduino MEGA 2560
30
cm
TCRT5000
麥克納姆輪
進度1 – 循跡功能說明1
原理
TCRT5000感測器的紅外發射二極體不斷發射紅外線,當發射出的
紅外線沒有被反射回來
功能1- 循跡
5顆TCRT5000焊在PCB板上
進度1 – 循跡功能說明2
功能2 – 路徑說明 (白色為1、黑色為0)
01010
10000
1 2
進度1 – 循跡功能說明3
功能2 - 房號編碼選擇
Decimal LED1 LED2 LED3 LED4 LED5
0 0 0 0 0 0
1 0 0 0 0 1
2 0 0 0 1 0
3 0 0 0 1 1
4 0 0 1 0 0
5 0 0 1 0 1
6 0 0 1 1 0
7 0 0 1 1 1
8 0 1 0 0 0
9 0 1 0 0 1
10 0 1 0 1 0
11 0 1 0 1 1
12 0 1 1 0 0
13 0 1 1 0 1
14 0 1 1 1 0
15 0 1 1 1 1
Decimal LED1 LED2 LED3 LED4 LED5
16 1 0 0 0 0
17 1 0 0 0 1
18 1 0 0 1 0
19 1 0 0 1 1
20 1 0 1 0 0
21 1 0 1 0 1
22 1 0 1 1 0
23 1 0 1 1 1
24 1 1 0 0 0
25 1 1 0 0 1
26 1 1 0 1 0
27 1 1 0 1 1
28 1 1 1 0 0
29 1 1 1 0 1
30 1 1 1 1 0
31 1 1 1 1 1
起點、終點
1號房
2號房
進度1 –麥克納姆輪說明
實現全向移動,適用於轉動空間較小的地點。
進度1 – 循跡功能具體實踐1
使用2階陣列存取所有地上可能標記,比對TCRT5000之感應結果後,移動車輛。
const int code [32][5] = {
{0, 0, 0, 0, 0), //0
{0, 0, 0, 0, 1}, //1
{0, 0, 0, 1, 0} //2
{0, 0, 0, 1, 1}, //3
{0, 0, 1, 0, 0}, //4
{0, 0, 1, 0, 1}, //5
{0, 0, 1, 1, 0}, //6
{0, 0, 1, 1, 1}, //7
{0, 1, 0, 0, 0}, //8
{0, 1, 0, 0, 1}, //9
{0, 1, 0, 1, 0}, //10 一號房
{0, 1, 0, 1, 1}, //11
{0, 1, 1, 0, 0} //12
{0, 1, 1, 0, 1}, //13
{0, 1, 1, 1, 0}, //14
{0, 1, 1, 1, 1}, //15
{1, 0, 0, 0, 0}, //16 二號房
{1, 0, 0, 0, 1}, //17
{1, 0, 0, 1, 0}, //18
{1, 0, 0, 1, 1}, //19
{1, 0, 1, 0, 0}, //20
{1, 0, 1, 0, 1}, //21
{1, 0, 1, 1, 0}, //22
{1, 0, 1, 1, 1}, //23
{1, 1, 0, 0, 0}, //24
{1, 1, 0, 0, 1}, //25
{1, 1, 0, 1, 0}, //26
{1, 1, 0, 1, 1}, //27 forward
{1, 1, 1, 0, 0}, //28 {
{1, 1, 1, 0, 1}, //29
{1, 1, 1, 1, 0}, //30
{1, 1, 1, 1, 1}, //31 stop or
start
};
進度1 – 循跡功能具體實踐2
進度2 – 車上模組說明
使用Line Bot機器人作為點餐工具,將顧客房
號以及所需餐點記錄下來後回傳server(李宇洋
負責內容) 。而目前已把server架在ESP32,
可透過區域網路訪問,做為備案。
NodeMCU-32s開發板
進度2 - 車上模組具體實踐1
1. 使用者在相同區域網路上輸入指定參數
使用者介面
OLED介面
(for 後場人員)
進度2 - 車上模組具體實踐2
2. server接收訊息,無源蜂鳴器短暫提示音並更新OLED介面
使用者介面
OLED介面
(for 後場人員)
又收到1 筆訂單
進度2 - 車上模組具體實踐3
3. 做完餐點後,放置餐點,並利用遊戲搖桿選擇”delivery”,倒數5
秒後會發車,之後會再顯示下一筆訂單。
進度2 - 車上模組具體實踐4
新增一個queue的class,使用動態配置存入或刪除顧客訂單。
template <typename T>
class Queue
進 度 2 – 車 上
模 組 具 體 實 踐 5
已完成項目
1. ESP32作為server (備案)
2. 收到訂單處理程式-OLED,
Joystick, 蜂鳴器反應
3. Mega板與ESP32的
藍芽連線
4. RFID的UID比對
5. HX711得到正確的公克數
6. wav, mp3解碼器撥音樂
尚未完成項目
1. ESP32與server的
http連線
2. 當食物送至消費者時,
所有模組相應的程序
進度3 –後端說明 資料庫
雲運算平台
前端
使用者
互動
NodeMCU-32s開發板
資訊交換
進度3 –後端說明:架設Server
主要使用node.js以及安裝Express架構模組進行開發。
Express架構可以大幅簡化node.js撰寫Server的複雜性,
並且本身就可以處理HTTP協定的請求,以及根據不同的需求自
定義路由(Routes),最大的優點就是易於與database做連線,
例如:MongoDB, MySQL等資料庫。
進度3 –後端說明:互相通訊
Server
通知自走車送餐
通知使用者餐點抵達
使用者點餐
Client 1
自走車抵達時通知Server
Client 2
在Heroku的設定可以使用Webhook與Line Bot進行掛勾(Hook),
並且會使用兼具加密功能的HTTPS協定進行傳輸。
在ESP32方面,我們選擇搭配先前架設的Express使用的HTTP協定進行
傳輸,主要是因為與自走車傳輸的內容較無加密風險以及HTTP易於使用。
進度3 –後端說明:資料庫存取
MongoDB Atlas為MongoDB運行的
雲端資料庫,提供用戶進行資料存取。
Mongoose為設計給node.js使用的
一款模組,近似於轉譯器,會將
JavaScript的語法轉換為MongoDB的
語法後向MongoDB資料庫存取資料。
進度3 –後端具體實踐1
伺服器架設:
目前已經架設好Express Server。
(透過Heroku進行Deploy)
互相通訊:
與LineBot的連線以及互動功能大致完成
剩餘將資料存放至資料庫的需求,
正在進行與ESP32間的HTTP傳輸功能。
資料庫存取:
資料庫會在傳輸功能完成後進行開發。
進度3 –後端具體實踐2
與LineBot的互動功能大致分成加入好友以及傳送訊息
傳送訊息細分成以下4項:
(1)歷史紀錄:會發送請求後向資料庫拿取過往訂單紀錄。
(2)我要點餐:目前設定為固定的幾個套餐供選取,目標是以
網頁菜單取代使用文字點餐。
(3)撤銷訂單:通知伺服器後傳送資料,命令自走車回到起點。
(4)登出系統:將使用者資料儲存到資料庫後登出。

單晶片期末專題-報告二

Editor's Notes

  • #2 這張圖是我們產品的prototype,有WIFI、軌跡等功能,會在之後依序介紹
  • #3 這是我們上次報告的內容
  • #4 這是我們上次報告的內容
  • #5 1. LCD -> OLED+遊戲搖桿 2. ESP8622 -> ESP32 3. mp3解碼 -> mp3解碼 + 無源蜂鳴器 4. (車體問題) -> 使用汶諺學長的提供30x30(cm)平台的車子,底部有兩個L298N控制4個麥克納姆輪加上1個24V電源軌跡
  • #6 這是我們上次報告的內容
  • #8 工作原理 TCRT5000感測器的紅外發射二極體不斷發射紅外線,當發射出的紅外線沒有被反射回來或被反射回來但強度不夠大時,光敏三極體一直處於關斷狀態,此時模塊的輸出端為高電平,板載指示LED處於熄滅狀態;被檢測物體出現在檢測範圍內時,紅外線被反射回來且強度足夠大,光敏三極體飽和,模塊輸出低電平,板載指示LED被點亮。
  • #12 const int code [32][5] = { {0, 0, 0, 0, 0), //0 {0, 0, 0, 0, 1}, //1 {0, 0, 0, 1, 0} //2 {0, 0, 0, 1, 1}, //3 {0, 0, 1, 0, 0}, //4 {0, 0, 1, 0, 1}, //5 {0, 0, 1, 1, 0}, //6 {0, 0, 1, 1, 1}, //7 {0, 1, 0, 0, 0], //8 {0, 1, 0, 0, 1}, //9 {0, 1, 0, 1, 0}, //10 一號房 {0, 1, 0, 1, 1}, //11 {0, 1, 1, 0, 0} //12 {0, 1, 1, 0, 1}, //13 {0, 1, 1, 1, 0}, //14 {0, 1, 1, 1, 1}, //15 {1, 0, 0, 0, 0}, //16 二號房 {1, 0, 0, 0, 1}, //17 {1, 0, 0, 1, 0}, //18 {1, 0, 0, 1, 1}, //19 {1, 0, 1, 0, 0), //20 {1, 0, 1, 0, 1), //21 {1, 0, 1, 1, 0}, //22 {1, 0, 1, 1, 1}, //23 {1, 1, 0, 0, 0}, //24 {1, 1, 0, 0, 1}, //25 {1, 1, 0, 1, 0}, //26 {1, 1, 0, 1, 1}, //27 forward {1, 1, 1, 0, 0}, //28 {1, 1, 1, 0, 1}, //29 {1, 1, 1, 1, 0}, //30 {1, 1, 1, 1, 1}, //31 stop or start };
  • #13 const int code [32][5] = { {0, 0, 0, 0, 0), //0 {0, 0, 0, 0, 1}, //1 {0, 0, 0, 1, 0} //2 {0, 0, 0, 1, 1}, //3 {0, 0, 1, 0, 0}, //4 {0, 0, 1, 0, 1}, //5 {0, 0, 1, 1, 0}, //6 {0, 0, 1, 1, 1}, //7 {0, 1, 0, 0, 0], //8 {0, 1, 0, 0, 1}, //9 {0, 1, 0, 1, 0}, //10 一號房 {0, 1, 0, 1, 1}, //11 {0, 1, 1, 0, 0} //12 {0, 1, 1, 0, 1}, //13 {0, 1, 1, 1, 0}, //14 {0, 1, 1, 1, 1}, //15 {1, 0, 0, 0, 0}, //16 二號房 {1, 0, 0, 0, 1}, //17 {1, 0, 0, 1, 0}, //18 {1, 0, 0, 1, 1}, //19 {1, 0, 1, 0, 0), //20 {1, 0, 1, 0, 1), //21 {1, 0, 1, 1, 0}, //22 {1, 0, 1, 1, 1}, //23 {1, 1, 0, 0, 0}, //24 {1, 1, 0, 0, 1}, //25 {1, 1, 0, 1, 0}, //26 {1, 1, 0, 1, 1}, //27 forward {1, 1, 1, 0, 0}, //28 {1, 1, 1, 0, 1}, //29 {1, 1, 1, 1, 0}, //30 {1, 1, 1, 1, 1}, //31 stop or start };
  • #14 備案完成 - 藉由網址點單 (不求一次做到位,先求能做出來,再依序實踐)
  • #15 private IP。 一開始車子送貨車是在後場人員那裡,所以一開始車子上裝的OLED面板是給後場人員看的
  • #16 一開始車子送貨車是在後場人員那裡,所以一開始車子上裝的OLED面板是給後場人員看的