使用blinker制作一个WiFi遥控小车-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16046|回复: 11

使用blinker制作一个WiFi遥控小车

 关闭 [复制链接]
发表于 2018-5-3 22:25 | 显示全部楼层 |阅读模式
本贴已作废,请看最新的开发文档

blinker-ad.jpg

本示例将展示如何制作一个WiFi遥控的小车,制作本项目前,你最好已经掌握一定的Arduino小车制作基础。
演示视频,稍后上传

硬件准备
WiFiduino 或其他 esp8266开发板
小车套件
将WiFiduino与小车电机驱动相连

软件准备
下载并安装Arduino IDE
点击去下载
下载并安装esp8266扩展
点击去下载
下载并加载Blinker-library
点击去下载
下载并安装blinker APP
android下载:点击下载
IOS下载:app store中搜索“blinker”下载

编译上传示例程序

将示例程序上传到Arduino中

其中ssid和pswd需写入你当前WiFi的ssid和密码
[mw_shl_code=cpp,true]
char ssid[] = "<Your WiFi network SSID or name>";
char pswd[] = "<Your WiFi network WPA password or WEP key>";[/mw_shl_code]

完整示例程序如下:

[mw_shl_code=cpp,true]/*
* Blinker WiFi CAR, support WiFiduino
*/

#define BLINKER_PRINT    Serial
#define BLINKER_WIFI

#include <Blinker.h>

char ssid[] = "<Your WiFi network SSID or name>";
char pswd[] = "<Your WiFi network WPA password or WEP key>";

#define L_DIR_PIN       14
#define L_PWM_PIN       16
#define R_DIR_PIN       4
#define R_PWM_PIN       5
#define C_BAR_PIN       12

uint32_t car_os_time = millis();
bool isWarn = false;

void blinker_car_init()
{
    pinMode(L_DIR_PIN, OUTPUT);
    pinMode(L_PWM_PIN, OUTPUT);
    pinMode(R_DIR_PIN, OUTPUT);
    pinMode(R_PWM_PIN, OUTPUT);

    pinMode(C_BAR_PIN, INPUT_PULLUP);

// #if defined(ESP8266)
    analogWriteRange(255);
// #endif
}

void blinker_car_parse(uint8_t &_L_PWM, bool &_L_DIR, uint8_t &_R_PWM, bool &_R_DIR)
{
    uint8_t xAxis = Blinker.joystick(J_Xaxis);
    uint8_t yAxis = Blinker.joystick(J_Yaxis);
    bool    isStop = false;

    if (yAxis < 128) {
        _L_DIR = true;
        _R_DIR = true;

        _L_PWM = map(abs(128-yAxis), 0, 128, 128, 255);
        _R_PWM = map(abs(128-yAxis), 0, 128, 128, 255);
    }
    else if (yAxis > 128) {
        _L_DIR = false;
        _R_DIR = false;

        _L_PWM = map(abs(128-yAxis), 0, 128, 128, 255);
        _R_PWM = map(abs(128-yAxis), 0, 128, 128, 255);
    }
    else {
        isStop = true;

        _L_PWM = 0;
        _R_PWM = 0;
    }

    if (xAxis < 128) {
        if (isStop) {
            _L_DIR = false;
            _R_DIR = true;

            _L_PWM = map(abs(128-xAxis), 0, 128, 128, 255);
            _R_PWM = map(abs(128-xAxis), 0, 128, 128, 255);
        }
        else {
            _L_PWM -= map(abs(128-xAxis), 0, 128, 0, 128);
        }
    }
    else if (xAxis > 128) {
        if (isStop) {
            _L_DIR = true;
            _R_DIR = false;
        }
        else {
            _R_PWM -= map(abs(128-xAxis), 0, 128, 0, 128);
        }
    }
    else {
        if (isStop) {
            _L_PWM = 0;
            _R_PWM = 0;
        }
    }
}

