制作可以用航模遥控器遥控的ESP32小车

 这一次来说一下如何控制小车,不过首先要说我遇到的问题,其实我写到一半基本能跑了,然后疏忽大意,让IO口碰了8.4V电源,全套包括接收机在内,和鞭炮一样炸了,五十多块钱直接飘了,这一次可以说是损失惨重,主要所有主要模块都是自制的,很费时间,可以说是非常难过了。

 

 

使用的电机控制模块和电机是这样的

 

 

控制方法很简单

 设计上,IO32,IO33是A通道控制,IO25,IO26是B通道控制,前后信号IO15,转向信号IO16

#define CA2 32
#define CA1 33
#define CB1 25
#define CB2 26
#define DEATH_AREA 20
#define MIDDLE 1600
#define SIGNALPIN 15
#define SIGNALPIN2 16
#define MIN 1000
#define MAX 2255
#define PWMBASE_GO 1000
#define ARRANGE 40
#include "soc/rtc_wdt.h" 
void setup(){
  rtc_wdt_protect_off(); 
  rtc_wdt_enable(); 
   rtc_wdt_feed(); 
  rtc_wdt_set_time(RTC_WDT_STAGE0, 7000); 
  Serial.begin(115200);
  Serial.println("hello");
   pinMode(CA1,OUTPUT);
  pinMode(CA2,OUTPUT);
  pinMode(CB1,OUTPUT);
  pinMode(CB2,OUTPUT);
  digitalWrite(CA1,LOW);
  digitalWrite(CA2,LOW);
  digitalWrite(CB1,LOW);
  digitalWrite(CB2,LOW);
}

int goandback;
int rotatepulse;
void loop(){
   goandback = pulseIn(SIGNALPIN, HIGH) ;
   rotatepulse = pulseIn(SIGNALPIN2, HIGH) ;
  Serial.print("GoBack,Rotate"); 
  Serial.print(goandback);
  Serial.print(" , ");
   Serial.println(rotatepulse);
  rtc_wdt_feed(); 
  if(abs(goandback-MIDDLE)<DEATH_AREA)
  {
    carStandby();
  }
  else if(goandback>MIN&&goandback<MIDDLE-DEATH_AREA)//go
  {
   carBack(goandback);
  }
  else if(goandback>MIDDLE-DEATH_AREA&&goandback<MAX)//back
  {
    carRun(goandback);
  }
  else
  {
     carStandby();
  }
  
}
void carStandby()
{
  digitalWrite(CA1,LOW);
  digitalWrite(CA2,LOW);
  digitalWrite(CB1,LOW);
  digitalWrite(CB2,LOW);
}
void carBack()
{
  digitalWrite(CA1,HIGH);
  digitalWrite(CA2,LOW);
  digitalWrite(CB1,HIGH);
  digitalWrite(CB2,LOW);
}

void carBack(int i)
{
   digitalWrite(CA2,LOW);
  digitalWrite(CA1,HIGH);
  delay((MIDDLE-i)/ARRANGE);
  carStandby();
  
  digitalWrite(CB2,LOW);
  digitalWrite(CB1,HIGH);
  delay((MIDDLE-i)/ARRANGE);
  carStandby();
}
void carRun(int i)
{
  digitalWrite(CA1,LOW);
  digitalWrite(CA2,HIGH);
  delay((i-MIDDLE)/ARRANGE);
  carStandby();
  
  digitalWrite(CB1,LOW);
  digitalWrite(CB2,HIGH);
  delay((i-MIDDLE)/ARRANGE);
  carStandby();
  
  
}

void carRun()
{
  digitalWrite(CA1,LOW);
  digitalWrite(CA2,HIGH);
  digitalWrite(CB1,LOW);
  digitalWrite(CB2,HIGH);
}

void carstop()
{
  digitalWrite(CA1,HIGH);
  digitalWrite(CA2,HIGH);
  digitalWrite(CB1,HIGH);
  digitalWrite(CB2,HIGH);
}

主要做的事情其实非常的简单,就是:

1.处理输入的前后信号,处理输入的转向信号,使用PulseIn来获取到高电平时间

2.通过PWM信号到电机驱动芯片,分配能量到两个车轮的电机上

然而在还没弄好之前,炸了,但是唯一值得庆幸的是我还好有这个——USB隔离器,不然感觉电脑也有点危险,USB的5V是有保护但是信号线基本没有高压保护

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值