现在的位置: 首页资讯>正文
技术活!大神教你如何利用Curie Nano玩转疯狂四驱车
2017年06月12日 作者: 暂无评论 50+ 0

Curie Nano玩了也有段时间了,学习的过程中确实也遇到了一些问题好在都一一解决了。当初申请的时候就是看中它集成了蓝牙,所以当时想申请来做一个蓝牙小车,经过找资料逐步的学习,一个功能简单的蓝牙小车实现了。

下来介绍一下硬件构成:

1.四个12V的直流电机

2.四个万向轮

3.两个L298N电机驱动板模块

4.一块开好孔的亚克力板

5.12V电源(我这里是用三块锂电池级联)

6.Curie Nano肯定必不可少了

7.LCD屏幕(可选)

8.排针、杜邦线若干

装好了之后就是如下图的样子了。

四驱车

LCD屏幕就显示了运动状态:前、后、左、右、停止。

四驱车

软件部分主要是通过Nordic BLE UART Service来实现,Tx特征字发送一个字符来控制电机,具体的实现看代码吧。

#include "oled.h"

#include "CurieIMU.h" 

#include <CurieBLE.h>

//Nordic BLE UART Service

BLEService UART("6E400001-B5A3-F393-E0A9-E50E24DCCA9E");

//Tx Characterisitic

BLEUnsignedCharCharacteristic Tx("6E400002-B5A3-F393-E0A9-E50E24DCCA9E", BLERead | BLEWrite);

//IN1 IN2 IN3 IN4

const int motorL1 = 2;

const int motorL2 = 3;

const int motorL3 = 9;

const int motorL4 = 10;

const int motorR1 = 11;

const int motorR2 = 12;

const int motorR3 = 13;

const int motorR4 = 20;

char led_on[] = {"LED on"};

char led_off[] = {"LED off"};

char forward[] = {"Forward"};

char backward[] = {"Backward"};

char left[] = {"Left "};

char right[] = {"Right "};

char stopit[] = {"Stop "};

void setup() {

// put your setup code here, to run once:

Sys_Init();

// // initialize device

// Serial.println("Initializing IMU device...");

// CurieIMU.begin();

//

// // Set the accelerometer range to 2G

// CurieIMU.setAccelerometerRange(2);

//

// // Set the accelerometer range to 250 degrees/second

// CurieIMU.setGyroRange(250);

pinMode(motorL1, OUTPUT);

pinMode(motorL2, OUTPUT);

pinMode(motorL3, OUTPUT);

pinMode(motorL4, OUTPUT);

pinMode(motorR1, OUTPUT);

pinMode(motorR2, OUTPUT);

pinMode(motorR3, OUTPUT);

pinMode(motorR4, OUTPUT);

digitalWrite(motorL1, LOW);

digitalWrite(motorL2, LOW);

digitalWrite(motorL3, LOW);

digitalWrite(motorL4, LOW); 

digitalWrite(motorR1, LOW);

digitalWrite(motorR2, LOW);

digitalWrite(motorR3, LOW);

digitalWrite(motorR4, LOW);

Serial.begin(9600);

// begin initialization

BLE.begin();

// set advertised local name and service UUID:

BLE.setLocalName("Arduino101_UART");

BLE.setAdvertisedService(UART);

// add service and characteristic:

// add the service

BLE.addService(UART);

// add the characteristics to the service

UART.addCharacteristic(Tx);

// set the initial value for the characeristic:

Tx.setValue(0);

// begin advertising BLE service:

// start advertising

BLE.advertise();

Serial.println("Bluetooth device active, waiting for connections...");

}

void loop() {

// put your main code here, to run repeatedly:

Main();

// listen for BLE peripherals to connect:

BLEDevice central = BLE.central();

// if a central is connected to peripheral

if (central)

{

Serial.print("Connected to central: ");

Serial.println(central.address()); // print the central's MAC address

while (central.connected())

{

// if the remote device wrote to the characteristic,

if (Tx.written())

{

switch (Tx.value())

{

case '0':

digitalWrite(13, HIGH);

OLED_ShowString(32, 2, led_on, 16);

break;

case '1':

digitalWrite(13, LOW);

OLED_ShowString(32, 2, led_off, 16);

break;

case '2': // forward

digitalWrite(motorL1, HIGH);

digitalWrite(motorL2, LOW);

digitalWrite(motorL3, LOW);

digitalWrite(motorL4, HIGH);

digitalWrite(motorR1, LOW);

digitalWrite(motorR2, LOW);

digitalWrite(motorR3, LOW);

digitalWrite(motorR4, LOW);

OLED_ShowString(32, 2, forward, 16);

break;

case '3': // backward

digitalWrite(motorL1, LOW);

digitalWrite(motorL2, HIGH);

digitalWrite(motorL3, HIGH);

digitalWrite(motorL4, LOW);

digitalWrite(motorR1, LOW);

digitalWrite(motorR2, LOW);

digitalWrite(motorR3, LOW);

digitalWrite(motorR4, LOW);

OLED_ShowString(32, 2, backward, 16);

break;

case '4': // left

digitalWrite(motorL1, LOW);

digitalWrite(motorL2, LOW);

digitalWrite(motorL3, LOW);

digitalWrite(motorL4, LOW);

digitalWrite(motorR1, HIGH);

digitalWrite(motorR2, LOW);

digitalWrite(motorR3, LOW);

digitalWrite(motorR4, HIGH);

OLED_ShowString(32, 2, left, 16);

break;

case '5': // right

digitalWrite(motorL1, LOW);

digitalWrite(motorL2, LOW);

digitalWrite(motorL3, LOW);

digitalWrite(motorL4, LOW);

digitalWrite(motorR1, LOW);

digitalWrite(motorR2, HIGH);

digitalWrite(motorR3, HIGH);

digitalWrite(motorR4, LOW);

OLED_ShowString(32, 2, right, 16);

break;

case '6': // stopit

digitalWrite(motorL1, LOW);

digitalWrite(motorL2, LOW);

digitalWrite(motorL3, LOW);

digitalWrite(motorL4, LOW);

digitalWrite(motorR1, LOW);

digitalWrite(motorR2, LOW);

digitalWrite(motorR3, LOW);

digitalWrite(motorR4, LOW);

OLED_ShowString(32, 2, stopit, 16);

break;

default:

digitalWrite(motorL1, LOW);

digitalWrite(motorL2, LOW);

digitalWrite(motorL3, LOW);

digitalWrite(motorL4, LOW);

digitalWrite(motorR1, LOW);

digitalWrite(motorR2, LOW);

digitalWrite(motorR3, LOW);

digitalWrite(motorR4, LOW);

break;

}

delay(1);

}

}

Serial.print("Disconnected from central: ");

Serial.println(central.address());

}

}

目前实现的功能还比较简单,电机也没有用PWM来控制而是直接驱动所以速度也是不能改变的,有空了再搞吧。因为不会写手机app只能用官方的app nRF Connect来控制,好在该工具提供宏命令录制真是很方便,不然一个个点得累死。

如下图所示,我录制了需要的几个命令,点击三角箭头就可以发送指令了。

¥ロロ←ᄅᄆ│ᄑᆭᅡᄋ

想了解更多详情请访问:[原创] 【Curie Nano试用】 B1.项目-疯狂的四驱车

原文链接: http://www.eeboard.com/news/curie-nano-2/

搜索"爱板网"加关注,每日最新的开发板、智能硬件、开源硬件、活动等信息可以让你一手全掌握。推荐关注!

【微信扫描下图可直接关注】

toaal

  

给我留言

您必须 [ 登录 ] 才能发表留言!