我自己做的一个简单小车

[ 962 查看 / 5 回复 ]

这个三轮车采用经典的两轮差速驱动,配合一个万向轮。顶部加了两个光敏电阻,只要有一个光敏电阻被挡住,同侧 的轮子便会向前前进,使机器人脱离黑暗的笼罩。


特点:采用了几个集 成度较高的模块,不需要了解很底层的电子电路,使用很方便,对使用者的技术基础要求较低,适合初学者。
功 能:实现简单的避开遮挡,因为是个半路拐出来的作品,只做了这个简单的功能,示范一下,后面我会给出Arduino源代 码。
使用工具:除了一个打孔的手电筒电钻和焊接用的电烙铁焊锡外,其余的都是平时常见的家用工具。
器材够买途径:这个是很多初学者关心的问题,我用的东西有些是淘宝上买的,有些是自己去电子市场找的,还有朋友 送的。
我会给出我选购的几个淘宝店——不是做广告,只是给经验较少的人一个建议,我同时还会给出我的选择原 因。
零件清单:
有机玻璃板

用来做机器人的车体部分,我是在淘宝上买 的
http://store.taobao.com/shop/view_shop-4dec617669e3531781ad2f51841cfb74.htm
2mm 厚,买薄了,应该用4mm左右的好一点,我最后只好把两层粘在一起用。零件清单:Arduino控制板

Arduino是一种比较适合初学者的控制板,使用AVR的单片机,很多电子爱好者都使用这种控制板,尤其在欧美 和台湾非常火。
因为Arduino是一种开源硬件,硬件都是标准的,所以在淘宝上有很多卖Arduino的店,东西都差 不多,我建议大家搜一搜本地的店,这样可以省下运费,也比较容易获得技术支持。
我选择的是南京的一家 店:
http://store.taobao.com/shop/view_shop-5b42d9d4a282341b4c7e560ff54c2126.htm
我买 的这块Arduino Duemilanove 2009 花了109块
Arduino的官方站:http://www.arduino.cc/
轮式驱动单元:

我采用了这种集成度较高的运动模块,这个零件内部包含了一个直流电机,齿轮变速箱,电机驱动电路,码盘 采样,电机电流电压检测,更具体的功能大家可以看:http://www.embedream.com/qsmx/2009-11-11/87.html
当然价格也是不菲,一个要135元 ,大家如果对运动精度要求不高而且对手能力比较强的话可以采用淘宝上的一些散件,电机+驱动电路+变速箱
淘宝店链接:http://store.taobao.com/shop/view_shop-5f570ffcf41422e19137d5bec7b2706b.htm万用板 、电阻、排线、插针插座、电池盒、光敏电阻
这些都属于电子实验常用的东西,如果你所在城市有电子市场的话 ,都可以找到。我是先在淘宝上搜了一下南京地区的电子元件销售,然后跑到华龙电子市场买的。




我去买的那家店是:http://saizhu.taobao.com/
也是一家本地的店,在淘宝上搜到,然后自己跑过去买的,也省了讲价之苦。东西比较全,店家服务也不错,而且他家店里有一种电阻包和 电容包,一个包装里面有很多常用规格的电阻电容,非常适合我们这些业余爱好者。

尼龙螺柱:

这个非常适合做小车上下层的支撑,配合一些螺栓螺帽,能满足你的各种要求。
我是在电子市场里面找 到的,一个几毛钱,除了尼龙的还有铜的

其余的就是一些小的螺栓螺丝,垫片什么的,在五金商店就可以买到
万向轮是用坏掉的电脑椅的轮子,在街边的五金店也可以买到。

动手之前,最好 先用一些三维软件做一下仿真,免得做到一半后发现装配问题需要返工。我使用的是3DMax,


不过最 终的设计随着加工的进行还是会不断调整的,大家对比第一张最终的实物图就会知道,最初的设计与最后的结果是有很 大差别的。我最初的设计是上中下三层板,下面的板上固定Arduino控制板,中间的有机玻璃板上固定一块万用版来扩展 电路。上面的支撑板用来支撑电池盒。但最终制作过程中不断改,最终只用了一块有机玻璃板,Arduino直接固定在中间 板的下侧,中间板上用螺柱支撑起一块万用板来扩展电路,电池盒固定在中间板和万用板中间。

