# 電資工程入門設計與實作 工作紀錄簿 **備註:因固定分組,本工作紀錄簿將沿用至學期末,請每週至此範本中複製內容至自己的紀錄簿並填寫** ## 成員 * 班別:週四班 第6組 * 組員1:江浩瑋 B08901065 * 組員2:葉星宏 B08901015 * 組員3:趙懷青 B08901029 ## 範本連結 [Link](https://hackmd.io/@K03OUe-KT3yg86nOcOw6qA/HygNY2P8I/edit) ## 第四週紀錄 * 課堂應完成事項(**下課前必須找助教檢查**) * (小組) 車子組裝完成Part 1(前側柱、馬達座) * (小組) 車子組裝完成Part 2(下盤) * (小組) 車子組裝完成Part 3(中盤) * (小組) 車子組裝完成Part 4(上蓋) * (小組) 車子通電可動作 > 檢查完成[name=bimomial_wu] * 實際達成事項(必填) * 車子組裝完成Part 1(前側柱、馬達座) * 車子組裝完成Part 2(下盤) * 車子組裝完成Part 3(中盤) * 車子組裝完成Part 4(上蓋) * 尚未接線 * 圖片 ![](https://i.imgur.com/yeJa08v.jpg) ![](https://i.imgur.com/Jctde0e.jpg) ![](https://i.imgur.com/lbZYoE4.jpg) ![](https://i.imgur.com/v1hOdOx.jpg) ![](https://i.imgur.com/2C0xbgN.jpg) ![](https://i.imgur.com/37YlnVQ.jpg) * 組內討論事項 (必填) * 待填 (如問題、構想、分工合作、時間安排...等等) * 利用Open lab的時間來把還未完成的線接好 * 討論誰負責組裝哪個部分,以及如何分工 * 組員分工 (必填) * 焊接前,三個人各自負責上板、中板、下板 * 焊接的部分,比較難焊的地方兩個人一起焊 * 其他人就組裝 * 如果手邊的工作做完就先打工作紀錄 * 遇到的問題、處理狀況、解決方式 (必填) * 一開始不知道馬達的外、內、中板的順序和中板四個角落都要塞螺帽,所以前前後後裝好又拆了好幾次。 * 焊接電線的部分,因為有一兩個焊點是要同時焊上兩條線,但我們一開始把兩條線先焊在一起的時候沒有焊好,所以導致後來把這兩條線焊到焊點上時,其中一條線就脫落落了。 * 馬達白色塑膠套剪錯邊導致馬達接電線的一邊是朝向內,一邊是朝向外(整體來說應該是不會影響車子的運作,但因為我們把電線焊上馬達時,加太多錫,導致那一邊的電線有一點擠)。 (底下為示意圖↓) ![](https://i.imgur.com/hSIZEAy.jpg) * 有些說明的地方看不太懂。 * 課程建議 (選填) * 希望電路圖旁邊可以附實體示意圖。 * 紅外線模組的排針希望可以是往上的而不是往後。 * 想說的話 (選填) * 待填 ## 第四週批閱區 * 助教批閱欄 * 助教回饋 焊接的部分可以稍微紀錄一下助教講過的技巧,之後應該還是蠻有可能遇到需要焊接的部分,然後有提到加太多錫的部分,下次可以請助教幫忙用吸錫器除掉。然後說明看不懂的部分也可以回饋給助教,讓我們精進這門課的教學品質。 建議的部分,附實體是個好建議XD 紅外線模組的排針是買來就是這樣的,之後你們可以考慮把他彎曲或是重新焊排真上去 [name=binomial_wu] * 教授批閱欄 * 教授評分等第 A- * 教授回饋 1. 所以看不懂說明是那些地方呢? 2. 焊接需多練習才會比較順手。後續只差過電測試嗎? 3. 目前課程進行到現在,除了建議還有沒有什麼想說的話? 4. 取個有趣的組名吧。^_^ [name=Jiun-Peng] ## 4/1 Open Lab * 上周回覆 1. 包括中間放電池的地方、安裝馬達的方式...... 2. 是,但在接線時,就發生蠻多問題的:pensive: 3. openlab時間有點不夠 4. 組名待定 * 實際達成事項 - [x] 完成接線 - [x] 過電可正常運作 - [x] 可透過藍牙控制馬達 * 圖片 * 側視圖 ![](https://i.imgur.com/Bsg80Cw.jpg) * 俯視圖 ![](https://i.imgur.com/XoiDKcy.jpg) * 左後視角 ![](https://i.imgur.com/Qk9q9B7.jpg) * 內部接線 ![](https://i.imgur.com/K7D3mZz.jpg) * 紅外線感測器接線圖(未整線) ![](https://i.imgur.com/RoL0Za2.jpg) ![](https://i.imgur.com/Lexminw.jpg) * 組內討論事項 (必填) * 討論誰負責組裝哪個部分,以及如何分工 * 組員分工 (必填) * 上次在課堂上焊好的開關,因為我們忘了帶走,openlab的時候就發現有些線斷了,所以一個人重新把斷掉的部分焊好 * 為了確保紅外線模組是好的,以及杜邦線沒有斷掉,其中一個人負責每接一條線時都先測試線有沒有斷 * 另外一個人打工作紀錄簿 * 程式碼 -> 用來測試線路是否接對,以及各個元件是否正常運作 * 馬達測試: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/658352203b0ddb33c63a49312f0c39fe4a51c3a1#diff-2c855594d7cbbf8b5529a32fec397a69) * 藍芽測試: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/9a3a3c8faad754a371e34c98a30f8d28f3a627e1#diff-2c855594d7cbbf8b5529a32fec397a69) * RFID測試: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/776c6886af7344cd5af360dbecf97bd1cae92beb#diff-2c855594d7cbbf8b5529a32fec397a69) * 遇到的問題、處理狀況、解決方式 * 當天材料短缺,找助教幫忙後也找不到 (沒有多芯線、母對母的杜邦線) → <font color='blue'>使用單芯線與組員自己的杜邦線</font> * 從紅外線模組接到arduino擴充版如果使用一般20公分的杜邦線長度會不夠,需要用兩條線才夠長,但連接處容易鬆脫,而且光是紅外線模組需要的線就有18條,如果直接把這18條接上來,整個線路就變的超級亂。 → openlab當天決定先用透明膠帶固定,三條線綁成一捆 → <font color="blue">後來決定去直接買30公分的杜邦線來用</font> * 在使用電表量測電壓時,arduino擴充板有煙及燒焦味 → 檢查後為降壓模組沒有調整,輸出電壓仍是11V,才導致量電壓時出現燒焦味。<font color="blue">需調整降壓模組使電壓輸出調成9V</font> * 課程建議 (選填) * 材料可以定期與上課前檢查及補充 * 可以在投影片或上課時再提醒一次要調電壓 * 想說的話 (選填) * 板子燒壞後,我們去詢問別組,發現大部分的組都沒調降壓模組,滿危險的 ## 4/8 Open Lab * 實際達成事項 - [x] 更換右輪馬達 - [x] 重新接線 * 圖片 * 壞掉的馬達 (前端斷裂) ![](https://i.imgur.com/hMYKwwh.jpg) ![](https://i.imgur.com/xooVOA4.jpg) * 影片 * [明顯慢很多的右輪](https://drive.google.com/file/d/1w1SEoXMpIN00R-g1xaUQX3sCzOX6dKVF/view?usp=sharing) * [縮時](https://youtu.be/LoFQEwQoUjI) * 組內討論事項 (必填) * 需要更換的零件(如馬達) * 組員分工 (必填) * 一起修理車車 * 程式碼 * MotorWriting: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/33847192dc53ffa653ae91a0f385b9deaee66462#diff-307871d8a47d672a04fca36f85c3f8e7) * 確定馬達可以直走、左轉、右轉、後退: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/d10d535fa61243849f4478a3389b5cc5f52bef35#diff-307871d8a47d672a04fca36f85c3f8e7) * IR Sensor測試: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/bde2d1e22ed78807909fe62dbf8de469956665f3#diff-c6bba70611be8dfb20681ad13581c4b9) * simple p control: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/4aea760690abf99f7128dceb3281d79390505386#diff-307871d8a47d672a04fca36f85c3f8e7) * 遇到的問題、處理狀況、解決方式 * 原本已經組裝好車子了,但其中一個馬達的齒輪箱突然壞掉,導致馬達會空轉,所以只好找open lab的時間重新換一個新的馬達 * 組裝好新的馬達後,卻發現新馬達轉軸鬆掉,所以左右輪轉速有明顯差距,即便調整程式也無法平衡只好再重新組裝一次 * 換馬達時電線有點亂,容易短路產生火花 * 裝好車輪後發現車輪旋轉時可能會卡到木板,需要再調整 * 課程建議 (選填) * 提醒同學組裝前先確認馬達狀況 * 小的螺絲起子數量不足,建議補充 * 輪胎買一種就好 * 想說的話 (選填) * 小小冷知識:輪胎的胎紋至少有3種,更換時要注意 * 因為第一次重新組裝好後才發現馬達有問題,所以我們先一次拿很多馬達來測試轉軸有沒有鬆掉,結果有一半的馬達都有問題 * open lab晚了一小時才開 ## 第六週紀錄 * 課堂應完成事項(**下課前必須找助教檢查**) - [x]MotorWriting - [x]紅外線黑白感測 - [x]循跡 > 檢查完成[name=erik] * 實際達成事項(必填) * 更換左輪馬達 * 調整直線前進速度 * MotorWriting * 紅外線黑白感測 * 圖片 * 修復完成的車子 ![](https://i.imgur.com/thF6qfJ.jpg) ![](https://i.imgur.com/4lW77d7.jpg) * 影片 * [失敗版](https://drive.google.com/file/d/1CB_cHuiezxZock6pt3rYoHrpmOKvTVOM/view?usp=sharing) 轉彎時外側車輪加速過猛,速度比跑直線時快,容易衝出軌道 * 組內討論事項 (必填) * 循跡演算法 * 分別給六顆感測器一個數值(例如-50 -20 0 0 +20 +50) * 讀完六個數值後將誤差加總 * 根據誤差值輸出對應電壓(需要測試) * 組員分工 (必填) * 兩人測試速度與紅外線 * 兩人寫循跡演算 * 遇到的問題、處理狀況、解決方式 (必填) * 組裝車子的時候我們把IR Sensor的輸出接成類比的腳位,因為要全部重新接過有一點麻煩,加上上課的時間不多,所以我們決定用<font color='blue'>analogRead來讀取IR Sensor的值,並用250為標準判定現在為黑線或白線。</font> ```arduino= int left = 75; int right = 75; byte error[3] = {-80, -20, 0}; byte left_pin[3] = {A0, A1, A2}; byte right_pin[3] = {A5, A4, A3}; for (byte i = 0; i < 3; i++) { if (analogRead(left_pin[i]) > 250) { left += error[i]; Serial.print("left "); Serial.print(i); Serial.println(analogRead(left_pin[i])); break; } if (analogRead(right_pin[i]) > 250) { right += error[i]; Serial.print("Right "); Serial.print(i); Serial.println(analogRead(right_pin[i])); break; } MotorWriting(right, left); ``` * 馬達的齒輪箱蠻容易壞的,如果車子行進時前面有東西擋住,導致輪子停住,但馬達仍持續轉的話,齒輪就容易鬆脫,得換一顆新的馬達。 * 車速過快的話容易在轉彎時來不及調整就衝出車道 * 馬達轉速沒調整好,循跡時過度轉彎,偏離軌道 * 程式碼部分,我們的寫法有蠻多問題的😥 1. 每個IR Sensor的敏感度都不太相同,250有時候沒辦法決定黑白。 2. 雖然大部分黑線都會大於250,白線都會小於250,但如果白色的部分剛好有影子或髒污,則測到的值就可能大於250,此時會導致判斷錯誤。 3. 我們的程式是假設每次一定都會有兩個IR Sensor感測到黑線。<br>解釋:如果是只有最右的IR Sensor(A5)感測到黑線,那right的error就會是-80,但如果最右邊兩個(A4、A5)都感測到,那right的error卻是-100。 4. 車子轉彎的方式只能是減慢內側輪子的速度,沒辦法加快外側的速度,所以轉彎的幅度過大的話就會轉不過去。 5. 改善的方式:重新寫一個程式(後來的p control version 2) * 課程建議 (選填) * 希望以後的課程可以在正課開始前提供十分鐘或提早開放教室(非open lab)讓我們先檢查與修理車子,這樣在上課時比較不會遇到狀況(如馬達等零件損壞)導致跟不上進度,也比較能夠專心上課 * 想說的話 (選填) * 一直修車心好累Orz(可能除了木板以外的東西都至少換過一輪ㄌ * 今天又換了一個馬達呢👍 * 車車表示:我不轉彎~我不轉彎 ~😒 ## 4/11 Open Lab #### [額外影片紀錄](https://youtu.be/1lpr6V8Bx0U) #### [github](https://github.com/ChiangHaoWei/arduino_tracing_car) * 實際達成項目 - [x] 按照圓形循跡軌道行走 - [x] 按照難度較高的軌跡行走 - [x] 用藍芽控制循跡與前後左右 * 圖片/影片 * [圓形軌道成功版](https://drive.google.com/file/d/19ocJS7x9nEEQtV0XdB6BaN5dHKoejGJy/view?usp=sharing): 可以順利繞行軌道兩圈以上 * [高難度軌道成功版1](https://drive.google.com/file/d/1DeEGwPkicBok6zrcf8nWGDLb2ZY7L2Lo/view?usp=sharing),[2](https://drive.google.com/file/d/1EMHp_C_xOGfDT8MmZG-00bLuI1cADkVY/view?usp=sharing): 我們讓車子只要發現每個IR Sensor都沒有感測到黑線,就先後退,重新轉彎。 這個方法可以順利繞行軌道兩圈以上,不過在髮夾彎時有機率會卡住,且切線沒有很精準,正在討論改善的方法 * [藍芽控制循跡與前後左右](https://drive.google.com/file/d/1los1tjZsDy9DI7azktwnHXuegGJmmLCU/view?usp=sharing): 可以順利循跡與遙控 * 組內討論事項 (必填) * 調整參數Kp數值 * 如何應對較高難度軌道的髮夾彎的策略 * 組員分工 (必填) * 一起討論、調整參數與程式碼,然後拿去試跑和錄影 * 程式碼 * 窮舉法:[完整程式碼](https://drive.google.com/file/d/1oFbfJ1kmALKRzraeVOOc1-p5hVnQEiO7/view?usp=sharing) → 將所有可能列舉出來 * p control version 1:[完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/blob/pC1/pControl1/pControl1.ino) → 參考老師的第二個方法 * p control version 2:[完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/blob/master/pControl2/pControl2.ino) → 利用陣列存腳位和每個情況error需要乘的倍率(方便測試時修改參數) * p control version 2 with backward: [完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/blob/pCWB/pCWB/pCWB.ino) → 讓車車在衝出軌道後會先後退回到軌道上,再慢慢修正 * p control version 3:[完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/tree/pC3/pControl3) → 避免車子在偏離軌道後直行會越離越遠,所以先把上一次的值存起來,在紅外線沒有感應到黑線時使用,可以減少偏離程度 * bluetooth control:[完整程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/commit/9a3a3c8faad754a371e34c98a30f8d28f3a627e1#diff-2c855594d7cbbf8b5529a32fec397a69) 目前可控制,但仍然須改善使用python必須按enter的問題 * 課程建議 (選填) * 地圖邊框可以再寬一點,車車輪子很容易跑出去或壓到 ![](https://i.imgur.com/6nldspf.jpg) ![](https://i.imgur.com/vJmNMZo.jpg) * 遇到的問題、處理狀況、解決方式 * 寫好程式碼拿去軌道試跑時,發現有時候能順利的過彎,有時候卻轉不過去,而且每次偏離軌道的情況都不一樣。起初以為是地板凹凸不平的原因,後來又想到可能是萬向輪有點卡的問題,果然換過萬向輪後,就能順利循跡了 * 有嘗試把error的部分加上積分控制的部分,但因為時間的關係,沒有成功。 * 想說的話 (選填) * 這次馬達雖然成功存活下來,但萬向輪就沒那麼幸運了(這次還是免不了換零件的環節呢👍 * 兩個軌道都跑成功後,接下來我們想讓車子在髮夾彎能更精準的沿著軌道跑,並提高速度 ## week 06 Homework * 成功影片: [圓形軌道成功版](https://drive.google.com/file/d/19ocJS7x9nEEQtV0XdB6BaN5dHKoejGJy/view?usp=sharing) [高難度軌道成功版](https://drive.google.com/file/d/1DeEGwPkicBok6zrcf8nWGDLb2ZY7L2Lo/view?usp=sharing) * 遙控車: [藍芽控制循跡與前後左右](https://drive.google.com/file/d/1los1tjZsDy9DI7azktwnHXuegGJmmLCU/view?usp=sharing) * 何謂PID control?: PID控制演算法包含三個基本的係數:比例(proportional)、積分(integral)、微分(derivative)。 * 比例控制: 比例控制的算法的修正量u和誤差error成正比,即Up=Kp×error,但如果在修正的同時又產生其他的誤差(如摩擦力),則最終達到平衡狀態時會有穩態誤差,無法完全修正,還需要其他參數。 * 積分控制: 為了解決穩態誤差,要再引入積分控制,作用是累計前面數次的誤差以調整修正量,調整的修正量和誤差error的積分成正比,即Ui=Kp×error+Ki×∫error。 * 微分控制: 微分控制則是為了減少因修正過頭而產生的震盪,因此會藉由前面誤差error的差值來調整修正量,即Ud=Kd×(error(t)-error(t-1))。 最後可以得到PID control的公式為u=Kp×error(t)+Ki×∫error(t)dt+Kd×(error(t)-error(t-1)),其中P對應到現在的誤差,I對應到過去的誤差,D則對應到未來的誤差。 助教跟教授評閱的地方怎麼都不見了? [name=binomial_wu] 忘記複製惹QQ 各位教授與助教 抱歉 ## 第六週批閱區 * 助教批閱欄 * 助教回饋 [name=] * 教授批閱欄 * 教授評分等第 * 教授回饋 ## 第七週紀錄 * 主題:指定題宣布 * 課堂應完成事項(**下課前必須找助教檢查**) * 問題0回答、答案訂正 * 問題1回答、答案訂正 * 問題2回答、答案訂正 * 問題3回答、答案訂正 * 完成甘特圖 * ~~完成系統方塊圖~~ > [name=YEN] * 實際達成事項 (必填) * 問題0回答、答案訂正 * 問題1回答、答案訂正 * 問題2回答、答案訂正 * 問題3回答、答案訂正 * 完成甘特圖 ```mermaid gantt title 車車課進度 dateFormat YYYY-MM-DD section 硬體修理 一起 :2020-04-16, 42d section motor 江浩瑋 :2020-04-26, 5d section RFID 江浩瑋 :2020-04-26, 5d section bluetooth 江浩瑋、趙懷青 :2020-05-06, 7d section IR_Sensor 江浩瑋、趙懷青 :2020-04-26, 7d section 參數調整 江浩瑋、趙懷青 :2020-04-28, 7d section BFS 一起 :2020-04-30, 14d section python_bluetooth 葉星宏 :2020-05-06, 7d section 工作紀錄簿 一起 :2020-04-16, 2020-05-28 section 進度報告01 葉星宏、趙懷青 :2020-04-26, 4d section 進度報告02 江浩瑋、趙懷青 :2020-05-07, 6d section final adaptation 一起 :2020-05-14, 14d ``` <font size=5>後來美化後的版本</font> ![](https://i.imgur.com/EeZ1Nhi.jpg) * 組內討論事項 (必填) * <font color="green"><B>TT減速馬達在6V時的最大功率</B></font>? * 6V × 0.18A =<font color="blue"> 1.08 W</font> * Q1 馬達空轉時 * 電池最多提供功率 * 33mW + 75mW × 6 + 86mW + 1080mW × 2 + 200mW = 2929mW = <font color = "blue">2.929W</font> * <font color="green"><B>電池輸出電流 </B></font> * 2.929 W/11.1 V = 0.26387 A = <font color="blue">263.87 mA</font> * <font color="green"><B>可以用多久 </B></font> * 2250 mAh/263.87 mA = <font color="blue">8.527 hr</font> * <font color="green"><B>人的運動功率</B></font> * 一般人一天的基礎代謝率約為2000大卡 * 也就是說一般人如果一天都處於靜止的狀態,則身體需要消耗2000 × 1000 × 4.18 = 8360000焦耳的能量 * 所以人體靜止時平均功率約為8360000 ÷ 86400 = 96.75w * 而人體運動時,其功率約為靜止時的3到5倍,所以推估人體運動時的功率為 300 * <font color="blue">B.300W</font> * <font color="green"><B>一般轎車功率</B></font> * 設轎車重2000kg,從靜止加速到 30 m/s(108 km/hr)需時 6 秒,則加速度為3m/s^2,車子受力所做功為增加的動能 (2000 × 30^2) ÷ 2 = 900000W,功率約為900000 ÷ 6 = 150000 = 150 kW * 最接近選項為 <font color="blue">C. 100KW</font> * Q2 * <font color="green"><B>地圖本身所需記憶容量</B></font> * 假設地圖內所有node相互連接,共有150 × 4 = 600個數 * 連接距離最多也是150 × 4 = 600個數 * 所需記憶體為 1200 × 2B = <font color="blue">2400 Byte</font> * 若node之間沒有順序,list還需要150 node,此時共需要2400 + 150 × 2 = <font color="blue">2700 Byte </font> * <font color="green"><B>執行BFS演算法時,所需最大額外暫存容量</B></font> * 需要queue來存取相鄰點,且不重複存取,需150 × 2B * 需要mark來標記node有沒有被存取到queue過,需150 × 2B * 需要存放所有node的predecessor,需150 × 2B * 所需最大空間為150 × 2 × 3 = <font color="blue">900 Byte</font> * <font color="green"><B>地圖與BFS演算法可否放進Arduino中?</B></font> * 不行,但可以存在雲端或電腦中,運算後再以無線通訊溝通 * Q3 * <font color="green"><B>需要多少通訊速率 </B></font> * 看到轉彎 上傳1B + 告知 UID 上傳4B + 接收後續指令 下載 1B <font color="blue">共 6B</font> * 所需 6 × 8 ÷ 0.1 = <font color="blue">480 bits/sec</font> * <font color="green"><B>藍芽可否支持(最大頻寬 9600bits/sec)?</B></font> * <font color="blue">可以</font> * 後來有上網查了一下鮑率(baud rate),而其定義為每秒傳輸線上訊號變化的速率,也就是說鮑率並不定等於資料傳輸之速率(data rate) * 因為一個傳輸訊號可能代表多個位元值,也就是說這個藍芽模組的資料傳輸通常是大於其鮑率 * 組員分工 * 兩人撰寫紀錄簿 * 兩人繪製甘特圖 * 輪流上台答題 * 課程建議 * 希望以後的討論課可以提供每組小白板,這樣計算或討論起來都比較方便 * 遇到的問題、處理狀況、解決方式 * 時間看起來有點不足 → 分工要明確一點 * 想說的話 (選填) * 今天繪製完甘特圖後,分工和時程也更明確了,希望能順利按進度完成。 ## 第七週批閱區 * 助教批閱欄 * 助教回饋 分工真的是很重要的事情,不然事情一定會做不完的 小白板可能要請有錢的大助贊助了XD > [name=binomial_wu] * 教授批閱欄 * 教授評分等第 A- * 教授回饋 -由於第六週有課後影片上傳的部份,所以和第七週一起回覆、給分 -恭喜你們成功讓車輛、藍牙都可運作,圓形軌道循跡看起來也很順 -三個班的老師們每週四中午都在402開會,通常大約兩點以前就會開完,開完會後你們可以提前進來使用教室沒有問題。 -循跡的部份除了影片記錄外,或許可以簡單記錄你們曾經做了哪些參數調整或其他改進,或者有哪些參數的選擇是失敗的,問題為何 -循跡時若地圖比較複雜,有時會遇到特殊的例外,例如全黑(軌道直角轉彎)、左右黑中間白(讀到兩條軌道或U型轉彎)等等,可以想想要怎麼處理 -實際在大地圖比賽的時候,地圖邊框會用膠帶貼,希望比較不會出問題。但在以往的比賽中確實有很多狀況都是出紙面造成的,摩擦力的變化也會有影響。 -針對馬達很容易有問題這件事,我們每年其實都有討論是否要先確認各元件好壞,但目前仍偏向不直接確認,讓大家養成元件拿到手要先測試的習慣,之後會有彼此分享經驗的時間,或許你們也可以把這點跟大家分享 -Ho-Lin ## 第八週 期中加油QwQ ## 第九週紀錄 * 實際達成項目 * BFS程式碼(未考慮邊的權重) * Arduino 初步程式碼(不包括RFID) * 藍芽程式碼 * 圖片/影片 * 今天主要在理解程式碼和打程式碼,所以沒有圖片或影片。 * 組內討論事項 (必填) * 走到節點時該如何轉彎 * 如果轉彎有偏離軌道該如何修正 * 組員分工 (必填) * 一人寫Arduino * 一人寫藍芽 * 一人寫BFS * 有空就寫紀錄簿 * 課程建議 (選填) * 整堂課都給各組自行分工、決定進度的感覺還不錯,最後的分組報告可以和大家一起討論遇到的困難,也有不少收穫。 * 遇到的問題、處理狀況、解決方式 * 今天才發現原來cebia上有程式碼可以直接修改,不過因為我們上課前已經有寫一些了所以就決定暫時先用自己寫的(python的部分還是採用助教給的),之後可能會改成助教給的。 * 電腦的藍芽配對成功後,無法藉由python的指令控制車子,車子藍芽的狀態停在閃紅燈,目前不確定是程式或是電腦的問題(有嘗試用手機連arduino,有成功連上),還在除錯中。 * 今天又壞了一個馬達(馬達空轉)😥,推測可能原因為因為我們在測試的時候車速都沒有調很快,當電池快沒電時,其電壓可能就會沒辦法推動馬達,但馬達又一直處於要轉的狀態,所以最後齒輪跟齒輪之間就會沒有咬緊,導致馬達空轉。 * 目前進度 * [arduino 程式碼](https://github.com/ChiangHaoWei/arduino_tracing_car/blob/APA/APA/APA.ino) * 測試能否接收指令轉彎的程式碼 ```python= bt = bluetooth("COM5") bt.do_connect("COM5") bt.write("123") while not bt.is_open(): pass readThread = threading.Thread(target=read) readThread.setDaemon(True) readThread.start() bt.write("s") while True: count = 0 turn = ["r","r"] request = read() if request == "c": bt.write(turn[count]) count += 1 if msgWrite == "exit": sys.exit() ``` * 因為剛開始還不太熟悉整個python程式碼的架構,所以上課時有花一點點時間研究。 * arduino的部分,目前在轉彎的部分還沒有完成。 * 有考慮當用BFS決定好路線後,就一次把所有的路線告訴arduino,這樣每次轉彎的時候就不需要再停下來等電腦傳該往哪個方向轉彎。 * 希望下次上課前車子至少可以跑完小地圖。 * [BFS 初步程式碼](https://drive.google.com/file/d/1gEw7IxcHDH900MAMTNKgVbeLyfHFi3xL/view?usp=sharing) * 目前先照著BFS的操作步驟把程式打出來,可以求出在邊長權重相同時的distance(dis[])和predecessor(pre[])。 * 希望下次上課能把邊長不同的情況完成。 * 想說的話 (選填) * 雖然從這週開始都是自行規劃進度,比較沒有壓力,但如果太放鬆感覺期限前會很慘w ## 第九週批閱區 * 助教批閱欄 * 助教回饋 * 我覺得自己打arduino很棒,但python記得用助教的code會省很多時間 * 會請大家做甘特圖,就是因為自己規劃進度很容易拖拖拉拉,所以記得回去看圖有沒有脫離進度太多 >[name=yen] * 教授批閱欄 * 教授評分等第 A- * 教授回饋 1. 組名呢? (敲碗!) 2. 在不知有程式碼可參考的情況下,獨立自己思考撰寫這樣很好喔。 3. 硬體都是不完美的,要考慮與測試的地方很多;現在走些冤枉路累積經驗,日後碰到問題會比較輕鬆些囉。 4. 我有看到你們之前精美的 Gantt Chart (雖然不是我批改);目前感覺程式撰寫與規劃還算不錯,可以的話儘量配合自己規畫的進度,並且每週做檢討並修正 (在外面工作就是這樣的),屆時就不用太擔心期末會很慘。 5. 和麟老師在結束前安排的討論,未來每週課程都會持續進行,希望你們有心得可以儘量分享,有問題也可以儘量提問喔。 > [name=Jiun-Peng] ## 第十週紀錄 * 實際達成項目 * 車子可以在節點轉彎和在死巷迴轉(死巷的部分還不太穩定) * 可以算出從起點往外擴展到每個節點的最短路徑樹 * 可以算出到距離最近的死巷的路徑 * 圖片/影片 * [迴轉成功版](https://youtu.be/BEN6pEaZolM) * [全景](https://drive.google.com/file/d/1omZ3NHQPMYE9PkghEeHr4hfKyua1paf0/view?usp=sharing) * 組內討論事項 (必填) * 組名:我就爛👍 * Game1和Game2的應對策略 * 車子轉彎和迴轉的方法 * 組員分工 (必填) * 一人寫Arduino(轉彎、迴轉) * 一人寫Python(讀迷宮) * 一人寫演算法(Dijkstra) * 課程建議 (選填) * 希望可以提供學長姐以前考試的影片供我們參考。 * 遇到的問題、處理狀況、解決方式 * 讀取 csv 檔時的 raw_data 內會有nan (type是numpy.float64),無法用boolean來做條件判斷。 * 用pandas.isnull() * 車子在進入轉彎塊的時候,沒辦法確保車子是否有歪掉 * 解決辦法:讓車子在循跡的過程中速度減慢,或是讓車子進入轉彎塊後,再倒退修正 * 車子在左右轉時,原本打算用delay的時間,來決定要轉多久,但是因為每次跑的狀況都不太一樣,就算參數都沒有動過,但也可能會因為當時電池的電力、地圖紙的摩擦力......等等,使得轉彎所需的時間會不同。 * 後來我們又嘗試用IRSensor來控制,但因為轉彎塊和線都一樣是黑色的,如果在轉彎的過程中,IR感測到轉彎塊的角落,那車子就會亂跑。 * 最後我們決定先讓車子轉彎一小段時間,等到快轉完時,在用IRSensor確定是否轉到正確的點。 * 迴轉的部分,目前大概只有30%的機率會成功,而且因為迴轉處都會有RFID的卡片,迴轉時容易造成車子的某一個輪子空轉。應該還需要不少時間來測試不同的迴轉辦法。 * [迴轉失敗版](https://drive.google.com/file/d/1xA54_IngUAj0Yx6qU5g-xw_gIGZ7MChH/view?usp=sharing)(輪子被卡片卡住了💢) * 藍芽的部分雖然有先用簡單的程式碼確認電腦可以與車子溝通,但為了測試方便,我們先暫時把該怎麼走寫死在arduino裡。 * 想說的話 (選填) * 下禮拜就要測試小迷宮了,感覺進度有點落後,要找時間趕工了😥 ## 第十週批閱區 * 助教批閱欄 * 助教回饋 覺得你們在處裡轉彎的時候試了很多方法,這的確是需要天時地利人和加上好解法,如果需要以前的影片的話可以來問問助教,我們都有過去大一時候的檔案喔,加油! >[name=Lin] * 教授批閱欄 * 教授評分等第 A- * 教授回饋 -看起來轉彎還算穩定,很不錯。 關於迴轉時會被RFID卡片卡到,可以想想是否能夠調整實際迴轉的位置,或採用不同的處理方式。 -想看考試的影片是想要知道哪些訊息呢? 我們有保留之前的影片,但車子、地圖都不完全相同,不確定是否有幫助。另外,我們也會希望能夠看到一些新的創意,不一定要照著前人的做法。 > [name=Ho-Lin] ## 第十一週紀錄 * 主題:指定題進度檢視、補救教學 - CHECKPOINTS - 車車 - [x] 循跡 - [x] 可以偵測到 node(包含十字路口和死巷) - [x] 偵測到 node 之後,穩定直走、轉彎、迴轉(寫死指令) - [x] 可以接收來自電腦的藍芽指令 - python - [x] 完成基本的 BFS - [x] 完成第一題的設計 - [x] 可以透過藍芽傳輸指令 - combined - [x] 可以讀取 RFID 的值 - [x] 能走完 3 個點 - [ ] 可以不輔助的情況下,完成小型 E 字地圖 - [ ] 可以不輔助的情況下,完成進階地圖 - [ ] 可以正確在死巷讀取 RFID > 給助教檢查[name=助教姓名] * 預計完成事項 (必填) * 完成藍芽和RFID的程式碼,並和控制車子的主程式合併 * 調整參數,增加轉彎的穩定度 * 實際達成事項(必填) * 完成藍芽與RFID的程式碼(但藍芽結合控制車子的主程式暫時還沒有完成) * 重新調整車子的參數 * 組內討論事項 (必填) * 如何解決藍芽和RFID的問題 * Game 1的策略 * 如何測試我們寫的演算法是否正確 * 組員分工 (必填) * 一人寫RFID+藍芽 * 一人寫Python * 一人寫演算法 * 遇到的問題、處理狀況、解決方式 (必填) * 原本以為藍芽和RFID應該不會花太多時間,所以上禮拜到今天上課前一直都只有修正轉彎的部分,但今天上課寫藍芽部分的時候就發現很多問題。 * 第一個問題是關於腳位的部分,雖然擴充版上每一個腳位都有一個V和G,而V都是5V的,但RC522的Vin是吃3.3V不是5V,後來查了一下擴充版的datasheet才找到在擴充版的最邊邊(寫著bluetooth的地方)有一個3V3。 * 再來是讀取UID的問題,如果RC522沒有讀到卡片的時候,我們的程式預設是回傳空指標,但實際上空指標所指到的記憶體其實也有值,所以藍芽在沒有卡片的時候也會傳一串東西給python造成error。最後我們修改讀UID的function,使藍芽在確定有讀到UID後才傳值給Python。 * 解決讀取UID的問題後,在藍芽傳輸的部分又出現會有亂碼的問題:sob:。後來發現問題的本身就是因為助教給的Python檔有兩種function是用來讀藍芽的(一個是讀uid,一個是讀string),所以當arduino傳的是uid但python端卻是用讀string的function來讀的話就會錯。解決方式基本上就是確保arduino要傳uid的時候一定要是用讀uid的function、傳string的時候就一定要用讀string的function。 * 因為之前馬達又出狀況,修好後沒重新測試,所以今天車子跑得不太順暢,要重調參數😥 * 在把路徑轉換成方向的指令時,發現地圖檔給的方位不是連續的東南西北,而是東西南北,可能要把16種可能都窮舉出來。 * 課程建議 (選填) * 想說的話 (選填) * 上週原本能華麗的轉彎,連影片都拍好了,沒想到修完馬達後就轉不過去了,咩噗😭😭 * 因為小地圖迴轉的部分沒辦法測試,所以我們自己跑去印了一張地圖來測試迴轉😁 * 雖然有想一些好像還行的方法來挑戰Game 1,但感覺車子還不是太穩定,可能還是用Dijkstra比較穩。 ## 第十一週批閱區 * 助教批閱欄 * 助教回饋 <font color=blue> * 敲碗華麗轉彎的影片! * 你們感覺藍芽是搞定了,加入主程式中應該是不會有太大的問題(如果function位置塞對的話)但重點還是車車走路的部分,畢竟知道指令但走不出來也是QQ。你們checkpoint進度算是不錯的,就剩下結合演算法跟藍芽了,有意識到演算法要配合車車實際的能力這點給個讚!加油啦! </font> > [name=erik] * 教授批閱欄 * 教授評分等第 A- * 教授回饋 1. 將 CHECKPOINTS 的成果明確標示出來,這樣做很好喔! 2. 感覺你們解決問題能力不錯了,車車行走其實很花時間,要多想些方式在程式上實現,讓它能夠走得比較穩定喔。 3. 等重現華麗的轉彎重新實現後,記得將華麗的影片放上來喔! :D > [name=Jiun-Peng] ## 第十二週紀錄 * 主題:宣布自選題 * 實際達成事項 (必填) * 調整穩定度 * 完成程式碼 * 開始試走迷宮 * 圖片/影片 * [試走迷宮(轉彎+迴轉)](https://drive.google.com/file/d/1R2OSyMsqbG9BPdWkJZF_p75BnitwXDMb/view?usp=sharing) * 組內討論事項 (必填) * 要不要一開始就一次傳完全部的方向指令 * 是否要調整轉彎策略(犧牲時間換取穩定度) * 組員分工 (必填) * 一人寫Python * 一人寫Arduino、測試車子 * 一人幫忙測試車子、寫紀錄簿 * 遇到的問題、處理狀況、解決方式 (必填) * 尋找最近dead end的演算法似乎還有改進的地方,在報告時有許多組提到這個問題,就算每次都尋找最近的點,也有可能因為路徑重疊導致總路徑不是最短路徑😢 * 試走迷宮時還是有發生車子還沒調整好就走到node的問題,還要再調整穩定度。 * 課程建議 (選填) * 期末連放兩周假之後就要直接自選專題展示,壓力山大😓 * 想說的話 (選填) * 目前的轉彎策略是先轉一小段時間後,再切回循跡模式,在報告的時候也有滿多組也是用這個方法。這樣雖然會比較快,但也較容易發生轉過頭或轉不夠的意外,所以我們在考慮要不要改成轉一小段就停下來偵測一次的方法,會比較穩定,但相對較慢。 * 今天又可以順利的轉彎和迴轉了,不過測試時有一次在很奇怪的地方出錯,還沒找到原因,感覺可能是隨機事件😅 * 目前試走迷宮的狀況還不錯,再來可能就等open lab時去測試評分系統可不可以記錄到分數,希望一切順利🙏🙏 ## 第十二週批閱區 * 助教批閱欄 * 助教回饋 自選題歡迎跟我們討論,然後指定題加油啦! 不知道你們提到的奇怪錯誤有沒有解決? > [name=binomial_wu] * 教授批閱欄 * 教授評分等第 B+ * 教授回饋 - 看起來已經基本把各功能都整合完了,相當不錯,祝你們這週測試順利。 - 自選題方面可以參考之前的各種提案,不要有太大的壓力,其實並沒有預期你們要做很複雜的題目,往年很多組只是由目前的自走車功能再做一些額外的改進,有一些 demo 也比較是想法的初步展現,而非一個完整、穩定的實作。反而動機、創意這些都會是主要的評分點。題目難度的選擇歡迎來跟我們討論。 - 轉彎的部份若不確定怎樣較好,可以考慮保留現在的,然後同步再寫一個比較慢的,測試當天會先給一小段練習時間,那時候直接在大地圖上測,再決定你們要用哪種。 > [name=Ho-Lin] ## 5/27 Openlab * demo影片:[測試我們自己設計的地圖](https://youtu.be/X315frpv_TU) * 各種轉彎版本: 1. 進入方形轉彎塊後,車子直接往前一跑一小段時間,在開始轉彎,並且轉彎時,先用delay一小段時間後,再用IR Sensor判斷是否讀到黑線,以確認是否轉彎成功。<br><font color=blue>優點:這個算是最簡單的寫法,這種寫法對馬達和L298N的負荷也都較小。</font><br><font color = red>缺點:只要車子進入轉彎塊的時候歪掉,基本上就爆了。</font> 2. 電腦透過藍芽傳指令給車車的時候,順便告訴車車前面是否有黑線,如果有黑線,車車走出轉彎塊的時候就會先左右擺盪,確認找到前面的黑線後(為了使車車走出轉彎塊的時候一定是直的)再開始轉彎,然後轉彎的方式跟版本1一樣。至於車子左右擺盪時,該如何決定讓車子先往右擺還是先往左擺,我是利用以下的方法:<br> 記錄下車子在進入轉彎塊前循跡的五筆error值,依照我們之前循跡的寫法,如果error值是負,就表示是右邊的IR Sensor偵測到黑線,相反的,如果error是正的,即表示是左邊的IR Sensor偵測到黑線,所以我們就可以用這五筆error值來判斷,車子在進入轉彎塊時,是否可能會因為循跡的修正,導致進入轉彎塊後方向歪掉。<br><font color=blue>優點:可以保證車子在左右轉的時候不會轉錯。</font><br><font color = red>缺點:但每轉一次彎就要花更多的時間,而且後來我們發現用error的正負來決定左右擺盪的方向不一定會是對的,因為車車也有可能是在轉彎塊中前進時歪掉的。</font> 3. 車子進入轉彎塊的時候,不只是單純往前走一小段時間,而是用另一種循跡(也就是說只要任何一個IR Sensor感測到白色,車車就會修正方向),而且因為轉彎塊不大,為了防止車車暴衝,我們讓車子前進一點點後就會停一段很小的時間再繼續前進,然後一直前進到車子離開轉彎塊後再直接轉彎。<br><font color=blue>優點:解決了車車在轉彎塊容易歪掉導致轉彎失敗的問題。</font><br><font color = red>缺點:每次轉彎一樣要花較多的時間。</font> 4. 另外,在車車轉彎的過程中,我們也有分成兩種方法,一種是用MotorWriting給一個參數後,馬達就維持這個轉數,直到IR Sensor感測到黑線才停止,另外一種是機械式的轉彎,也就是車車在轉彎的過程中會一直停頓。<br><font color = blue>機械式轉彎的優點是確保轉彎時IR Sensor感測到黑線時,arduino和馬達有足夠的時間反應,以確保偵測到黑線時有確實停下來。 </font><br><font color=red>但機械式轉彎因為要讓馬達一下轉一下停,所以很容易讓L298N發燙,導致其PWM就會不穩。</font> * BFS 策略 在我們原本的 BFS 演算法就能夠排出與各點距離的情況下,針對不同點距離的長短來做出優化。 1. 從離起點最近的點開始走,我們預設的走法。至少可以吃到一個點,但考慮到車車的速度與穩定性,最後的得分可能不會太高。 ```python= # all_and 是依照距離排序的 list of list ([distance, deadend node]) all_end = self.BFS(nd) # 找最近且還沒走過的 deadend for each in all_end: if each[1] not in self.mark: self.mark.append(each[1]) deadend = self.nd_dict[each[1]] route = self.BFS_2(nd, deadend) ``` 2. 從離起點最遠的點開始走,再以最遠的點當作新的起點。這種走法可以先把分數較高的點一次吃完,但風險也相對較高,一旦在途中出錯而且補救失敗就會連基本分數都沒有。在不知道實際地圖複雜程度的情況下,我們不會優先考慮此策略。 ```python= # all_and 是依照距離排序的 list of list ([distance, deadend node]) all_end = self.BFS(nd) # 將終點設為距離最遠的 node self.mark.append(all_end[-1][1]) deadend = self.nd_dict[all_end[-1][1]] route = self.BFS_2(nd, deadend) ``` 3. 從離起點距離為中位數的 deadend (以下稱新起點) 開始走,可以省去為了吃分數較低的點所花費的時間,風險也比最遠的點低,進可攻退可守。但是當走到該點後,接下來有可能朝向起點方向繼續走,或是朝最遠點。如果離該點最近的點為前者,最後還是會走回起點附近,則浪費了一開始走到中間所花的時間。理想情況是持續朝高分的點走,為了達到此情況,有可能需要改變新起點(改為附近的 deadend),讓距離新起點最近的點是分數更高的點,即為此策略的改良版本。這也是我們最後採用的策略。 ```python= # all_and 是依照距離排序的 list of list ([distance, deadend node]) all_end = self.BFS(nd) # 將終點設為距離最遠的 node mid = int(len(all_end)/2) # 可以針對實際情況+1或-1 self.mark.append(all_end[mid][1]) deadend = self.nd_dict[all_end[mid][1]] route = self.BFS_2(nd, deadend) ``` * 完成事項: - [x] 因為轉彎還不是很穩定,所以有先寫了不同版本的轉彎,要測試不同版本的穩定性與參數。 - [x] 決定Game1的BFS的演算法是要從最近的開始走還是從最遠的開始。 - [x] 讓車子可以連上車子,並且是等到藍芽都連上後在連上Server,以節省時間。 - [x] 測試讀到的UID可以成功上傳到Server上。 - [x] 確定電池的電壓 - [x] 測試車子的速度 * 遇到的問題: * 可能是因為我們自己印的地圖的紙和明達402中地圖的紙材質不同,導致我們車子在跑中地圖前必須重新測參數。 * 明達中地圖所放的RFID卡片,其中兩張白卡UID的前兩位是00,但原本助教給的python檔中,負責接收UID的function會把接收到的UID轉換成16進為整數,導致前兩位的00會自動被省略(如果00在中間則不會省略),也因此傳給Server的UID就會是錯的。<br><font color=blue>解決辦法:只要return出來的UID是小於8位的,就直接在前面補0補到變成8位在傳給Server。</font> * L298N 運行太久會過熱影響車車性能,使原本調好的參數失準<br><font color=blue>解決辦法:每運行一段時間或發現L298N過熱時,先將總開關關閉讓他冷卻。</font> * 機械式轉彎對馬達的負擔也不小,我們在測試過程中發現左輪馬達的前端十分容易鬆脫,導致引擎空轉,因此每次測試前都要把前端壓緊。由於是在考試前兩晚才發現這個問題,時間緊迫,我們只好先用膠帶黏住硬著頭皮上陣,比較幸運的是每跑完兩次測試才會出一次問題,最後安然過關。😅 * 想說的話 (選填) * 看到其他組轉彎都已經非常流暢,而且都在想如何加快速度,但我卻連轉彎的穩定性都還不是很好就覺得壓力好大:cold_sweat::cold_sweat: * 馬達又想搞事了💢 ## 第十三週紀錄 * 主題:指定題測試 * 影片 * Game 1:<iframe width="560" height="315" src="https://www.youtube.com/embed/0q1PF3Vt2j0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> * Game 2:<iframe width="560" height="315" src="https://www.youtube.com/embed/fX-RogU_9ZA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> * 賽後心得 * 江浩瑋: 這次比賽的成果整體來說,雖然沒有前三名,但我蠻滿意的(畢竟我們前一天的openlab還在為轉彎煩惱),另外在整個比賽的過程中,看到了各組不同的轉彎策略和加速的方法,以及Game 1路線的選擇,了解到了自己其實還有很多地方可以改進,而值得慶幸的是我們的車車在比賽當天沒有突然出現很大的狀況,回想起這半個多學期以來修車、測試、打code的過程,縱使辛苦,但也學習到了團隊如何分工合作、如何透過討論與協調共同解決我們所面對到的問題,更從比賽中得知自己的不足,但這次比賽並非表示結束,既然比賽沒有得到前三名,那麼我們在自選題一定要在扳回一城! * 葉星宏: 今天打頭陣的第七組表現就非常穩定,成績也相當優異,接下來的幾組表現也相當不錯。讓我看得非常緊張,幸好最後我們這組的車車沒有辜負我們<del>直升機父母</del>的期望,還算成功的走完了兩分鐘。在Game2我們也成功照順序走完全部的點,最後成功的那一刻真的很有成就感。雖然最後差一點點拿到第三名(原本以為是看分數還在那邊空歡喜XD),但能有這樣的成績已經很滿意了。在過程中我們遇到了很多意想不到的問題也試著想辦法解決他們,學到了很多課堂上沒教的東西。比賽中也看到了不同組的策略與優化方法,都有我們可以學習的地方。接下來就要來做自選專題了,希望我們能夠順利完成,也很期待其他組的成果。 * 趙懷青: 這次的考試可說是既刺激又有趣,刺激的是自己上陣考試時,一直提心吊膽的跟在旁邊護著車子,打算一有錯誤就立即救回,生怕最後落到要補考的處境;有趣的是在場下觀察其他組的策略與考試情況,其中最有趣的要屬第二組,一遇到大直線就大膽的暴衝,跟鬼一樣🤣,雖然有些不穩定,但視覺震撼度相當高。最後的結果我覺得算是穩定發揮,我們原本預計Game 1大概能吃到4個點,第5個點會有點勉強,結果第二次跑的狀況不錯,差不多在最後3秒轉到最後一個彎時有點要出錯的感覺,我直接當機立斷把車子抓住,用50分換取240分,穩賺不賠😎。Game 2雖然在第一個彎又發生奇怪的錯誤,要用一次手動輔助,不過最後還是有順利跑完全部的點。最後雖然惜敗另外分差很接近的兩組,成為第四名,但還是滿有成就感的(不知不覺車車就成長得這麼出色了😭😭)。接下來還有自選題,希望也能順利完成。 * 組內討論事項 (必填) * 自選專題題目、如何分工 * 考試時遇到突發狀況的處理辦法 * 想說的話 (選填) * 這周好像沒有模板,所以就自由發揮了~ ## 第十三週批閱區 * 助教批閱欄 * 助教回饋 > [name=助教姓名] * 教授批閱欄 * 教授評分等第 A+ * 教授回饋 比賽的當時看到你們車車的狀況,我也變得很緊張,也不知不覺你們就變得這麼出色了。看到你們分別打這麼多心得,也覺得很開心喔! 這門課系上投入很多資源,未來幾年大概也比較少有這樣課程,真心希望你們能在這門課學到很多東西,無論是課堂上、課堂下或觀摩其他同學。另外上週和麟老師有提醒,自選題壓力不要太大,動機、創意我們都會考慮的! :D > [name=Jiun-Peng] ## 第十四週紀錄 * 主題:自選專題設計、製作與進度報告 * 預計完成事項 (必填) * 決定自選題的主題 * 自選題時程規劃 * 討論如何分工 * 預算 * 實際達成事項 (必填) * 決定自選題的主題--健身環 ![](https://i.imgur.com/FGjzPxi.png) * 自選題時程規劃 ![](https://i.imgur.com/LbkbSHU.png) * 預算 ![](https://i.imgur.com/v9oLsz0.png) * 組內討論事項 (必填) * 自選題的目標 * 關於自選題,我們主要想做一些有關姿態或手勢感測的東西,因此我們就先想了一些相關的題目。 <font size=5 color = green>1. 手勢遙控車車</font><iframe width="560" height="315" src="https://www.youtube.com/embed/OwQMxbbCc_Q" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><br>預計會使用到的東西:<br>GY- PAJ7620U2、車車本體<br>動機:<br>結合車車與手勢操控 <font size=5 color = green>2. 時間停止手套</font><iframe width="560" height="315" src="https://www.youtube.com/embed/rj9L1_-AzMc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><br>預計會使用到的東西:<br>ic555、電風扇、RC電路、LED燈<br>動機:<br>結合電路學所學到的RC電路以及視覺暫留 <font size=5 color = green>3. 水往上流</font><iframe width="560" height="315" src="https://www.youtube.com/embed/QxqqE1TT7d8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><br>預計會使用到的東西:<br>ic555、滴水器、LED燈、RC電路<br>動機:<br>結合電路學所學到的RC電路以及視覺暫留 <font size=5 color = green>4. 健身環大冒險</font><iframe width="560" height="315" src="https://www.youtube.com/embed/jUjV-D8Ex18" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><br>預計會使用到的東西:<br>皮拉提斯環、G Sensor、遊戲<br>動機:<br>買不到switch,也買不到健身環,那就自己動手做一個吧! * 經過討論後,我們決定以健身環作為我們的主題,並讓健身環也有控制車車的功能、 * 自選題時程規劃 * 製作出健身環的所有細節與其需要用到的模組 * 所有的花費是否能控制在1500內 * 組員分工 (必填) * 一起brainstorming! * 遇到的問題、處理狀況、解決方式 (必填) * 目前因為還沒有開始做,所以還不確定是否真的能在7/1前完成整個健身環的製作以及遊戲的開發,因此我們決定讓自選題分成兩階段,第一階段是讓健身環當成車車的方向盤,控制車車,第二階段就會結合健身環還有腳上的感測器,並加上自己寫的遊戲。 * 寫遊戲的部分因為所需要花費的時間較長,所以可能要兩個人來寫。 * 課程建議 (選填) * 待填 * 想說的話 (選填) * 聽完大家的自選題主題,感覺大家的主題都好猛! * 希望能趕上demo的期限做完🙏 ## 第十四週批閱區 * 助教批閱欄 * 助教回饋 > [name=助教姓名] * 教授批閱欄 * 教授評分等第 A * 教授回饋 - 看起來想做的目標蠻多,也應該會有一定難度。可以先想想 7/1 時希望展示到什麼程度,或者說哪些功能適合當天的展示。很多時候穩定的 demo 某幾項功能更能達到好的效果。 > [name=Ho-Lin] ## 第十五週紀錄 * 主題:自選專題設計、製作與進度報告 * 自選題目標: 1. 利用健身還當作車車的方向盤,並用Rpi加上camera把車車的即時影像傳回到電腦,讓使用者只須要看著電腦螢幕、握這健身環,即可操控車車。 2. 仿造switch的健身環大冒險,玩家透過手握健身環、腳上綁感應器來玩遊戲。 * 預計完成事項 (必填) * 完成目標一中Rpi和camera的部分 * 完成目標二腳上的感應器 * 遊戲基本架構 * 材料採買 * 組裝 * 實際達成事項 (必填) * Rpi camera (但會有過熱問題)<iframe width="560" height="315" src="https://www.youtube.com/embed/L0TaB2wuA8Q" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>https://drive.google.com/file/d/1nn5IUMnXA5rNNR8cGevX0GNfVF_6XAs6/view?usp=sharing * 材料方面剩下彎曲電阻還未買好 * 遊戲初步架構規劃完成 * 組內討論事項 (必填) * 健身環要搭配的遊戲 * 傳輸方式 ( Wi-Fi or 藍牙 ) * Arduino 固定方式 * 感測器位置 * 組員分工 (必填) * 1人做遊戲 * 1人寫腳上感應器的code * 1人負責Rpi * 遇到的問題、處理狀況、解決方式 (必填) * Rpi使用一小段時間後就會過熱,導致系統整個當機。詢問過助教後,了解到即時的串流影像處理加上傳輸對於Rpi的負擔太大。 * 目前可能的解法主又有在Rpi上加金屬散熱片(目前不考慮加風扇因為車車的供電是靠電池,如果再加上馬達可能會讓電池更快就沒電) * 另外在軟體的部分,我們可能就是讓串流的影像畫質降低以及把frame rate調低,以減少Rpi的負擔。 * 目標二腳上的感應器(GSensor)我們規劃主要就是當成計步器,透過每秒計到多少步數,來告訴遊戲現在玩家的跑步速度。 * 而目前的問題是因為每次感測器裝在腳上的方向可能會不同,每個玩家跑步的方式也會不同,所以可能導致計的步數錯誤。 * 課程建議 (選填) * 待填 * 想說的話 (選填) * 雖然在proposal時立下了雄心壯志,不過期末的時間會比較少,要在最後一周爆肝趕工😅 * 目前還在討論demo時要把重點放在控制車子還是玩遊戲。 ## 第十五週批閱區 * 助教批閱欄 * 助教回饋 > [name=助教姓名] * 教授批閱欄 * 教授評分等第 A- * 教授回饋 是,還是要以時間來量力,並且以期末為重喔;不要為了這科讓其他科期末爆掉,那就划不來了。加油! > [name=Jiun-Peng] ## 第十六週紀錄 * 預計完成事項 (必填) * 寫完遊戲(美工之外) * 組裝健身環 * 處理Wi-Fi傳輸 * 完成海報 * 實際達成事項 (必填) * 寫完遊戲(美工之外) * 處理Wi-Fi傳輸 * 完成海報 * 組內討論事項 (必填) * 海報內容 * demo內容 * 電源供應方式 * 組員分工 (必填) * 兩人寫遊戲 + 連線 * 一人處理感測器 * 遇到的問題、處理狀況、解決方式 (必填) * 我們買的九軸是GY-85,而根據GY-85的datasheet,GY-85是包含了ITG3205(陀螺儀)/ADXL345(加速度計)/HMC5883L(磁力計)這三種感測器。根據datasheetADXL345、ITG3200、HMC5883L的i2c address應該分別是:0x53 0x68 0x1E,但不管我們怎麼試,都還是找不到address是 0x1E的device,反而是有一個0x0D的device。後來經過漫長的google,發現原來我們買到的九軸感測計是次級品,廠商為了減少成本,把原本磁力計換成了較為便宜的QMC5883L,所以address才會跟datasheet上寫得不一樣。 * 另外原本我們打算用arduino nano來接收九軸的data,但因為健身環上要用的兩個九軸感測器是一模一樣的,也就是說他們的i2c address是完全一樣的,那麼是必得用兩組i2c Bus來連接,但不幸的是arduino nano只支援使用一條i2c Bus,所以我們就得買其他模組來改變第二個九軸的i2c address要不然就是換掉arduino nano。最後,考量到我們的預算,我們選擇了後者,我們用NodeMCU-32S來替換掉arduino nano。之所以會選擇NodeMCU-32S,主要是因為NodeMCU-32S支援同時使用兩組i2c bus,另外其本身還內建了wifi和bluetooth,這樣通訊時就不需要額外再購買藍芽模組或wifi模組。 * 換成NodeMCU-32S後,我們解決了i2c的問題,但現在又有其他問題產生了,那就是所有在arduino上能夠使用的library,現在在NodeMCU-32S上都不能夠使用了:sob:,也因此,如果我們要讀取九軸上各個感應器的值,我們就沒辦法直接include 其他大神寫好的library來用,而是得自己先慢慢研究各個感測器的datasheet,看我們要的數值是位在哪個register,以及在初始化時,需要在哪個register寫入哪些值。 * 另外,我們再讀用感測器的數值時,我們發現原本數值應該會落在-128~128之間,但是我們實際print出來的數值竟然有到6萬多:scream:,一開始我們猜測是杜邦線壞了,但換新的線後還是一樣,我們又猜測會不會是我們在把排針焊上感測器時,把感測器燒壞了,所以我們就又再用arduino uno測試,結果發現數值都落在正常範圍,最後又花了很長一段時間才發現,原來是因為NodeMCU-32S中的int是4個bytes(arduino是2個bytes),所以必須將int換成int16_t,印出來的數值才會是對的。 * 電腦(Server)連上Client端的Wi-Fi後,由於需要連續接收感測器數據,因此將接收的函式寫入迴圈中,但這樣會導致遊戲每一幀畫面和動作執行都有約0.1秒的delay,推測與從client傳輸的速率有關,目前還在想辦法😅 * 目前可以分析感測器延三個軸旋轉的角度,但好像無法從感測器接收到的數值來判斷旋轉半徑,例如原本預計上半身需要跟著環旋轉,但實際上只要在原地旋轉環(身體不動),就可以達到一樣的效果了 * 其中一個遊戲需要以圖片下半部為軸心旋轉,但 pygame 內建的旋轉方式只能以圖片的軸心旋轉,因此需要先測量新軸心與圖片中心的 offset (向量),並預先將圖片沿著 offset 位移,將圖片(軸心還在中心)與 offset 一起旋轉相同的角度後,最後圖片再沿著新的 offset 方向移回原位就可以了 * 寫接金幣的遊戲時,一開始金幣到達判定線後卻不會消失,後來發現原本的寫法需要有一個event才會觸發判定,因此要把整個函式從迴圈拔出來重寫😢 * 預算嚴重爆表,只好跟錢包君說對不起了😭😭 * 想說的話 (選填) * 期末考結束還是得繼續爆肝❤ * 最後幾天了,趕緊做完暑假就開始了👍 * <del>這門課根本不只三學分吧😭</del> ## 第十六週批閱區 * 助教批閱欄 * 助教回饋 > [name=助教姓名] * 教授批閱欄 * 教授評分等第 * 教授回饋 > [name=教授姓名] ###### tags: `電資工程入門設計與實作` `108-2`