一、項目背景
隨著人們生活水平和健康意識的提高,越來越多的人開始注重自己的飲食健康。在此背景下,智能營養秤系統應運而生,成為了一種非常實用的工具。本項目基于51單片機設計和實現一種智能營養秤系統,通過該系統可準確地測量食物的重量并計算其熱量、蛋白質、脂肪、碳水化合物等營養成分含量。
當前系統采用了STC89C52單片機作為主控芯片,預置了多種食材的營養成分數據。用戶只需要使用矩陣鍵盤輸入食材編號,將需要稱重的食材放置在重力傳感器上進行依次稱重,系統就可以自動計算出所有食材的各類營養含量總值,并通過液晶屏顯示出來。同時,系統根據預設的營養指標,對不達標或超標的食材進行對應的聲光提示,提醒用戶注意飲食健康。
當前系統還配備了無線WIFI模塊,可以將當前營養數據上傳到手機端實時顯示,并給出營養建議。這使得用戶可以隨時1了解自己的飲食情況,及時進行調整,從而達到更好的健康效果。
本項目的設計和實現是為了滿足人們對于飲食健康的需求,幫助人們更好地控制自己的飲食,達到健康瘦身的目的。同時,由于采用了51單片機的設計方案,具有成本低、易于制作、易于維護等優點,具有廣泛的應用前景。


