歡迎

歡迎來到這個部落格

2017年4月12日 星期三

2017/04/12研究日誌(49) 研究檢討

現在我的超音波自動煞車系統已經完成,不過我現在發現我的車子有一個很大的問題,所以我要進檢討。
首先我發現我最近車子板子常常傳不上去,所以我就做了一個實驗,看看是哪一快板子壞掉了,後來結果發現是最上面那一塊IOT Maker Board板傳不上去,不過只要把那一塊板子拔下後就可以了。但是,可是那塊板子在車子運行中一定要上去,所以這時就會有接觸不良的問題,常常跑到一半就斷掉了,然後卡在那裏不動,可是重新啟動獲等一下下後又恢復了!所以我決定要用一個最笨的方法,就是把板子上的每一個按鈕都試一次,最後結果發現是因為wify發送器打開,所以下面的板子沒有辦法跟IOT Maker Board板對話,也因此都傳不上去。
不過我目前在做我的最後一個程式,這個程式是藍芽操控系統+自動煞車系統,我現在目前這兩個程式都寫出來了,不過我不知道要如何用兩個迴圈,又加上我之前寫藍芽誠實,是用副程式寫的,所以城市一直顯示有BUG,也上傳不了,所以目前還正在思考中,而以下就是我把藍芽後自動煞車分開寫的程式:
l  藍芽控制
int EN1=6;    //由腳位6控制左輪轉速
int EN2=5;    //由腳位5控制右倫轉速
int IN1=7;    //由腳位7控制左輪轉向
int IN2=4;    //由腳位4控制右輪轉向
int pwm=150;  //預設轉速
void setup(){
int i;
for(i=4;i<=7;i++)
pinMode(i,OUTPUT);  //4567腳位設為輸出
Serial.begin(9600);
}
void loop() {
char c;
if(Serial.available()>0){  //判斷序列阜是否有資料輸入
  c=Serial.read();         //讀取串列阜資料
  switch(c){
  case'w':
   forward(1000);        //呼叫前進的副程式
   break;
   case'a':
   trunLeft(400);       //呼叫左轉副程式
   break;
   case'd':
   trunRight(400);   //呼叫右轉副程式
   break;
   case'x':
   backward(400);   //呼叫後退的副程式
   break;
   case's':
   stay(400);
   break;
  }
 }
}
void forward(int time){
  analogWrite(EN1,pwm);
  digitalWrite(IN1,HIGH);
    analogWrite(EN2,pwm);
  digitalWrite(IN2,HIGH);
  delay(time);
}
void trunLeft(int time){
  analogWrite(EN1,pwm);
  digitalWrite(IN1,LOW);
    analogWrite(EN2,pwm);
  digitalWrite(IN2,HIGH);
  delay(time);
}
void trunRight(int time){
  analogWrite(EN1,pwm);
  digitalWrite(IN1,HIGH);
    analogWrite(EN2,pwm);
  digitalWrite(IN2,LOW);
  delay(time);
}
void backward(int time){
  analogWrite(EN1,pwm);
  digitalWrite(IN1,LOW);
    analogWrite(EN2,pwm);
  digitalWrite(IN2,LOW);
  delay(time);
}
void stay(int time){
  analogWrite(EN1,0);
  analogWrite(EN2,0);
  delay(time);
}
l 自動煞車
#include <SCoop.h>

int _ABVAR_1_CM = 0 ;
int ardublockUltrasonicSensorCodeAutoGeneratedReturnCM(int trigPin, int echoPin)
{
  long duration;
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(20);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  duration = duration / 59;
  if ((duration < 2) || (duration > 300)) return false;
  return duration;
}


void setup()
{
  pinMode( 5 , OUTPUT);
  pinMode( 7 , OUTPUT);
  pinMode( 1 , OUTPUT);
  mySCoop.start();
  digitalWrite( 12 , LOW );

  Serial.begin(9600);
  pinMode( 4 , OUTPUT);
  pinMode( 6 , OUTPUT);
}

void loop()
{
  digitalWrite( 1 , HIGH );
  yield();
}

defineTaskLoop(scoopTask10)
{
  _ABVAR_1_CM =    ardublockUltrasonicSensorCodeAutoGeneratedReturnCM( 12 , 13 ) ;
  Serial.print("message");
  Serial.print(" ");
  Serial.print(_ABVAR_1_CM);
  Serial.print(" ");
  Serial.println();
  if (( ( _ABVAR_1_CM ) < ( 20 ) ))
  {
    digitalWrite( 4 , LOW );
    analogWrite(5 , 0);
    digitalWrite( 6 , LOW );
    analogWrite(7 , 0);
  }
}
最後是我的車體,我目前做很慢,因為我還不熟悉整個介面,甚至連形體要如何翻轉都還不太熟悉,所以,目前只做出來整個車殼,至於要栓螺絲的地方,我打算要自己握出來後再鑽,因為我怕車體上所做的洞有錯,且自己鑽洞的速度較快,所以我印完之後還要自己鑽洞,因此我預估這個禮拜要做完8成,藍芽自動煞車系統也要趕快完成(其實也只剩下一些關於程式編排邏輯的東西),這樣我才能趕快做完發表的東西啊!!!


1 則留言:

2017/07/30 研究日誌(61) 慘痛的經驗

上完我上次說過的那堂課很久後,我終於要把我那一台機器車給裝在原本的板子了 !!! 再組裝時,因為我一開始的那個車體有很多零件是用熱熔膠黏的,所以在清膠時花了我不少的時間,清完後,我打算要從輪胎開始裝起,不過,這時候我要拆我的萬象輪 ( 就是一個大鋼球,旁邊會有小鋼球的那種 ...