2017年5月25日 星期四

US-016 避障自走車 with Arduino Nano

圖像裡可能有23 個人、大家坐著和室內


這是本班透過FabLab自造實驗室創客課程與業師合作的成果,本次上課為上學期課程之延伸,上學期所教授內容同樣為Arduino Nano電路板,使用Scratch for Arduino軟體,透過簡單的拼圖邏輯,引領我們進入電路版的世界,能夠在台中家商上到這樣的課程,真的是一大福音。
而本學期同學們已了解Arduino原理後,本學期進階到利用Arduino IDE界面撰寫程式碼,其了解過程相對來講需要較長的時間去理解,但也讓我們見識到了程式碼的連動性,讓我們大開眼界了。

以下為本次US-016所使用的程式碼片段,請參考:

int DisValue; //超音波距離 const int MotorLeftA=2; //左馬達A const int MotorLeftB=3; //左馬達B const int MotorRightA=4; //右馬達A const int MotorRightB=5; //右馬達B void setup(){ //序列埠初始化 Serial.begin(115200); //馬達腳位為輸出 pinMode(MotorLeftA,OUTPUT); pinMode(MotorLeftB,OUTPUT); pinMode(MotorRightA,OUTPUT); pinMode(MotorRightB,OUTPUT); } void loop(){ //DisValue為讀取並計算後的值 DisValue=SensorRead(); //當DisValue距離小於80 需執行轉彎 if(DisValue<80){ Release(); delay(1000); TurnRight(); delay(200); Release(); delay(1000); }//其餘前進 else{ Forward(); } } // int yyy(){return value;}執行完程式後回傳value int SensorRead(){ int Value = analogRead(A0); Value *= 3; Value /=10; Serial.print("Distance is: "); Serial.println(Value); Serial.println(" cm"); return Value; } //void xxx(){} 執行迴圈依次 void Forward(){ Serial.println("Forward"); digitalWrite(MotorLeftA,1); digitalWrite(MotorLeftB,0); digitalWrite(MotorRightA,1); digitalWrite(MotorRightB,0); } void Backward(){ Serial.println("Backward"); digitalWrite(MotorLeftA,0); digitalWrite(MotorLeftB,1); digitalWrite(MotorRightA,0); digitalWrite(MotorRightB,1); } void TurnRight(){ Serial.println("TurnRight"); digitalWrite(MotorLeftA,1); digitalWrite(MotorLeftB,0); digitalWrite(MotorRightA,0); digitalWrite(MotorRightB,1); } void TurnLeft(){ Serial.println("TurnLeft"); digitalWrite(MotorLeftA,0); digitalWrite(MotorLeftB,1); digitalWrite(MotorRightA,1); digitalWrite(MotorRightB,0); } void Release(){ Serial.println("Release"); digitalWrite(MotorLeftA,0); digitalWrite(MotorLeftB,0); digitalWrite(MotorRightA,0); digitalWrite(MotorRightB,0); }