下面的一步就是我们业余爱好者最头疼的事情: 机加工
我的这个小车由于采用了比较多的集成化模块,所以机加工的部分也不多,主要就是中间一块有机玻璃板 ,关键是上面的很多定位孔要求比较高,本来想找一个雕刻机加工的,不过东西太小,找了几个人家都不爱做,最后只 好自己钻出来。为保证孔的定位,我把图纸打印出来,粘在有机玻璃板上,然后用电钻连着纸一起钻。


加工好后的实物:


比较丑,呵呵,两块板粘在一起的
分享 转发
TOP


钻好定位孔的万用板
话说这块板子质量真好,钻的时候费了不少劲。
其实如果用双面板会更好一点,元件、插针可以布置在任意一侧,不过既然手里有一块单面板,就用它了,只好把插针都布置在外圈,见下图

试验装配了一下,确认没有定位问题


这里暴露了一个设计缺陷,当初钻万用板与有机玻璃板上的三个定位孔的时候没有想到可以用连接这三个孔的螺柱来卡住电池盒,只好在里面紧贴螺柱的地方塞了一点纸。(我原来计划是用双面胶将电池盒粘在有机玻璃板上的)
其实这里的电路部分很简单,无非就是接接线而已,真正复杂的电路都已经被Arduino和轮式驱动单元包办了。


这是我画的一张简单的示意图,没有包含光敏电阻检测的部分,那部分大家可以参考Arduino官网上学习例程里面的接法,光敏电阻加两个10k电阻就可以了。Arduino的模拟口我也没有在图中标出,因为我在后面还有其他用处,所以这里光敏电阻我直接飞了两根线直接接到Arduino上去了。我后续的制作会在电路板中间加传感器,所以线路都尽可能的沿外围走。


Arduino接光敏电阻的方法(图中右下角部分)。
从下图中可以看到保持平衡的万向轮的安装方式


我使用了一块小的电路板,上面钻了六个孔,两个用来与机器人机体固定在一起,另外四个通过六角螺柱与万向轮连接。

TOP

下面是代码部分:代码分为两部分,一个文件是主函数文件

  • /* The simple three wheels Robot
  • PWM12 left wheel
  • PWM13 right wheel
  • A2 right wheel yellow control line
  • A3 right wheel blue control line
  • A4 left wheel yellow control line
  • A5 left wheel blue control line
  • by Hu Po 2010-04-16 */
  • const int ryPin = 2; //right motor control signal
  • const int rbPin = 3; //right motor control signal
  • const int lyPin = 4; //left motor control signal
  • const int lbPin = 5; //left motor control signal
  • const int l_pwm = 10; //left motor pwm control signal
  • const int r_pwm = 11; //right motor pwm control signal
  • const int ALeft = 1; //left light sensor
  • const int ARight = 0; //right light sensor
  • void setup()
  • {
  • Serial.begin(9600);
  • pinMode( ryPin, OUTPUT );
  • pinMode( rbPin, OUTPUT );
  • pinMode( lyPin, OUTPUT );
  • pinMode( lbPin, OUTPUT );
  • pinMode( l_pwm, OUTPUT );
  • pinMode( r_pwm, OUTPUT );
  • }
  • void loop()
  • {
  • int leftL = analogRead( ALeft ); //read left light sensor
  • int rightL = analogRead( ARight ); //read right light sensor
  • if ( leftL < 250 )
  • {
  • power( 1, 100 );
  • }
  • else
  • {
  • power( 1, 0 );
  • }
  • if ( rightL < 250 )
  • {
  • power( 2, 100 );
  • }
  • else
  • {
  • power( 2, 0 );
  • }
  • delay( 200 );
  • }


另一个文件是控制电机的函数:
  • /* The file to control motor
  • by Hu Po 2010-04-16 */
  • /* function to control motor
  • pro: --1 left wheel --2 right wheel
  • speed: the motor's speed (-255~ 255)
  • */
  • void power( int pro, int speed )
  • {
  • int pwm;
  • int ctrly, ctrlb;
  • int ypin, bpin;
  • if ( pro == 1 )
  • {
  • pwm = l_pwm;
  • ypin = lyPin;
  • bpin = lbPin;
  • speed *= (-1);
  • }
  • else if ( pro == 2 )
  • {
  • pwm = r_pwm;
  • ypin = ryPin;
  • bpin = rbPin;
  • }
  • else
  • {
  • return;
  • }
  • if ( speed > 0 )
  • {
  • ctrly = 0;
  • ctrlb = 1;
  • }
  • else
  • {
  • ctrly = 1;
  • ctrlb = 0;
  • }
  • digitalWrite( ypin, ctrly );
  • digitalWrite( bpin, ctrlb );
  • if ( abs(speed) > 255 ) speed = 255;
  • analogWrite( pwm, abs(speed) );
  • }

