机器人EarthRunner一号开跑了~~~
文章信息
关键字:机器人; arduino
本文版本:12
最后修改于 2010-06-20 22:19:55
谭总最近搞了个自制直升飞机,虽然试飞以坠机收尾,但是足足成功升空20秒之多,总的来说第一步是非常成功的。谭总迈出第一步后,我也被这所谓的“电子艺术”所吸引,研究了三天,终于没能抵挡住诱惑,掉进了arduino的陷阱。
arduino是一个开源的硬件平台,从硬件电路图到软件都是开源的。基于arduino,可以非常快速的开发出一系列的“电子艺术”交互产品,从感应输入器到自主机器人,到智能家电,真是无所不能。看了谭总的“谭氏四旋翼飞行器”(我命名的),再想到“坠机”的一刹那,想想飞机成本太高,风险太大,摔一次咱钱包里的花纸头就少几张,还是跟谭总配合,他搞空军我搞陆军吧。联合大作战,多么美好的童年时光啊。
我比较懒,花了1000多买了现成的电路板,还有一个比赛用四驱机器人底盘,就不用自己烂电路板,用有机玻璃做外壳了……哈哈,淘宝真是好东西。
过程以后慢慢说吧,还是看看今天一天的成果吧。整整一天,从硬件安装测试到代码设计,遇到了n个问题,解决了n个问题,终于我的机器人 EarthRunner一号 能够自主运行啦,目前可以根据传感器来自主避开障碍前进,根据环境光线自主开灯,虽然功能不强,但基础已经打好,下一步就要加上无线遥控了。
自主避障代码如下:
C代码:
今天比较懒,下次再详细讲解机器人的设计和制作过程吧。
arduino是一个开源的硬件平台,从硬件电路图到软件都是开源的。基于arduino,可以非常快速的开发出一系列的“电子艺术”交互产品,从感应输入器到自主机器人,到智能家电,真是无所不能。看了谭总的“谭氏四旋翼飞行器”(我命名的),再想到“坠机”的一刹那,想想飞机成本太高,风险太大,摔一次咱钱包里的花纸头就少几张,还是跟谭总配合,他搞空军我搞陆军吧。联合大作战,多么美好的童年时光啊。
我比较懒,花了1000多买了现成的电路板,还有一个比赛用四驱机器人底盘,就不用自己烂电路板,用有机玻璃做外壳了……哈哈,淘宝真是好东西。
过程以后慢慢说吧,还是看看今天一天的成果吧。整整一天,从硬件安装测试到代码设计,遇到了n个问题,解决了n个问题,终于我的机器人 EarthRunner一号 能够自主运行啦,目前可以根据传感器来自主避开障碍前进,根据环境光线自主开灯,虽然功能不强,但基础已经打好,下一步就要加上无线遥控了。
自主避障代码如下:
C代码:
- int E1 = 5;
- int M1 = 4;
- int E2 = 6;
- int M2 = 7;
- int LightSensorPin = 0;
- int LeftDistanceSensorPin = 9;
- int RightDistanceSensorPin = 8;
- int LEDPin = 13;
- int spd = 200;
- void stop(void) {
- analogWrite(E1,0);
- analogWrite(E2,0);
- }
- void forward(char a,char b) {
- analogWrite (E1,a);
- digitalWrite(M1,HIGH);
- analogWrite (E2,b);
- digitalWrite(M2,HIGH);
- }
- void backward(char a,char b) {
- analogWrite (E1,a);
- digitalWrite(M1,LOW);
- analogWrite (E2,b);
- digitalWrite(M2,LOW);
- }
- void turn_L(char a,char b) {
- analogWrite (E1,a);
- digitalWrite(M1,HIGH);
- analogWrite (E2,b);
- digitalWrite(M2,LOW);
- }
- void turn_R(char a,char b) {
- analogWrite (E1,a);
- digitalWrite(M1,LOW);
- analogWrite (E2,b);
- digitalWrite(M2,HIGH);
- }
- void checkEnv(){
- int light,R_dist,L_dist;
- Serial.println("--- checkEnv ---");
- light=analogRead(LightSensorPin); //Read Light Sensor
- Serial.print("Light Sensor: ");
- Serial.println(light, DEC); //Print result to serial
- L_dist=digitalRead(LeftDistanceSensorPin); //Read Distance Sensor
- Serial.print("LeftDistance Sensor: ");
- Serial.println(L_dist, DEC); //Print result to serial
- R_dist=digitalRead(RightDistanceSensorPin); //Read Distance Sensor
- Serial.print("RightDistance Sensor: ");
- Serial.println(R_dist, DEC); //Print result to serial
- //If Light Sensor great than 400, light the LED
- if (light > 400) digitalWrite(LEDPin, HIGH);
- else digitalWrite(LEDPin, LOW);
- if (!L_dist && R_dist) // turn right
- move(1);
- else if (L_dist && !R_dist) //turn left
- move(0);
- else if (!L_dist && !R_dist) //random turn
- move(random(2));
- }
- int clearPath(){
- int R_dist,L_dist;
- Serial.println("--- clearPath ---");
- L_dist=digitalRead(LeftDistanceSensorPin); //Read Distance Sensor
- R_dist=digitalRead(RightDistanceSensorPin); //Read Distance Sensor
- return (L_dist && R_dist);
- }
- void move(int dir) {
- int flag;
- Serial.println("--- move ---");
- flag = clearPath();
- while (!flag) {
- if (dir) //right
- turn_R(spd,spd);
- else
- turn_L(spd,spd);
- delay (50);
- flag=clearPath();
- }
- }
- void setup() {
- pinMode(E1, OUTPUT);
- pinMode(E2, OUTPUT);
- pinMode(M1, OUTPUT);
- pinMode(M2, OUTPUT);
- pinMode(LeftDistanceSensorPin, INPUT);
- pinMode(RightDistanceSensorPin, INPUT);
- pinMode(LEDPin, OUTPUT);
- Serial.begin(9600);
- }
- void loop() {
- Serial.println("*** Main ***");
- forward(spd,spd);
- checkEnv();
- delay(100);
- }
今天比较懒,下次再详细讲解机器人的设计和制作过程吧。
日历
| 年 月 | ||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
| 29 | 30 | 31 | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 1 | 2 |
日志分类
搜索日志
订阅我的日志
友情链接


[做人要厚道,看帖要回帖,点击发表评论]
显示评论
隐藏评论
评论列表
发布于 2010-05-29 22:17:39 |



