文号D888494
1235
15
收藏(4)
编辑文章

基于arduino的火箭发动机推力采集卡,带SD卡数据收集

关键词

推力采集火箭发动机数据采集

arduinohx711

这期分享一下我用arduino ide编写的火箭发动机推力采集程序,这是用arduino nano作为主控芯片,对于新手来说比较简单

下面是要用到的模块

IMG20240718162626.jpg


手底下暂时没有多余的,暂时先展示一下大体部分,用到了模块SD卡模块,Hx711模块 ,arduino nano328p的模块,蜂鸣器一个,按键一个 ,传感器一个

值得注意的是,我用的SD卡模块是那种小型的,可能跟其他的模块接线不一样,像那种大一点的SD卡模块可能接线不同 

IMG20240718162655.jpg

除了接线不一样 ,其他的都不用改动 ,代码也是通用的,下面来说一下接线 


 SD——nano接线:3V3-3V3  CS-D10  MOSI-D11  CLK-D13   MISO-D12   GND-GND

HX711——nano接线:DT-D5  SCK-D4

蜂鸣器——nano: D8   GND

复位键——nano: D3   GND

传感器接线

5e61f76fcab73d2cf61955def74e9702.jpg


接下来展示一下代码部分 

// SD接线:3V3-3V3 CS-D10 MOSI-D11 CLK-D13 MISO-D12 GND-GND
//HX711接线:DT-D5 SCK-D4
//蜂鸣器 D8 GND
//复位键 D3 GND
#include <SD.h>
File file;
#include <HX711_ADC.h>
#include <EEPROM.h>
//以上库没有的在库管理安装
float i;
float time;
float time2;
const int HX711_dout = 5;  //接HX711 dout
const int HX711_sck = 4;   //接 HX711 sck
HX711_ADC LoadCell(HX711_dout, HX711_sck);
const int calVal_calVal_eepromAdress = 0;
unsigned long t = 1;
float a = 0.00;
void setup() {
  Serial.begin(57600);
  pinMode(3, INPUT_PULLUP);//设置复位按键
  pinMode(8, OUTPUT);//设置蜂鸣器输出
  Serial.println();
  Serial.println("准备...");
  float calibrationValue;

  calibrationValue = 88.88;  //校准值根据实际情况进行修改


  LoadCell.begin();
  unsigned long stabilizingtime = 2000;  // tare preciscion can be improved by adding a few seconds of stabilizing time
  boolean _tare = true;                  //set this to false if you don't want tare to be performed in the next step
  LoadCell.start(stabilizingtime, _tare);
  if (LoadCell.getTareTimeoutFlag()) {
    Serial.println("Timeout, check MCU>HX711 wiring and pin designations");
  } else {
    LoadCell.setCalFactor(calibrationValue);  // set calibration factor (float)
    Serial.println("Startup is complete");
  }
  if (!SD.begin()) {
    Serial.println("SD初始化失败");
    return;
  }
  Serial.println("SD初始化成功");
  file = SD.open("test.txt", FILE_WRITE);
  if (file) {
    file.println("            ");
    file.println("            ");
    file.println("以上数据作废 ");
    file.println("开始记录新数据:");
    file.println("数据从左到右是 当前推力(g) 最大推力(g) 最大推力(kg) 最大推力(N) 数据量 时间");
    file.close();
  }
}

void loop() {
  static boolean newDataReady = 0;
  const int serialPrintInterval = 500;  //increase value to slow down serial print activity

  // check for new data/start next conversion:
  if (LoadCell.update()) newDataReady = true;

  // get smoothed value from the dataset:
  if (newDataReady) {
    //if (millis() > t + serialPrintInterval) {
    i = LoadCell.getData();
    if (a < i) a = i;
    Serial.print("当前推力:");
    Serial.print(i);
    Serial.print("g");
    Serial.print(" ");
    Serial.print("累计最大推力:");
    Serial.print(a);
    Serial.print("g");
    Serial.print(" ");
    Serial.print("累计最大kg:");
    Serial.print(a / 1000);
    Serial.print("kg");
    Serial.print(" ");
    Serial.print("累计最大N:");
    Serial.print(a / 1000 * 9.8);
    Serial.print("N");
    Serial.print(" ");
    Serial.print(time);
    Serial.print(" ");
    Serial.print(time2);
    Serial.println("s");//打印数据方便调试
    file = SD.open("test.txt", FILE_WRITE);
    if (file) {
      file.print(i);  //数据输出
      file.print("        ");
      file.print(a);  //数据输出
      file.print("        ");
      file.print(a / 1000);//单位转换kg
      file.print("        ");
      file.print(a / 1000 * 9.8);//单位转换N
      file.print("        ");
      file.print(time);//总共数据量用以计算时间
      file.print("        ");
      file.println(time2);//时间输出
      time += 1;          //计算时间
      time2 = time / 30;  //数字越大时间越慢 根据采集率的快慢进行修改
      file.close();
    } else {
      digitalWrite(8, 1);
      delay(150);
      digitalWrite(8, 0);
      delay(150);//检测SD卡是否丢失
    }
  }
  if (digitalRead(3) == t) {
    LoadCell.tareNoDelay();
  }
  if (LoadCell.getTareStatus() == true) {//置零设置
    Serial.println("Tare complete");
    digitalWrite(8, 0);
    a = a - a;
  } else {
    digitalWrite(8, 1);
  }
}

