极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10335|回复: 4

关于测线速度的一个小程序

[复制链接]
发表于 2012-11-27 16:00:00 | 显示全部楼层 |阅读模式
本帖最后由 茕兔 于 2012-11-27 16:02 编辑

    前几天老板提出要做一个测纱线速度的小工具,于是很华丽丽的把这个任务给了我!这几天都在想办法,因为刚接触arduino不久,写一些程序还是很有压力啊。当然带给我思考也很多,学习了不少,不过还是有很多疑问,特来向各位前辈求教下。
   首先来讲下我的设计思路吧,机械方面很简单,通过摩擦轮传动给一个码盘,然后给光电传感器信号,通过arduino计算后把数据显示到LCD屏上。参考了各类帖子后,计算方法我设想有如下:
   1,使用 pulseIn函数 获得传感器信号脉冲间隔 进而计算出数值传递给LCD(1602)显示
   2,读取码盘累加数,求1S内变化数 得出数值传递给LCD
   这两种是我能够想到的,不过实验过程中遇到很多疑难,第一种方法呢,pulseIn函数精度太低,我用两块板子相互做了下实验,发现效果并不是很好,可能也是我的代码写的不怎么好吧,希望大家指点下

第一种设想的测试代码
int pin = 7;
unsigned long duration;

void setup()
{
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop()
{

duration = pulseIn(pin, HIGH);
Serial.print("time=" );
  Serial.println(duration );
}
结果端口显示出来的数值很不稳定,恳请各位帮忙写个能稳定读取IO口频率变化的程序,对各位来说肯定是小意思啦。
还有如果要加入显示实时数据的LCD部分该怎么加呢?会不会对程序有影响,

第二种方法的话,我看了很多帖子,我的疑问就是怎么来计算这个时间,arduino有定时器吗? 还有就是外部中断的,对LCD显示有没有影响呢,下面给大家看一个例子
float sCode = 0;              // 码盘计数(即状态跳变次数) 代码来自shenhaiyu
float ws = 0;                 // 1s 平均(瞬时)速度
unsigned long t1 = 0, t2 = 0; // 时间标记
void setup()
{
  Serial.begin(9600);              // 初始化串口通信
  attachInterrupt(0, Code, CHANGE); // 设置码盘外部中断
}
void loop()
{
  t1 = millis();
  if(abs(t1 - t2) >= 1000) // 1000ms 时间间隔
  {
    detachInterrupt(0) // 关闭中断
    t2 = t1;                                         // 更新时间标记
    ws = 3.14159*0.0115*sCode// 计算风速 u=2πRbn
    Serial.println(ws);                             // 输出 1s 平均速度
    sCode = 0;                                       // 码盘计数归零
    delay(1);
    attachInterrupt(0, Code, CHANGE); // 重新设置外部中断
  }
}
// 风速码盘计数
void Code()
{
  sCode += 1; // 码盘计数加一
}
如果我想加入LCD显示,显示部分应该加到哪里,万分感谢能看完我帖子的前辈们!
LCD模块是1602,8线接法



回复

使用道具 举报

发表于 2012-11-27 16:05:45 | 显示全部楼层
这两种方法都差不多吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-27 16:06:51 | 显示全部楼层
清水 发表于 2012-11-27 16:05
这两种方法都差不多吧

因为是实时显示  我不是很确定哪种方法更完美 代码无力啊
回复 支持 反对

使用道具 举报

发表于 2012-11-27 16:17:07 | 显示全部楼层
茕兔 发表于 2012-11-27 16:06
因为是实时显示  我不是很确定哪种方法更完美 代码无力啊

都要误差校正的,话说误差比较大
回复 支持 反对

使用道具 举报

发表于 2012-11-27 17:55:37 | 显示全部楼层
建议还是用中断。。。如果转速慢可以考虑用2个传感器,180度分布,计算出2次中断的时间值,算出周期得到线速度,led显示。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-5 05:30 , Processed in 0.048899 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表