mega2560读取sick位移传感器

news2024/11/26 15:49:53

        本次的项目中,需要使用到mega2560来读取sick位移传感器的模拟量,再把模拟量进行转换,从而使得到的数据为位移传感器的示数。

        下面是位移传感器的接线图:棕色线接+24v,蓝色线接0v,白色线为模拟量输出线,根据产品手册,模拟输出线输出的是4-20ma,注意:arduino和单片机的模拟量输入端口基本都只能读取模拟电压,而这里是模拟电流,所以是没法直接读取的,需要一个电流转电压模块。

        从上面接线的性描述可以看出,这里使用的是三线制。下面是一张三线制电流转电压模拟量的接线图。注意:这种电流转电压模块需要带隔离的,否则读出来的示数会波动较大,从而降低精度,除此之外还要注意共地的问题,也有可能会影响精度。

        在arduino上接线的时候,不止要接模拟电压输出线放在它的模拟量输入口,还需要把模块的地和mega2560的地接在一起,这样才有电势差,才能读出示数。

        连接好所有线后,便可以使用串口助手测得数据,这时得到的数据只是模拟量,mega2560的ad转换位数是2的10次方,也就是1024,我们需要创建一个映射,使得量程和mega2560的ad位数匹配,如下:

double displacement=map(sensorValue, 0, 1023, minDisplacement, maxDisplacement)

注意:如果你使用int类型,并且对该表达式进行了一些线性的变换,例如:

int displacement = 200+((map(sensorValue, 0, 1023, minDisplacement, maxDisplacement)-1121)/126)*100;

此时读取的数据很可能是整百整百的,我们需要把int类型改为double类型,具体原因是因为int类型做除法是取整。

        此时你可以测得一个数字,并且在你增大位移传感器示数的时候,该模拟量也不断增大,但是这时你还无法让所得数据和位移传感器示数同步,你需要对传感器进行标定,重新修改他们的关系,比如上面一行代码,就是我找到的函数关系,虽然还存在一些小问题,但是是完全够用的。此时,你便可以得到较为准确的示数啦。

        下面是全部的mega2560实现代码:

#define RX_PIN 19
#define TX_PIN 18

// 定义电机控制引脚
#define DIRECTION_PIN 46
#define PULSE_PIN 47
#define MOTOR_PIN 9
#define sensorPin  A0

// 定义位移传感器的最小和最大位移值
const int minDisplacement = 200;   // 最小位移(mm)
const int maxDisplacement = 4000; // 最大位移(mm)

char command = '0';  // 初始值设为 '0'

void setup() {
  pinMode(DIRECTION_PIN, OUTPUT);
  pinMode(PULSE_PIN, OUTPUT);
  pinMode(MOTOR_PIN, OUTPUT);
  digitalWrite(MOTOR_PIN, LOW);

  // 初始化串口通信
  Serial.begin(9600);
  pinMode(RX_PIN, INPUT);
  pinMode(TX_PIN, OUTPUT);
}

void loop() {
  // 设定转动方向(逆时针)
  digitalWrite(DIRECTION_PIN, HIGH);

  if (Serial.available() > 0) {
    command = Serial.read();
    if (command == '1') {
      digitalWrite(MOTOR_PIN, HIGH); // 开始转动电机
    } else if (command == '0') {
      digitalWrite(MOTOR_PIN, LOW);  // 停止电机
    }
  }

  // 发送脉冲信号
  if (digitalRead(MOTOR_PIN) == HIGH) {
    digitalWrite(PULSE_PIN, HIGH);
    delayMicroseconds(300);  // 脉冲持续时间,根据实际情况调整
    digitalWrite(PULSE_PIN, LOW);
    delayMicroseconds(300);  // 脉冲间隔时间,根据实际情况调整
  }

  // 读取传感器值
  double sensorValue = analogRead(sensorPin);

  // 将模拟电压转换为位移值
  double displacement = 200+((map(sensorValue, 0, 1023, minDisplacement, maxDisplacement)-1121.0)/126.0)*100.0;

  // 输出位移值到串口
  Serial.println(displacement);

  // 等待一段时间
  delay(1000); // 每隔一秒读取一次传感器值
}

中途问题:

1.在测量200-900mm的时候,发现所得串口数值都是不变的,这是因为传感器内部设置的问题,传感器内部设置在900mm以下的时候,都处于4ma以下的一个固定值,所以不管你怎么增大距离,得到的串口数值是不变的,这需要你联系商家,询问他们这一块的设置问题。同理,在20ma时,也会设置一个最大量程,如果你的量程超过了这个示数,那么它依然只输出20ma,你得到的串口数值也会达到一个最大量,你再增大你的位移传感器示数,你得到的串口值也不会变化,此时,需要你在传感器的设置中更改它在20ma时的最大量程。

2.如何知道是不是上述问题?

当你观察到串口数值不变时,增大位移传感器示数,并不断测量模拟输出线和负线之间的电流,若电流不变,则说明是上述问题。

3.如何确保电流转电压模块是正常工作的?

在你测的上述问题2中的电流为4ma时,去测量电流转电压模块的电压输出端和gnd,查看他的电压是否为0v,然后逐渐增大前面的电流,查看电压是否会逐渐变大,并在电流为20ma时,测得电压为5v,如果没有,则说明电流转电压模块可能损坏了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS 表单验证

点击注册的时候&#xff0c;渲染出来&#xff0c;验证码是自动获取出来的 html&#xff1a; <div class"div1">用户名<input type"text" id"yhm"><span id"span1"></span><br>密码<input type"…

mysql 查询变量@i:=@i+1

