制作可以用航模遥控器遥控的ESP32小车_arenascat的博客-程序员秘密

技术标签: 兴趣项目  单片机  

 这一次来说一下如何控制小车,不过首先要说我遇到的问题,其实我写到一半基本能跑了,然后疏忽大意,让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是有保护但是信号线基本没有高压保护

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012388993/article/details/124183674

智能推荐

Mysql-可重复读的隔离级别在什么情况下会出现幻读_rsjssc的博客-程序员秘密_mysql 可重复读怎么出现幻读

想了解数据库隔离级别,MVCC,next-key lock,gap lock,可重复度到底能不能防止幻读,我通过在 mysql 8.0 上进行了 5 种现象的实验,给你结论

Qt 自绘按钮控件_我不是萧海哇~~~~的博客-程序员秘密_qt自绘控件

Qt5 自绘按钮控件,实现高度个性化的功能。核心思想是重写paintEvent等各种事件处理函数,根据当前状态在QPaintDevice上绘制图像。效果:MPushButton.h#ifndef MPUSHBUTTON_H#define MPUSHBUTTON_H#include &lt;QPushButton&gt;#include &lt;QLineEdit&gt;class MPushButton : public QPushButton{ Q_OBJECTpubli

Linux系统时间偏差的纠正_roy_nutt的博客-程序员秘密_linux时钟偏差

实际上,linux系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。另一个时间是 “System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以,当操作系统启动的时候,内核时钟是要读取RTC时

VMware vCenter 各版本号对照表_白昼ron的博客-程序员秘密_vcenter 版本

VMware vCenter 各版本号对照表本博文转自以下链接:https://www.virten.net/vmware/vcenter-release-and-build-number-history/

Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)_天天向上zb的博客-程序员秘密

搭建《unix网络编程》那本书所需的环境我用的是ubuntu11.10系统:1,安装编译器,为了齐全还是安装一下build-essential[python] view plaincopysudo apt-get install build-essential  2,下载本书的头文件及示例源码点此下载u

MySQL中的AND 和 OR_明天会更好吗的博客-程序员秘密_mysql的or

MySQL中AND 和 OR 关键字在 WHERE 中可以多次出现 AND 优先级 高于 OR  建议使用括号来明确你的逻辑,避免出错也避免别人理解错   例一:从用户表中查找出id等于12并且年龄为12的用户或者年龄为13的用户    SELECT * FROM user WHERE id=12 AND age=12 OR age=13 例二:从用户...

随便推点

网页设计配色: 色彩的调和_shmilyILY的博客-程序员秘密

网页页面中总是由具有某种内在联系的各种色彩,组成一个完整统一的整体,形成画面色彩总的趋向,称为色调。也可以理解为色彩状态。色彩给人的感觉与氛围,是影响配色视觉效果的决定因素。  两种或两种以上的色彩合理搭配,产生统一谐调的效果,称为色彩调和。色彩调和是求得视觉统一,达到人们心理平衡的重要手段。  调和就是统一,下面介绍的四种方法能够达到调和页面色彩的目的。  ■ 同种色的调

Linux编程send函数,网络异常导致程序退出解决办法_黄大刀的博客-程序员秘密

发现调用send函数时,如果远端的socket异常中断的时候,会导致send异常,并退出,这是不允许的。原因是网络异常的时候,系统会触发一个底层信号SIGPIPE,如果没有函数接口处理这个信号的话,就会导致程序异常退出。解决办法,最简单的办法:禁用这个信号,也就是调用send的时候,使用MSG_NOSIGNAL标志,例如:if (send(comm-&gt;comm_fd, Dat...

scikitlearn下载地址_木头生辉的博客-程序员秘密_scikitlearn下载

https://pypi.org/project/scikit-learn/#files适用版本号主要是3.5——3.8适用mac,linux和win下载时要对应安装环境和python版本,不匹配容易出错。

一个完整的研发体系应该包括的内容_波特王子的博客-程序员秘密_研发体系

转自:http://www.360doc.com/content/17/0215/19/33578855_629254120.shtml多年前笔者所在公司作为甲方和融智咨询进行全面合作,按照融智咨询提供的“四四四”模型系统性的对公司的研发体系进行了变革,并且取得不错了效果。 “四四四”模型如下图:       四四四代表了四大团队、四个流程、四个支撑体系。根据“四四四”模型,笔者公司分别完成了以下...

互联网企业的职位&职位之间的相互关系_雪心玉竹的博客-程序员秘密_互联网企业

了解企业的运行逻辑,就要考虑一下企业所在行业的价值链、产业链这些相对宏观的方面,然后再考虑微观的层面。从微观方面,要了解一家企业的运作逻辑,可以去梳理典型企业的核心业务流,岗位都是基于业务流而产生的。这篇文章,将从宏观和微观两个方面,通过价值链和业务流的角度,来剖析企业的职位以及职位之间的相互关系。一、互联网企业的组织结构与部门设置要了解一个互联网企业的所有岗位及其之间的相互关系,我们有必要首先介绍一下互联网企业的典型组织结构图,这样便于你从整体上形成对一个企业的各个部门及其职位的总体印象。 而要了解

手把手教你将小程序项目跑起来【真自律小程序】_喵宁一的博客-程序员秘密_小程序项目怎么运行

1、下载项目文件在【猫宁一】公众号中回复【源码】,得到下载链接,将项目下载下来并解压2、打开项目文件,编辑server/config.js文件将红框圈出来的地方改成自己的信息(1)qcloudAppId、qcloudSecretId、qcloudSecretKey去哪里找?首先登录自己的腾讯云,点击下面链接:https://console.cloud.tencent.com/capi...

推荐文章

热门文章

相关标签