小车接口及参数

小车接口及参数

目录

1、基本参数

通过3.7v锂电池供电,板载升压电路至5V给设备供电

通过N20电机驱动小车前进后退。

2、接口定义

在这里插入图片描述

超声波

D2

D3

小车驱动

D4:使能。低电平时关闭两个电机,节电。高电平时可控制电机转动。不用电机时,建议置低;

D5:控制左轮。

D6:控制右轮。

D5、D6通过输入PWM来控制转速和方向。

  • 输入的占空比小于50%(即Arduino中PWM输出小于128)时前进

  • 输入的占空比大于50%(即Arduino中PWM输出大于128)时后退

  • 等于50%(即Arduino中PWM输出大于128)时停止转动。

  • 数值偏离128越大,则速度越大

WS2812七彩灯

D7

留有扩展口,可增加RGB灯带。

车底部LED灯

D8:高电平点亮,低电平熄灭

可扩展接口

D9、D10、D11

红外避障

D12:右侧红外避障。无障碍时输出高电平,有障碍时输出低电平,LED指示灯亮起;

D13:左侧红外避障。无障碍时输出高电平,有障碍时输出低电平,LED指示灯亮起;

光敏传感器(寻光实验)

A0、A1:模拟输入,得到明暗值。

四路循迹(底部)

A2~A5:

3、扩展示例

机械手

各舵机合适的角度:

D9:大臂:20-120度,数字越小越往前

D10:小臂:20-140,数字越小越往后

D11:抓手:80~180,数字越小抓得越紧

4、示例程序

蓝牙遥控小车前进后退程序

//通过手机蓝牙等设备连接Arduino,输入F则前进。B后退,L左转。R右转。

#define EN_M1M2  4
#define PWM_M1  5
#define PWM_M2  6

int vol;
//long int t=0;
char BluetoothData;
int lpad_x=0,lpad_y=0,rpad_x=0,rpad_y=0;   //control pad values sent from Android device
int M1_speed=0,M2_speed=0,M3_speed=0,M4_speed=0;
int speed_max;

void MOTOR_EN()
{
  digitalWrite(EN_M1M2,HIGH);
}
void MOTOR_SLEEP()
{
  digitalWrite(EN_M1M2,LOW);
}


void setup() {
  // put your setup code here, to run once:
  pinMode(PWM_M1, OUTPUT);
  pinMode(PWM_M2, OUTPUT);
  pinMode(EN_M1M2, OUTPUT);
  Serial.begin(9600);
}

void loop() {
   
if(Serial.available()) 
  {
    BluetoothData = Serial.read();
    if(BluetoothData=='F') 
    {
MOTOR_EN();
analogWrite(PWM_M1,100);
analogWrite(PWM_M2,100);
delay(500);
MOTOR_SLEEP();
    }
 /*--------------------------R_pad -----------------------*/  
    if(BluetoothData=='B')
    {
      MOTOR_EN();
analogWrite(PWM_M1,200);
analogWrite(PWM_M2,200);
delay(500);
MOTOR_SLEEP();
    }

if(BluetoothData=='R')
    {
      MOTOR_EN();
analogWrite(PWM_M1,100);
analogWrite(PWM_M2,200);
delay(500);
MOTOR_SLEEP();
    }

    if(BluetoothData=='L')
    {
      MOTOR_EN();
analogWrite(PWM_M1,200);
analogWrite(PWM_M2,100);
delay(500);
MOTOR_SLEEP();
    }
    
    
  }
  delay(10);  
}

光敏传感器控制小车前进后退(测试用,需手持小车)

//使用光线控制小车前进后退
void setup() {
  // put your setup code here, to run once:
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(A1, INPUT);
Serial.begin(9600);

}
//串口发送 L:02R:01,控制左右的车速,各需要两位数
void loop() {
  int k = analogRead(A1);
Serial.println(k);
digitalWrite(4,HIGH);
int i = k/4;
int j = k/4;
analogWrite(5, i);
analogWrite(6, j);
  
}

WS2812灯程序

// 本示例程序适用于3线(电源线,地线,数据线)的WS2812灯条

#include <FastLED.h>
#define NUM_LEDS 3 // 定义 led 数量
#define DATA_PIN 7 // 定义 开发板的IO 3 为数据引脚

CRGB leds[NUM_LEDS]; // 定义CRGB的led等数组

void setup() {
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);     
}

void loop() { 
  // 第一个led灯闪烁白色
  leds[0] = CRGB::White; // 序号为0的led设置白色,点亮
  FastLED.show();
  delay(500);
  leds[0] = CRGB::Black; // 序号为0的led设置黑色,熄灭
  FastLED.show();
  delay(500);

  delay(500);

  // 每一个led逐个闪烁绿色
  for(int i = 0; i < NUM_LEDS; i++ ) {
    leds[i] = CRGB::Green;
    FastLED.show();
    delay(100);
    leds[i] = CRGB::Black;
    FastLED.show();
    delay(100);
  }

  delay(1000);

  // 整个灯条 彩虹色渐变
  int h = 0;
  for(int j = 0; j< 255; j++) {
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = CHSV( (h + (255 / NUM_LEDS) * i), 255, 255); //用HSV色彩空间,不断改变H即可
      FastLED.show();
    }
    delay(1);
    h = (h + 2) % 255;
  }

  // 整个灯条熄灭
  for(int i = 0; i < NUM_LEDS; i++ ){
    leds[i] = CRGB::Black;
  }
  FastLED.show();

  delay(1000);
}

机械手调试程序

//通过串口分别输入三个数字,逗号隔开,如:60,90,90,分别是大臂、小臂和抓手的角度
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
String comdata="";
String part01 = "";
String part02 = "";
String part03 = "";

void setup() {
  myservo1.attach(9); 
  myservo2.attach(10); 
  myservo3.attach(11); 
  Serial.begin(9600);
}
 
void loop() { 
  
    ReceiveWifiMessage();
    if(comdata.length()!=0){
      Serial.println(comdata);
      String part01 = fenge(comdata, ",", 0);
      String part02 = fenge(comdata, ",", 1);
      String part03 = fenge(comdata, ",", 2);
      int a = part01.toInt();
      int b = part02.toInt();
      int c = part03.toInt();
      Serial.println(part01);
      Serial.println(part02);
      Serial.println(part03);
      myservo1.write(a);
      myservo2.write(b);
      myservo3.write(c);
    }

    

}

//***********************     接收串口数据   *******************************
void ReceiveWifiMessage(){
comdata="";
while (Serial.available() > 0 )
{
comdata+=char(Serial.read());
delay(2);
}
}

//************************    分割函数     **********************************
String fenge(String str,String fen,int index)
{
 int weizhi;
 String temps[str.length()];
 int i=0;
 do
 {
    weizhi = str.indexOf(fen);
    if(weizhi != -1)
    {
      temps[i] =  str.substring(0,weizhi);
      str = str.substring(weizhi+fen.length(),str.length());
      i++;
      }
      else {
        if(str.length()>0)
        temps[i] = str;
      }
 }
  while(weizhi>=0);
  if(index>i)return "-1";
  return temps[index];
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值