mioyo 发表于 2018-7-20 09:25:05

如何利用arduino对实时采集的数据进行处理

我的情况是这样的:运动机构与压力传感器相连。机构在运动的时候,压力传感器检测到的压力会发生变化。我想通过实时监测到的压力值来控制机构的运动,比如说当压力值没有达到设定的压力时,机构就往前运动,那么压力就变大,当超过设定的压力1(比如50N)之后,机构换向(后退),那么压力就变小,当低于设定的压力2(比如30N)之后,机构换向(前进),重复之前的过程。在这个过程中,压力是需要实时检测的,以此作为机构前进后退的判据。

想用r3做机构执行,mega2560做数据采集并将采集到的数据显示在lcd上,之后mega 2560与r3用IIC进行连接。我试了一下,mega2560可以把数据传输到r3。但是数据是字符型的。。。而我下一步是想要根据这些数据来进行机构执行,这一步就做不了了。。

mioyo 发表于 2018-7-20 09:26:31

这是主机程序
#include <Wire.h>
#include <HX711.h>
#include <LiquidCrystal.h>

HX711 hx(9, 10, 128, -0.115);
LiquidCrystal lcd(12,11,5,4,3,2);
double F=0;
const int address=4;
double val;

void setup() {
Wire.begin();
Serial.begin(9600);
hx.set_offset(-16000);
lcd.begin(16,2);
lcd.print("START!");
delay(3000);
}
void loop()
{
lcd.clear();
F=Get_F();
if(F<1)
{
    F=0;
}
val=F;

Wire.beginTransmission(address);
Wire.println(val);
Wire.endTransmission();

lcd.print("F = ");
lcd.print(F);
lcd.print(" N");
delay(500);
}

double Get_F()
{
double sum0 = 0;
double sum1 = 0;
double Weight_Shiwu0;
double Weight_Shiwu;

for (int i = 0; i < 10; i++)
{
    sum0 += hx.read();
    sum1 += hx.bias_read();
}
Weight_Shiwu0=(double)(sum0/10);
Weight_Shiwu=(double)(sum1/10);
F=(double)(Weight_Shiwu/100-1);
return F;
}

void requestEvent()
{
Wire.write("F");
}

275891381 发表于 2018-7-20 10:28:37

就这一点功能用一个片子不就可以了,还弄俩,给自己找麻烦呀这是

brucewoo 发表于 2018-7-20 15:08:27

本帖最后由 brucewoo 于 2018-7-20 15:12 编辑

1,一个2560就够了,没必要多个UNO
2,注意,HX711的输出速率是10Hz(手册上说可以设置到80Hz,但淘宝上的全都是10Hz,且rate引脚已经接地,没法改),这个压力检测的响应做不到“实时性”,可能会造成你运动机构过压了才反应过来,你需要在算法上下功夫,每读取一次就要预测再走多少会达到预期值,提前停机。
3,你自己打开hx711库文件的源码看看,它read()的时候有一个死循环,要读到输出数据为止,你如果运动机构是采用步进电机,需要使用定时中断ISR()里面驱动步进电机,否则一调用读数就卡壳了。

mioyo 发表于 2018-7-20 17:10:25

brucewoo 发表于 2018-7-20 15:08
1,一个2560就够了,没必要多个UNO
2,注意,HX711的输出速率是10Hz(手册上说可以设置到80Hz,但淘宝上的全 ...

感谢您的回复。我会好好参考你的建议的,我玩arduino时间也不长,懂的东西也不够多。还需要各位前辈多多指点,真心地表示感谢
页: [1]
查看完整版本: 如何利用arduino对实时采集的数据进行处理