智能硬件论坛
直播中

fwy丶lucifer

6年用户 19经验值
私信 关注
[经验]

WisCam video car

` 本帖最后由 fwy丶lucifer 于 2017-7-7 18:39 编辑

1、基本原理
在一些恶劣施工现场,或夜晚安全巡逻等场景中都需要一台能代替人眼睛的装备,因此视频小车就被需要了。WisCam通过Wi-Fi连接网络/工作在AP模式,上位机软件发送控制指令到WisCam,然后透传数据到串口,并与Arduino串口连接,硬件连接成功之后,手机或者电脑就可以通过TCP Client 连接到wiscamTCP server,端口号是502,建立链接之后就可以通过硬件串口透传数据了。最后通过GPIO、PWM控制L298N,驱动电机速度和正反转
2、材料准备
1) arduino R3开发板一块
2) WisCam视频开发板一块
3) L298N电机驱动板两块
4) 四轮驱动小车一台
5) 12V电源
3主模块介绍
arduino:更多资料去官网:https://www.arduino.cc/
    arduino它构建于开放原始码simple I/O介面版,并且具有使用类似JavaC语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
QQ截图20170707112144.png
WisCam IoT WiFi开源硬件模块
更多资料去官网:http://www.rakwireless.com/cn/
WisCam是一款超低成本物联网WIFI视频评估套件,集成强大的ARM9处理器,Nabto P2P云服务器实现视频远程播放,2.4G WI-FI模组,硬件兼容Arduino等。WisCam可以通过Wi-Fi传输视频到APP,APP源码,硬件设计资料源文件,软件代码均已上传到Github。因此可快速帮助开发人员使用Linux操作系统设计Wi-Fi视频产品。
WisCam支持YUV RAW DATA,开发人员可以进行视频缩放(1〜8倍缩放),视频裁剪,视频层叠,更改CMOS图像传感器等。
4硬件连接
Wiscam5VArduino5VGNDGNDWiscam TXDArduino RXDWiscam RXDArduino TXD每个L298N包含两路电机控制接口,每路控制接口包含EN、IN1、IN2,EN为使能输出,IN1-IN2为方向控制,Arduino可以通过PWM接入EN,实现速度控制。
QQ图片20170706094858.png
5、测试代码
上位机软件
https://github.com/galaxyofo/wiscam_car_controller.git
下载并编译,输入./controller [wisCam ip] 502
通过键盘的方向键控制小车前进转向
Arduino程序
/******************************************************
***定义前进、后退引脚**********************************
******************************************************/
int forward_r1 = 2;/控制向前右
int forward_r2 = 4;/控制向前右
int forward_l1 = 6;/控制向前左
int forward_l2 = 7;/控制向前左
int forward_pwm1 = 3;/控制速度
int forward_pwm2 = 5;/控制速度
int back_r1 = 8;
int back_r2 = 9;
int back_l1 = 12;
int back_l2 = 13;
int back_pwm1 = 10;
int back_pwm2 = 11;
int driver_status = -1;
int stop_delay = 0;
int duration = 0;
#define MAX_SPEED 0x60
#define ACC_SPEED 2
void setup()
{
  pinMode(forward_r1, OUTPUT);
  pinMode(forward_r2, OUTPUT);
  pinMode(forward_l1, OUTPUT);
  pinMode(forward_l2, OUTPUT);
  pinMode(back_r1, OUTPUT);
  pinMode(back_r2, OUTPUT);
  pinMode(back_l1, OUTPUT);
  pinMode(back_l2, OUTPUT);
  analogWrite(forward_pwm1,0x00);
  analogWrite(forward_pwm2,0x00);   
  analogWrite(back_pwm1,0x00);
  analogWrite(back_pwm2,0x00);
  Serial.begin(115200);
}
void loop() {
  if (Serial.available() > 0) {
    char cmd = Serial.read();
    if (driver_status != cmd) {
      switch (cmd) {
      case '0':
        driver_stop();/停止
        break;
      case '1':
        driver_forward();
        duration = 600;
        break;
      case '2':
        driver_backward();
        duration = 600;
        break;
      case '3':
        driver_left();
        duration = 300;
        break;
      case '4':
        driver_right();
        duration = 300;
        break;
      default:
        break;
      }
      driver_status = cmd;
    }
    stop_delay = 0;
  } else {
  if (stop_delay++ > duration) {
    stop_delay = 0;
    driver_status = 0;
    driver_stop();
  }
  delay(1);
  }
}
/**********************************************
***********************向后******************
**********************************************/
void driver_backward()
{
  digitalWrite(forward_r1, HIGH);
  digitalWrite(forward_r2, LOW);
  digitalWrite(forward_l1, HIGH);
  digitalWrite(forward_l2, LOW);
  digitalWrite(back_r1, HIGH);
  digitalWrite(back_r2, LOW);
  digitalWrite(back_l1, HIGH);
  digitalWrite(back_l2, LOW);
  for (int i = 0x10; i < MAX_SPEED; i += ACC_SPEED) {
    analogWrite(forward_pwm1,i);
    analogWrite(forward_pwm2,i);
    analogWrite(back_pwm1,i);
    analogWrite(back_pwm2,i);
  }
}
/**********************************************
***********************向前******************
**********************************************/
void driver_forward()
{
  digitalWrite(forward_r1, LOW);
  digitalWrite(forward_r2, HIGH);
  digitalWrite(forward_l1, LOW);
  digitalWrite(forward_l2, HIGH);
  digitalWrite(back_r1, LOW);
  digitalWrite(back_r2, HIGH);
  digitalWrite(back_l1, LOW);
  digitalWrite(back_l2, HIGH);
  for (int i = 0x10; i < MAX_SPEED; i += ACC_SPEED) {
    analogWrite(forward_pwm1,i);
    analogWrite(forward_pwm2,i);
    analogWrite(back_pwm1,i);
    analogWrite(back_pwm2,i);   
  }
}
/**********************************************
***********************停止******************
**********************************************/
void driver_stop()
{
  analogWrite(forward_pwm1,0x00);
  analogWrite(forward_pwm2,0x00);   
  analogWrite(back_pwm1,0x00);
  analogWrite(back_pwm2,0x00);
}
/**********************************************
***********************向右******************
**********************************************/
void driver_right()
{  
  analogWrite(back_pwm2, 0);  
  analogWrite(forward_pwm1, 0);
  for (int i = 0X20; i < MAX_SPEED; i += ACC_SPEED) {
    analogWrite(back_pwm1, i);
    analogWrite(forward_pwm2, i);
  }
}
/**********************************************
***********************向左******************
**********************************************/
void driver_left()
{  
  analogWrite(back_pwm1, 0);  
  analogWrite(forward_pwm2, 0);
  for (int i = 0X20; i < MAX_SPEED; i += ACC_SPEED) {
    analogWrite(back_pwm2, i);
    analogWrite(forward_pwm1, i);
  }
}

` 111.png

更多回帖

发帖
×
20
完善资料,
赚取积分