智能咖啡廳
- 引言
- 背景及需求分析
- 總體設計
- 賬号密碼比對及預警
- 會員卡服務
- 智能環境控制
- 無線點單
- 開發環境
- 硬體設計
- 軟體設計
- 資料庫設計
- 系統登入
- 會員資訊錄入
- 會員資訊查詢、修改及銷卡
- 充值與消費
- 無線點單
- 環境控制
- 總結與成果顯示
- 後續
引言
本項目通過使用C#(VS2019)+物聯網虛拟仿真實驗平台實作物聯網的智能咖啡館項目。實作的功能有賬号密碼比對(使用資料庫),預警拍照,實時監測溫濕度、煙霧等環境資料、無線控制裝置風扇、加濕器、LED等裝置,智能控制餐廳、RFID卡識别,會員卡消費充值、無線通信點單(區域網路)、會員資訊增删改查等功能。
背景及需求分析
首先,近年來人工智能的飛速發展,是我們的生活越來越“智能化”,“簡單化”。随着中國市場經濟的高速發展,越來越多的上班族和學生願意去咖啡廳消費。
目前,我國人均咖啡消費量還有很大的上升空間。一方面,資料顯示,2018年,與其他地區相比,我國人均咖啡消費量僅6.2杯。另一方面,人們消費意願是咖啡消費市場的強大基石,2019年,全國居民的食品煙酒消費支出比上年名義增長8.6%,占人均消費支出的比重為28.2%,占比排名首位。綜合來看,中國咖啡的消費市場還有很大的開發空間。
但在高速發展的同時,咖啡廳行業普遍采用手工管理方式,整體科技含量低。随着咖啡廳的規模和顧客數量的增加,手工管理模式無論是在工作效率還是成本上都難以适應現代化的企業發展。為有效解決這類企業問題,可以采用RFID應用加以物聯網化技術融合而成的智能咖啡廳管理系統。
總體設計
智能咖啡館管理系統采用RFID技術對原材料和消費人員進行管理,同時和物聯網智能控制相結合,對咖啡館環境進行安全舒适監測控制。基于RFID應用的會員卡消費模式,更有利于咖啡管的正常營運發展。在咖啡館開業之初,對每一位顧客發放裝有RFID标簽的會員卡,并提前初始化會員卡的資訊,對顧客資訊進行錄入。收銀台裝有RFID 讀寫器對每一個顧客的會員卡進行讀寫錄入,摒棄繁瑣的傳統現金支付,采用RFID技術,明顯更利于咖啡館未來的發展。在餐廳中安放遠端遙控開關,可以對室内的風扇、加濕器噴頭、照明燈、窗戶等進行遙控開關。在咖啡館中安放多種傳感器進行測量室内環境,檢測室内目前的溫度、濕度、光照強度,并進行實時顯示。還可進入智能調控安全模式,系統會根據室内有無火焰、有無煙霧等,自動選擇是否打開消防噴頭、窗戶等,進而建構一個安全、舒适、智能的咖啡館環境。管理人員登入系統需要輸入密碼,正确可以進入,錯誤三次将會電腦自動進行拍照,保障智能咖啡廳的安全。
賬号密碼比對及預警
從業人員在登陸頁面輸入自己身份卡的對應密碼即可進入到智能咖啡廳收銀端操作界面,如果密碼有誤,會進行提示,如果錯誤次數超過三次,将會自動進行拍照,防止有人非法登入智能咖啡廳界面。
具體界面如下。