学习完mysql的查询&#xff1a;基本查询&#xff0c;连接查询和子查询和mysql 正则表达式查询&#xff0c;接下来先学习下变量查询。 mysql中没有oracle序列号那一列。mysql可以使用查询变量的方式去处理。我们先了解下查询变量&#xff0c;后面应用起来就更清晰。 1&#xff0…

【科东软件】鸿道Intewell-Lin_V2.2.0 软件版本发布

鸿道操作系统 Intewell-Lin_V2.2.0 软件版本发布 Intewell-Lin_V2.2.0 版本号&#xff1a;V2.2.0 版本或修改说明 增加功能&#xff1a; 1、增加T3板级支持 支持硬件列表

深入探索实时音视频技术:RTC程序设计权威指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

2024年32款数据分析工具分五大类总览

数据分析工具在现代商业和科学中扮演着不可或缺的角色&#xff0c;为组织和个人提供了深入洞察和明智决策的能力。这些工具不仅能够处理大规模的数据集&#xff0c;还能通过强大的分析和可视化功能揭示隐藏在数据背后的模式和趋势。数据分析工具软件主要可以划分为以下五个类别…

网络与通信-路由协议及基础配置

网络协议之路由协议 静态路由&#xff1a; 明细静态 默认静态 动态路由&#xff1a;&#xff08;可以自动去环&#xff09; RIP 十几台或几十台 &#xff08;维护上一代人搭建的网络&#xff09; OSPF 300台 &#xff08;最短路径算法&#xff09; ISIS 1200台 BGP…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

主流三种驱动器方案特点简介

三种执行器原理相似&#xff0c;但在结构和部件上略有区别&#xff0c;因此在精度、响应速度等指标上 呈现不同效果&#xff1a; &#xff08;1&#xff09;TSA&#xff08;刚性驱动器&#xff09;&#xff1a;常规高速电机高传动比减速机高刚度力矩传感器&#xff0c;减 速机…

【Spring Cloud】服务容错中间件Sentinel入门

文章目录 什么是 SentinelSentinel 具有以下特征&#xff1a;Sentinel分为两个部分: 安装 Sentinel 控制台下载jar包&#xff0c;解压到文件夹启动控制台访问了解控制台的使用原理 微服务集成 Sentinel添加依赖增加配置测试用例编写启动程序 实现接口限流总结 欢迎来到阿Q社区 …

【QingHub】QingHub Studio企业级应用开发管理

QingHub Studio企业级应用开发设计器是QingHub Studio的一个核心模块&#xff0c;它可以实现应用搭建、团队管理&#xff0c;共享开发&#xff0c;可以快速接入API接口&#xff0c;复杂功能可以通过自定义脚本快速实现业务逻辑。打通前端开发与后台业务逻辑一体化。通过可视化的…

Vue - 2( 10000 字 Vue 入门级教程)

一&#xff1a;初识 Vue 1.1 绑定样式 1.1.1 绑定 class 样式 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>绑定样式</title><style>......</style><script type"text/javascript"…

【六 (3)机器学习-机器学习建模步骤/kaggle房价回归实战】

目录 文章导航一、确定问题和目标&#xff1a;1、业务需求分析&#xff1a;2、问题定义&#xff1a;3、目标设定&#xff1a;4、数据可行性评估&#xff1a;5、资源评估&#xff1a;6、风险评估&#xff1a; 二、数据收集&#xff1a;1、明确数据需求2、选择数据来源3、考虑数据…

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件 解决方法&#xff1a; 经过我多次的创建p12证书文件&#xff0c;然后更换设备继续创建&#xff0c;仍然存在这个问题&#xff0c;通过排查不是.p12的本身的问题&#xff0c;而是命名的问题&#xff0c;命名不能是中…

你真的了解区块链游戏吗?

随着区块链技术的不断发展和普及&#xff0c;越来越多的人开始关注区块链游戏这一新兴领域。然而&#xff0c;很多人对于区块链游戏的了解仅限于一些表面的概念和特点&#xff0c;真正深入了解的人并不多。那么&#xff0c;你真的了解区块链游戏吗&#xff1f; 首先&#xff0…

外包干了25天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

状态模式(行为型)

目录 一、前言 二、状态模式 三、总结 一、前言 状态模式(State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类&#xff0c;但实际上&#xff0c;由于状态模式的引入&#xff0c;行为的变…

DOM对象(Document Object Model 文档对象模型)

目录 1、什么是DOM 1&#xff09;是一个标准 2&#xff09;是一个对象 2、原理及作用 3、Element元素的获取方法 4、方法使用举例 修改页面内容 1&#xff09;获取DOM元素 2&#xff09;修改元素内容 3&#xff09;修改元素属性 4&#xff09;添加和删除元素 5、应…

电脑硬盘分区表的两种格式:MBR 和 GPT

电脑硬盘分区表的两种格式&#xff1a;MBR 和 GPT 段子手168 2024-4-5 电脑硬盘分区表有两种格式&#xff1a;MBR 和 GPT&#xff1a; 一、MBR 分区表 1.MBR 是主引导记录 (Master Boot Record) 的英文缩写 在传统&#xff08;Legacy&#xff09;硬盘分区模式中&#xff0c…

春秋之境28512

题目说该CMS的/single.php路径下&#xff0c;id参数存在一个SQL注入漏洞。访问看一下随便点一个图片。 发现了注入点?id 那么开始查看闭合符一个 就报错了 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for th…

这些矛盾点不搞清楚,私域怎么做得起来!

最近不少人都在问&#xff0c;私域做不起来怎么办&#xff1f;有很多企业砸了不少钱&#xff0c;有些还做了好几年&#xff0c;依旧没有起色。 有些企业觉得私域做不起来的阻碍有运营方面的原因&#xff0c;比如文案写不好&#xff0c;社群不知道怎么管理&#xff1b;有团队方…