基于Wemos的wifi控制避障小车

这是很久之前的demo了,今天整理下做个记录,毕竟是学习的过程。

准备材料以及简述

WeMos D1

特性

  1. 基于ESP-8266EX

  2. Arduino兼容,使用rduino IDE来编程

  3. 11 x I/O 引脚

  4. 1 x ADC 引脚(输入范围0-3.3V)

  5. 板载5V 1A开关电源(高输入电压24V)

工作中:

和stm32模块开发类似,集成度高

STM32方案也更经济便宜

在这里插入图片描述

红色框中是板载无线网卡

支持AP(路由), sta(上网设备)模式

超声波模块

超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚: VCC(正极)、Trig(触发)Echo(回应)、GND(接地),主要参数:
1.工作电压与电流:5V、15mA。
2.感测距离:2~400cm。
3.感测角度:不大于15°。
4.被测物的面积不要小于50cm2并且尽量平整,具备温度补偿电路。
5.在超声波模块的触发脚位输入10微妙以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位的高电位脉冲持续时间,换算出被测物的距离。

在这里插入图片描述

L9110S直流电机驱动

L9110S参数:输入电压2.5V-12V,输出电流800mA,正反转
描述:
L9110 是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC 之中,使外围器件成本降低,整机可靠性提高。该芯片有两个TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过800mA 的持续电流,峰值电流能力可达1.5A;同时它具有较低的输出饱和压降;内置的钳位二极管能释放感性负载的反向冲击电流,使它在驱动继电器、直流电机、步进电机或开关功率管的使用上安全可靠。L9110 被广泛应用于玩具汽车电机驱动、脉冲电磁阀门驱动,步进电机驱动和开关功率管等电路上。
特点:
低静态工作电流;
宽电源电压范围:2.5V-12V;
每通道具有 800mA 连续电流输出能力;
较低的饱和压降;
TTL/CMOS 输出电平兼容,可直接连CPU;
输出内置钳位二极管,适用于感性负载;
控制和驱动集成于单片 IC 之中;
具备管脚高压保护功能;
工作温度:-20°C-80°C。

在这里插入图片描述

另外,开发环境是Arduino,和keil对比,Arduino可以集成很多开发库如串口、网络、sg90等;包含各种硬件开发接口,迅捷开发;自带串口调试工具,缺点就是程序编译速度慢。

操作过程

首先我们看看硬件的连接线。

超声波传感器:
VCC——wemos 5V
GND——wemos GND
Trig——wemos D8
Echo——wemos D2

L9110S直流电机:
VCC——wemos 5V、VIN
GND——wemos GND
//后轮
A-1B——wemos D7
A-1A——wemos D6
//转向
B-2A——wemos D4
B-1A——wemos D5

看看代码。

#include <ESP8266WiFi.h>
#define Dong1 D7
#define Dong2 D6
#define Zhuan1 D5
#define Zhuan2 D4
#define Echo D2
#define Trig D8

char* ssid = "WiFi账号";
char* passwd = "WiFi密码";

int port = 8899;//端口号,自己定
WiFiServer server(port);//设置服务器端口号

long getTime() {
    
    
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  return pulseIn(Echo, HIGH);
}
void initChaoShengBo() {
    
    
  pinMode(Echo, INPUT);
  pinMode(Trig, OUTPUT);
}
void initWifiSta() {
    
    
  WiFi.mode(WIFI_STA);//设置STA模式
  WiFi.begin(ssid, passwd); //连接网络
  while (WiFi.status() != WL_CONNECTED) {
    
    
    Serial.print(".");
    delay(200);
  }
  Serial.println(WiFi.localIP());//通过串口打印wemos的ip地址
  delay(500);
}
void initL9110s() {
    
    
  pinMode(Dong1, OUTPUT);
  pinMode(Dong2, OUTPUT);
  pinMode(Zhuan1, OUTPUT);
  pinMode(Zhuan2, OUTPUT);
}

void zuo() {
    
    
  digitalWrite(Zhuan1, HIGH);
  digitalWrite(Zhuan2, LOW);
}
void you() {
    
    

    digitalWrite(Zhuan1, LOW);
  digitalWrite(Zhuan2, HIGH);
}
void zheng() {
    
    
  digitalWrite(Zhuan1, HIGH);
  digitalWrite(Zhuan2, HIGH);
}


void hou() {
    
    
  digitalWrite(Dong1, LOW);
  digitalWrite(Dong2, HIGH);
}
void qian() {
    
    
  digitalWrite(Dong1, HIGH);
  digitalWrite(Dong2, LOW);
}
void ting() {
    
    
  digitalWrite(Dong1, HIGH);
  digitalWrite(Dong2, HIGH);
}

void setup() {
    
    
  initL9110s();
  initChaoShengBo();
  Serial.begin(115200);
  initWifiSta();
  server.begin();//启动服务器
}
void loop() {
    
    
  char cmd;
  //获取距离
  long dis;
  int mark = 0;
  WiFiClient client = server.available();//服务初始化

  while (client.connected()) {
    
     //等待客户端连接
    while (client.available() > 0) {
    
     //有数据到来
      cmd = client.read();//读取数据
      Serial.println(cmd);
      dis = getTime() / 58;
      if (dis < 15) {
    
    
        hou();
        delay(200);
        ting();
        mark = 1;
      } else {
    
    
        mark = 0;
      }
      if (mark == 0) {
    
    
        switch (cmd) {
    
    
          case 'q':
            qian();
            break;
          case 'h':
            hou();
            break;
          case 'z':
            zuo();
            break;
          case 'y':
            you();
            break;
          case 's':
            ting();
            break;
          case 'd':
            zheng();
            break;
        }
      }
    }
  }
}

保存上传,静等编译,之后打开串口调试和网络调试工具。

在这里插入图片描述

根据代码发送指令就可以了,实现比较简陋,总体实现根据指令运转、接入WiFi以及小车避障功能。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44333320/article/details/125696876
今日推荐