二、系統設計過程
2.1 硬件組成
【1】STC89C52單片機作為主控芯片。
【2】4x4電容矩陣鍵盤用于輸入食材編號。
【3】HX711重力傳感器用來進行多種食材的稱重。
【4】1.44寸LCD顯示屏用來顯示所有食材的各類營養含量總值。
【5】ESP8266無線WIFI模塊用于將當前營養數據上傳到手機端實時顯示。
2.2 系統框架組成
【1】輸入:使用4x4電容矩陣鍵盤輸入食材編號,觸發稱重功能。
【2】稱重:根據輸入的食材編號,通過HX711重力傳感器對多種食材依次稱重。
【3】計算:系統自動計算所有食材的各類營養含量總值,并在1.44寸LCD顯示屏上顯示。
【4】判斷:根據系統預設的營養指標,判斷當前營養數據是否達標或超標。
【5】提示:若不達標或超標,系統進行相應的聲光提示。
【6】數據上傳:通過ESP8266無線WIFI模塊將當前營養數據上傳到手機端實時顯示,并給出營養建議。
2.3 系統模塊設計
【1】系統硬件設計
采用了51單片機作為主控芯片,重力傳感器用于稱重,矩陣鍵盤用于輸入食材編號,液晶屏用于顯示數據。同時,為了實現無線上傳功能,還需要添加WIFI模塊。
【2】系統軟件設計
系統的軟件設計主要包括兩個方面,即驅動程序和應用程序。其中,驅動程序負責與各個硬件模塊進行通信,讀取和處理相關數據;應用程序則負責實現具體的計算和控制邏輯。
【3】食材營養成分數據預置
預先測量并記錄多種食材的重量和營養成分含量,并將這些數據存儲在系統中供后續使用。
【4】食材識別和稱重
當用戶輸入食材編號后,系統自動從預置的數據中查找對應的營養成分信息。然后,用戶將需要稱重的食材放置在重力傳感器上,系統開始進行稱重并輸出重量數據。
【5】營養計算和指標判斷
系統根據已知的食材重量和營養成分數據,計算出當前食物的各類營養含量總值。同時,根據預設的營養指標,判斷當前食物是否達標或超標,并進行相應的聲光提示。
【6】數據傳輸和顯示
將當前的營養數據通過WIFI模塊上傳到手機端實時顯示,并根據用戶的身體數據和運動情況,推薦合適的飲食方案。
【7】整體測試和優化:對系統進行整體測試和優化,確保系統能夠正常工作并滿足設計要求。
2.4 程序設計思路
【1】定義多種食材的營養成分數據,存儲在程序中。
【2】初始化電容矩陣鍵盤和HX711重力傳感器。
【3】等待用戶輸入食材編號。一旦檢測到有效輸入,記錄食材編號并觸發稱重功能。
【4】根據輸入的食材編號,依次使用HX711重力傳感器進行稱重,并根據對應的營養成分數據進行計算,得出每種營養成分的總值。
【5】將所有食材的營養成分總值通過1.44寸LCD顯示屏展示給用戶。
【6】根據系統預設的營養指標,判斷當前營養數據是否達標或超標。如果不達標或超標,則進行相應的聲光提示。
【7】通過ESP8266無線WIFI模塊將當前營養數據上傳到手機端實時顯示,并給出營養建議。
三、程序代碼實現
3.1 HX711稱重傳感器代碼
下面是STC89C52單片機讀取HX711稱重傳感器的值,得到最終的重量,打印到串口的完整代碼:
#include
#include
?
// HX711引腳定義
sbit HX711_DOUT = P1^0; // 數據輸出引腳
sbit HX711_SCK = P1^1; // 時鐘輸入引腳
?
typedef unsigned char uchar;
typedef unsigned int uint;
?
uchar WeiLai, OldData; // 定義兩個變量,用于保存數據
uchar Data[3]; // 存放讀取的數據
long result = 0; // 定義長整型變量,用于存放最終的重量值
?
void delay_us(uint us) // 延時函數(微秒級)
{
while(us--)
{
_nop_(); // 空操作語句,延時一微秒
_nop_();
_nop_();
_nop_();
}
}
?
void Read_HX711() // 讀HX711函數
{
uchar i;
HX711_DOUT = 1; // 先將DOUT置為高電平
delay_us(1); // 延時1微秒
HX711_SCK = 0; // 將SCK置為低電平
delay_us(1); // 延時1微秒
?
for(i=0;i<24;i++) ? ? // 循環24次,讀取數據
? ? {
? ? ? ? ?HX711_SCK = 1; ? ?// 將SCK置為高電平
? ? ? ? ?delay_us(1); ? ? ?// 延時1微秒
? ? ? ? ?WeiLai = HX711_DOUT; ? ? ? // 讀取DOUT引腳上的數據
? ? ? ? ?result <<= 1; ? ? // 左移一位
? ? ? ? ?if(WeiLai == 1) ? // 如果DOUT為1,將result的最低位賦值為1
? ? ? ? {
? ? ? ? ? ? ?result++;
? ? ? ? }
? ? ? ? ?HX711_SCK = 0; ? ?// 將SCK置為低電平
? ? ? ? ?delay_us(1); ? ? ?// 延時1微秒
? ? }
??
? ? ?WeiLai = OldData; ? ? // 將OldData的值賦給WeiLai
? ? ?Data[2] = result; ? ? // 存儲重量值的最高字節
? ? ?Data[1] = result>>8; // 存儲重量值的中間字節
Data[0] = result>>16; // 存儲重量值的最低字節
}
?
void main()
{
TMOD = 0x20; // 定時器T1工作模式設置
TH1 = 0xfd; // 波特率9600
TL1 = 0xfd; // 波特率9600
TR1 = 1; // 啟動定時器T1
SCON = 0x50; // 設置串口工作方式
?
while(1)
{
Read_HX711(); // 調用讀HX711函數
?
// 將讀取到的數據打印到串口
SBUF = Data[0];
while(TI == 0);
TI = 0;
?
SBUF = Data[1];
while(TI == 0);
TI = 0;
?
SBUF = Data[2];
while(TI == 0);
TI = 0;
}
}
3.2 ESP82660-WIFI配置代碼
以下是STC89C52單片機控制ESP8266,配置成AP模式,開啟TCP服務器,等待客戶端連接上來的完整代碼:
#include
#include
?
#define RXD P3_0 // 串口接收引腳
#define TXD P3_1 // 串口發送引腳
?
typedef unsigned char uchar;
typedef unsigned int uint;
?
bit rcvflag; // 接收標志位
uchar idata RcvBuf; // 存儲接收到的數據
uchar len; // 存儲接收到的數據長度
uchar AT_OK; // 存儲AT指令執行結果
?
/* 延時函數 */
void Delayms(uint ms)
{
uchar i, j;
for(i=0;i;i++)>
-
單片機
+關注
關注
6050文章
44687瀏覽量
641171 -
STC89C52
+關注
關注
41文章
330瀏覽量
82415 -
51單片機
+關注
關注
275文章
5706瀏覽量
124965 -
WIFI
+關注
關注
81文章
5326瀏覽量
205811
發布評論請先 登錄
相關推薦
如何利用51單片機實現智能水杯系統的設計
分享一種基于51單片機的智能電子秤系統設計方案
基于51單片機的電子秤

基于51單片機的商用電子計價秤設計

評論