课题作业——Arduino与身高体重仪
在社区这么久一直做米虫,一直没有什么作为,最近打算做一个身高体重仪,算是一个课题,接下来的时间里面我会一直更新帖子进度,希望能够给以前我看的那些帖子一些回报。不多说,先说说身高体重仪完成以后的功能:1、超声波测升高2、4个压力应变片测体重
3、一个显示屏显示身高体重数据
既然是身高体重仪,不可避免的是显示的模块了 ,用OLED12864屏幕太小,LCD12864引脚太多,IIC的太贵,进过一中午的查询与老师的指点找到了带串口的LCD屏幕并且成功将它显示成功,下面我将上传我的代码和库。(测试程序都是各帖子里面的,感谢各位大神)。
/*
在进行LCD串口显示的时候有两种选择
1.将PSB引脚拉低——不要接地
2.JP2与S点焊接起来
*/
#include<LCD12864RSPI.h>
//LCD12864RSPI(int _latchPin,int _dataPin,int _clockPin):
LCD12864RSPI LCDA(A3, A4, A5); //RS->A3,R/W->A4,E->A5
void setup()
{
LCDA.setCursor(0, 1); //在第一行第二位显示
LCDA.print("室内环境监测");
LCDA.setCursor(1, 0); //在第二行第一位显示
LCDA.print("温度:");
LCDA.setCursor(2, 0); //在第三行第一位显示
LCDA.print("湿度:");
LCDA.setCursor(3, 0); //第四行第一格开始显示
LCDA.print("PM2.5:");
}
void loop()
{
;
}
为什么要要用4个应变片?还有就是体重测量范围是多少呢? 鼓捣鼓捣终于将称重模块捣鼓出来了,话说其实HX711的模块还是很好用的,这次还是用了第三方库,用来读取HX711的数据,不过读出来的不准,所以我加了算法后就差不多准确的,废话不多说下面给料了
#include <HX711.h>
// Hx711.DOUT: A1
// Hx711.SCK:A0
Hx711 scale(4, 5);
void HX711Init(void)
{
Serial.println("System Init,Please Wait...");
long offset= scale.getAverageValue(10);
//计算偏移量(此时称必须保持水平且称上不能有东西!!!)
//getAverageValue(M)M是读取次数栓平均值
scale.setOffset(offset);//设置偏移
scale.setScale(100);//设置比例(此值需要根据不同的重量传感器自己设置!)
}
void setup()
{
Serial.begin(9600);
HX711Init();
}
void loop()
{
Serial.print(((-(int)scale.getWeight(10)*4.75312935)/1000),2);//返回值是处理过后Kg,x*4.75312935/1000是处理数据公式
Serial.println("kg");
}
本帖最后由 辉煌仪奇 于 2018-6-2 17:26 编辑
经过两天的捣鼓,在终于将语音模块给捣鼓出来了,语音模块使用的是MY2490-16P,省钱又多功能的一个模块,好了不多说了下面是MY2490的说明书:http://www.51hei.com/bbs/dpj-83694-1.html
下面是测试程序
#include <SoftwareSerial.h>
#include "yuyin.h"
SoftwareSerial mySerial(2, 3); // RX, TX
String comdata = "";
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
for (int i = 0; i < 24; i++)
Disply_num(i);
}
void Disply_num(int x)//播放音乐函数
{
switch (x)//选择播放哪一首音乐
{
case 0: mySerial.write(num24, 7); break;//0
case 1: mySerial.write(num1, 7); break;//1
case 2: mySerial.write(num2, 7); break;//2
case 3: mySerial.write(num3, 7); break;//3
case 4: mySerial.write(num4, 7); break;//4
case 5: mySerial.write(num5, 7); break;//5
case 6: mySerial.write(num6, 7); break;//6
case 7: mySerial.write(num7, 7); break;//7
case 8: mySerial.write(num8, 7); break;//8
case 9: mySerial.write(num9, 7); break;//9
case 10: mySerial.write(num10, 7); break;
case 11: mySerial.write(num11, 7); break;
case 12: mySerial.write(num12, 7); break;
case 13: mySerial.write(num13, 7); break;
case 14: mySerial.write(num14, 7); break;
case 15: mySerial.write(num15, 7); break;
case 16: mySerial.write(num16, 7); break;
case 17: mySerial.write(num19, 7); break;
case 18: mySerial.write(num20, 7); break;
case 19: mySerial.write(num21, 7); break;
case 20: mySerial.write(num22, 7); break;
case 21: mySerial.write(num23, 7); break;
//case 22: mySerial.write(num25, 7); break;
case 22: mySerial.write(num17, 7); break;
case 23: mySerial.write(num18, 7); break;
// case 25: mySerial.write(num26, 7); break;
}
if (x > 20)
{
comdata = "";//字符串清零
GOTOH:
while (mySerial.available() > 0)
{
comdata += char(mySerial.read());//读取模拟串口数据
delay(1);
}
Serial.println(comdata);
mySerial.flush();
if (comdata == "OKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKSTOP" || comdata == "OKSTOP")//判断音乐是否播完
;
else
goto GOTOH;
}
else if (x <= 20 && x > 12)
delay(1200);
else
delay(800);
}
#ifndef YUYIN_H
#define YUYIN_H
#include<arduino.h>
byte num1 = {0x7E, 0x05, 0x41, 0x00, 0x01, 0x45, 0xEF}; //1
byte num2 = {0x7E, 0x05, 0x41, 0x00, 0x02, 0x46, 0xEF}; //2
byte num3 = {0x7E, 0x05, 0x41, 0x00, 0x03, 0x47, 0xEF}; //3
byte num4 = {0x7E, 0x05, 0x41, 0x00, 0x04, 0x40, 0xEF}; //4
byte num5 = {0x7E, 0x05, 0x41, 0x00, 0x05, 0x41, 0xEF}; //5
byte num6 = {0x7E, 0x05, 0x41, 0x00, 0x06, 0x42, 0xEF}; //6
byte num7 = {0x7E, 0x05, 0x41, 0x00, 0x07, 0x43, 0xEF}; //7
byte num8 = {0x7E, 0x05, 0x41, 0x00, 0x08, 0x4c, 0xEF}; //8
byte num9 = {0x7E, 0x05, 0x41, 0x00, 0x09, 0x4d, 0xEF}; //9
byte num10 = {0x7E, 0x05, 0x41, 0x00, 0x0a, 0x4e, 0xEF}; //10
byte num11 = {0x7E, 0x05, 0x41, 0x00, 0x0b, 0x4f, 0xEF}; //百
byte num12 = {0x7E, 0x05, 0x41, 0x00, 0x0c, 0x48, 0xEF}; //点
byte num13 = {0x7E, 0x05, 0x41, 0x00, 0x0d, 0x49, 0xEF}; //体重
byte num14 = {0x7E, 0x05, 0x41, 0x00, 0x0e, 0x4a, 0xEF}; //千克
byte num15 = {0x7E, 0x05, 0x41, 0x00, 0x0f, 0x4b, 0xEF}; //身高
byte num16 = {0x7E, 0x05, 0x41, 0x00, 0x10, 0x54, 0xEF}; //厘米
byte num17 = {0x7E, 0x05, 0x41, 0x00, 0x11, 0x55, 0xEF}; //欢迎使用
byte num18 = {0x7E, 0x05, 0x41, 0x00, 0x12, 0x56, 0xEF}; //欢迎使用,请站好
byte num19 = {0x7E, 0x05, 0x41, 0x00, 0x13, 0x57, 0xEF}; //偏胖
byte num20 = {0x7E, 0x05, 0x41, 0x00, 0x14, 0x50, 0xEF}; //偏瘦
byte num21 = {0x7E, 0x05, 0x41, 0x00, 0x15, 0x51, 0xEF}; //适中
byte num22 = {0x7E, 0x05, 0x41, 0x00, 0x16, 0x52, 0xEF}; //建议
byte num23 = {0x7E, 0x05, 0x41, 0x00, 0x17, 0x53, 0xEF}; //感谢使用
byte num24 = {0x7E, 0x05, 0x41, 0x00, 0x18, 0x5c, 0xEF}; //0
byte num25 = {0x7E, 0x05, 0x41, 0x00, 0x19, 0x5d, 0xEF}; //等待超时感谢使用
byte num26 = {0x7E, 0x05, 0x41, 0x00, 0x1a, 0x5e, 0xEF}; //JuLy——In Love
#endif
将程序下载进板子以后将语音模块的TX RX于3,2号引脚相连接连上电源喇叭就可以正常放歌了,到此时语音模块正式于完成。
辉煌仪奇 发表于 2018-5-25 19:52
既然是身高体重仪,不可避免的是显示的模块了 ,用OLED12864屏幕太小,LCD12864引脚太多,IIC的太贵,进过 ...
感谢一下大神写的关于LCD显示的帖子给我提供了思路,下面是他们的帖子链接
https://www.arduino.cn/forum.php?mod=viewthread&tid=4822&highlight=12864
https://www.arduino.cn/forum.php?mod=viewthread&tid=76308&highlight=12864
页:
[1]