arduino入门-用arduino uno制作基于蓝牙的数据监控系统
Posted 工大小蒋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino入门-用arduino uno制作基于蓝牙的数据监控系统相关的知识,希望对你有一定的参考价值。
arduino入门-用arduino uno制作基于蓝牙的数据监控系统
一、前言
本文章所制作装置是一个以arduino uno为核心的、基于蓝牙的数据监控系统,其中涵盖包含(1)对舵机的控制(2)读取电位器电压信号(3)蓝牙串口通讯(4)oled显示 四部分内容,仅供教学以及实验使用,不深入探究实用价值。
上文所提及四部分内容单独链接:
(1)对舵机的控制
arduino控制舵机缓慢旋转90°
(2)读取电位器电压信号
arduino读取电压相对值(模拟读取传感器数值)
(3)蓝牙串口通讯
arduino完成两个HC-05蓝牙模块间的配对,实现简单的无线串口通讯
(4)oled显示
arduino控制.96寸oled显示图案、中英文文字、以及变量
一、准备工作
需要准备的材料有:arduino uno、电位器一个、HC-05蓝牙模块两个、舵机一个、0.969寸oled显示屏一个、面包板一个、usb转ttl串口模块一个、杜邦线若干
需要准备的软件:串口调试助手
二、接线图
总接线图如下图所示:
接线图略显复杂,但是其实大部分都是正负极的接线,若把正负极去掉,既可以简单明了的看出接线的规则:
传感器接口 | 单片机接口 |
---|---|
蓝牙 RX | arduino TX |
蓝牙 TX | arduino RX |
电位器信号口 | arduno A1引脚 |
舵机信号口 | arduino 9号引脚 |
oled SCL | arduino A5引脚 |
oled SDA | arduino A4引脚 |
即:
三、数据监控系统代码
代码为前言提到的四个部分代码的组合,可以阅读其四个部分的文章了解详情。
代码如下:
#include <U8g2lib.h> //u8g2库
#include <Servo.h> //舵机库
Servo myservo; //定义舵机命名其为myservo
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,SCL,SDA); //配置构造函数
int a=10; //定义变量a代表传感器数值
void setup()
u8g2.begin(); //启动u8g2驱动程序
myservo.attach(9); //设置舵机控制引脚为9号
rotation(5); //舵机旋转至5°
face(); //显示logo
delay(1000); //显示logo持续一秒钟
Serial.begin(9600); //打开串口,设置波特率9600
void loop()
a=analogRead(A1); //读取电位器数值,模拟传感器数据,将其值赋给变量b
Serial.println(a); //将b在串口中打印,(从而通过蓝牙传输到电脑中)
if(a>900) //如果传感器数值大于阈值900,则舵机旋转115°(模拟警报动作)
rotation(120); //舵机旋转至120°
else
rotation(5); //小于阈值,则舵机旋转至5°
letter(a); //显示变量数值
void face()
u8g2.clearBuffer(); //清空显示屏缓存
u8g2.drawCircle(56,40,8,U8G2_DRAW_LOWER_LEFT); //画四分之一圆,圆心坐标(56,44),半径8
u8g2.drawCircle(56,40,8,U8G2_DRAW_LOWER_RIGHT); //画四分之一圆
u8g2.drawCircle(72,40,8,U8G2_DRAW_LOWER_LEFT); //画四分之一圆
u8g2.drawCircle(72,40,8,U8G2_DRAW_LOWER_RIGHT); //画四分之一圆
u8g2.drawCircle(56,41,8,U8G2_DRAW_LOWER_LEFT); //加粗画四分之一圆
u8g2.drawCircle(56,41,8,U8G2_DRAW_LOWER_RIGHT); //加粗画四分之一圆
u8g2.drawCircle(72,41,8,U8G2_DRAW_LOWER_LEFT); //加粗画四分之一圆
u8g2.drawCircle(72,41,8,U8G2_DRAW_LOWER_RIGHT); //加粗画四分之一圆
u8g2.drawLine(40,18,20,30); //画斜线,两端点坐标分别是(40,18)(20,30)
u8g2.drawLine(88,18,108,30); //画斜线
u8g2.drawLine(40,17,20,29); //加粗画斜线
u8g2.drawLine(88,17,108,29); //加粗画斜线
u8g2.sendBuffer(); //加载以上内容
void letter(int a)
u8g2.clearBuffer(); //清空显示屏缓存
//int8_t a=u8g2.getMaxCharHeight(); //获取最大高度
//int8_t b=u8g2.getMaxCharWidth(); //获取最大宽度
u8g2.setFont(u8g2_font_unifont_t_chinese2); //设置字体
u8g2.drawUTF8(20,17,"智能检测系统"); //显示文字,左下角位置坐标为(20,17)
u8g2.drawUTF8(50,34,":"); //显示:,左下角坐标为(50,34)
u8g2.drawUTF8(0,34,"位移为:");
u8g2.setCursor(64,34); //设置将要打印变量的左下角坐标
u8g2.drawUTF8(0,34,"位移为:");
u8g2.print(a); //打印变量a
u8g2.sendBuffer(); // 加载以上内容
void rotation(int angle) //舵机旋转函数,输入目标角度angle
int anglex=myservo.read(); //读取舵机实际角度,将其值赋给anglex
if(angle>anglex) //如果实际角度小于目标角度,则逐渐增大角度至目标角度为止
for(int i=anglex;i<angle;i++)
myservo.write(i);
delay(15);
else if(angle<anglex) //如果实际角度大于目标角度,则逐渐减小角度至目标角度为止
for(int i=anglex;i>angle;i--)
myservo.write(i);
delay(15);
四、系统调试
**常见问题
(1)设置完毕蓝牙扔无法配对:
解决方法:
首先确保蓝牙配置正确,即量蓝牙密码相同、地址已设置、波特率一致
若配置正确,则假设使用到的蓝牙分别为A和B,先对A进行断电重启,等待数秒,查看是否配对成功;若不成功则对B进行断电重启,等待数秒直至配对成功。
(2)arduino上传出错
先拔掉蓝牙两根数据线再进行上传即可
(3)oled不亮
arduino断电重启等待数秒
调试完毕后可以实现如下功能:
(1)开机显示logo图案一秒钟
(2)旋转电位器,可以看到oled上的数值动态变化
(3)数值大于900,则舵机转到120°位置
(4)数值小于900,舵机自动旋转回5°原点位置
(5)打开串口通讯助手,可以看到数值同步通过蓝牙传输到电脑当中(可以编写电脑程序来对传输来的数据进行监控、分析以及处理)
调试完毕后效果如下:
启动效果:
启动完毕:
旋转电位器:
蓝牙通讯:
以上是关于arduino入门-用arduino uno制作基于蓝牙的数据监控系统的主要内容,如果未能解决你的问题,请参考以下文章
用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
arduino uno和arduino mini 有啥不同?