在这里记录一下我正在进行中的小项目,也可供大家参考(能力有限,大佬勿喷)
根据之前的思路,下面开始下位机雏形的介绍:
基本结构图
下面为代码部分
本设计主芯片选用 Arduino MEGA 2560
环境 :Arduino IDE
String b; //定义变量类型 字符
#include <SoftwareSerial.h> //调用串口通信库
#include <DFPlayer_Mini_Mp3.h> //调用语音播报模块库
#include "HX711.h" //调用24bitAD HX711库
HX711 HX711_CH0(2, 3, 2200); //SCK,DT,GapValue通过对最后一个数值的更改来调整精度,取消皮重
int LED = 13;
int BEEP = 12;
int a;
int c=0;
int d=0;
long Weight = 0; //定义一个变量用于存放承重的重量,单位为g
long WeightA = 0; //定义一个变量用于存放承重的重量,单位为g
long WeightB = 0; //定义一个变量用于存放承重的重量,单位为g
void off() //串口发送结束代码
{
for (int i = 0; i < 3; i++)
{
Serial.write(0xFF);
}
}
void setup()
{
pinMode(LED, OUTPUT); //设定LED引脚输出
pinMode(BEEP, OUTPUT); //设定蜂鸣器引脚输出
digitalWrite(LED, LOW); //LED熄灭
digitalWrite(BEEP, HIGH); //BEEP高电平状态
Serial.begin(9600); //与串口屏通信,波特率9600
Serial1.begin(9600); //与语音模块通信,波特率9600
mp3_set_serial (Serial1);
mp3_set_volume (30); //语音模块音量设定
HX711_CH0.begin(); //读取传感器支架毛重
delay(3000); //延时3s用于传感器稳定
HX711_CH0.begin(); //重新读取传感器支架毛重用于后续计算
digitalWrite(LED, HIGH); //板载LED点亮,说明可以承重
delay(1000);
digitalWrite(BEEP, LOW); //BEEP 响
delay (80);
digitalWrite(BEEP, HIGH); //BEEP 灭
mp3_play (1); //播放第一段语音
delay (3000); //延时给出音频的播放时间
mp3_play (9); //同上
delay (20000);
}
void loop()
{
b="";
while (Serial.available()>0) //接收串口屏发送的数据
{
b += char (Serial.read()); //数据赋值给变量b
delay (2);
}
if( b =="A") //接收到对应的数据,播放对应的音频
{
mp3_play (2);
delay (3000);
}
if( b =="B")
{
mp3_play (7);
delay (3000);
}
if( b =="C")
{
mp3_play (8);
delay (3000);
}
if( b =="D")
{
mp3_play (4);
delay (2000);
}
if( b =="1")
{
mp3_play (3);
delay (3000);
digitalWrite(BEEP, LOW); //BEEP 响
delay (80);
digitalWrite(BEEP, HIGH); //BEEP 灭
Weight = HX711_CH0.Get_Weight(); //采样当前传感器重量,该重量已经自动去皮,去皮值根据初始化程序中采样的值计算。
delay(1000);
for (int j = 60; j >= 0; j--)
{
Serial.print( "n2.val=");
Serial.print( j ); //发送倒计时数据
off();
delay(100);
WeightA = HX711_CH0.Get_Weight(); //采样当前传感器重量,该重量已经自动去皮,去皮值根据初始化程序中采样的值计算。
delay(500);
a=(Weight-WeightA)*100;
Serial.print( "j0.val=");
Serial.print( a/Weight ,DEC); //发送进度条数据
off();
if( a/Weight >95)//进度到95以上报警
{
digitalWrite(BEEP, LOW); //BEEP 响
delay (80);
digitalWrite(BEEP, HIGH); //BEEP 灭
mp3_play (6);
delay (3000);
}
WeightB = HX711_CH0.Get_Weight(); //采样当前传感器重量,该重量已经自动去皮,去皮值根据初始化程序中采样的值计算。
c=Weight-WeightB;
if( c >20)//流速20以上报警
{
digitalWrite(BEEP, LOW); //BEEP 响
delay (80);
digitalWrite(BEEP, HIGH); //BEEP 灭
mp3_play (5);
delay (2000);
}
Serial.print( "n1.val=");
Serial.print( c ,DEC); //发送流速数据
delay (400);
off();
}
}
}
串口屏部分为图形化编程,大家可以淘宝购买,只要写好对应单片机的串口协议,使用起来非常简单…
下面为实物图:
以上为本设计的下位机雏形部分,之后会对其进行软硬件的升级,有兴趣的小伙伴可以持续关注一波…