會員卡服務
首先對每一位顧客進行辦理會員卡服務,把使用者的手機号,姓名,性别,家庭住址都填寫進此顧客的卡中。後期可進行查詢、删除和更改使用者資訊的操作。
每次顧客進店,在收銀台裝有的RFID ISO14443讀寫器都可對會員卡進行消費和充值服務,顧客還可查詢餘額,但顧客沒有更改餘額和資訊的權限。
智能環境控制
首先需要連接配接到網關,之後可在控制台選擇三種模式:手動控制、自動安全防控、資料檢測。
在手動模式中,可對智能咖啡廳的照明系統、風扇、窗戶和加濕裝置進行遠端控制。
在自動安全防控模式下,當打開檢測火焰或者檢測煙霧的開關時,就能自動檢測智能咖啡廳内的煙霧含量和火焰是否出現。當出現火災時,不需要人員的控制,就可以自動的打開消防噴頭,對火災進行控制。在出現大量煙霧時,也能自主的打開窗戶。這種智能防控裝置,不需要人員的調控,就能自主進行反應,大大的增加了智能咖啡廳的安全性和智能性。
在資料檢測模式下,在智能咖啡廳内裝有的溫濕度傳感器、光照傳感器等,可實時顯示室内的溫度、濕度和光照強度。便于人員調控室内環境,給來到智能咖啡廳的顧客一個舒适的消費環境,增加了顧客體驗,更加促進消費和推廣,進而使智能咖啡廳更加具有知名度。
無線點單
實作無線點單功能,主要分成收銀端和客戶點單端兩個部分。客戶點單端通過點單端軟體進行相應産品的選擇,,收銀端接收到客戶點單端發來的消息後,從業人員向客戶點單端發送一個響應,告訴消費者,從業人員已經收到了顧客點單的資訊,最後通過此資訊的内容進行備餐和送餐。
開發環境
- VS2019
- 物聯網仿真平台
硬體設計
本設計為了友善調試,使用仿真系統。用到的有RFID14443讀寫器、溫濕度傳感器、煙霧傳感器、火焰傳感器、光照傳感器、LED燈、風扇、消防噴頭等。連接配接方式如下:(項目檔案裡放了仿真檔案,直接在仿真平台上打開即可)
軟體設計
使用的上位機開發語言為 C#
資料庫設計
智能咖啡廳系統中的資料庫使用SQL Server資料庫來實作資料的增、删、改、查,資料庫包含兩個資料表,分别是從業人員資訊表和顧客資訊表。從業人員資訊表是儲存(從業人員)登入系統的賬号和對應密碼的表單,該表單以從業人員的卡号為主鍵, 每個從業人員的卡号對應一條不重複的記錄,智能咖啡廳系統必須使用資料庫中的A類卡片的卡号和對應密碼才能登入系統進行管理、控制,具體設計如表1所示。顧客資訊表是一個用于存放顧客資訊的表單,該表單以顧客卡号為主鍵, 每個顧客卡号對應一條不重複的記錄, 每一個表項包括顧客會員卡卡号、使用者餘額、位址、手機号等資料,具體設計如表2所示。
在程式中主要更改的東西有:自己的電腦裝置名、資料庫名稱、資料表名稱。
account,password都是自己的表項,建表的時候的名稱,可參考上面的圖。
string connString = "server=自己的電腦裝置名\\SQLEXPRESS; database=資料庫名稱 ;integrated security=SSPI";
string sqlString = "select account,password from 資料表名稱 where account='" + textzhanghao + "'and password='" + textmima + "' ";
找不到自己裝置名的話,可以看下圖,在這裡找自己的。
系統登入
從業人員登入部分主要是由密碼比對和預警拍照組成。登入者在賬号、密碼輸入位置輸入自己的賬号、密碼,系統會将這個密碼和背景資料庫中賬号對應的密碼進行比對,如果正确,進入到管理功能界面,如果錯誤會進行提示。當錯誤次數超過三次時,系統會自動調用電腦的攝像頭進行拍照,保障餐廳财産安全。密碼比對邏輯代碼如下:
if (cishu >= 3)
{
MessageBox.Show("輸入密碼次數超過三次");
Form2.pForm2.Photograph_Click(sender,e);
cishu = 1;
}
else
{
Form2.pForm2.btnClose_Click_1(sender, e);
if (sqlDataReader.HasRows)
{
cishu = 0;
frm3.Show();
this.Hide();
}
else{
cishu++;
MessageBox.Show("賬号密碼不正确");
}
}
預警拍照其實就是一個簡單的調用攝像頭,具體可以參考我以前的文章攝像頭拍照功能是怎樣實作的?自己動手做一個!。
會員資訊錄入
本系統的會員資訊錄入功能實際上就是将會員的資訊存入到智能餐廳的背景資料庫中。本設計中使用ADO.NET資料庫通路技術實作相應功能,首先通過序列槽擷取會員卡号,然後從業人員通過詢問消費者,獲得姓名、手機号、性别和家庭住址等資訊,将這些填入對應位置,使用ADO.NET資料庫通路技術存到背景資料庫中。使用ADO.NET資料庫通路的流程為:
(1)建立一個資料庫連接配接。
(2)在建立連接配接的條件下可以使用Command對象對資料庫發送新增、查詢、修改或删除等指令。
(3)建立DataAdapter對象,從資料庫中取得資料。
(4)建立DataSet對象,将DataAdapter對象填充到DataSet對象(資料集)中。
(5)關閉資料連接配接。
string sex = "";
if (radioButton1.Checked)
{
sex = "男";
}
else
{
sex = "女";
}
string connString = "Data Source=裝置名\\SQLEXPRESS;Integrated Security=True";
string sqlString = "insert into 資料表(sno,sname,RFIDNumber,sex,college)values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + sex + "','" + textBox4.Text + "')";
master = new SqlConnection(connString);//建立連接配接對象
master.Open();
cmd = new SqlCommand(sqlString, master);//建立資料指令對象
cmd.ExecuteNonQuery();
MessageBox.Show("插入記錄成功!");
textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = "";//清空各文本框
會員資訊查詢、修改及銷卡
本系統的會員資訊查詢、修改及銷卡實際上就是對背景資料庫中的會員資訊進行查詢、修改及删除。同樣是使用ADO.NET資料庫通路技術實作相應功能,首先通過序列槽擷取會員卡号,之後系統會将此卡号在背景資料庫中進行檢索,找到此資訊後,顯示出來,從業人員可以點選相應按鈕進行會員資訊的查詢、修改和銷卡,基本的查詢和删除對應的SQL語句如下:
(1)查詢:SELECT *FROM <資料表名> where card=”要查詢的卡号”
(2)删除:DELETE *FORM <資料表名> where card=”要删除的卡号”
充值與消費
本系統的充值消費是通過對資料庫資訊的檢索及修改完成的,消費者首先将自己的會員卡放在收銀台旁的讀卡器上,從業人員連接配接到背景資料庫,将此會員卡對應的資訊調取出來。然後填寫消費或者充值的數值,最後點選消費或者充值的按鈕即可。
無線點單
本系統的無線點單功能的實作主要分成兩個部分,一個是收銀端上位機,另一個是點單用戶端。通過使用雙端通信,進而完成無線點單功能。
收銀端上位機充當伺服器,接收各個點單用戶端發送來的資訊。從業人員首先将餐廳的IP位址填入其中,進行監聽有沒有點單用戶端發來的資訊,如果有,根據客戶的要求進行備餐,并根據發來資訊中的座位号給客人送餐,每次收到消費者發來的消息後,傳回一個回報給發送者,讓他知道收銀端已經收到他發送來的消息。
關鍵程式如下:
private string GetIpAddress()
{
string hostName = Dns.GetHostName(); //擷取本機名
IPHostEntry localhost = Dns.GetHostByName(hostName);
localhost = Dns.GetHostEntry(hostName); //擷取IPv6位址
IPAddress localaddr = localhost.AddressList[0];
return localaddr.ToString();
}
public void UdpSend()
{
//Parse()把十進制iP轉化成IPAddress類,綁定IP位址和端口
remoteIPEp = new IPEndPoint(IPAddress.Parse("1IP位址"), CLIENT_UDP_PORT);
//建立發送資料 Socket 對象與資料緩沖區
udpSendDataBuf = new byte[1024];
skUdpSend = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
//為false,等待執行
mreUdpShutDown = new ManualResetEvent(false);
mreUdpSend = new ManualResetEvent(false);
whUdp = new WaitHandle[2];
whUdp[0] = mreUdpShutDown;//UDP結束指令
whUdp[1] = mreUdpSend; //UDP服務結束指令
int iWaitRetCode;
iWaitRetCode = WaitHandle.WaitAny(whUdp, 1000); //等待指定數組中的任意元素接收信号,同時使用 TimeSpan 指定時間間隔
byte[] b_txt;
int iByteLen;
//滿足條件
while (iWaitRetCode != 0)
{
switch (iWaitRetCode)
{
case 1://發送資料
b_txt = Encoding.UTF8.GetBytes(strSendTxt);
iByteLen = b_txt.Length;
//初始化緩存資料
Array.Clear(udpSendDataBuf, iWaitRetCode, iByteLen);
//複制數組
Array.Copy(b_txt, udpSendDataBuf, iByteLen);
//發送到指定IP
skUdpSend.SendTo(udpSendDataBuf, remoteIPEp);
//消費掉一次事件
mreUdpSend.Reset();
break;
case WaitHandle.WaitTimeout://逾時
break;
}
//繼續下次事件檢測
iWaitRetCode = WaitHandle.WaitAny(whUdp, 1000);
}
skUdpSend.Close();
skUdpSend = null;
}
#endregion UDP發送線程線程
public static string strSendTxt;
private void button1_Click(object sender, EventArgs e)
{
mreUdpShutDown.Set();
}
private void button2_Click(object sender, EventArgs e)
{
strSendTxt = GetIpAddress() +":"+ textBox1.Text + "\r\n";
mreUdpSend.Set();
}
環境控制
首先需要連接配接到網關,之後可在控制台選擇三種模式:手動控制、自動安全防控、資料檢測。
在手動模式中,可對智能咖啡廳的照明系統、風扇、窗戶和加濕裝置進行遠端控制。
在自動安全防控模式下,當打開檢測火焰或者檢測煙霧的開關時,就能自動檢測智能咖啡廳内的煙霧含量和火焰是否出現。當出現火災時,不需要人員的控制,就可以自動的打開消防噴頭,對火災進行控制。在出現大量煙霧時,也能自主的打開窗戶。這種智能防控裝置,不需要人員的調控,就能自主進行反應,大大的增加了智能咖啡廳的安全性和智能性。
在資料檢測模式下,在智能咖啡廳内裝有的溫濕度傳感器、光照傳感器等,可實時顯示室内的溫度、濕度和光照強度。便于人員調控室内環境,給來到智能咖啡廳的顧客一個舒适的消費環境,增加了顧客體驗,更加促進消費和推廣,進而使智能咖啡廳更加具有知名度。
控制裝置的典型程式如下:
if (btn_diancisuo.Text == "打開")
{
foreach (SensorBase sensor in Relays)
{
byte[] data = sensor.Data;
data = new byte[] { data[0], data[1], data[2], 0x01, data[4] };
gateWay.SendData(sensor.Type, sensor.Addr, data);
ShowMessage(string.Format("電磁鎖打開成功!", Converts.ByteToString(sensor.Addr)));
}
btn_diancisuo.Text = "關閉";
lb_ElectromagneticDoor.Text = "打開";
}
else
{
foreach (SensorBase sensor in Relays)
{
byte[] data = sensor.Data;
data = new byte[] { data[0], data[1], data[2], 0x00, data[4] };
gateWay.SendData(sensor.Type, sensor.Addr, data);
ShowMessage(string.Format("電磁鎖關閉成功!", Converts.ByteToString(sensor.Addr)));
}
btn_diancisuo.Text = "打開";
lb_ElectromagneticDoor.Text = "關閉";
}
總結與成果顯示
自主設計的智能咖啡廳系統以RFID 高頻 ISO 14443原理為基礎,物聯網智能控制為輔。建立一個安全、智能、舒适、便捷的智能咖啡廳系統。其中使用了資料庫技術進行會員卡資訊的管理,統計;使用RFID 高頻 ISO 14443技術進行會員卡的消費、充值和查詢功能;使用網關和配置器進行遠端控制各種室内環境裝置、如風扇、窗戶、照明系統等:通過在室内安裝各種傳感器,如光照傳感器、溫濕度傳感器、火焰傳感器和煙霧傳感器等對室内環境進行檢控、并進行實時顯示。
智能咖啡廳系統充分迎合了當今時代咖啡廳發展的痛點,摒棄傳統咖啡廳行業普遍采用的手工管理方式,解決傳統模式整體科技含量低的問題。智能咖啡廳通過RFID應用加以物聯網化技術相融合,建構出智能化、舒适化、快捷化、安全化的智能咖啡廳環境,必将是未來咖啡廳的一個重大發展趨勢。
後續
在公衆号:物聯網知識 發送 智能咖啡廳系統設計與實作 獲得項目程式(源碼工程+文檔+使用的圖檔)。
也可點選直接下載下傳.
如果想了解更多物聯網、嵌入式、軟體開發、智能家居項目知識,可以關注我的軟硬結合專欄,裡面有衆多軟硬結合項目實戰,均有源碼工程。