查看: 5007|回复: 11

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

 关闭 [复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 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和密码

    kittenblock中小学创客名师推荐的图形化编程软件

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


    完整示例程序如下:

    kittenblock中小学创客名师推荐的图形化编程软件

    /*
     * 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
    }



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

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

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

    还有问题可以回帖了解

    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    郁闷
    2019-2-28 22:19
  • 签到天数: 22 天

    [LV.4]偶尔看看III

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

    点评

    先从快速接入学起 https://www.arduino.cn/thread-76018-1-1.html  详情 回复 发表于 2018-5-7 09:16
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

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

    先从快速接入学起
    https://www.arduino.cn/thread-76018-1-1.html
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    难过
    2018-6-30 19:26
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2018-5-15 15:00 来自手机 | 显示全部楼层
    支持一个,努力学习中
  • TA的每日心情

    2019-1-21 10:22
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2018-5-26 21:34 | 显示全部楼层
    能发一下接线图吗?我纯小白,总觉的少了一个接口

    点评

    没图,不同的电机驱动接线都不一样,你需要先弄懂小车电机驱动,再修改这个例程  详情 回复 发表于 2018-5-28 08:51
    打赏作者鼓励一下!
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2018-5-28 08:51 | 显示全部楼层
    2792079564 发表于 2018-5-26 21:34
    能发一下接线图吗?我纯小白,总觉的少了一个接口

    没图,不同的电机驱动接线都不一样,你需要先弄懂小车电机驱动,再修改这个例程
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情

    2019-3-18 11:50
  • 签到天数: 261 天

    [LV.8]以坛为家I

    发表于 2018-6-24 13:03 | 显示全部楼层
    代码没有任何注释,看不懂
  • TA的每日心情
    开心
    2018-9-27 17:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-10-25 22:23 | 显示全部楼层
    class BlinkerSimpleESP8266_WS' has no member named 'Joystick'
  • TA的每日心情
    开心
    2018-9-27 17:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-10-25 22:24 | 显示全部楼层
    class BlinkerSimpleESP8266_WS' has no member named 'Joystick'
    报错了,这是怎么回事?
  • TA的每日心情
    开心
    2019-3-7 11:32
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2018-12-30 23:16 | 显示全部楼层
    lbghx 发表于 2018-10-25 22:23
    class BlinkerSimpleESP8266_WS' has no member named 'Joystick'

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

    本版积分规则

    热门推荐

    今晚闲来无事搞了下STM32 Ardunio 的SPI2 SD卡的通讯
    今晚闲来无事搞了下STM32
    看到Ardunio很火,就想用STM32F103RBT6的板子试一下。之前移植网上带系统的,竟然说超
    arduino之串口通讯
    arduino之串口通讯
    总操流程: 1、写入程序 2、测试[hr][/backcolor] 写程序[/backcolor] [*]void s
    四位数码管动态显示
    四位数码管动态显示
    代码如下;从9990到9999,然后再从9898开始 代码撸起; const unsigned char dofly_Du
    求助!GM65二维码扫描模块怎么用?
    求助!GM65二维码扫描模块
    求助!GM65二维码扫描模块怎么用? 卖家给的资料真的看不懂该怎么弄。。( ̄▽ ̄)~*
    Arduino Pro Micro 打造USB音频转 3.5mm音频转接板
    Arduino Pro Micro 打造US
    3.5mm耳机接口是PC上最常见的音频接口,因为它工艺简单、价格低廉在涉及到声音输入输
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表