蓝牙pwm智能车arduino_arduino蓝牙pwm - CSDN
  • 避障小车~~~~~~~~

    学了arduino一段时间,抽了点时间把避障小车做了一下,现在把小车的制作过程在这里记录一下,以便日后查阅。

    首先说一下用到的材料:

    1、小车底盘一套(淘宝淘的现成的,其实也可以自己做)

    2、18650电池盒一个(可装三节电池 12V)

    3、超声波模块(HC-SR04)一个

    4、红外模块(E18-D50NK)一个

    5、红外模块(E18-D80NK)一个(之前只用了超声波和D50模块,结果效果不怎么好,又多买了一个红外模块,50跟80的区别貌似在于测量的最大距离不同)

    6、L298N点击驱动模块一个

    7、自制的arduino模块一个(也可以用其它版本现成的arduino模块)

    8、无线蓝牙模块一个

    用到的就是以上这些模块,拼接完成后如下图:


    线路图这里就不做说明了,大家可以看代码的引脚定义接线,这里有几点要特别说明一下

    小车代码支持两种控制模式,见代码

    //定义模式 1-手动模式 2-自动避障模式
    int MODE = 1;
    手动模式可以使用手机连接蓝牙设备进行控制,这里提供一个控制软件itead studio【点击下载】,当小车设置为自动模式时,小车会自动避障移动,可在软件中将A和B分别设置为1和2,就可以任意切换小车模式了



    代码如下:

    #include <SoftwareSerial.h>
    
    //定义电机控制引脚
    #define IN1 5
    #define IN2 6
    #define IN3 7
    #define IN4 8
    
    //定义电机PWM引脚
    #define speedPinA 9
    #define speedPinB 10
    
    //定义红外测距模块E18数据引脚
    #define E18D50Pin 3
    #define E18D80Pin 4
    
    //定义超声波数据引脚
    const int TrigPin = 2;
    const int EchoPin = 11;
    //超声波模块测出的距离
    float distance = 0;
    
    //蓝牙模块接收的数据
    char rec= ' ';
    
    //定义模式 1-手动模式 2-自动避障模式
    int MODE = 1;
    
    //定义软串口,数据测试用
    SoftwareSerial mySerial(12, 13); // RX, TX
    
    void setup()
    {
      //初始化串口
      Serial.begin(9600);
      mySerial.begin(4800);
      
      //初始化电机引脚
      _initmPin();
      
      //初始化超声波引脚
      _initSR04Pin();
      
      //电机保持不动。
      _cStop();
    }
    
    void loop()
    {
      if(MODE==1){
        while(Serial.available()){
          rec=Serial.read();
          if(rec=='1'){
            MODE=1;
          }else if(rec=='2'){
            MODE=2;
          }  
          if(MODE!=1)
            break;
          if(rec=='f'){
            _cForward();
            setFSpeed();
          }else if(rec=='b'){
            _cBack();
            setBSpeed();
          }else if(rec=='l'){
            _cLeft();
            setLSpeed();
          }else if(rec=='r'){
            _cRight();
            setRSpeed();
          }else{
            _cStop();
          }
        //设置电机转速
        rec= ' ';
        }
      }
      
      if(MODE==2){  
        if(Serial.available()){
          rec=Serial.read();
          if(rec=='1'){
            MODE=1;
          }
          else if(rec=='2'){
            MODE=2;
          }
        }  
        _getDistance();
        mySerial.println(distance); 
        if(distance>25.0&&digitalRead(E18D50Pin)==HIGH&&digitalRead(E18D80Pin)==HIGH){
          _cForward();
          setFSpeed();
        }else{ 
          _cRight();
          setRSpeed();
        }
      }
      //设置电机转速
      rec= ' ';
    }
    //由于买的电机速度不同,这里用pwm的方式调了一下速
    void setFSpeed(){
      _mSetSpeed(speedPinA,65);
      _mSetSpeed(speedPinB,70);
    }
    
    void setLSpeed(){
      _mSetSpeed(speedPinA,47);
      _mSetSpeed(speedPinB,50);
    }
    
    void setRSpeed(){
      _mSetSpeed(speedPinA,47);
      _mSetSpeed(speedPinB,50);
    }
    
    void setBSpeed(){
      _mSetSpeed(speedPinA,69);
      _mSetSpeed(speedPinB,70);
    }
    
    //通过超声波模块获取障碍物距离
    void _getDistance(){
      // 产生一个10us的高脉冲去触发TrigPin 
      digitalWrite(TrigPin, LOW); 
      delayMicroseconds(2); 
      digitalWrite(TrigPin, HIGH); 
      delayMicroseconds(10);
      digitalWrite(TrigPin, LOW); 
      // 检测脉冲宽度,并计算出距离
      distance = pulseIn(EchoPin, HIGH) / 58.00;
    
      delay(100);
    }
    
    //初始化电机引脚
    void _initmPin(){
      pinMode(IN1,OUTPUT);
      pinMode(IN2,OUTPUT);
      pinMode(IN3,OUTPUT);
      pinMode(IN4,OUTPUT);
      pinMode(speedPinA,OUTPUT);
      pinMode(speedPinB,OUTPUT);
    }
    
    //初始化微波模块引脚
    void _initSR04Pin(){
      pinMode(TrigPin,OUTPUT);
      pinMode(EchoPin,INPUT);
    }
    
    
    void _cForward()//小车向前移动
    {
      _mRight(IN1,IN2);
      _mRight(IN3,IN4);
    }
    void _cBack()//小车向后移动
    {
      _mLeft(IN1,IN2);
      _mLeft(IN3,IN4);
    }
    void _cStop()//小车停止
    {
      _mStop(IN1,IN2);
      _mStop(IN3,IN4);
    }
    void _cLeft()//小车向左旋转
    {
      _mRight(IN1,IN2);
      _mLeft(IN3,IN4);
    }
    void _cRight()//小车向右旋转
    {
      _mLeft(IN1,IN2);
      _mRight(IN3,IN4);
    }
    
    //
    void _mRight(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
    {
      digitalWrite(pin1,HIGH);
      digitalWrite(pin2,LOW);
    }
    void _mLeft(int pin1,int pin2)//电机左转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
    {
      digitalWrite(pin1,LOW);
      digitalWrite(pin2,HIGH);
    }
    void _mStop(int pin1,int pin2)//电机停止
    {
      digitalWrite(pin1,HIGH);
      digitalWrite(pin2,HIGH);
    }
    void _mSetSpeed(int pinPWM,int SpeedValue)//控制电机速度
    {
      analogWrite(pinPWM,SpeedValue);
    }
    


    欢迎加入QQ群:254267969,共同交流学习~~~~

    展开全文
  • Arduino智能小车——调速篇

    万次阅读 多人点赞 2020-05-19 10:55:00
    Arduino小车——调速篇  在这一篇我们将对小车的行进速度进行调整,将驱动模块的作用发挥出来。首先大家要了解PWM这个概念。PWM  脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出...

    Arduino智能小车——调速篇

      在这一篇我们将对小车的行进速度进行调整,将驱动模块的作用发挥出来。首先大家要了解PWM这个概念。

    PWM

      脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

      通俗一点讲那,就是当如果我们想输出5V电压时,只需一直输出高电平即可;当我们想输出3.75V电压时,那我们就需要在一个周期内(一个高电平和一个低电平为一个周期)3.75÷5=75%时间输出高电平,25%时间输出低电平;同理,如果想输出2.5V电压时,我们需要在一个周期内50%时间输出高电平,50%时间输出低电平。

      Arduino UNO开发板上只有带有“~”表示的引脚才具有PWM功能,因此我们在控制驱动时可以使用这几个引脚。 ##驱动模块接线   在前面的[教程](http://blog.csdn.net/qq_16775293/article/details/77438499)中已经讲过如果想控制驱动的输出时,需要对驱动的“ENA”“ENB”进行控制,因此我们需要将图中被选中部分的两个跳线帽拔掉。并将“ENA”连接Arduino UNO开发板的“5”引脚,“ENB”连接“6”引脚。

    代码测试

    int leftCounter=0,  rightCounter=0;
    unsigned long time = 0, old_time = 0; // 时间标记
    unsigned long time1 = 0; // 时间标记
    float lv,rv;//左、右轮速度
    
    #define STOP        0
    #define FORWARD     1
    #define BACKWARD    2
    #define TURNLEFT    3
    #define TURNRIGHT   4
    #define CHANGESPEED 5
    
    int leftMotor1 = 16;
    int leftMotor2 = 17;
    int rightMotor1 = 18;
    int rightMotor2 = 19;
    bool speedLevel=0;
    
    int leftPWM = 5;
    int rightPWM = 6;
    
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600); 
      attachInterrupt(0,RightCount_CallBack, FALLING);
      attachInterrupt(1,LeftCount_CallBack, FALLING);
    
      pinMode(leftMotor1, OUTPUT);
      pinMode(leftMotor2, OUTPUT);
      pinMode(rightMotor1, OUTPUT);
      pinMode(rightMotor2, OUTPUT);
      pinMode(leftPWM, OUTPUT);
      pinMode(rightPWM, OUTPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      SpeedDetection();
     
      if(Serial.available()>0)
      {
        char cmd = Serial.read();
        
        Serial.print(cmd);
        motorRun(cmd);
        if(speedLevel)  //根据不通的档位输出不同速度
        {
          analogWrite(leftPWM, 120);
          analogWrite(rightPWM, 120);
        }
        else
        {
          analogWrite(leftPWM, 250);
          analogWrite(rightPWM, 250);
        }
      }  
    }
    /*
     * *速度计算
     */
    bool SpeedDetection()
    {
      time = millis();//以毫秒为单位,计算当前时间 
      if(abs(time - old_time) >= 1000) // 如果计时时间已达1秒
      {  
        detachInterrupt(0); // 关闭外部中断0
        detachInterrupt(1); // 关闭外部中断1
        //把每一秒钟编码器码盘计得的脉冲数,换算为当前转速值
        //转速单位是每分钟多少转,即r/min。这个编码器码盘为20个空洞。
        Serial.print("left:");
        lv =(float)leftCounter*60/20;//小车车轮电机转速
        rv =(float)rightCounter*60/20;//小车车轮电机转速
        Serial.print("left:");
        Serial.print(lv);//向上位计算机上传左车轮电机当前转速的高、低字节
        Serial.print("     right:");
        Serial.println(rv);//向上位计算机上传左车轮电机当前转速的高、低字节
        //恢复到编码器测速的初始状态
        leftCounter = 0;   //把脉冲计数值清零,以便计算下一秒的脉冲计数
        rightCounter = 0;
        old_time=  millis();     // 记录每秒测速时的时间节点   
        attachInterrupt(0, RightCount_CallBack,FALLING); // 重新开放外部中断0
        attachInterrupt(1, LeftCount_CallBack,FALLING); // 重新开放外部中断0
        return 1;
      }
      else
        return 0;
    }
    /*
     * *右轮编码器中断服务函数
     */
    void RightCount_CallBack()
    {
      rightCounter++;
    }
    /*
     * *左轮编码器中断服务函数
     */
    void LeftCount_CallBack()
    {
      leftCounter++;
    }
    /*
     * *小车运动控制函数
     */
    void motorRun(int cmd)
    {
      switch(cmd){
        case FORWARD:
          Serial.println("FORWARD"); //输出状态
          digitalWrite(leftMotor1, HIGH);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
          break;
         case BACKWARD:
          Serial.println("BACKWARD"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
          break;
         case TURNLEFT:
          Serial.println("TURN  LEFT"); //输出状态
          digitalWrite(leftMotor1, HIGH);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
          break;
         case TURNRIGHT:
          Serial.println("TURN  RIGHT"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
          break;
         case CHANGESPEED:
          Serial.println("CHANGE SPEED"); //输出状态
          if(speedLevel)  //接收到换挡命令的时候切换档位
            speedLevel=0;
          else
            speedLevel=1;
          break;
         default:
          Serial.println("STOP"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, LOW);
      }
    }
    

      由于之前设计不太合理,占用了太多的PWM引脚,因此在代码里对控制小车电机的引脚做了点小改动,如下所示

    int leftMotor1 = 5;	
    int leftMotor2 = 6;
    int rightMotor1 = 7;
    int rightMotor2 = 8;
    

    现在改为

    int leftMotor1 = 16;	
    int leftMotor2 = 17;
    int rightMotor1 = 18;
    int rightMotor2 = 19;
    

    改完代码大家记得要把对应的接线也改过来哦!!
    在前面的宏定义中加入换挡的定义#define CHANGESPEED 5

    #define STOP        0
    #define FORWARD     1
    #define BACKWARD    2
    #define TURNLEFT    3
    #define TURNRIGHT   4
    #define CHANGESPEED 5
    

    Arduion的PWM引脚需要和正常引脚一样,在void setup()函数中初始化为输出模式

    pinMode(leftPWM, OUTPUT);
    pinMode(rightPWM, OUTPUT);
    

    在小车的控制状态函数void motorRun(int cmd)中添加多一个选择项,用来切换速度。

    case CHANGESPEED:
          Serial.println("CHANGE SPEED"); //输出状态
          if(speedLevel)  //接收到换挡命令的时候切换档位
            speedLevel=0;
          else
            speedLevel=1;
          break;
    

    在主函数void loop()中添加PWM输出的函数,analogWrite(pin, value)函数中“pin”代表使用的引脚,“value”代表输出PWM值的大小,范围是0~255。

    if(speedLevel)  //根据不通的档位输出不同速度
        {
          analogWrite(leftPWM, 120);
          analogWrite(rightPWM, 120);
        }
        else
        {
          analogWrite(leftPWM, 250);
          analogWrite(rightPWM, 250);
        }
    

    修改蓝牙串口助手

      在串口助手中,将“按键1”修改为“换挡”键,蓝牙串口助手的使用方法和使用详细的修改过程可以参考前面的《Arduino智能小车——蓝牙小车》教程,修改后效果如下:

    结束语

      大家快连接蓝牙,测试下我们的变速小车吧。大家有兴趣的话可以使用蓝牙串口助手上面的滑动条来控制小车速度,不妨下去试试吧~

    欢迎各位有兴趣的朋友加入Q群1:789127261点评、交流

    展开全文
  • 基于Arduino UNO R3的蓝牙小车代码实现

    千次阅读 2018-07-12 15:30:25
    前言:在该项目,我们实现对小车的控制,并且通过DHT11温湿度等传感器采集...蓝牙模块: 这里我是用的是HC_05蓝牙串口模块: Arduino代码编写:#include &lt;dht11.h&gt; dht11 DHT11; #define DHT11...

    前言:

    在该项目,我们使用arduino UNO R3,配合arduino电机驱动模块和hc05 蓝牙串口模块,实现对蓝牙小车的控制

    蓝牙模块:

                这里我是用的是HC_05蓝牙串口模块:

                


    Arduino主要代码编写:

    char p;
    
    /*
       PWM输出控制电机速度
    */
    int ENA = 9;
    int ENB = 6;
    /*
       控制电机正反转
    */
    int dirA = 7;
    int dirB = 8;
    /*
    
       设备初始化函数
    */
    void setup() {
      Serial.begin(9600);
      Serial.println("======setup======");
      Serial.println(); 
      
    }
    /*
       主函数
    */
    void loop() {
    
      while (Serial.available() > 0) {
        p = Serial.read();
        //前进
        if (p == 'g') {
          _motor(dirA, 1, ENA, 180);
          _motor(dirB, 0, ENB, 210);
          Serial.println(p);
        }
        //后退
        if (p == 'b')
        {
          _motor(dirA, 0, ENA, 180);
          _motor(dirB, 1, ENB, 210);
          Serial.println(p);
        }
        //左转
        if (p == 'l')
        {
          _motor(dirA, 1, ENA, 180);
          _motor(dirB, 1, ENB, 210);
          Serial.println(p);
        }
        //右转
        if (p == 'r')
        {
          _motor(dirA, 0, ENA, 180);
          _motor(dirB, 0, ENB, 210);
          Serial.println(p);
        }
        //停止
        if (p == 's')
        {
          _motor(dirA, 1, ENA, 0);
          _motor(dirB, 0, ENB, 0);
          Serial.println(p);
        }
       
      }
    }
    /*
       电机驱动函数
    */
    void _motor(int DIR, int state, int pwm, int val)
    {
      pinMode(DIR, OUTPUT);
      pinMode(pwm, OUTPUT);
      digitalWrite(DIR, state);
      analogWrite(pwm, val);
    }
    

    效果图片:

    我自己简单写的APP客户端:https://download.csdn.net/download/qq_41299058/10537179

    点击打开链接


    展开全文
  • 需要材料: 小车套件(包括轮胎、电机) ... Arduino UNO 开发板 蓝牙模块(需要注意的是上传代码时因共用串口的原因会上传代码失败,解决方法:上传代码时,拔掉蓝牙模块) 需要手机安装 SPP蓝牙串...

    需要材料:

    1.     小车套件(包括轮胎、电机)

    2.     L298N驱动模块 (可以把电池的高电压转换为我们需要的5V,3.3V电压) 

    3.     电池

    4.     电池座

    5.     Arduino UNO 开发板

    6. 蓝牙模块(需要注意的是上传代码时因共用串口的原因会上传代码失败,解决方法:上传代码时,拔掉蓝牙模块

    7. 需要手机安装 SPP蓝牙串口 (如果找不到的可以私信笔者)

    此案例中用到串口通信

     

    安装和连接:

     

    +12V:该引脚接的电压是驱动模块所能输出给电机的最大电压,一般 直接接电池。12V是由L298N芯片所能接受最大电压而定,一般介入5~12V电压。在此我们接入的电压为两节18650串联的电压,即3.7+3.7=7.4V;

    GND: 在该项目中GND即为电源的负极,同时要保证Arduino开发板,驱动模块等所有模块的GND连在一起才可以正常工作。在某些复杂的项目中还需要区分数字地和模拟地,在此不做详细介绍。

    +5V: L298N模块(注意不是L298N芯片)内含稳压电路(将高电压转换为低电压的电路),在模块内部将”+12V”引脚输入的电压转化为可供开发板使用的+5V电压,一般将次输出接入到开发板为开发板供电。

    L298N有两路输出,所以可以控制小车前进、后退、转弯,其中:

    ENA: 代表第一路输出的电压大小。驱动模块输出电压越高,电机转速越快。

    1.当其输入为0V的时候,驱动模块输出对第一路电机输出电压为0V;

    2.当其输入为3.3V的时候,驱动模块对第一路电机输出电压为”+12V”引脚的输入电压。

    3.由于ENA输入电压的高低控制驱动对电机的输出电压,因此当我们需要对小车运动速度进行控制的时候,一般通过PWM对”ENA”引脚进行控制。

     

    IN1/IN2:这两个引脚控制电机正反转方向。例:假如IN1输入高电平3.3V,IN2输入低电平0V,ENA为3.3V,电机正转,此时将IN1输入改为0V,IN2输入改为3.3V,其他条件不变,则电机将会反转。

    OUT1/OUT2:这两个引脚分别接电机的两极。

    ENB,IN3/IN4,OUT3/OUT4引脚控制第二路输出,与上述ENB,IN3/IN4,OUT3/OUT4功能相似。

     

    L298N驱动的IN1/IN2/IN3/IN3引脚与Arduino板的4/5/6/7号引脚对应相连

     

    蓝牙模块连接:

    TX:接Arduino UNO开发板”RX”引脚 

    RX:接Arduino UNO开发板”TX”引脚 

    GND:接Arduino UNO开发板”GND”引脚 

    VCC:接Arduino UNO开发板”5V”或”3.3V”引脚        

    参考代码:

    #include <Servo.h>
    
    //定义五中运动状态
    char FORWARD = '1'; //前进
    char BACKWARD = '2'; //后退
    char TURNLEFT = '3'; //左转弯
    char TURNRIGHT = '4'; //右转弯
    char STOP = '0'; //停止
    
    //定义需要用到的引脚
    int leftMotor1 = 4;
    int leftMotor2 = 5;
    int rightMotor1 = 6;
    int rightMotor2 = 7;
    
    //接收到的字符
    char cmd;
    
    void setup() {
      Serial.begin(9600);   
    
      //设置控制电机的引脚为输出状态
      pinMode(leftMotor1, OUTPUT);
      pinMode(leftMotor2, OUTPUT);
      pinMode(rightMotor1, OUTPUT);
      pinMode(rightMotor2, OUTPUT);
    }
    
    void loop() {
      //读取蓝牙模块发送到串口的数据
    if(Serial.available())
    {
        cmd = Serial.read();
        delay(5);
        Serial.println(cmd);
    }
      //控制电机转动
    if(cmd == FORWARD )
      {
          digitalWrite(leftMotor1, LOW);//正转
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
        }
       if(cmd == BACKWARD )
      {
          digitalWrite(leftMotor1, HIGH);//反转
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
        }
        if(cmd == TURNLEFT )
       {
          digitalWrite(leftMotor1, LOW);//左转
          digitalWrite(leftMotor2,LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
        }
        if(cmd == TURNRIGHT )
       {
        digitalWrite(leftMotor1, LOW);//右转
         digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, LOW);
        }
         if(cmd == STOP )
        {
        digitalWrite(leftMotor1, LOW);//停止
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, LOW);
        }
    }

     

    展开全文
  • 智能小车PWM调速

    2020-07-30 23:32:36
    智能小车的PWM调速,使用keil编写程序,程序用C语言编写
  • 做了一辆Arduino智能车,其功能目前是:四路循迹行驶,同时在行驶过程中遇到障碍物进行规避(超声波避障模块),在把循迹用黑胶布遮住使它四个传感器均检测不到时候可以进行蓝牙遥控,现在我想做成使用蓝牙来远程...
  • 最近学了些许Arduino知识,加之老师要求用Arduino做出一点东西用来展示,所以自己做了一个Arduino小车来玩玩,使用了类与中断的概念,若有不足,敬请指正。 一、材料 4节南孚电池。 L298N电机驱动板。 面包板...
  • const int TrigPin = 2; //超声波引脚定义 const int EchoPin = 3; //超声波引脚定义 float cm; //测距参数 //l298n驱动上对应的接口 ...//定义EA(PWM调速)接口,短路帽要扒掉 int pinI3=6;//定义I3接...
  • 基于红外遥控的arduino遥控小车

    万次阅读 多人点赞 2019-11-05 22:36:38
    遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它带来的刺激。小编为大家带来几篇博客,来...基于arduino的手机蓝牙遥控小车 基于arduino的红外遥控小车 基于arduino的无线NRF24L01遥控小车 基于arduni...
  • arduino小车各模块的分析与代码实现

    千次阅读 多人点赞 2018-06-10 19:48:10
    作为arduino的萌新,在arduino mega2560的开发板上完成了点灯、呼吸...而这次arduino小车程序的书写中有了正常的电机驱动、红外循迹、超声波避障、蓝牙外部控制小车的功能,以及PWM,串口外部的监控。 由于在书写ar...
  • 基于Arduino智能蓝牙小车 材料准备: Arduino开发板一块、四驱小车底板及相关配件一套、L298N驱动模块一个、HC-05/06蓝牙模块一块,九伏电源一块(用于主板供电)、12V锂电池一块(带充电器,供驱动器电源)。 ...
  • 基于Arduino智能避障小车

    千次阅读 2019-06-28 10:50:09
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • Arduino/stm32 智能小车设计(一)

    千次阅读 2019-09-22 21:01:56
    Arduino/stm32 智能小车设计(一)智能小车原理图设计智能小车原理图组件包括:模块设计一、控制模块二、供电模块三、充电管理模块四、电机驱动模块五、红外寻迹及红外避障模块六、其它模块七、流水灯模块 智能小车...
  • 到今天为止,智能小车的三种功能也算全部完成了。(做蓝牙模块异常的顺利)接下来就是焊接矩阵键盘,将这三种功能合并在一块了。可能还会需要一段时间,包括矩阵键盘的焊接,代码的规整,所有硬件的加入,功能排障...
  • 基于Arduino高温巡逻报警智能小车

    千次阅读 2020-03-06 21:47:54
    引言 ...掌握了解蓝牙传感器连接智能小车实现按键操作的工作原理 掌握警报器的安装与连接 1.2 背景 随着科学技术的发展,机器人的设计越来越精细,功能越来越复杂,智能小车作为其中的一个分支...
  • 手把手教你智能硬件开发(一) 我选Arduino

    万次阅读 多人点赞 2016-11-07 17:03:50
    智能硬件怎么入门?有没有适合软件开发者使用的硬件平台呢?本文将向您展示Arduino智能硬件的开发,带你入门。
  • Arduino与Kinect打造“体感智能车

    千次阅读 2014-09-01 13:56:40
     体感智能车的原理非常的简单,就是利用Kinect采集人体的姿体信息,然后通过蓝牙串口向Arduino发送字符命令。Arduino通过相应的字符命令控制双H桥电机驱动模块实现小车的前进后退等动作。项目主要用到的产品由...
  • 智能车教程(红外、蓝牙、OpenMV追踪)

    千次阅读 多人点赞 2019-04-19 17:37:31
    文章目录动手制作一个智能小车小车功能设计你需要懂的知识、你能学到什么材料准备组装小车制作红外小车制作蓝牙小车制作追踪颜色小车将三个功能集成,制作智能小车项目总结 动手制作一个智能小车 小车功能设计 你...
  • Arduino/stm32 智能小车设计(二) 本节进行Arduino智能小车的代码讲解。 一、I/O口定义与初始化函数 如下图RGB指示灯用到10、11、12三个I/O口,分别对应蓝色、红色、绿色。当给对应的I/O口低电平时,对应颜色的灯亮...
  • Arduino综合实例之一_避障小车

    万次阅读 2017-02-20 14:06:56
    此实例实现了通过蓝牙连接小车和手机,在手机端用软件控制小车前进,后退,左/右转向,控制行驶速度。并能让小车自动行驶,躲避障碍。 我买的是最便宜的黄色四驱小车,加了一个电机驱动模块(用于控制小车),一个...
1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

蓝牙pwm智能车arduino