<!-- .slide: data-background="https://i.imgur.com/gJLfldF.jpg" data-background-color="#111111" data-background-opacity="0.2" --> ###### tags: `iot-car` `lab` 返回[物聯網智慧自走車](/s/5c7ggGf0Spqql5Gy31Cqzg) ## 打造簡易車位辨識系統?! <br> <span style="color:#F9BF45;">指定顏色區域停車</span> ###### [點我開啟簡報模式](/@BEExANT-ta/rJLyc77Ot#) ###### <kbd>ESC</kbd> 鍵進入總覽模式 ###### <kbd>&#8592;</kbd> <kbd>&#8593;</kbd> <kbd>&#8595;</kbd> <kbd>&#8594;</kbd> 切換頁面 --- <center><img src="https://i.imgur.com/Je5UX3n.jpg" width=40%></img></center> ==自動停車(輔助)系統==能夠幫助駕駛用==更輕鬆==的方式把車停好,大多數中高階的車款皆有這樣的系統,主要是利用車子四周的==感測器及影像==進行周遭車輛的檢測,==計算停車位的距離及大小==後控制車子駛入。 這單元我們先從把車==停進指定的區域==內為目標,利用==顏色感測器==判斷==指定顏色==車格並完成停車。 ---- :::info :globe_with_meridians: 參考資源 - [自動泊車輔助系統](https://www.easyatm.com.tw/wiki/%E8%87%AA%E5%8B%95%E6%B3%8A%E8%BB%8A%E8%BC%94%E5%8A%A9%E7%B3%BB%E7%B5%B1) ::: --- {%youtube LotFCfP4dzE %} {%youtube hUMA8cyZH7E %} ---- :::info :globe_with_meridians: 參考資源 - [彩色視覺](https://zh.wikipedia.org/wiki/%E5%BD%A9%E8%89%B2%E8%A7%86%E8%A7%89) - [Maker電子學 - 淺談色彩感測器的原理與應用](https://makerpro.cc/2018/11/principles-and-application-of-colorsensor/) ::: --- ## 目標 **使自走車維持在黑色的車道上行走,當判斷到指定顏色時進入車格,待完全進入時停止移動。** --- ## 設計原理 - 判斷==前後==感測器==皆為黑色時向前移動==,若左或右其中一個為白色表示偏離車道,往反方向移動進行校正。 - 當==左或右==感測器==碰到指定顏色時==,暫停一下後==往對應方向移動==,當==四個感測器==皆為==指定顏色==時表示已==完全進入==,停止車子移動。 --- ## 範例程式碼 新增程式檔並命名 ==指定顏色區域停車==,將以下程式碼複製貼上程式編輯區執行。 ```javascript= window.state = "初始化"; let target = "紅"; let F = DATA.colorF[3]; let B = DATA.colorB[3]; let L = DATA.colorL[3]; let R = DATA.colorR[3]; let speed = 30; if(F == "黑" && B == "黑" && L == "黑" && R == "黑") { state = "車格探索"; move_forward.set(speed); delay(300); led_color.set("白"); } if(L == "白" && R == "黑" && state == "車格探索" ) { console.log("車身向左偏移,向右校正"); move_right.set(speed); } if(L == "黑" && R == "白" && state == "車格探索" ) { console.log("車身向右偏移,向左校正"); move_left.set(speed); } if(L == target && R == "黑" && state == "車格探索") { state = "進入車格"; move_stop.set(); delay(300); led_color.set(target); delay(300); move_left.set(speed); } if(L =="黑" && R == target && state == "車格探索") { state = "進入車格"; move_stop.set(); delay(300); led_color.set(target); delay(300); move_right.set(speed); } if(F == target && B == target && L == target && R == target && state == "進入車格") { state = "停車完畢"; move_stop.set(); delay(300); led_color.set("黑"); } console.log(state); ``` --- ## 程式解說 逐行講解程式意義。 ---- ```javascript= window.state = "初始化"; ``` - 定義全域變數state,記錄目前自走車的狀態。 ---- ```javascript=3 let target = "紅"; ``` - 定義區域變數target,設定為指定顏色值。 ---- ```javascript=15 let F = DATA.colorF[3]; let B = DATA.colorB[3]; let L = DATA.colorL[3]; let R = DATA.colorR[3]; ``` - 定義四個方向的區域變數,設定為對應方向的顏色值。 ---- ```javascript= let speed = 30; ``` - 定義區域變數speed,設定為30,速度建議==不超過70==,太快會來不及判斷。 ---- ```javascript= if(F == "黑" && B == "黑" && L == "黑" && R == "黑") { state = "車格探索"; move_forward.set(speed); delay(300); led_color.set("白"); } ``` - 當四個方向==皆為黑色==時,將state設為 =="車格探索"== ,控制車子==向前移動==並設定led為白色。 ---- ```javascript= if(L == "白" && R == "黑" && state == "車格探索" ) { console.log("車身向左偏移,向右校正"); move_right.set(speed); } if(L == "黑" && R == "白" && state == "車格探索" ) { console.log("車身向右偏移,向左校正"); move_left.set(speed); } ``` - 當state為 =="車格探索"== 時表示行走在==車道==上,若==左或右碰到白色==代表==偏離==車道,控制車子==往反方向移動進行校正==。 ---- ```javascript= if(L == target && R == "黑" && state == "車格探索") { state = "進入車格"; move_stop.set(); delay(300); led_color.set(target); delay(300); move_left.set(speed); } if(L =="黑" && R == target && state == "車格探索") { state = "進入車格"; move_stop.set(); delay(300); led_color.set(target); delay(300); move_right.set(speed); } ``` - 當state為 =="車格探索"== 時,若左或右==判斷到指定顏色==時,將state設為 =="進入車格"== ,控制車子==暫停一下==並設==led為指定顏色==後,再控制車子==往指定顏色方向移動==。 ---- ```javascript= if(F == target && B == target && L == target && R == target && state == "進入車格") { state = "停車完畢"; move_stop.set(); delay(300); led_color.set("黑"); } ``` - 當state為 =="進入車格"== 時,若四個方向皆為指定顏色,將state設為 =="停車完畢"== ,控制車子停止後設定led為黑色(即關閉)。 ---- ```javascript= console.log(state); ``` - 每次迴圈程式執行最後==顯示目前狀態資訊==於訊息欄中。 --- ## 參數修改 為方便實作,以下會將範例程式中可修改的參數標示出來,進行實作時只需修改對應參數,並觀察結果即可。 :::warning :zap: 詳細內建JS參數參考 - [內建Js參數及功能總覽](/s/wlfjvQBzRPCmJ8LCL3f2Fg) ::: ---- :::success **let target = =="x"==;** ::: - 在關卡圖的環境下,x可代入 紅、綠、藍、黃,使自走車判斷到對應顏色時進入停車。 ---- :::success **let speed = ==x==;** ::: - 設定自走車移動速度,在此單元中建議==不超過70==,以免影響判斷結果。 --- ## 範例影片 {%youtube -b7RsmZxl9Q %} <a class="btn btn-warning" style="width:100%;color:#333333;" href="/s/-UEmP-gsSIyDL1SSy3XXgA" role="button"> 車道置中移動 **&#8680;** </a> <a class="btn btn-primary" style="width:100%;" href="/s/BWE9-5cJRJ2KEDSG8f9kvA" role="button"> **&#8678;** 場地邊界判定 </a>
{"metaMigratedAt":"2023-06-16T14:45:56.140Z","metaMigratedFrom":"YAML","title":"打造簡易車位辨識系統?! - 指定顏色區域停車","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"transitionSpeed\":\"fast\",\"theme\":\"league\"}","contributors":"[{\"id\":\"a1db0c29-d848-4070-be84-9191a2398ca8\",\"add\":7781,\"del\":2906}]"}
    1213 views
   Owned this note