【单片机毕业设计】【mcuclub-jj-003】基于单片机的八层电梯的设计
??????最近設計了一個項目基于單片機的八層電梯系統,與大家分享一下:
一、基本介紹
項目名:八層電梯
項目編號:mcuclub-jj-003
單片機類型:STC89C52、STM32F103C8T6
功能簡介:
1、通過3*4矩陣鍵盤實現電梯內部的1-8層、開門、關門、呼叫(繼電器模擬)
2、通過其中一個四相步進電機模擬電梯開關門(正反半圈)
3、通過另一個四相步進電機模擬電梯升降,每轉一圈,代表一層
4、通過hx711采集電梯內重量,當開門時,電梯如果超載,則蜂鳴器報警,不關門,直到不超載
5、通過分離式紅外對管模擬防夾,如果關門時觸發,則自動開門
6、通過兩個LED燈代表此時電梯上下行狀態
7、通過數碼管顯示電梯處于的樓層
8、通過藍牙,將當前樓層發送導外機
外機部分:
1、通過4*4矩陣鍵盤實現電梯外部的1-8層呼叫
2、通過8個LED燈,指示當前電梯到達的樓層
3、通過藍牙,獲取數據并發送樓層請求
二、51實物圖
單片機型號:STC89C52
板子為綠色PCB板,兩層板,厚度1.2,上下覆銅接地。元器件基本上為插針式,個別降壓芯片會使用貼片式。
供電接口:TYPE-C
?
三、51仿真圖
仿真軟件版本:proteus8.9
電路連線方式:網絡標號連線方式
注意:部分實物元器件仿真中沒有,仿真中會用其他工作原理相似的元件代替,這樣可能導致實物程序和仿真程序不一樣
?
?四、32實物圖
單片機型號:STM32F103C8T6
板子為綠色PCB板,兩層板,厚度1.2,上下覆銅接地。元器件基本上為插針式,個別降壓芯片會使用貼片式。
供電接口:TYPE-C
?
?五、原理圖
軟件版本:AD2013
電路連線方式:網絡標號連線方式
注意:原理圖只是畫出了模塊的引腳圖,而并不是模塊的內部結構原理圖
內機:
?外機:
?
?六、PCB圖
由原理圖導出,封裝很大一部分都是作者自己繪制,不提供封裝庫,只提供連接好的源文件。中間有一個項目編號,隱藏在單片機底座下,插入單片機后不會看到。
兩層板,上下覆銅接地。
內機:
?
外機:
?
七、系統框圖
本設計以單片機為核心控制器,加上其他模塊一起組成此次設計的整個系統,此次設計包括主機和從機,主機和從機都包括中控部分、輸入部分和輸出部分。中控部分采用了單片機控制器,其主要作用是獲取輸入部分的數據,經過內部處理,邏輯判斷,最終控制輸出部分。
主機輸入由四部分組成,第一部分是稱重模塊,通過該模塊可以檢測當前電梯內當前人體的重量,當檢測到電梯內人體的重量大于設置的最大值進行報警提醒;第二部分是分離式紅外對管檢測模塊,在電梯進行關門時,檢測到有人,電梯門不打開;第三部分是矩陣鍵盤,通過該矩陣鍵盤用戶可以輸入想要到達的電梯樓層等;第四部分是供電模塊,給整個系統進行供電;輸出包括三個部分,第一部分是顯示模塊,通過數碼管顯示當前的樓層;第二部分是步進電機,控制電梯的運行及其電梯門的開關;第三部分是報警模塊,檢測到電梯內體重大于設置的最大值,進行報警提醒;第四部分是藍牙模塊,將當前按下的樓層數進行傳輸到外機進行顯示
主機輸處包括兩個三個部分,第一部分是矩陣鍵盤模塊,用戶可以通過該模塊進行電梯樓層的輸入,第二部分是供電模塊,用戶可以通過該模塊進行供電,第三部分是藍牙模塊,將內機輸入的信息進行傳輸進來進行顯示;輸出通過LED指示燈指示當前的按下的樓層數。
具體系統框圖如圖所示。
?
?八、軟件設計流程
主機系統的主流程圖如圖所示;在主程序中:首先對各個模塊進行初始化,隨后進入while主循環,在主循環中,首先進入第一個函數按鍵函數,該函數主要分為兩部分,第一部分為調用按鍵掃描函數獲取按鍵鍵值,第二部分通過鍵值進行相應的處理操作,比如確定樓層數、開門、關門;緊接著進入第二個函數處理函數,獲取電梯內的重量,及其獲取外機按下的樓層數;然后進入第三個函數顯示函數,數碼管顯示當前樓層,LED顯示當前的電梯方向;然后進入第四個函數處理函數,當電梯處于停止狀態時,按下的電梯樓層數為目標樓層數,如果當前電梯為下行方向,當前樓層高于按下樓層,當電梯下行,檢測到按下樓層小于當前運行樓層,則目標樓層為按下樓層。如果當前電梯上行,檢測到按下樓層高于當前樓層,目標樓層為按下樓層;如果當前樓層比目標樓層高,電梯下行,且電梯運行樓層到達當前的樓層數-1,如果當前樓層比目標樓層低,電梯上升,如果電梯運動時間到達,當前樓層加一,當前樓層等于目標樓層,如果門是關閉的,開門,如果門已經打開了,開啟停留定時,如果超重,門不關閉且聲光報警,如果沒超重,門關閉,關閉聲光報警,如果停留時間到達,如果門是開啟的,關門,如果觸發防夾,標記未停留完成,門已關閉清除當前按下樓層標志位,如果電梯方向為下降,清除當前樓層下標志位,發送當前樓層,如果電梯方向為上升,清除當前樓層上標志位,發送當前樓層。
?
?九、部分程序展示
軟件版本:keil5
邏輯程序和驅動程序分開,分布于main.c和其他.c文件
void Manage_function(void) {if(flag_lift == 0) //如果當前電梯停止{if(flag_stop == 1 && flag_door == 0){if(flag_floor_d[1] == 1 || flag_floor_u[1] == 1) //一樓按下,目標樓層為一樓{target_floor = 1;}else if(flag_floor_d[2] == 2 || flag_floor_u[2] == 2) //二樓按下,目標樓層為二樓{target_floor = 2;}else if(flag_floor_d[3] == 3 || flag_floor_u[3] == 3) //三樓按下,目標樓層為三樓{target_floor = 3;}else if(flag_floor_d[4] == 4 || flag_floor_u[4] == 4) //四樓按下,目標樓層為四樓{target_floor = 4;}else if(flag_floor_d[5] == 5 || flag_floor_u[5] == 5) //五樓按下,目標樓層為五樓{target_floor = 5;}else if(flag_floor_d[6] == 6 || flag_floor_u[6] == 6) //六樓按下,目標樓層為六樓{target_floor = 6;}else if(flag_floor_d[7] == 7 || flag_floor_u[7] == 7) //七樓按下,目標樓層為七樓{target_floor = 7;}else if(flag_floor_d[8] == 8 || flag_floor_u[8] == 8) //八樓按下,目標樓層為八樓{target_floor = 8;}}}if(flag_lift == 1) //如果電梯當前方向下降{if(flag_floor_d[7] == 7) //如果七樓下{if(current_floor > 7) //如果當前高于七樓,目標樓層等于七樓{target_floor = 7;}}else if(flag_floor_d[6] == 6) //如果六樓下{if(current_floor > 6) //如果當前高于六樓,目標樓層等于六樓{target_floor = 6;}}else if(flag_floor_d[5] == 5) //如果五樓下{if(current_floor > 5) //如果當前高于五樓,目標樓層等于五樓{target_floor = 5;}}else if(flag_floor_d[4] == 4) //如果四樓下{if(current_floor > 4) //如果當前高于四樓,目標樓層等于四樓{target_floor = 4;}}else if(flag_floor_d[3] == 3) //如果三樓下{if(current_floor > 3) //如果當前高于三樓,目標樓層等于三樓{target_floor = 3;}}else if(flag_floor_d[2] == 2) //如果二樓下{if(current_floor > 2) //如果當前高于二樓,目標樓層等于二樓{target_floor = 2;}}else if(flag_floor_d[1] == 1) //如果一樓{if(current_floor > 1) //如果當前高于一樓,目標樓層等于一樓target_floor = 1;}}if(flag_lift == 2) //如果當前電梯上升{if(flag_floor_u[2] == 2) //如果二樓上{if(current_floor < 2) //如果當前樓層低于二樓,目標樓層等于二樓{target_floor = 2;}}else if(flag_floor_u[3] == 3) //如果三樓上{if(current_floor < 3) //如果當前樓層低于三樓,目標樓層等于三樓{target_floor = 3;}}else if(flag_floor_u[4] == 4) //如果四樓上{if(current_floor < 4) //如果當前樓層低于四樓,目標樓層等于四樓{target_floor = 4;}}else if(flag_floor_u[5] == 5) //如果五樓上{if(current_floor < 5) //如果當前樓層低于五樓,目標樓層等于五樓{target_floor = 5;}}else if(flag_floor_u[6] == 6) //如果六樓上{if(current_floor < 6) //如果當前樓層低于六樓,目標樓層等于六樓{target_floor = 6;}}else if(flag_floor_u[7] == 7) //如果七樓上{if(current_floor < 7) //如果當前樓層低于七樓,目標樓層等于七樓{target_floor = 7;}}else if(flag_floor_u[8] == 8) //如果八樓上{if(current_floor < 8) //如果當前樓層低于八樓,目標樓層等于八樓{target_floor = 8;}}}if(current_floor > target_floor) //如果當前樓層比目標樓層高,電梯下降{flag_timer_begin = 0;flag_stop = 0;flag_lift = 1;if(flag_bujin_2_o == 0 && flag_bujin_2_c == 0 && flag_door == 0){flag_bujin_1_c = 1;flag_bujin_1_o = 0;}flag_send = 0;}else if(current_floor < target_floor) //如果當前樓層比目標樓層低,電梯上升{flag_timer_begin = 0;flag_stop = 0;flag_lift = 2;if(flag_bujin_2_o == 0 && flag_bujin_2_c == 0 && flag_door == 0){flag_bujin_1_c = 0;flag_bujin_1_o = 1;}flag_send = 0;}else //當前樓層等于目標樓層{if(flag_stop == 0) //如果沒有停留完成{if(flag_door == 0) //如果門是關閉的,開門{flag_bujin_2_o = 1;flag_bujin_2_c = 0;}else if(flag_door == 1) //如果門已經打開了{flag_timer_begin_s = 1; //開啟停留定時}if(weight_value > 1000|| INFRARED == 1) //如果超重了,進行蜂鳴器提醒,清除停留時間計數{timer1_count_s = 0;if(weight_value > 1000) //如果超重,聲光報警{if(time_num % 15 == 0){BEEP = ~BEEP;}}}else if(weight_value < 1000) //如果沒有超重,蜂鳴器關閉{BEEP = 1;}if(flag_time_s == 1) //如果停留時間到達{flag_timer_begin_s = 0;flag_time_s = 0;flag_stop= 1;}}if(flag_stop == 1) //如果停留完成{if(flag_door == 1) //如果門是開啟的,關門{flag_bujin_2_o = 0;flag_bujin_2_c = 1;if(INFRARED == 1 && flag_bujin_2_c == 1) //如果觸發防夾,標記未停留完成{flag_door = 0;flag_stop = 0;}}else if(flag_door == 0) //如果門已關閉清除當前按下樓層標志位{if(flag_lift == 1) //如果電梯方向為下降,清除當前樓層下標志位{if(flag_send == 0){send_buf[1] = (current_floor/10*0x10 + current_floor%10);Uart_Sent_Str(send_buf);flag_send = 1;}flag_floor_d[target_floor] = 0;}if(flag_lift == 2) //如果電梯方向為上升,清除當前樓層上標志位{if(flag_send == 0){send_buf[1] = (current_floor/10*0x10 + current_floor%10);Uart_Sent_Str(send_buf);flag_send = 1;}flag_floor_u[target_floor] = 0;}if(flag_lift == 0){flag_floor_d[target_floor] = 0;flag_floor_u[target_floor] = 0;}flag_timer_begin = 1; //開啟定時}}}if(flag_time == 1) //定時500ms到達,清除電梯運動標志位{flag_timer_begin = 0;flag_lift = 0;flag_time = 0;flag_floor_d[current_floor] = 0;flag_floor_u[current_floor] = 0;} }資料請點擊跳轉到官網下載
總結
以上是生活随笔為你收集整理的【单片机毕业设计】【mcuclub-jj-003】基于单片机的八层电梯的设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3 + BeautifulS
- 下一篇: 电子设计教程40:软启动电路-串联NTC