Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
樓主: Curtiss
打印 上一主題 下一主題

簡易循跡自走車

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-4-8 10:52:02 | 顯示全部樓層 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 Curtiss 於 2011-4-8 10:56 編輯

上個學期使用 Arduino 製作的循跡自走車。

  

使用三個 CNY70 作為感測器,動力為田宮的雙馬達減速齒輪組及輪胎。
2#
 樓主| 發表於 2011-4-9 01:53:45 | 顯示全部樓層
本帖最後由 Curtiss 於 2011-4-9 02:00 編輯

減速齒輪組是使用田宮的套件,可自行選擇四種減速比的那一種。市面上有比較便宜的選擇,但是田宮的組裝說明書真的很詳盡,而且馬達的性能也有資料可查。田宮的輪子就比較貴,因為手邊剛好有以前用過的,拆過來安裝。
車子的基板是家裏裝潢後剩下的3mm夾板。表面是胡桃木皮的喲! 底面貼綠色膠帶是防止掉落木屑。
使用Arduino相容的 Seeeduino 板,感測器電路和馬達驅動電路焊在萬用板上,使用排針與 Seeeduino 連接。電路如下



U1, U2, U3反射式光耦合器CNY70
U4反相器74LS04
VR1, VR2, VR3半可變電阻(semi-VR)50k
Q1, Q2電晶體(BJT)9013 (NPN)
D1, D2二極體(Diode)1N4001
LED發光二極體(LED)直徑 3 mm
R1, R4, R7,電阻150 Ω
R2, R5, R8,電阻10 kΩ
R3, R6, R9, R10, R12電阻330 Ω
R11, R13電阻1 kΩ
3#
 樓主| 發表於 2011-4-9 02:10:04 | 顯示全部樓層
回復 3# mzw2008


前一陣子想找便宜的玩具車來改,去X北百貨都找不到合意的。這台坦克有19公分長,應該很好改裝。

鯨魚大大的展示中心落成時,務必要通知一下,一定要去參觀!
4#
 樓主| 發表於 2011-4-11 08:28:44 | 顯示全部樓層
補上程式碼:

/*
三感測器自走車程式
-- 感測器訊號輸入為數位訊號   1: white, 0: black
-- 雙馬達控制轉向
-- 使用PWM控制馬達轉速, 但無後退動作

狀態與動作
白黑白   直進        (全速) (全速)
黑黑白   左轉        (半速) (全速)
白黑黑   右轉        (全速) (半速)
黑白白   快速左轉    (停止) (全速)
白白黑   快速右轉    (全速) (停止)
白白白   停止        (停止) (停止)
*/

// constants won't change. They're used here to
// set pin numbers:
const int SensorLeft = 2;      //左感測器輸入腳
const int SensorMiddle = 3;    //中感測器輸入腳
const int SensorRight = 4;     //右感測器輸入腳
const int MotorLeft = 5;       //左馬達輸出腳
const int MotorRight = 6;      //右馬達輸出腳

// variables will change:
int SL;    //左感測器狀態
int SM;    //中感測器狀態
int SR;    //右感測器狀態

void setup() {
  // 輸出入椄腳初始設定, 指定為輸入或輸出
  pinMode(SensorLeft, INPUT);
  pinMode(SensorMiddle, INPUT);
  pinMode(SensorRight, INPUT);
  pinMode(MotorLeft, OUTPUT);
  pinMode(MotorRight, OUTPUT);
  
  // 預設馬達輸出為 0 (停止)
  digitalWrite(MotorRight, LOW);
  digitalWrite(MotorLeft, LOW);
}

void loop(){
  // 讀取感測器狀態值
  SL = digitalRead(SensorLeft);
  SM = digitalRead(SensorMiddle);
  SR = digitalRead(SensorRight);
  
  // HIGH(1) : white region.
  // LOW(0) : black region.
  if (SM == LOW) {  //中感測器在黑色區域
    if (SL == LOW & SR == HIGH) {  // 左黑右白, 向左轉彎
      analogWrite(MotorLeft, 127);  // 左輪半速
      analogWrite(MotorRight, 255); // 右輪全速
    }
    else if (SR == LOW & SL == HIGH) {  // 左白右黑, 向右轉彎
      analogWrite(MotorLeft, 255);  // 左輪全速
      analogWrite(MotorRight, 127); // 右輪半速
    }
    else {  // 兩側均為白色, 直進
      analogWrite(MotorLeft, 255);  // 兩輪都全速
      analogWrite(MotorRight, 255);
    }      
  }
  else {  // 中感測器在白色區域
    if (SL == LOW & SR == HIGH) {  // 左黑右白, 快速左轉
      //digitalWrite(MotorLeft, LOW);
      //digitalWrite(MotorRight, HIGH);
      analogWrite(MotorLeft, 0);      // 左輪停止
      analogWrite(MotorRight, 255);  // 右輪全速

    }
    else if (SR == LOW & SL == HIGH) {  // 左白右黑, 快速右轉
      //digitalWrite(MotorRight, LOW);
      //digitalWrite(MotorLeft, HIGH);
      analogWrite(MotorLeft, 255);  // 左輪全速
      analogWrite(MotorRight, 0);   // 右輪停止
    }
    else {    // 都是白色, 停止
      //digitalWrite(MotorRight, LOW);
      //digitalWrite(MotorLeft, LOW);
      analogWrite(MotorLeft, 0);
      analogWrite(MotorRight, 0);

    }
  }
}
5#
 樓主| 發表於 2011-4-12 14:30:05 | 顯示全部樓層
請問一下喔,CNY70 模組裏的紅外線接收器跟一般的紅外線接收器(如 TSOP233 ...
coopermaa 發表於 2011-4-11 14:27


只是一個光電晶體,沒有其他放大或解調功能。通常用在近接感測,不是遙控器用的。
6#
 樓主| 發表於 2011-4-23 17:24:28 | 顯示全部樓層
原來使用一顆9V和兩顆1.5V乾電池當電源,後來發現實在不怎麼耐用,所以換了一顆 7.4V 鋰電池當電源。不過,馬達電壓提高,PWM的負載週期必須調小,不然會衝出跑道。

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-16 16:39 , Processed in 0.083210 second(s), 10 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表