亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 模拟面板仪表时钟

组件和用品

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5ppm,I2C 实时时钟
× 1
1mA 电流表
× 3
5kOhm 电阻
× 3
电阻 10k ohm
× 2
SparkFun 按钮开关 12mm
× 2

应用和在线服务

Arduino IDE

关于这个项目

我用 Arduino Nano 和 1mA 电流表制作了这个漂亮的木制模拟式时钟。我从这里得到了一个想法。为了显示秒数,添加了一部分代码。还添加了一个部分,该部分在运行时从零到最大值穿过整个刻度。用于校准目的的值。根据我们使用的安培计,5k 电阻的值可能不同。由于所有仪表都略有不同,因此需要根据您的设计调整 PWM 值。您将不得不更改一些值,因为它被设置为专门用于我的仪表。

代码

  • 代码
代码Arduino
/* 模拟面板仪表 - 仅时钟模式指令链接:http://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ 积分:bildr - DS1307 RTC 代码 http: //bildr.org/2011/03/ds1307-arduino/ _____________________ 接线如下: - USB 红线(5v)到 VCC - USB 黑线到 GND - 按钮 - 左/下到数字 2(遵循 arduino 教程:http ://arduino.cc/en/uploads/Tutorial/button.png ) - 右侧/向上至数字 3 - DS1307 RTC - SDA 至模拟 4 - SCL 至模拟 5 - 左侧模拟仪表至数字 5 (PWM) - 右侧模拟仪表到数字 6 (PWM)_-秒 模拟仪表到数字 9_(PWM)_____________________ 注意:因为所有仪表都略有不同,PWM 值需要根据您的设计进行调整。随意使用我的代码,但您必须更改一些值,因为它被设置为专门用于我的仪表。 */#include "Wire.h"#define DS1307_ADDRESS 0x68byte 零 =0x00; //解决问题#527int downButton =2; //向下按钮调整时间(引脚2)int upButton =3; //向上按钮调整时间(引脚3)int hours =0;int minutes =0;int seconds =0;int lastMinute =0;int lastSecond =0;int leftMeter =5; // 左仪表(小时)连接到引脚 5int rightMeter =6; // 右仪表(分钟)连接到引脚 6int secMeter=9; //秒表(秒)连接到引脚 9void setup(){ Wire.begin(); Serial.begin(9600); //在串行监视器 pinMode(leftMeter, OUTPUT) 中查看时间; // 初始化输出和输入 pinMode(rightMeter, OUTPUT); pinMode(secMeter, 输出);数字写入(左仪表,高); // 在启动时测试仪表 digitalWrite(rightMeter, HIGH);数字写入(秒米,高);数字写入(13,高);延迟(1000);数字写入(左仪表,低);数字写入(rightMeter,低);数字写入(秒表,低);数字写入(13,低);延迟(1000);}无效循环(){打印日期();延迟(75); // 用按钮改变时间 if (digitalRead(downButton) ==HIGH){ byte second =seconds; // 不要混淆:秒与秒不同 byte 分钟 =分钟; // 不要混淆:分钟与分钟不同 byte hours =hours; // 不要混淆:小时与小时不同 if (minutes> 0){ --minute; }else{ 分钟 =59;如果(小时> 0){ -- 小时; }else{ 小时 =23;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(零); //停止振荡器 Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(小时)); Wire.write(零); //start Wire.endTransmission();} if (digitalRead(upButton) ==HIGH){ byte second =0;字节分钟 =分钟; // 不要混淆:分钟与分钟不同 byte hours =hours; // 不要混淆:小时与小时不同 if (minutes <59){ ++minute; }else{ 分钟 =0;如果(小时 <23){ ++ 小时; }else{ 小时 =0;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(零); //停止振荡器 Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(小时)); Wire.write(零); //start Wire.endTransmission();} }byte decToBcd(byte val){// 将普通十进制数转换为二进制编码的十进制数返回( (val/10*16) + (val%10) );}byte bcdToDec(byte val) {// 将二进制编码的十进制数转换为正常的十进制数 return ( (val/16*10) + (val%16) );}void printDate(){ // 重置寄存器指针 Wire.beginTransmission(DS1307_ADDRESS); Wire.write(零); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7);秒 =bcdToDec(Wire.read());分钟 =bcdToDec(Wire.read());小时 =bcdToDec(Wire.read() &0b111111); //24 小时制 // 打印日期 Serial.print(hours); // 取消注释以在串行监视器中查看时间 Serial.print(":"); // Serial.println(分钟); // 不要忘记在上面的“void setup”中取消对“Serial.begin”的注释 // 每小时的特定仪表级别 // 您可能需要调整这些值。// 使用这些值直到你得到你想要什么。 if (lastMinute !=minutes){ if (hours ==1 || hours ==13){ analogWrite(leftMeter, 0); // 调整左(小时)米电平 } if (hours ==2 || hours ==14){ analogWrite(leftMeter, 29); // 调整左(小时)米电平 } if (hours ==3 || hours ==15){ analogWrite(leftMeter, 52); // 调整左(小时)米电平 } if (hours ==4 || hours ==16){ analogWrite(leftMeter, 75); // 调整左(小时)米电平 } if (hours ==5 || hours ==17){ analogWrite(leftMeter, 98); // 调整左(小时)米电平 } if (hours ==6 || hours ==18){ analogWrite(leftMeter, 130); // 调整左(小时)米电平 } if (hours ==7 || hours ==19){ analogWrite(leftMeter, 152); // 调整左(小时)米电平 } if (hours ==8 || hours ==20){ analogWrite(leftMeter, 172); // 调整左(小时)米电平 } if (hours ==9 || hours ==21){ analogWrite(leftMeter, 192); // 调整左(小时)米电平 } if (hours ==10 || hours ==22){ analogWrite(leftMeter, 213); // 调整左(小时)米电平 } if (hours ==11 || hours ==23){ analogWrite(leftMeter, 234); // 调整左(小时)米电平 } if (hours ==0 || hours ==12){ analogWrite(leftMeter, 255); // 调整左(小时)米电平 } if (minutes * 4.75 <255){ // 每分钟增加 PWM 值 4.75 模拟写入(rightMeter,分钟 * 4.75); // 我必须在我的仪表上使用 4.75 才能有 30 分钟准确地指向正上方 }else{ // 完美的将是 4.25 因为 4.25 * 60 =255analogWrite(rightMeter, 255); } lastMinute =分钟; if (seconds * 4.25 <255){analogWrite(secMeter, seconds *4.25); }else{analogWrite(secMeter, 255); } lastSecond =秒; }}

示意图


制造工艺

  1. Arduino pov 视觉时钟
  2. 简单字时钟(Arduino)
  3. 带有伊斯兰祈祷时间的 Arduino 时钟
  4. 主时钟
  5. 鲜花 - Arduino Nano、CrazyCircuits、DFRobot
  6. 模拟式 LED POV 时钟
  7. FlightGear 模拟微调标签轮
  8. Arduino Nano:使用操纵杆控制 2 个步进电机
  9. 7 段阵列时钟
  10. 面板仪表简化设计
  11. 数字与模拟面板选择
  12. 什么是面板仪表?