您的位置:首页 > 产品设计 > UI/UE

树莓派+Arduino 传感器 无刷电调、电机等

2017-08-26 12:25 1406 查看
关于树莓派与Arduino UNO的对接,网上的资料也有不少,无外乎三种方式(USB方式,GPIO方式,IIC方式),其中最容易实现的就是第一种了,相比于第二种方式不需要额外的硬件,相比于第三种方式通讯协议比较简洁,所以我想就第一种实现方式详细分享一下。

一、首先准备必要的开发环境

Arduino:直接在官网下载最新的IDE即可:https://www.arduino.cc/en/Main/Software

在这里我提供一种比较方便的下载方式吧,利用apt直接下载安装,特别方便哦

一.环境说明

Raspberry:

  硬件:Raspberry Pi 3B

  软件:树莓派系统

Arduino:

  硬件:Arduino mega2560

  软件:Arduino IDE 1.8.2(目前最新版)

二. 安装Arduino IDE

sudo apt-get install arduino


安装完成在shell脚本里敲入

sudo arduino


即可启动IDE了

三.基本使用

1.将Arduino开发板插到Raspberry的任一USB接口

因树莓派USB口驱动能力有限,强烈建议Arduino板的供电接口同时外接9-12V的电源适配器供电!

2.配置通信端口

主菜单:Tools -> Port:”/dev/ttyxxx” -> 选择”/dev/ttyACM0(Arduino/Genuino Uno)”

或者

ls /dev


就可以看到新的串口了,一般USB转串口都是ttyACM*的形式

3.验证效果

3.1 主菜单:File -> Examples -> 01.Basics -> Blink

3.2 点击工具栏第二个人按钮(Upload)

我现在采用的方式是WiringPi

首先我们需要安装WiringPi ,至于如何安装WiringPi,我在上篇博客已经提过了,在这里我就不在赘述了连接在这

http://blog.csdn.net/xiao__run/article/details/77488391

现在我们做个试验, 在树莓派里新建一个脚本,向arduino发送数据,同时将aduino的数据传到树莓派串口上显示:

小博闲着无聊,把别人博客的代码搬过来写成了C++的,见程序,下满程序是向Arduino发送了一个数字,同时接受Arduino返回的数据这里是I2C通信方式, I2C通信方式安装参考http://blog.csdn.net/u010667011/article/details/61922127

#include <stdio.h>
#include <wiringPiI2C.h>
int main(void)
{
int value,back_val;
const int devId = 0x55;
int fd = wiringPiI2CSetup(devId);
if (fd < 0) {
printf("Error setup I2C device %d\n", devId);
return 1;
}
while(1){
printf("please enter a number(0-255):\n");
scanf("%d",&value);
wiringPiI2CWrite(fd,value);
printf("RPI:Hello Arduino ,I send a digital %d\n",value);
back_val=wiringPiI2CRead(fd);
printf("back_val=%d\n",back_val);
}
return 0;
}


下面我们用传感器来做测试:

树莓派有很好的数据处理能力,但是因为其扩展IO较少,而且没有将AD引脚引出,所以采集数据较麻烦,Arduino则相反,本身实现了很多传感器的驱动,引出了很多标准的VCC+GND+信号的三针管脚,很方便的采集信息。而且Arduino可以很方便的通过其IDE编程,不用自己写驱动。所以尝试使用树莓派+Arduino实现简单的采集处理。

使用到的硬件:树莓派、Arduino、LM35温度传感器。

连接:Arduino可以插在树莓派上,并通过树莓派usb接口与Arduino端连接,LM35为输出为电压信号,所以与Arduino的A0~A5中的任意一组管脚连接即可。

vi pythontest.py


然后将下面脚本copy进去即可

import serial
import time
#选定串口
port = "/dev/ttyACM0"
#设置波特率
serialFromArduino = serial.Serial(port,9600)
serialFromArduino.flushInput()
while True:
if(serialFromArduino.inWaiting() > 0):
input = serialFromArduino.readline()
inputAsInterger = int(input)
print("inputAsInterger = " + str(inputAsInterger))
print("Temperature: " + str(inputAsInterger*5/10.24))
time.sleep(1)


Arduino代码

const int analogInPin = A0;

int sensorValue = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
sensorValue = analogRead(analogInPin);
Serial.println(sensorValue, DEC);
delay(2000);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arduino 硬件 usb