attachment icon Testing.zip 1.67KB ZIP 44次下载


VID20240718155039.mp4 点击下载

上传代码后,插上SD卡即可

注意一下 ,如果SD卡中途断开或者损坏,将无法进行数据储存,蜂鸣器会报警提示 


VID20240718155148.mp4 点击下载

以下是SD卡读取的数据 


VID20240718155645.mp4 点击下载

数据与串口监视器上面的格式一致 

数据从左到右是 当前推力(g) 最大推力(g) 最大推力(kg) 最大推力(N)   数据量    时间

calibrationValue = 88.88;  //校准值根据实际情况进行修改

这部分用于校准数据,可以用砝码来进行修改

   time += 1;          //计算时间
   time2 = time / 30;  //数字越大时间越慢 根据采集率的快慢进行修改

在代码中的这一行根据HX711实际采集率来修改时间


欢迎大家对代码进行修改

初来驾到,希望大家多多指教



15
WEIZHANGLI
4个月6天前 IP:浙江
D888524

谢谢,这个真是太厉害了 我要去试试看


WEIZHANGLI
4个月6天前 IP:浙江
D888526

这是怎么回事,我编译不了

Arduino:1.8.4 (Windows 10), 开发板:"Arduino Nano, ATmega328P (Old Bootloader)"


C:\Users\HP\Documents\Arduino\sketch_jul19a\sketch_XXXXXXXXXo: In function 'void setup()':


sketch_jul19a:33: error: no matching function for call to 'HX711_ADC::start(long unsigned int&, boolean&)'


   XXXXXXXXXXXart(stabilizingtime, _tare);


                                        ^


In file included from C:\Users\HP\Documents\Arduino\sketch_jul19a\sketch_XXXXXXXXXo:7:0:


C:\Users\HP\Documents\Arduino\libraries\HX711_ADC\src/HX711_ADC.h:47:7: note: candidate: int HX711_ADC::start(unsigned int)


   int start(unsigned int t);     // start and tare one HX711


       ^~~~~


C:\Users\HP\Documents\Arduino\libraries\HX711_ADC\src/HX711_ADC.h:47:7: note:   candidate expects 1 argument, 2 provided


exit status 1

no matching function for call to 'HX711_ADC::start(long unsigned int&, boolean&)'


在文件 -> 首选项开启

“编译过程中显示详细输出”选项

这份报告会包含更多信息。


WEIZHANGLI
4个月6天前 IP:浙江
D888538

作者,他给这句话标红了XXXXXXXXXXXart(stabilizingtime, _tare);    这是为什么。。。。


Space航天作者
4个月5天前 IP:青海
D888557
引用WEIZHANGLI发表于3楼的内容
作者,他给这句话标红了LoadCell.start(stabilizingtime, _tare);    这是为什么。。。。

看一下库文件安装没,没安装的话就会这样

Space航天作者
4个月5天前 IP:青海
D888559
引用WEIZHANGLI发表于2楼的内容
这是怎么回事,我编译不了Arduino:1.8.4 (Windows 10), 开发板:"Arduino Nano, ATmega328P (Old Bootloader)"C:\Users\HP\D...

应该就试库文件没装,把开头的#include <HX711_ADC.h>

#include <.h>

HX711_ADC

EEPROM

在库管理中搜索安装下

WEIZHANGLI
4个月4天前 IP:浙江
D888639

不好意思,再问一下楼主 sticker 我库文件也安装了,但还是这样 。。。但我好像把这句话删掉又编译成功了 ,这句话有什么作用?                                                                    屏幕截图 2024-07-21 103226.png

Space航天作者
4个月4天前 IP:青海
D888659
引用WEIZHANGLI发表于6楼的内容
不好意思,再问一下楼主我库文件也安装了,但还是这样 。。。但我好像把这句话删掉又编译成功了 ,这句话有什么作用?                                            ...

你这图片我有点看不清 ,如果不影响使用的话就没事儿,你先调一下校准值,看看能不能用 ,能用的话就不管他了 

coconut
3个月26天前 IP:上海
D889111

