Arduino智能小车--只是随便一搞

在某宝宝买的智能小车,挺精致的,开心的连接上打印机的线,结果端口都没有反应,

查了一下发现是少了驱动,博主用的mac os10.12.3

CH34x_Install_V1.4.pkg

安装好之后我们再启动arduino 就可以看到新的端口了,选择他,我们就可以进行上传代码了。

只是对附赠源码进行了一下整理。。。

这个用到了红外遥控,需要一个IRremote库,打包资源在csdn下载里边自行下载,内附说明。感谢智宇科技--链接 感谢智宇科技--链接 感谢智宇科技--链接 感谢智宇科技--链接

链接: https://pan.baidu.com/s/1dFwzx53 密码: 2aju

#include <IRremote.h>//包含红外库  关键点
int RECV_PIN = A4;//端口声明
IRrecv irrecv(RECV_PIN);
decode_results results;//结构声明
int on = 0;//标志位
unsigned long last = millis();

long run_car = 0x00FF629D;//按键CH
long back_car = 0x00FFA857;//按键+
long left_car = 0x00FF22DD;//按键<<
long right_car = 0x00FFC23D;//按键>||
long stop_car = 0x00FF02FD;//按键>>|
long left_turn = 0x00ffE01F;//按键-
long right_turn = 0x00FF906F;//按键EQ
//避障开关
long avoidopen = 0x00FF42BD;//按键7
long trackingopen = 0x00FF52AD;//按键9
//==============================
int Left_motor_go=8;     //左电机前进(IN1)
int Left_motor_back=9;     //左电机后退(IN2)

int Right_motor_go=10;    // 右电机前进(IN3)
int Right_motor_back=11;    // 右电机后退(IN4)

//避障
int key=A2;//定义按键 数字A2 接口
int beep=A3;//定义蜂鸣器 数字A3 接口
int LED=7;//定义LED 数字7 接口
const int SensorRight_2 = 5;     //中间红外避障传感器(P3.4 OUT3)
int SR_2;    //右红外传感器状态

//循迹
const int SensorRight = 3;     //右循迹红外传感器(P3.2 OUT1)
const int SensorLeft = 4;       //左循迹红外传感器(P3.3 OUT2)
int SL;    //左循迹红外传感器状态
int SR;    //右循迹红外传感器状态

void setup()
{
  //初始化电机驱动IO为输出方式
  pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
  pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
  pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)
  pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
  pinMode(13, OUTPUT);////端口模式,输出
  Serial.begin(9600);	//波特率9600
  irrecv.enableIRIn(); // Start the receiver
  //避障
  pinMode(key,INPUT);//定义按键接口为输入接口
  pinMode(beep,OUTPUT);//定义蜂鸣器为输出接口
  pinMode(LED,OUTPUT);//定义LED为输出接口

  pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入
  pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入
}
void run()     // 前进
{
   digitalWrite(Right_motor_go,HIGH);  // 右电机前进
   digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,200);//PWM比例0~255调速,左右轮差异略增减
  //analogWrite(Right_motor_back,0);
  digitalWrite(Left_motor_go,LOW);  // 左电机前进
  digitalWrite(Left_motor_back,HIGH);
  //analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减
  //analogWrite(Left_motor_back,200);
  //delay(time * 100);   //执行时间,可以调整
}
void brake(int time)  //刹车,停车
{
  digitalWrite(Right_motor_go,LOW);
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);
  digitalWrite(Left_motor_back,LOW);
  delay(time * 100);//执行时间,可以调整
}
void left(int time)         //左转(左轮不动,右轮前进)
{
  digitalWrite(Right_motor_go,HIGH);  // 右电机前进
  digitalWrite(Right_motor_back,LOW);
  analogWrite(Right_motor_go,200);
  analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);   //左轮后退
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,0);
  analogWrite(Left_motor_back,0);//PWM比例0~255调速
  delay(time * 100);  //执行时间,可以调整
}
void spin_left(int time)         //左转(左轮后退,右轮前进)
{
  digitalWrite(Right_motor_go,HIGH);  // 右电机前进
  digitalWrite(Right_motor_back,LOW);
  analogWrite(Right_motor_go,200);
  analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,HIGH);   //左轮后退
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,200);
  analogWrite(Left_motor_back,0);//PWM比例0~255调速
  delay(time * 100);  //执行时间,可以调整
}
void spin_right(int time)        //右转(右轮后退,左轮前进)
{
  digitalWrite(Right_motor_go,LOW);   //右电机后退
  digitalWrite(Right_motor_back,HIGH);
  analogWrite(Right_motor_go,0);
  analogWrite(Right_motor_back,200);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);//左电机前进
  digitalWrite(Left_motor_back,HIGH);
  analogWrite(Left_motor_go,0);
  analogWrite(Left_motor_back,200);//PWM比例0~255调速
  delay(time * 100);  //执行时间,可以调整
}
void back(int time)          //后退
{
  digitalWrite(Right_motor_go,LOW);  //右轮后退
  digitalWrite(Right_motor_back,HIGH);
  analogWrite(Right_motor_go,0);
  analogWrite(Right_motor_back,150);//PWM比例0~255调速
  digitalWrite(Left_motor_go,HIGH);  //左轮后退
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,150);
  analogWrite(Left_motor_back,0);//PWM比例0~255调速
  delay(time * 100);     //执行时间,可以调整
}
void brake()         //刹车,停车
{
  digitalWrite(Right_motor_go,LOW);
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);
  digitalWrite(Left_motor_back,LOW);
  //delay(time * 100);//执行时间,可以调整
}

