`
yiqieanhao
  • 浏览: 67385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

制作基于arduino的Wifi小车

阅读更多
成品展示




原理:


  • 把无线路由器刷入openWRT,并安装mjpeg-streamer和ser2net软件。
  • mjpeg-streamer用来处理来自摄像头的视频数据,然后通过Http协议发送给第三方。
  • 第三方如手机通过wifi接入路由器,在TCP连接中发送控制指令
  • 路由器在收到指令后通过ser2net将指令发送给绑定的串口,这里是aruduino UNO。
  • Arduino在收到指令后控制电机扩展板,电机扩展板将执行指令发给电机和云台舵机,最后电机和舵机执行操作指令。


连线:



协议:
这里采用了wifi-robots的协议定义,详细请参考这里

下位机代码:
#include <AFMotor.h>
#include <Servo.h> 

//UART PROTOCOL///////////////////////
#define UART_FLAG 0XFF
//Moto////////////////////////////////
//PROTO: FLAG DEV DIRECTION EMPTY FLAG
#define MOTO 0X00
#define FORWARD 0X01 //MOTO COMMAND
#define BACKWARD 0X02
#define TURNLEFT 0X03
#define TURNRIGHT 0X04
#define CARSTOP 0X00
//Servo///////////////////////////////
//PROTO: FLAG DEV SERVONUM POS FLAG
#define SERVO 0X01
//Moto Speed//////////////////////////
//PROTO: FLAG DEV MOTOSIDE SPEED FLAG
#define MOTOSPEED 0X02
//////////////////////////////////////
int n = 1;
int flagCount = 0;
int tempData = 0;
int UARTReveived = 0;
int rxData[5];
//-------------------define motor----------------------------------------------//
AF_DCMotor motorL(3,MOTOR12_8KHZ);  //connect to M3
AF_DCMotor motorR(4,MOTOR12_8KHZ);  //connect to M4
int motor_speed = 200; //[modifid]motor speed 150-200,---min:100;max:255
int motor_delay = 400; //[modifid]delay time in step

//-------------------define servo----------------------------------------------//
Servo hand_t_servo;  // create servo object to control a servo 
Servo hand_d_servo;  // create servo object to control a servo
int hand_t_pos = 90; // 
int hand_d_pos = 90; //
int hand_delay = 1;  //[modifid] speed of hand

//------------------main program-----------------------------------------------//
void loop()
{
  if(Serial.available())
  {
    tempData = Serial.read();
    delay(3);
    if(tempData == UART_FLAG && flagCount < 2)
    {
      rxData[0] = tempData;
      flagCount++;
    }
    else
    {
      rxData[n] = tempData;
      n++;
    }
    if(flagCount == 2)
    {
      rxData[4] == UART_FLAG;
      UARTReveived = 1;
      n = 1;
      flagCount = 0;
      tempData = 0;
      Serial.flush();
    }
  }
  if(UARTReveived == 1)
  {
  Serial.print("rxData:");
  Serial.print(rxData[0]);
  Serial.println(rxData[1]);
    if(rxData[1] == MOTO)
    {
       switch(rxData[2])
       {
         case FORWARD:
         carGoFwd();
         break;
         case BACKWARD:
         carGoBwd();
         break;
         case TURNLEFT:
         carTurnL();
         break;
         case TURNRIGHT:
         carTurnR();
         break;
         case CARSTOP:
         carStop();
         break;
       }
       UARTReveived = 0; 
    }
    else if(rxData[1] == SERVO)
    {
      servoSet(rxData[2], rxData[3]);
      UARTReveived = 0;
    }
    else if(rxData[1] == MOTOSPEED)
    {
      CHNSpeed(rxData[2], rxData[3]);
      UARTReveived = 0;
    }
  }
}

//CAR MOVEMENTS
void carGoFwd()
{
    motorL.setSpeed(motor_speed);
    motorR.setSpeed(motor_speed);
    motorL.run(FORWARD);
    motorR.run(FORWARD);
    Serial.print("forward");
    delay(motor_delay); 
}
void carGoBwd()
{
    motorL.setSpeed(motor_speed);
    motorR.setSpeed(motor_speed);
    motorL.run(BACKWARD);
    motorR.run(BACKWARD);
    Serial.print("Backward");
    delay(motor_delay); 
}
void carTurnL()
{
    motorL.setSpeed(motor_speed);
    motorR.setSpeed(motor_speed);
    motorL.run(BACKWARD);
    motorR.run(FORWARD);
   delay(motor_delay); 
   Serial.print("TurnL");
}
void carTurnR()
{
    motorL.setSpeed(motor_speed);
    motorR.setSpeed(motor_speed);
    motorL.run(FORWARD);
    motorR.run(BACKWARD);
    delay(motor_delay);     
    Serial.print("TurnR");
}
void carStop()
{
  b_motor_stop();
  Serial.print("carStop");
  delay(5);
}
//CAR SPEED
void CHNSpeed(int wheelDIR, int wheelSpeed)
{
  if(wheelDIR == 0X01) //LEFT WHEEL
  {
     motorL.setSpeed(wheelSpeed);
  }
  else if(wheelDIR == 0X02) //RIGHT WHEEL
  {
    motorR.setSpeed(wheelSpeed);
  }
}
//SERVO TURN
void servoSet(int servoNum, int pos)
{
  if(pos > 180) pos = 160;
  else if(pos < 0) pos = 0;
  switch(servoNum)
  {
    case 0X07:
    hand_t_servo.write(pos);
    Serial.print("X");
    Serial.print(pos);
    break;
    case 0X08:
    hand_d_servo.write(pos);
    Serial.print("Y");
    Serial.print(pos);
    break;
  }
}
void setup()
{
  Serial.begin(9600);
  b_motor_stop();
  b_servo_ini();
  //delay(2000);  //waiting time
  Serial.println("Hello! Wifi Car");
}

void b_motor_stop(){
  motorL.run(RELEASE);
  motorR.run(RELEASE);
}

void b_servo_ini(){
  hand_t_servo.attach(9);  // attaches the servo on pin 9 to the servo object 
  hand_d_servo.attach(10);  // attaches the servo on pin 10 to the servo object 
  hand_t_servo.write(hand_t_pos); 
  hand_d_servo.write(hand_d_pos); 
}
  • 大小: 12.9 KB
  • 大小: 10.8 KB
  • 大小: 1.6 MB
分享到:
评论

相关推荐

    基于Arduino的WiFi视频小车设 计 制 作 方 案.pdf

    "基于Arduino的WiFi视频小车设计制作方案" 本文将对基于Arduino的WiFi视频小车设计制作方案进行详细讲解,从项目背景、方案设计、小车组装、实践总结、项目里程碑等方面进行阐述。 一、项目背景分析 随着智能化...

    wifi小车_wifi小车_arduino小车_

    【WiFi小车与Arduino小车概述】 WiFi小车是一种基于无线网络技术的智能移动机器人,它结合了WiFi模块和微控制器技术,使小车能够通过Wi-Fi网络接收指令并反馈状态。Arduino小车则是在Arduino平台上搭建的智能车辆,...

    基于Arduino的WiFi视频小车设计制作方案.pdf

    基于Arduino的WiFi视频小车设计方案涉及到嵌入式系统开发、电机驱动、无线通信以及视频传输等多个领域。本方案的主要目的是制作一个可以远程控制并...但上述知识点覆盖了基于Arduino的WiFi视频小车设计制作的核心内容。

    Proteus 动画仿真 arduino智能小车

    在电子制作领域,Arduino是一种广泛使用的开源硬件平台,它以其简单易用的编程环境和丰富的扩展模块而受到众多爱好者和教育者的青睐。本项目聚焦于使用Arduino构建智能小车,并结合Proteus进行动画仿真,这为我们...

    C#上位机控制WiFi智能小车

    WiFi小车通常内置一个微控制器,如Arduino或Raspberry Pi,以及WiFi模块,如ESP8266或ESP32,这些硬件组件使得小车可以通过无线网络接收和发送指令。开发者通过编写程序来控制小车的马达、转向、摄像头等硬件设备。 ...

    Arduino WIFI智能小车 无线视频遥控小车 -电路方案

    这是一款基于arduino的WIFI视频小车,小车上配有703N无线路由器和720P高清视屏摄像头,可以将行进过程中的实时画面通过自带的WIFI反馈到你的手机或者是电脑平板上。用户只需要在相应的设备上安装好软件,即可通过...

    基于wifi控制的小车

    【基于WiFi控制的小车】 在当今的物联网技术发展下,基于WiFi控制的小车...通过不断实践和改进,你可以打造出更复杂、更智能化的WiFi小车,例如加入自主导航、避障等功能,甚至与其他WiFi设备交互,实现更多可能性。

    用ESP8266+android,制作自己的WIFI小车(Android 软件)wificardemo.zip

    在这个项目中,我们将探讨如何利用ESP8266 Wi-Fi模块和Android设备来构建一个自制...通过学习这个项目,不仅可以掌握Wi-Fi遥控小车的制作,还能深入了解Android应用开发和ESP8266的使用,为未来的IoT项目打下坚实基础。

    基于Arduino实现可手动绘制路线的智能小车机器人-电路方案

    适用于Arduino的PHPoC WiFi Shield 2× 1 PHPoC步进电机控制器× 2 汽车× 1 OpenBuilds微型限位开关× 1 Batery 主要思想是通过在基于网络的地图上绘制路线来控制基于步进电机的机器人,使只需在移动屏幕上用手指...

    无线智能小车制作及代码

    在本项目中,我们将深入探讨如何制作一款基于Arduino的无线智能小车,这是一次集电子、编程和机械工程于一体的创新实践。Arduino是一种开源电子平台,适合初学者和专业人士进行互动装置和物联网(IoT)项目的开发。在...

    BTcar_arduino_蓝牙_btcar_wifi电路_bt-carbt磁力车_

    标题中的“BTcar_arduino_蓝牙_btcar_wifi电路_bt-carbt磁力车”指的是一个基于Arduino平台的项目,该项目涉及到蓝牙通信、Wi-Fi连接以及一个名为“bt-carbt”的磁力车。描述中提到的“蓝牙小车,wifi小车源码,带...

    物联ESP8266 制作的智能小车

    【标题】"物联ESP8266 制作的智能小车"涉及的主要知识点是物联网技术、ESP8266微控制器以及基于该控制器的智能小车开发。ESP8266是一款经济且功能强大的Wi-Fi模块,常用于物联网项目,因其内置TCP/IP协议栈,可以...

    arduino教程

    Arduino的核心理念是简单易用,使得任何人都能轻松进行物理计算和互动装置的制作。 在Arduino的世界里,硬件和软件的结合变得直观而有趣。Arduino板内置微控制器,可以通过USB线连接到电脑,然后通过Arduino IDE...

    《爱上Arduino》中文版

    5. **项目实践**:书中的实例项目涵盖了基础到进阶的各种应用,例如制作数字时钟、音乐盒、无线遥控小车、环境监测系统等。通过这些项目,读者可以亲手操作,体验从理论到实践的过程。 6. **扩展模块与 shields**:...

    902-ESP32_SDK开发-动手制作自己的WiFi视频遥控小车(微信小程序视频遥控小车) - 杨奉武 - 博客园1

    本教程将带你一起动手制作一款使用ESP32 SDK的WiFi视频遥控小车,同时结合微信小程序进行远程控制,为你的物联网项目添加新的乐趣。 首先,你需要确保电脑已经安装了CH340驱动,因为ESP32在开发过程中通常需要通过...

    Arduino 4WD课程大纲1

    本课程主要围绕基于Arduino平台的四轮驱动(4WD)智能小车展开,涵盖了硬件组装、软件编程、遥控控制以及传感器应用等多个方面,旨在帮助学习者全面掌握 Arduino 技术在机器人制作中的应用。 ### 一、硬件组装 1. **...

    8个智能小车制作实例推荐,带你轻轻松松玩转智能车!.pdf

    另外,利用Arduino平台可以实现更多创意,如基于Arduino和WiFi路由器的视频监控小车,小车能够通过摄像头拍摄实时画面,并通过WiFi进行远程监控。 此外,驱动电路也是智能小车不可或缺的一部分,尤其是在需要承受较...

    安卓与arduino交互程序

    在电子制作和物联网领域,Android与Arduino的交互是常见的应用场景,比如智能小车、智能家居、环境监测等。本文将深入探讨这个主题,基于提供的“安卓与arduino交互程序”这一资源,解析其背后的原理和实现方法。 ...

    love arduino.rar

    10. **项目实践**:通过实践项目,如制作电子时钟、音乐盒、智能小车等,能更好地理解和运用Arduino知识。 11. **物联网应用**:Arduino可以与WiFi或蓝牙模块结合,实现物联网项目,如智能家居控制系统。 12. **...

    再不玩就out的十款智能小车

    10. 基于Arduino开源平台的wifi视频监控小车:该小车具备远程监控功能,能够通过摄像头拍摄影像并实时传输,Arduino模块的使用降低了实现的复杂性。 通过介绍以上十款智能小车,我们可以看到智能小车技术正日益发展...

Global site tag (gtag.js) - Google Analytics