0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个由Arduino驱动的数字时钟详解

科技观察员 来源:LAGSILVA 作者:LAGSILVA 2022-04-06 16:20 次阅读

本文要介绍的是一个由Arduino驱动的数字时钟,同时也是一个非常有趣的四冲程发动机模拟器,通过小时和分钟处的数字模拟汽车发动机的活塞运动。

介绍

由Arduino驱动的“四冲程数字时钟”是一个有趣的数字时钟内燃机模拟器。小时和分钟数字代表活塞移动并具有精确的RPM控制(100到800),RPM由显示屏中心的两列显示。

另一个有趣的视觉信息是气缸的点火顺序“1-3-4-2”。当活塞在压缩循环中位于气缸顶部时,火花开始。该项目可以作为学习管理点阵像素和引入简单动画功能的一个很好的练习。

四冲程内燃机

该项目中使用的发动机型号是四冲程循环的I4(直列四缸)。四冲程内燃机分为四个步骤(进气-压缩-燃烧-排气),其中一步如下图所示:

pYYBAGJNTReADJn6AAIFQKyzCBo542.png

注意:更多内燃机的基本信息可以在维基百科上找到。

时钟

在这个项目中,小时和分钟的数字模拟了活塞的运动,并且所有气缸的火花在正确的时间突出显示。

精确计算旋转以表示实际速度,并通过旋转电位计在100至800RPM(每分钟转数)之间调整该值。

pYYBAGJNTRSAYJ1oAAVN59aNJ4Q668.png

材料清单

ArduinoUNOR3

LED点阵与MAX7219