void left()         //左转(左轮不动,右轮前进)
{
  digitalWrite(Right_motor_go,HIGH);	// 右电机前进
  digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,200);
  //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);   //左轮后退
  digitalWrite(Left_motor_back,LOW);
  //analogWrite(Left_motor_go,0);
  //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  //delay(time * 100);	//执行时间,可以调整
}

void spin_left()         //左转(左轮后退,右轮前进)
{
  digitalWrite(Right_motor_go,HIGH);	// 右电机前进
  digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,200);
  //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,HIGH);   //左轮后退
  digitalWrite(Left_motor_back,LOW);
  //analogWrite(Left_motor_go,200);
  //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  //delay(time * 100);	//执行时间,可以调整
}

void right()        //右转(右轮不动,左轮前进)
{
  digitalWrite(Right_motor_go,LOW);   //右电机后退
  digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,0);
  //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);//左电机前进
  digitalWrite(Left_motor_back,HIGH);
  //analogWrite(Left_motor_go,0);
 // analogWrite(Left_motor_back,200);//PWM比例0~255调速
 // delay(time * 100);	//执行时间,可以调整
}

void spin_right()        //右转(右轮后退,左轮前进)
{
  digitalWrite(Right_motor_go,LOW);   //右电机后退
  digitalWrite(Right_motor_back,HIGH);
  //analogWrite(Right_motor_go,0);
  //analogWrite(Right_motor_back,200);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);//左电机前进
  digitalWrite(Left_motor_back,HIGH);
  //analogWrite(Left_motor_go,0);
  //analogWrite(Left_motor_back,200);//PWM比例0~255调速
  //delay(time * 100);	//执行时间,可以调整
}

void back()          //后退
{
  digitalWrite(Right_motor_go,LOW);  //右轮后退
  digitalWrite(Right_motor_back,HIGH);
  //analogWrite(Right_motor_go,0);
  //analogWrite(Right_motor_back,150);//PWM比例0~255调速
  digitalWrite(Left_motor_go,HIGH);  //左轮后退
  digitalWrite(Left_motor_back,LOW);
  //analogWrite(Left_motor_go,150);
  //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  //delay(time * 100);     //执行时间,可以调整
}

void dump(decode_results *results)
{
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN)
  {
    //Serial.println("Could not decode message");
    brake();
  }