程序的开发环境使用的是Arduino官方提供的开发软件:
Arduino Alpha 0017
代码不难,注释也比较清楚,读起来应该很容易。


TOP

下面是代码部分:代码分为两部分,一个文件是主函数文件

  • /* The simple three wheels Robot
  • PWM12 left wheel
  • PWM13 right wheel
  • A2 right wheel yellow control line
  • A3 right wheel blue control line
  • A4 left wheel yellow control line
  • A5 left wheel blue control line
  • by Hu Po 2010-04-16 */
  • const int ryPin = 2; //right motor control signal
  • const int rbPin = 3; //right motor control signal
  • const int lyPin = 4; //left motor control signal
  • const int lbPin = 5; //left motor control signal
  • const int l_pwm = 10; //left motor pwm control signal
  • const int r_pwm = 11; //right motor pwm control signal
  • const int ALeft = 1; //left light sensor
  • const int ARight = 0; //right light sensor
  • void setup()
  • {
  • Serial.begin(9600);
  • pinMode( ryPin, OUTPUT );
  • pinMode( rbPin, OUTPUT );
  • pinMode( lyPin, OUTPUT );
  • pinMode( lbPin, OUTPUT );
  • pinMode( l_pwm, OUTPUT );
  • pinMode( r_pwm, OUTPUT );
  • }
  • void loop()
  • {
  • int leftL = analogRead( ALeft ); //read left light sensor
  • int rightL = analogRead( ARight ); //read right light sensor
  • if ( leftL < 250 )
  • {
  • power( 1, 100 );
  • }
  • else
  • {
  • power( 1, 0 );
  • }
  • if ( rightL < 250 )
  • {
  • power( 2, 100 );
  • }
  • else
  • {
  • power( 2, 0 );
  • }
  • delay( 200 );
  • }


另一个文件是控制电机的函数:
  • /* The file to control motor
  • by Hu Po 2010-04-16 */
  • /* function to control motor
  • pro: --1 left wheel --2 right wheel
  • speed: the motor's speed (-255~ 255)
  • */
  • void power( int pro, int speed )
  • {
  • int pwm;
  • int ctrly, ctrlb;
  • int ypin, bpin;
  • if ( pro == 1 )
  • {
  • pwm = l_pwm;
  • ypin = lyPin;
  • bpin = lbPin;
  • speed *= (-1);
  • }
  • else if ( pro == 2 )
  • {
  • pwm = r_pwm;
  • ypin = ryPin;
  • bpin = rbPin;
  • }
  • else
  • {
  • return;
  • }
  • if ( speed > 0 )
  • {
  • ctrly = 0;
  • ctrlb = 1;
  • }
  • else
  • {
  • ctrly = 1;
  • ctrlb = 0;
  • }
  • digitalWrite( ypin, ctrly );
  • digitalWrite( bpin, ctrlb );
  • if ( abs(speed) > 255 ) speed = 255;
  • analogWrite( pwm, abs(speed) );
  • }

程序的开发环境使用的是Arduino官方提供的开发软件:
Arduino Alpha 0017
代码不难,注释也比较清楚,读起来应该很容易。


TOP

呃,多发了一次,不是故意的
TOP

牛X
专业从事电子制作、单片机机器人套件开发及销售为广大学校及电子爱好者服务!http://shop60166725.taobao.com
TOP

ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

STM32开发板
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

专业定制防盗版加密芯片,用于单片机加密,嵌入式加密,防复制,防串货,防抄板

GSM MODEM GSM模块 短信猫 通用模块 电源 连线 套价 WAVECOM TC35i

专业定制防盗版加密芯片,用于单片机加密,嵌入式加密,防复制,防串货,防抄板

GPRS/GSM MODEM GSM模块 GPRS模块 中文短信模块 GPRS服务器