IDE 串口监视器乱码\(`Δ’)/

Space航天作者
3个月26天前 IP:河南
D889140
引用coconut发表于8楼的内容
IDE 串口监视器乱码\(`Δ’)/

自行在库管里安装库文件

胡椒爱吃胡椒
3个月18天前 IP:山东
D889952
引用WEIZHANGLI发表于2楼的内容
这是怎么回事,我编译不了Arduino:1.8.4 (Windows 10), 开发板:"Arduino Nano, ATmega328P (Old Bootloader)"C:\Users\HP\D...

错误原因

错误信息指出,HX711_ADC::start 函数只接受一个参数,而代码中传递了两个参数(stabilizingtime 和 _tare)。这可能是由于库版本或函数签名的变化引起的。

解决方法

检查 HX711_ADC 库文档:确认 HX711_ADC 库的 start 方法的最新函数签名,并相应地修改代码。

更新库:确保你使用的是库的最新版本,可能已经修改了函数签名。

修改代码:根据库文档调整代码,使其符合新的函数签名。

示例修改

假设新的 start 方法只接受一个参数,以下是如何修改代码的示例:

cpp复制代码#include <HX711_ADC.h>// 引脚定义const int HX711_dout = 4; // 数据引脚const int HX711_sck = 5;  // 时钟引脚HX711_ADC LoadCell(HX711_dout, HX711_sck);void setup() {
 XXXXXXXXXgin(115200);  delay(10);

 XXXXXXXXXintln("Starting...");  unsigned long stabilizingtime = 2000; // 稳定时间
 XXXXXXXXXXXgin();
 XXXXXXXXXXXart(stabilizingtime); // 修改为只传递一个参数
 XXXXXXXXXXXtCalFactor(696.0); // 设置校准因子}void loop() {  static boolean newDataReady = 0;  const int serialPrintInterval = 0; // 增加串口打印间隔
 if (LoadCell.update()) newDataReady = true;  if (newDataReady) {    if (millis() > serialPrintInterval) {      float i = XXXXXXXXXXXtData();
     XXXXXXXXXint("Load_cell output val: ");
     XXXXXXXXXintln(i);
     newDataReady = 0;
   }
 }
}
解释

HX711_ADC 对象:创建了一个 LoadCell 对象。

setup() 函数:

初始化串口通信。

调用 XXXXXXXXXXXgin() 初始化 HX711。

调用 XXXXXXXXXXXart(stabilizingtime) 方法,传递稳定时间 stabilizingtime 作为唯一参数。

设置校准因子。

loop() 函数:

更新 LoadCell 状态。

如果有新的数据准备好,读取并打印。

检查库版本和文档

确保你使用的 HX711_ADC 库是最新版本,并查看库的文档或示例代码,确保函数调用符合最新的函数签名和用法。

通过这些调整,你应该能够解决 no matching function for call to 'HX711_ADC::start(long unsigned int&, boolean&)'

chat GPT4.0 不确定对不对

WEIZHANGLI
3个月17天前 IP:浙江
D890031
引用胡椒爱吃胡椒发表于10楼的内容
错误原因错误信息指出,HX711_ADC::start 函数只接受一个参数,而代码中传递了两个参数(stabilizingtime 和 _tare)。这可能是由于库版本或函数签名的变化引起的。解决方法...

确实,还真的编译成功了,一开始最新的库下载不了,重新启动电脑后才可以下载,谢谢你

屏幕截图 2024-08-07 093101.png

胡椒爱吃胡椒
3个月17天前 IP:山东
D890038
引用WEIZHANGLI发表于11楼的内容
确实,还真的编译成功了,一开始最新的库下载不了,重新启动电脑后才可以下载,谢谢你

https://www.haofei.icu/list  ChatGPT网站 如果没有访问次数直接换号

WEIZHANGLI
3个月17天前 IP:浙江
D890039

用这个可以吗 屏幕截图 2024-08-07 112646.png

WEIZHANGLI
3个月17天前 IP:浙江
D890058
引用胡椒爱吃胡椒发表于12楼的内容
https://www.haofei.icu/list  ChatGPT网站 如果没有访问次数直接换号

这个软件好。会写代码的😀

WEIZHANGLI
3个月14天前 IP:浙江
D890071

我修改了一下 更加人性化了。。。。但是。。。。

屏幕截图 2024-08-10 132558.png

换开发板了

想参与大家的讨论?现在就 登录 或者 注册

Space航天
机友 笔友
文章
0
回复
3
学术分
0
2022/08/29注册,6天3时前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:身份证号
IP归属地:青海
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
ID: {{user.uid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
回复
设为精选取消精选
评学术分
鼓励
编辑
查看历史
通过审核
移动文章
加入收藏取消收藏
退修或删除
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
回复
加入收藏取消收藏