//串口打印,调试时可以打开,实际运行中会影响反应速度,建议屏蔽
/*
  else
  {

    if (results->decode_type == NEC)
    {
      Serial.print("Decoded NEC: ");
    }
    else if (results->decode_type == SONY)
    {
      Serial.print("Decoded SONY: ");
    }
    else if (results->decode_type == RC5)
    {
      Serial.print("Decoded RC5: ");
    }
    else if (results->decode_type == RC6)
    {
      Serial.print("Decoded RC6: ");
    }
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");

  }
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++)
  {
    if ((i % 2) == 1)
    {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    }
    else
    {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
*/
}
//==========================================================
//避障改为遥控器,此处可以忽略掉
void keysacn()//按键扫描
{
  int val;
  val=digitalRead(key);//读取数字7 口电平值赋给val
  while(!digitalRead(key))//当按键没被按下时,一直循环
  {
    val=digitalRead(key);//此句可省略,可让循环跑空
  }
  while(digitalRead(key))//当按键被按下时
  {
    delay(10);  //延时10ms
    val=digitalRead(key);//读取数字7 口电平值赋给val
    if(val==HIGH)  //第二次判断按键是否被按下
    {
      digitalWrite(beep,HIGH);    //蜂鸣器响
      while(!digitalRead(key))  //判断按键是否被松开
        digitalWrite(beep,LOW);   //蜂鸣器停止
    }
    else
      digitalWrite(beep,LOW);//蜂鸣器停止
  }
}
//避障程序
void avoid()
{
  //修改为遥控器控制
  //keysacn();     //调用按键扫描函数
  while(1)
  {
    //有信号为LOW  没有信号为HIGH  有障碍物输出0  没有障碍物输出1
    SR_2 = digitalRead(SensorRight_2);
    if (SR_2==HIGH)//前面没有障碍物
    {
      run();   //调用前进函数
      digitalWrite(beep,LOW);   //蜂鸣器不响
      digitalWrite(LED,LOW);    //LED不亮
    }
    else if ( SR_2 == LOW)// 前面探测到有障碍物,有信号返回
       {
         digitalWrite(beep,HIGH);   //蜂鸣器响
         digitalWrite(LED,HIGH);    //LED亮
         brake(3);//停止300MS
         back(4);//后退400MS
         left(5);//调用左转函数  延时500ms
     }

  }

}
void tracking(){
  while(1)
  {
    //有信号为LOW  没有信号为HIGH   检测到黑线  输出高  检测到白色区域输出低
    SR = digitalRead(SensorRight);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭
    SL = digitalRead(SensorLeft);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭
    if (SL == LOW&&SR==LOW)
      run();   //调用前进函数
    else if (SL == HIGH & SR == LOW)// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转
      left();
    else if (SR == HIGH & SL == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
      right();
    else // 都是黑色, 停止
    brake();
    }
}
void loop()
{
  if (irrecv.decode(&results)) //调用库函数:解码
  {
    // If it‘s been at least 1/4 second since the last
    // IR received, toggle the relay
    if (millis() - last > 250) //确定接收到信号
    {
      on = !on;//标志位置反
      digitalWrite(13, on ? HIGH : LOW);//板子上接收到信号闪烁一下led
      dump(&results);//解码红外信号
    }
    if (results.value == run_car )//按键CH
      run();//前进
    if (results.value == back_car )//按键+
      back();//后退
    if (results.value == left_car )//按键<<
      left();//左转
    if (results.value == right_car )//按键>||
      right();//右转
    if (results.value == stop_car )//按键>>|
      brake();//停车
    if (results.value == left_turn )//按键-
      spin_left();//左旋转
    if (results.value == right_turn )//按键EQ
      spin_right();//右旋转
    if (results.value == avoidopen)//按键7
      avoid();// 开启智能避障
    if (results.value == trackingopen)//按键9
      tracking();

    last = millis();
    irrecv.resume(); // Receive the next value
  }
}
时间: 2024-10-14 21:08:28

Arduino智能小车--只是随便一搞的相关文章

Arduino智能小车制作报告

Arduino智能小车制作报告 制作成员:20135224陈实  20135208贺邦  20135207王国伊 前提: Arduino,是一个开源的单板机控制器,采用了基于开放源代码的软硬件平台,构建于开放源代码 simple I/O接口版,并且具有使用类似Java,C语言的Processing Wiring开发环境.选择Arduino作为智能小车的控制板,因为它的小巧但功能强大,能够方便的和传感器还有各种电子元件连接,而且还能和很多软件如Flash.Processing进行连接互动,但是最重

Arduino智能小车--仅仅是随便一搞

在某宝宝买的智能小车,挺精致的,开心的连接上打印机的线,结果port都没有反应, 查了一下发现是少了驱动,博主用的mac os10.12.3 CH34x_Install_V1.4.pkg 安装好之后我们再启动arduino 就能够看到新的port了,选择他,我们就能够进行上传代码了. 仅仅是对附赠源代码进行了一下整理. .. 这个用到了红外遥控,须要一个IRremote库.打包资源在csdn下载里边自行下载,内附说明.感谢智宇科技--链接 感谢智宇科技--链接 感谢智宇科技--链接 感谢智宇科技

智能小车十八《如何用上级路由器访问openwrt》

其实用上级路由器访问openwrt很简单,如下图: 在我们刚把720n硬改后,是通过有线连接192.168.1.x来操作路由器的.这时可以进入上面的页面,但没有无线连接. 这时可先加个无线连接,连接到家里的路由器,如上图.图里的192.168.1.107是家里的路由器给它分配的路由器.但这时插掉网线后,无法访问720n,两个ip都不行.上文我就是卡在这儿了. 解决办法是把lan这个网的ip由192.168.1.202改成192.168.2.202.这时再用无线访问192.168.1.107就可以

智能小车资料大全分享给大家

今天给大家分享一下智能小车的资料,包括制作流程.原理图设计和源码等,不下于60辆智能小车的制作经验.其中历届智能小车的开发资料就有90个文件了. 分享的智能小车类型包括:Bluetooth控制两轮小车:智能小车配套程序,循迹.红外避障综合程序资料大全:智能车系统解决方案:STM32两轮自平衡小车资料:STM32两轮自平衡小车系统毕设:自平衡小车控制(stc12+mpu6050程序):寻迹实验小车,arduino开发板DIY红外避障小车:面部跟随机器人小车:蓝牙小车,支持APP控制:nrf24l0

stm32智能小车之路

       最近学习了stm32,带着兴趣想做一个智能小车.不得不承认自己还是一个实实在在的菜鸟,好多知识到了用处都不会了,看了半天,才看懂.在网上看了下,全是关于51的,stm32的很少,而且也是很详细,看了还是不懂,自己既然做完了,拿出来和大家分享下,互相学习,希望大家提出点意见.         非常感谢CSDN,让我学到了很多的知识,里面的牛人太多了,给我提供了丰富的资源,作为回报,我也把自己的想法和一些经验(我自认为的)写出来,给没有头绪或不会的人来学习下,希望你们不要走我走过的弯路

自己动手做个智能小车(1)

自己动手做个智能小车(1) --介绍及工具材料准备 目前物联网发展很迅速,软硬结合也越来越流行.对硬件有些兴趣的我,也想来做点业余玩具. 这是个业余小作品,可以学习一些基本硬件.单片机,底层软件,Android编程等知识,同时不失趣味性. 直接上图: 怎么每张图有个手机?-- 哈哈那是遥控器. 介绍: 这个小车是一个三轮车,为啥采用三轮:方便.灵活.控制简单,比如要转个弯,只需要把这边的轮子速度降下来,就转过去了:还可以原地旋转,两个轮子速度相同,方向相反即可,这是四轮车办不到的. 问,边上的手

自己动手做个智能小车(5)

自己动手做个智能小车(5) --用程序来控制轮子 PWM控制电路完工了,接下来得把电路接到单片机,由单片机进行控制了.回想电路图: 这个图中,输入有3根组,A,B,C,其中,A入口,我们可以当成PWM控制线,B,C为正反转.停止控制线,整个状态可以罗列为下面表格: A控制 B控制 C控制 Q1 Q2 Q3 Q4 电机状态 X 0 0 0/导通 0/导通 0/截止 0/截止 刹车 PWM 1 0 1/截止 0/导通 PWM 0/截止 正转 PWM 0 1 0/导通 1/截止 0/截止 PWM 反转

自己动手做个智能小车(3)

自己动手做个智能小车(3) --让小电脑运行程序吧 通了电源,也有了初步的规划,我们就把主芯片给接上,并让其工作起来. 这个主芯片就是89C52单片机,有人说,单片机没学过啊,怎么没,没关系,在里,我们就从最简单的入手,然后再慢慢加功能.我们知道学个新程序,一般从HelloWord开始,那单片机同样,也从其本的开始. 51单片机,有40个引脚,其中,芯片从一个U口的左侧开始计数,然后一圈编号,40脚与20脚接电源的正负极.其中,1~8 0~17 39~32 1~28 为单片机的P1 P3 P0

自己动手做个智能小车(2)

自己动手做个智能小车(2) --基本布局及电源部份 上一章中,我们逻列出所有需要的零件,接下来就是我们开始拼装的时候了.电路图... 没有, 没有完整的,我们就一步步做吧,纯手工,焊到哪就是哪,不通了就飞线(注:正常电路从板子下面走,但如果实在有交叉过不去时,就可以在上面用一导线直接相联,叫飞线,正式design好的板子一般都不用飞的咯). 虽说焊到哪是哪,但是还是得稍微布局设计一下. 观察一下小车,电机分布在两边,前面一轮子,后面空, 所以后面空地方肯定不能压重物,不然会压翻掉. 电路板100