查看: 2016|回复: 7

自制红外控制简单小车2016-7-24

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-27 09:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-7-24 22:00 | 显示全部楼层 |阅读模式
    本帖最后由 Treaser 于 2016-8-17 20:43 编辑

    楼主6月份才开始玩arduino,觉得很好玩。看到貌似没有太多红外控制小车的帖子(搜的到的2个都是求助帖),自发一个制作成功的贴。也是纪念我的第一次,记录我成长。(在8-17楼主对该小车进行了第一次升级,升级变化见1楼最下面,我编辑了一下原贴)
    【小车介绍】用红外通信进行控制的小车。

    组装前

    组装前

    2016-7-24初级版【需要元件】
    继电器2个,
    9v电池2个,
    电源转换器一个(转为5V),
    arduino UNO板一块,
    红外接收模块一个,
    红外遥控器,
    小车(当然是带有电机组装好的咯)。

    组装后

    组装后

    【制作步骤】
    1.下载红外的库IRremote,你们都懂得。
    2.使用里面的IRrecvDemo示例程序获得所需要的红外按键的红外编码。
    3.搭好电路。

    实地

    实地

    (附:我的代码:
    #include <IRremote.h>

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn(); // Start the receiver

      pinMode(7,OUTPUT);
      pinMode(8,OUTPUT);
      digitalWrite(7,HIGH);
      digitalWrite(8,HIGH);
    }

    long shang=16615543,zuo=16591063,you=16607383;

    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println(results.value);
        if(results.value==shang){
          digitalWrite(7,LOW);
          digitalWrite(8,LOW);
          delay(300);
          digitalWrite(7,HIGH);
          digitalWrite(8,HIGH);
        }
        else if(results.value==zuo){
          digitalWrite(7,HIGH);
          digitalWrite(8,LOW);
          delay(300);
          digitalWrite(7,HIGH);
          digitalWrite(8,HIGH);
        }
         else if(results.value==you){
          digitalWrite(8,HIGH);
          digitalWrite(7,LOW);
          delay(300);
          digitalWrite(7,HIGH);
          digitalWrite(8,HIGH);
        }
        else {
          digitalWrite(7,HIGH);
          digitalWrite(8,HIGH);
        }
        irrecv.resume(); // Receive the next value


      }
    }




    小车控制的视频的话,我会在B站上传,到时把连接发到楼下。


    2016-8-17升级版:

    第一次改进小车8-17

    第一次改进小车8-17
    【升级之处】
    1.使用了L293D电机驱动板进行了电机的控制(取代了原来的继电器控制)(这个板怎么用的话在arduino中文社区搜一下就行,我觉得这个板虽然占用了大量的引脚,但是无疑是更加方便了。占用了大量的引脚,这也导致我最后决定用Mega来替换UNO。
    2.使用了Arduino Mega板代替UNO板(虽然原来的UNO是正版的,这次的Mega是便宜货,但是Mega毕竟比UNO爽!!!!!!)
    3.车身换的更大了,原来的小车底板只有12cm的直径,现在换成22cm*15cm的长方形(由于底板不靠谱,我买来以后装电机的孔都是我自己烫出来的…………)更大的底板可以放得下更大的Mega板,并且还是双层的,上层放电池,下层放了控制板。
    4.直接用了充电宝给Mega供电(这加重了我小车的负载,不是个明智之举,但是我发现用电池供电时,很明显电机跑不动了)

    仍然不足的地方(也可能是楼主下一次升级的地方
    1.电池是硬伤,楼主的电池,9V给驱动板供电,但是玩个10分钟电机就有点跑不动了。电压会急剧下降。这可能需要我去买更强劲的电池。
    2.红外控制的硬伤,有时候的红外编码会出现误差……使得控制不是很灵敏。
    【视频的话我会发上来等我上传吧!】

    【哦,还有一件事,代码】#include <AFMotor.h>#include <Servo.h>
    #include <IRremote.h>
    AF_DCMotor motorr(4);
    AF_DCMotor motorl(3);
    Servo myservo;

    int RECV_PIN = 22;
    IRrecv irrecv(RECV_PIN);

    decode_results results;

    long forward=16615543,backward=16619623,turnright=16591063,turnleft=16607383,spinl=16593103,spinr=16609423,servoleft=16584943,servoright=16601263,servomid=16625743;


    void setup() {
      myservo.attach(2);
      irrecv.enableIRIn();
      Serial.begin(9600);  
       Serial.println("start");
      motorl.setSpeed(200);
      motorr.setSpeed(200);
      motorl.run(RELEASE);
      motorr.run(RELEASE);
      myservo.write(90);

    }

    void loop() {

      if (irrecv.decode(&results)) {
        Serial.println(results.value);
        if(results.value==forward)
            {motorr.run(FORWARD);motorl.run(FORWARD); motorr.setSpeed(250);motorl.setSpeed(250);delay(500);Serial.println("start1");  motorl.run(RELEASE);
      motorr.run(RELEASE);}
           else if(results.value== backward){motorr.run(BACKWARD);motorl.run(BACKWARD); motorr.setSpeed(250);delay(500);motorl.setSpeed(250);  motorl.run(RELEASE);
      motorr.run(RELEASE);}
           else if(results.value==turnright ) {motorr.run(RELEASE);motorl.run(FORWARD); motorr.setSpeed(250);delay(500);motorl.setSpeed(250);  motorl.run(RELEASE);
      motorr.run(RELEASE);}
            else if(results.value== turnleft){motorr.run(FORWARD);motorl.run(RELEASE); motorr.setSpeed(250);delay(500);motorl.setSpeed(250);  motorl.run(RELEASE);
      motorr.run(RELEASE);}
            else if(results.value==spinl){motorr.run(BACKWARD);motorl.run(FORWARD); motorr.setSpeed(250);delay(500);motorl.setSpeed(250);  motorl.run(RELEASE);
      motorr.run(RELEASE);}
            else if(results.value==spinr ){motorr.run(FORWARD);motorl.run(BACKWARD); motorr.setSpeed(250);delay(500);motorl.setSpeed(250);  motorl.run(RELEASE);
      motorr.run(RELEASE);}
           else if(results.value==servoleft ) {myservo.write(135); delay(15);}
            else if(results.value== servoright )  {myservo.write(45); delay(15);}
            else if(results.value==servomid )    {myservo.write(90); delay(15);}
            irrecv.resume();
        }

      }

    注意,无视以上舵机的代码,因为我还没装上去2333333







  • TA的每日心情
    开心
    2018-9-23 11:16
  • 签到天数: 207 天

    [LV.7]常住居民III

    发表于 2016-7-24 22:33 | 显示全部楼层
    楼主来个视频噻,小白学习一下
    打赏作者鼓励一下!
  • TA的每日心情
    擦汗
    2018-4-27 09:25
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2016-7-24 22:40 | 显示全部楼层
    15513513255 发表于 2016-7-24 22:33
    楼主来个视频噻,小白学习一下

    会的,在传,可能要明后天会审核过。
  • TA的每日心情
    擦汗
    2018-4-27 09:25
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2016-7-25 10:26 | 显示全部楼层
    本帖最后由 Treaser 于 2016-8-19 09:08 编辑

    小车一代的视频:[/url]2代的视频:(拍的时候拍倒了………………)[url]http://www.bilibili.com/video/av5872657/

    该用户从未签到

    发表于 2016-8-5 15:00 | 显示全部楼层
       if(results.value==shang){
          digitalWrite(7,LOW);
          digitalWrite(8,LOW);
          delay(300);
          digitalWrite(7,HIGH);
          digitalWrite(8,HIGH);
        }
    求解释这一段程序,不明白为什么这样写可以实现 上

    该用户从未签到

    发表于 2019-5-22 00:13 | 显示全部楼层
    我今天在做红外遥控器,遇到了一个问题,然后找到了楼楼的这个帖子,发现原来楼主之前也没解决...
    就是红外遥控发送红外码时如果长按就变成满值了,所以视频里楼主智能一下一下的按这个遥控,车也只能一点一点的挪,所以想问怎么做到长按也能保持运动。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    对于ADC读取按键值的疑问
    对于ADC读取按键值的疑问
    大佬们好 我在一篇帖子上看见了用ADC读取模拟值并判断哪颗按键 我也画了一下板子 这
    ADC模拟输入读取独立按键值
    ADC模拟输入读取独立按键
    在论坛H2O了这么久,给大家分享一个实用的小技巧!在使用按键与单片机进行人机交互时
    【Arduino】108种传感器模块系列实验(97)---0.96寸OLED液晶屏
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【Arduino】108种传感器模块系列实验(107)---400KV高压发生器
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表