自制一个简单的车床计费器

科技观察员

描述

该应用程序适用于 345 英寸 5 英寸的车计算结果为 7 英寸 x 12 英寸您将自己更换为金属车床。可以使用 Arduino Nano、两行液晶显示器和 IR 传感器的床为您的金属车床。

因为我的车床霍尔设备没有和没有表,所以我决定做一个。在高速下表现不佳。设备看起来工作得更好,最高转速会超过 1000。可能适合 1000 转速的传感器,我很少做任何比这转速的金属。

我的第一个任务是让Arduino、LCD和传感器启动并运行。我在电机上削磨的手钻上放了一条条纸,以便在台标上进行测试。我使用小型驱动驱动工具来测试的速度更快。

蜜蜂将用围绕着保护其车内元件的作用,设置在侧盖的位置,以保护齿轮。

poYBAGLECCKAYf8NAAaqAtIHV8c345.png

pYYBAGLECB6AFVRcAAHFLSoR-M0930.png

当床棒的时候,有宽敞的空间在主设备附近用半个左右盖上盖乙柱,所以我把车缩窄子把转换器改成了一个支架。将传感器拧到它上面,并为传感器安装功能做了一个漏洞。

poYBAGLECBuAER8CAAUegQU6ioo258.png

图为安全的测试设置,测试完成后将用覆盖范围覆盖。

pYYBAGLECBaATTm1AASFe3HqHYQ093.png

这显示了以及可以使用的位置,电缆将固定。

画的线是盖子适合这台车床的位置。我用它来帮助定位传感器。

传感器有一个小安装孔,只是一块石头子上。螺丝和两个小柱之间有一个小柱子。

表面有一个电位器,可以调节信号距离。您可以调整它以使信号距离清晰。

pYYBAGLECBKAGgNsAAOdBIxrgCA095.png

在这里,您可以看到制造的两个阶段:面包,以及将所有部件安装到主要产品板的板上。

下图中需要注意的一些事项:

1. 有很多东西要用来做盒子里。我认为这是一个树莓派。

2. 切割上原型板焊接到LED上。这允许连接到Arduino。

3. 一个 Arduino 被焊接到一个小型原型上更改。下个月我将很容易使用 Nano。如果 Nano 出现,将很容易使用。

4. 1K电位器在原电池上,连接断线时切断电源线,并不会造成短路。

5. 一个小开关和 9 副电池座也被焊接到系统中。

6. Nano,以便在更改程序时安装。为了实现这一点,在盒子里制作一个USB连接点。

poYBAGLECA6AMooCAAZ6o0BELBY799.png

pYYBAGLECAqAO2tBAAI1ifDMYBI103.png

这个传感器围起来起来揭开来,安装被剪掉,你的X的X坏了。

pYYBAGLECAaAB4JjAAYB9vmn10A360.png

LCD 的原型板,大多数的螺丝钉,让你在外面用任何东西安装。或者你可以在我做你的盒子的盒子,然后把所有东西放在一起。

订购清单

中有很多东西可以在亚马逊、Adafruit 或 SparkFun 上购买。

OSOYOO 10PCS IR 红外避障传感器模块(亚马逊)

KNACRO IIC/2C/TWI 1602蓝光蓝光模组(亚马逊)

Mini Nano V3.0 ATmega328P 微控制器板(亚马逊)

Gikfun 可焊接面包板镶金饰面原型板(亚马逊)

Adafruit Perma-Proto 单颗粒样板 PCB -

9v电池座

9v电池

小拨动开关

LCD显示对应的10K器电位

我用是很久以前从 SparkFun 购买的。我认为这是 Raspberry Pi 准备的。

螺丝、螺丝、水泥和垫片

金属丝

爆破管

车床计 Arduino 代码:

// Tachometer_For_Lathe_IR
// 显示车床主轴转速

// 用途:
// Arduino Nano V 3.0
// OSOYOO IR 红外传感器(亚马逊有售)
// IM162 LCD 显示屏(亚马逊上有类似的)