DS1307RTC(实时时钟

旋转电位器-10KOhms

面包板

打印模板

跳线

poYBAGJNTQ-ADzezAAP_mL1ZK5U694.png

3D打印文件:

poYBAGJNTQuAXJgWAAFZOhWj7nU764.png

示意图:

pYYBAGJNTQaAChu5AAH4xe_RKzk064.png

本文所用到代码:

#include // LED 矩阵库 - MAX72XX
#include // DS1307RTC 库 - Arduino UNO 的引脚:A4 (SDA), A5 (SCL)
#include // 实时时钟库
#include // 时间库
#include

// 全局变量
字节 hh, mm ; // 小时,分钟
字节uH,uM,dH,dM ; // 单位小时,单位分钟,青少年小时,青少年分钟
字节p = 0 ; // 绘图模式(数字位置:上/下)
int RPM = 0 , lastRPM = 0 , pinRPM = 0 ; // RPM,RPM 的最后值,RPM 的模拟引脚
字节序列 = 1 ; // 开始火序列

/*
用于连接 MAX72XX的 Arduino 引脚号(带 MAX72XX 控制器的 LED 阵列)
引脚5连接到 DataIn ( DIN )
引脚6连接到负载( CS )
引脚7连接到 CLK ( CLK )
*/

LedControl lc = LedControl ( 5 , 7 , 6 , 2 ) ; // LedControl ( int DIN, int CLK, int CS, int numDevices )


// 数字数组 - ( 0到9 ) - 大小 5x3

字节数[ 10 ] [ 3 ] = {

{ 0xF8, 0x88, 0xF8 } , // 0
{ 0x00, 0xF8, 0x40 } , // 1
{ 0xE8, 0xA8, 0xB8 } , // 2
{ 0xF8, 0xA8, 0x88 } , // 3
{ 0x78, 0x20, 0xE0 } , // 4
{ 0xB8, 0xA8, 0xE8 } , // 5
{ 0xB8, 0xA8, 0xF8 } , // 6
{ 0xC0, 0xB8, 0x80 } , // 7
{ 0xF8, 0xA8, 0xF8 } , // 8
{ 0xF8, 0xA0, 0xE0 } , // 9

};


无效设置() {

setSyncProvider(RTC.get); // Function to read RTC (Real Time Clock)
setSyncInterval(60); // Set the number of seconds between re-sync
//setTime(8, 19, 30, 10, 02, 2018); // Set the Time and Date (hour, minute, second, day, month, year)
//RTC.set(now()); // Set the RTC time

// Setup of Display "0"
lc.shutdown(0, false); // Wakeup Display "0"
lc.setIntensity(0, 4); // Set the Brightness of Display (0 to 15)
lc.clearDisplay(0); // Clear Display "0"

// Setup of Display "1"
lc.shutdown(1, false); // Wakeup Display "1"
lc.setIntensity(1, 4); // Set the Brightness of Display (0 to 15)
lc.clearDisplay(1); // Clear Display "1"

}


void loop() {

hh = hour();
mm = minute();

uH = hh % 10;
dH = hh / 10;

uM = mm % 10;
dM = mm / 10;


// Plot Hours

for (byte k = 0; k < 3; k++) {

lc.setRow(0, k + 5, num[dH][k] >> (p + 2));
lc.setRow(0, k + 1, num[uH][k] >> (3 - p));

}


// Plot Minutes

for (byte k = 0; k < 3; k++) {

lc.setRow(1, k + 4, num[dM][k] >> (3 - p));
lc.setRow(1, k , num[uM][k] >> (p + 2));

}


// Plot Fire Sequence: 1-3-4-2 (4 cyl: 1-3-4-2 or 1-2-4-3 or 1-4-3-2)

if (seq == 1) { // Fire Cyl #1
lc.setLed(0, 6, 0, true);
}

if (seq == 2) { // Fire Cyl #3
lc.setLed(1, 5, 0, true);
}

if (seq == 3) { // Fire Cyl #4
lc.setLed(1, 1, 0, true);
}

if (seq == 4) { // Fire Cyl #2
lc.setLed(0, 2, 0, true);
}

seq = seq % 4 + 1;


// RPM reading

RPM = analogRead(pinRPM); // Potentiometer reading

RPM = map(RPM, 0, 1023, 1, 9);

if (RPM <= 8) {
lc.setLed(1, 7, 8 - RPM, true);
lc.setLed(0, 0, 8 - RPM, true);
delay(300 / RPM); // Speed setup by potentiometer (100 - 800 RPM)

if (lastRPM != RPM) {
lc.setRow(0, 0, 0);
lc.setRow ( 1 , 7 , 0 ) ;
最后转数 =转数;
}

}

p = !p ; // 切换数字位置(上 x 下)


}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模拟器
    +关注

    关注

    2

    文章

    874

    浏览量

    43205
  • 数字时钟
    +关注

    关注

    2

    文章

    150

    浏览量

    20332
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186907
收藏 人收藏

    评论

    相关推荐

    Arduino CNC电机扩展板详解

    -cnc-shield/Arduino CNC电机扩展板详解(A4988驱动42步进电机)概述电机步进模式设置外接直流电源用于控制电机的Arduino引脚
    发表于 06-29 09:17

    怎么实现基于Arduino的多功能数字时钟的设计?

    怎么实现基于Arduino的多功能数字时钟的设计?
    发表于 11-02 06:16

    如何使用Arduino和步进电机制作3D打印装饰时钟

    组成。该设计部分组成。主要部分之是身体。减速齿轮只需滑入即可设置,在车身部分使用斜轴导轨。微小的驱动齿轮步进电机的轴保持。微小的
    发表于 06-29 07:36

    基于FPGA的数字集成时钟电路设计方案详解

    在当前的数字集成电路设计中,同步电路占了绝大部分。所谓同步电路,即电路中的所有寄存器为数不多的几个全局时钟驱动,被相同时钟信号
    发表于 07-12 09:02 5913次阅读
    基于FPGA的<b class='flag-5'>数字</b>集成<b class='flag-5'>时钟</b>电路设计方案<b class='flag-5'>详解</b>

    如何利用Arduino UNO设计无RTC模块简单时钟

    它只是Arduino控制的简单数字时钟,无需使用任何RTC模块(实时
    的头像 发表于 05-14 15:16 4309次阅读
    如何利用<b class='flag-5'>Arduino</b> UNO设计无RTC模块简单<b class='flag-5'>时钟</b>

    Arduino语法详解含示例详解

    Arduino语法详解_含示例详解
    发表于 07-19 14:09 6次下载

    arduino数字LED时钟

    电子发烧友网站提供《arduino数字LED时钟.zip》资料免费下载
    发表于 10-20 14:55 2次下载
    <b class='flag-5'>arduino</b><b class='flag-5'>数字</b>LED<b class='flag-5'>时钟</b>

    如何使用Arduino和LCD制作数字时钟

    电子发烧友网站提供《如何使用Arduino和LCD制作数字时钟.zip》资料免费下载
    发表于 10-28 10:23 5次下载
    如何使用<b class='flag-5'>Arduino</b>和LCD制作<b class='flag-5'>数字</b><b class='flag-5'>时钟</b>

    Arduino便宜的最小零件数字时钟

    电子发烧友网站提供《Arduino便宜的最小零件数字时钟.zip》资料免费下载
    发表于 10-31 10:15 1次下载
    <b class='flag-5'>Arduino</b>便宜的最小零件<b class='flag-5'>数字</b><b class='flag-5'>时钟</b>

    DIY 3D打印单数字Arduino时钟

    电子发烧友网站提供《DIY 3D打印单数字Arduino时钟.zip》资料免费下载
    发表于 11-02 11:02 2次下载
    DIY 3D打印单<b class='flag-5'>数字</b><b class='flag-5'>Arduino</b><b class='flag-5'>时钟</b>

    使用Arduino Nano R3进行红外遥控的数字时钟

    电子发烧友网站提供《使用Arduino Nano R3进行红外遥控的数字时钟.zip》资料免费下载
    发表于 11-03 11:30 1次下载
    使用<b class='flag-5'>Arduino</b> Nano R3进行红外遥控的<b class='flag-5'>数字</b><b class='flag-5'>时钟</b>

    基于Arduino UNO的史上最简单数字时钟

    有史以来最简单的 Arduino LCD 时钟。只需要 Arduino UNO、
    发表于 12-21 11:29 2次下载

    基于3D打印的Arduino模拟数字时钟

    方案介绍本项目是真正意义上的「机械时钟」, 3D 打印部件、25 Arduino Na
    发表于 12-27 16:00 0次下载

    Arduino自制只有表针的时钟

    我们来起看看如何用Arduino自制只有表针,没有表盘的“空心时钟”。
    的头像 发表于 03-09 13:33 1409次阅读

    使用Arduino制作简单的数字时钟

    电子发烧友网站提供《使用Arduino制作简单的数字时钟.zip》资料免费下载
    发表于 06-26 10:48 5次下载
    使用<b class='flag-5'>Arduino</b>制作简单的<b class='flag-5'>数字</b><b class='flag-5'>时钟</b>