void blinker_car_control(uint8_t cl_pwm, bool cl_dir, uint8_t cr_pwm, bool cr_dir)
{
    digitalWrite(L_DIR_PIN, cl_dir);
    digitalWrite(R_DIR_PIN, cr_dir);
    analogWrite(L_PWM_PIN, cl_pwm);
    analogWrite(R_PWM_PIN, cr_pwm);
}

void blinker_car_detect()
{
    if (!digitalRead(C_BAR_PIN)) {
        if (!isWarn) {
            Blinker.vibrate();
            isWarn = true;
            car_os_time = millis();
        }
        else if (millis() - car_os_time >= 5000) {
            isWarn = false;
        }
    }
    else {
        isWarn = false;
    }
}

void setup()
{
    Serial.begin(115200);

    blinker_car_init();

    Blinker.begin(ssid, pswd);
}

void loop()
{
    Blinker.run();

    uint8_t L_PWM = 0;
    uint8_t R_PWM = 0;
    bool    L_DIR = false;
    bool    R_DIR = false;

    blinker_car_parse(L_PWM, L_DIR, R_PWM, R_DIR);

    blinker_car_control(L_PWM, L_DIR, R_PWM, R_DIR);

    blinker_car_detect();

#if defined(BLINKER_CAR_DEBUG)
    BLINKER_LOG4("L_PWM: ", L_PWM, "  | L_DIR: ", L_DIR);
    BLINKER_LOG4("R_PWM: ", R_PWM, "  | R_DIR: ", R_DIR);
    Blinker.delay(2000);
#endif
}[/mw_shl_code]


添加设备
确保开发板和手机在同一局域网下
在blinker app中,点击右上角的“+”进入添加设备页面
点击选择 Arduino > WiFi接入
等待搜索设备
点击选择要接入的设备

控制设备
我的设备 页面点击设备,进入控制面板
点击右上角 编辑界面 按钮
添加 摇杆组件
点击界面右上角保存界面布局
操作组件即可控制小车移动了

其他
你可以添加其他组件,给小车定制更多功能

还有问题可以回帖了解

发表于 2018-5-6 16:52 | 显示全部楼层
有没有截图的???地球人看了三秒都不知所云

点评

先从快速接入学起 https://www.arduino.cn/thread-76018-1-1.html  详情 回复 发表于 2018-5-7 09:16
 楼主| 发表于 2018-5-7 09:16 | 显示全部楼层
cxk1314 发表于 2018-5-6 16:52
有没有截图的???地球人看了三秒都不知所云

先从快速接入学起
https://www.arduino.cn/thread-76018-1-1.html
发表于 2018-5-15 15:00 来自手机 | 显示全部楼层
支持一个,努力学习中
发表于 2018-5-26 21:34 | 显示全部楼层
能发一下接线图吗?我纯小白,总觉的少了一个接口

点评

没图,不同的电机驱动接线都不一样,你需要先弄懂小车电机驱动,再修改这个例程  详情 回复 发表于 2018-5-28 08:51
 楼主| 发表于 2018-5-28 08:51 | 显示全部楼层
2792079564 发表于 2018-5-26 21:34
能发一下接线图吗?我纯小白,总觉的少了一个接口

没图,不同的电机驱动接线都不一样,你需要先弄懂小车电机驱动,再修改这个例程
发表于 2018-6-24 13:03 | 显示全部楼层
代码没有任何注释,看不懂
发表于 2018-10-25 22:23 | 显示全部楼层
class BlinkerSimpleESP8266_WS' has no member named 'Joystick'
发表于 2018-10-25 22:24 | 显示全部楼层
class BlinkerSimpleESP8266_WS' has no member named 'Joystick'
报错了,这是怎么回事?
发表于 2018-12-30 23:16 | 显示全部楼层
lbghx 发表于 2018-10-25 22:23
class BlinkerSimpleESP8266_WS' has no member named 'Joystick'

摇杆组件在新版的blinker中取消了好像
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 04:46 , Processed in 0.103036 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表