// 包含 LCD 和 Timer 库代码:
#include
#include


//通过将任何需要的LCD接口引脚//与连接到
const int rs = 12,en = 11,d4 = 6,d5 = 5,d6 = 4,d7 = 3的arduino引脚号相关联来初始化库;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// 用于跟踪的 RPM 值
const int IRSensorPin = 2; // IR 传感器输入引脚的编号
const int ledPin = 13;
// Nano int ledState = HIGH上的 LED 引脚数;// 输出引脚的当前状态

// 注意:该程序曾与簧片继电器一起使用,用于自行车踏频计数器,
// 但它可以与红外传感器的输入一起正常工作。 
// 如果我需要重用它,所有变量都还在。
整数输入状态;// 来自输入引脚的当前状态
int lastInputState = LOW; // 来自输入引脚的前一个 InputState
long lastDebounceTime = 0; // 最后一次切换输出引脚
long debounceDelay = 5; // 去抖时间;
如果输出长时间闪烁,则增加;
长结束时间;
长启动时间;
国际转数 = 0;
//int lnCount = 0; // 平均 RPM 计数器
//int avgRPM = 0; // 平均总数

//长电压= 0; // 从锅中读取的值
//long outputValue = 0; // 值输出到 PWM(模拟输出)
//int speedVal = 0;
//长 rpm50 = 833333;
//volatile unsigned long cadTime = 0; // 对共享变量使用 volatile
//long timeC, endTimeC, startTimeC;
//int RPMC = 0;
浮动 lnTime = 0;
//int SpeakerPin = 10;
//int 低速率;
//int hiRate;
//int potPin = A0; //模拟引脚 0
//int switchValPin = A1; //模拟引脚1

//------------------------------------------------ ---------------
void setup(void) {
  pinMode(IRSensorPin, INPUT);
  pinMode(ledPin,输出);
  数字写入(ledPin,ledState);
  
  序列号.开始(9600);
  lcd.begin(16, 2); //初始化液晶显示器

  // 显示屏上的启动文本
  lcd.clear();
  lcd.print("车床红外。");
  lcd.setCursor(0, 1);
  lcd.print("转速表");
  延迟(2000);

  结束时间 = 0;
  Timer1.initialize(1000000); // 将定时器设置为 60 rpm,1,000,000 微秒(1 秒)
  Timer1.attachInterrupt(timerIsr); // 在此处附加服务例程

}

//------------------------------------------------ ---------------
无效循环(无效){
  时间=毫秒();
  int currentSwitchState = digitalRead(IRSensorPin);

  if (currentSwitchState != lastInputState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (currentSwitchState != inputState) {
      inputState = currentSwitchState;
      if (inputState == LOW) {
        digitalWrite(ledPin, LOW);
        计算RPM();// 来自传感器的实际 RPM
        ledState = !ledState;
      }
      else {
        digitalWrite(ledPin, HIGH);
      }
    }
  }
  lastInputState = currentSwitchState;
}

//------------------------------------------------ ---------------
void calculateRPM() {
  startTime = lastDebounceTime;
  lnTime = 开始时间 - 结束时间;
  RPM = 60000 /(开始时间 - 结束时间);
  结束时间 = 开始时间;
}

// --------------------------
// 自定义 ISR 定时器例程
// 定时器设置为 rpm,见上
// ----- ---------------------
void timerIsr()
{
  // 每秒打印 RPM
  // 基于计时器的 RPM
  Serial.println("------- --------");
  时间=毫秒()/ 1000;
  序列号。打印(时间);
  Serial.print("RPM:");
  序列号.println(RPM);

  lcd.clear();
  lcd.print("主轴转速");
  lcd.setCursor(0, 1);
  lcd.print(RPM);
  lcd.setCursor(6,1);
  lcd.print("RPM");
  延迟(500);
  转速 = 0;
}

//------------------------------------------------ ---------------

打开APP阅读更多精彩内容

电子工程师必装软件(附AD封装库

值得收藏!用过都说好!

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分