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

  

相关文章

纯干货来啦!资深技术宅教你如何利用Curie Nano记录移动数据
可穿戴

Curie Nano是定位可穿戴的场合,有时候我们需要把采集到的运动数据保存下来进行分析。如果数据量比较大就必须得保存到大容量的SD卡里了。本篇我们就来学习一下怎么操作。

世界最小屏Android 7.0手机Jelly发布——950mAh号称续航3天
Android 7.0-1

大屏当道的时代,有那么一批用户希望重新回归小屏,不过,似乎小屏在当下也被重新定义了,5寸、5.2寸甚至5.4寸都自称迷你。现在让我们来看看这款全球最袖珍的4G智能手机,Jelly

Intel Curie神助攻——DFROBOT重磅推出年度最佳创客板Curie Nano
intelcurie-5

时间回到2015年CES展上,当时Intel向全世界宣告了进军物联网以及可穿戴领域的决心,推出了一款高度集成的模块——Intel Curie。Curie虽然只有手指甲那么大,但功能却十分强大,集成了异构双核...

富士康&夏普计划投资80亿美元在美国打造 LCD 工厂
fushikang

根据日本网站 Nikkei 报告,iPhone 代工厂富士康和公司最近收购的显示屏子公司夏普正在考虑在美国打造 LCD 工厂。

传苹果2018年将发布5.8英寸曲面OLED iPhone
iph

针对2018年的下一代产品(极可能会叫iPhone 8),苹果又设计了三款,其中最顶级的型号将配备5.5寸或者更大的OLED屏幕,而且有双侧曲面屏,类似现在的三星S7 Edge、Note 7。而另外两款仍是传统...

给我留言

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