0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)由Arduino驅(qū)動(dòng)的數(shù)字時(shí)鐘詳解

科技觀察員 ? 來(lái)源:LAGSILVA ? 作者:LAGSILVA ? 2022-04-06 16:20 ? 次閱讀

本文要介紹的是一個(gè)由Arduino驅(qū)動(dòng)的數(shù)字時(shí)鐘,同時(shí)也是一個(gè)非常有趣的四沖程發(fā)動(dòng)機(jī)模擬器,通過(guò)小時(shí)和分鐘處的數(shù)字模擬汽車發(fā)動(dòng)機(jī)的活塞運(yùn)動(dòng)。

介紹

由Arduino驅(qū)動(dòng)的“四沖程數(shù)字時(shí)鐘”是一個(gè)有趣的數(shù)字時(shí)鐘內(nèi)燃機(jī)模擬器。小時(shí)和分鐘數(shù)字代表活塞移動(dòng)并具有精確的RPM控制(100到800),RPM由顯示屏中心的兩列顯示。

另一個(gè)有趣的視覺(jué)信息是氣缸的點(diǎn)火順序“1-3-4-2”。當(dāng)活塞在壓縮循環(huán)中位于氣缸頂部時(shí),火花開(kāi)始。該項(xiàng)目可以作為學(xué)習(xí)管理點(diǎn)陣像素和引入簡(jiǎn)單動(dòng)畫(huà)功能的一個(gè)很好的練習(xí)。

四沖程內(nèi)燃機(jī)

該項(xiàng)目中使用的發(fā)動(dòng)機(jī)型號(hào)是四沖程循環(huán)的I4(直列四缸)。四沖程內(nèi)燃機(jī)分為四個(gè)步驟(進(jìn)氣-壓縮-燃燒-排氣),其中一步如下圖所示:

pYYBAGJNTReADJn6AAIFQKyzCBo542.png

注意:更多內(nèi)燃機(jī)的基本信息可以在維基百科上找到。

時(shí)鐘

在這個(gè)項(xiàng)目中,小時(shí)和分鐘的數(shù)字模擬了活塞的運(yùn)動(dòng),并且所有氣缸的火花在正確的時(shí)間突出顯示。

精確計(jì)算旋轉(zhuǎn)以表示實(shí)際速度,并通過(guò)旋轉(zhuǎn)電位計(jì)在100至800RPM(每分鐘轉(zhuǎn)數(shù))之間調(diào)整該值。

pYYBAGJNTRSAYJ1oAAVN59aNJ4Q668.png

材料清單

ArduinoUNOR3

LED點(diǎn)陣與MAX7219

DS1307RTC(實(shí)時(shí)時(shí)鐘

旋轉(zhuǎn)電位器-10KOhms

面包板

打印模板

跳線

poYBAGJNTQ-ADzezAAP_mL1ZK5U694.png

3D打印文件:

poYBAGJNTQuAXJgWAAFZOhWj7nU764.png

示意圖:

pYYBAGJNTQaAChu5AAH4xe_RKzk064.png

本文所用到代碼:

#include // LED 矩陣庫(kù) - MAX72XX
#include // DS1307RTC 庫(kù) - Arduino UNO 的引腳:A4 (SDA), A5 (SCL)
#include // 實(shí)時(shí)時(shí)鐘庫(kù)
#include // 時(shí)間庫(kù)
#include

// 全局變量
字節(jié) hh, mm ; // 小時(shí),分鐘
字節(jié)uH,uM,dH,dM ; // 單位小時(shí),單位分鐘,青少年小時(shí),青少年分鐘
字節(jié)p = 0 ; // 繪圖模式(數(shù)字位置:上/下)
int RPM = 0 , lastRPM = 0 , pinRPM = 0 ; // RPM,RPM 的最后值,RPM 的模擬引腳
字節(jié)序列 = 1 ; // 開(kāi)始火序列

/*
用于連接 MAX72XX的 Arduino 引腳號(hào)(帶 MAX72XX 控制器的 LED 陣列)
引腳5連接到 DataIn ( DIN )
引腳6連接到負(fù)載( CS )
引腳7連接到 CLK ( CLK )
*/

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


// 數(shù)字?jǐn)?shù)組 - ( 0到9 ) - 大小 5x3

字節(jié)數(shù)[ 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

};


無(wú)效設(shè)置() {

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 ) ;
最后轉(zhuǎn)數(shù) =轉(zhuǎn)數(shù);
}

}

p = !p ; // 切換數(shù)字位置(上 x 下)


}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    862

    瀏覽量

    43087
  • 數(shù)字時(shí)鐘
    +關(guān)注

    關(guān)注

    2

    文章

    149

    瀏覽量

    20287
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186350
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Arduino CNC電機(jī)擴(kuò)展板詳解

    -cnc-shield/Arduino CNC電機(jī)擴(kuò)展板詳解(A4988驅(qū)動(dòng)42步進(jìn)電機(jī))概述電機(jī)步進(jìn)模式設(shè)置外接直流電源用于控制電機(jī)的Arduino引腳
    發(fā)表于 06-29 09:17

    怎么實(shí)現(xiàn)基于Arduino的多功能數(shù)字時(shí)鐘的設(shè)計(jì)?

    怎么實(shí)現(xiàn)基于Arduino的多功能數(shù)字時(shí)鐘的設(shè)計(jì)?
    發(fā)表于 11-02 06:16

    如何使用Arduino和步進(jìn)電機(jī)制作3D打印裝飾時(shí)鐘

    組成。該設(shè)計(jì)個(gè)部分組成。主要部分之是身體。減速齒輪只需滑入即可設(shè)置,在車身部分使用斜軸導(dǎo)軌。微小的驅(qū)動(dòng)齒輪步進(jìn)電機(jī)的軸保持。微小的
    發(fā)表于 06-29 07:36

    基于FPGA的數(shù)字集成時(shí)鐘電路設(shè)計(jì)方案詳解

    在當(dāng)前的數(shù)字集成電路設(shè)計(jì)中,同步電路占了絕大部分。所謂同步電路,即電路中的所有寄存器為數(shù)不多的幾個(gè)全局時(shí)鐘驅(qū)動(dòng),被相同時(shí)鐘信號(hào)
    發(fā)表于 07-12 09:02 ?5806次閱讀
    基于FPGA的<b class='flag-5'>數(shù)字</b>集成<b class='flag-5'>時(shí)鐘</b>電路設(shè)計(jì)方案<b class='flag-5'>詳解</b>

    如何利用Arduino UNO設(shè)計(jì)無(wú)RTC模塊簡(jiǎn)單時(shí)鐘

    它只是個(gè)Arduino控制的簡(jiǎn)單數(shù)字時(shí)鐘,無(wú)需使用任何RTC模塊(實(shí)時(shí)
    的頭像 發(fā)表于 05-14 15:16 ?4086次閱讀
    如何利用<b class='flag-5'>Arduino</b> UNO設(shè)計(jì)無(wú)RTC模塊簡(jiǎn)單<b class='flag-5'>時(shí)鐘</b>

    Arduino語(yǔ)法詳解含示例詳解

    Arduino語(yǔ)法詳解_含示例詳解
    發(fā)表于 07-19 14:09 ?6次下載

    arduino數(shù)字LED時(shí)鐘

    電子發(fā)燒友網(wǎng)站提供《arduino數(shù)字LED時(shí)鐘.zip》資料免費(fèi)下載
    發(fā)表于 10-20 14:55 ?2次下載
    <b class='flag-5'>arduino</b><b class='flag-5'>數(shù)字</b>LED<b class='flag-5'>時(shí)鐘</b>

    如何使用Arduino和LCD制作數(shù)字時(shí)鐘

    電子發(fā)燒友網(wǎng)站提供《如何使用Arduino和LCD制作數(shù)字時(shí)鐘.zip》資料免費(fèi)下載
    發(fā)表于 10-28 10:23 ?5次下載
    如何使用<b class='flag-5'>Arduino</b>和LCD制作<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>

    Arduino便宜的最小零件數(shù)字時(shí)鐘

    電子發(fā)燒友網(wǎng)站提供《Arduino便宜的最小零件數(shù)字時(shí)鐘.zip》資料免費(fèi)下載
    發(fā)表于 10-31 10:15 ?1次下載
    <b class='flag-5'>Arduino</b>便宜的最小零件<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>

    DIY 3D打印單數(shù)字Arduino時(shí)鐘

    電子發(fā)燒友網(wǎng)站提供《DIY 3D打印單數(shù)字Arduino時(shí)鐘.zip》資料免費(fèi)下載
    發(fā)表于 11-02 11:02 ?2次下載
    DIY 3D打印單<b class='flag-5'>數(shù)字</b><b class='flag-5'>Arduino</b><b class='flag-5'>時(shí)鐘</b>

    使用Arduino Nano R3進(jìn)行紅外遙控的數(shù)字時(shí)鐘

    電子發(fā)燒友網(wǎng)站提供《使用Arduino Nano R3進(jìn)行紅外遙控的數(shù)字時(shí)鐘.zip》資料免費(fèi)下載
    發(fā)表于 11-03 11:30 ?1次下載
    使用<b class='flag-5'>Arduino</b> Nano R3進(jìn)行紅外遙控的<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>

    基于Arduino UNO的史上最簡(jiǎn)單數(shù)字時(shí)鐘

    有史以來(lái)最簡(jiǎn)單的 Arduino LCD 時(shí)鐘。只需要個(gè) Arduino UNO、
    發(fā)表于 12-21 11:29 ?2次下載

    基于3D打印的Arduino模擬數(shù)字時(shí)鐘

    方案介紹本項(xiàng)目是個(gè)真正意義上的「機(jī)械時(shí)鐘」, 3D 打印部件、25 個(gè) Arduino Na
    發(fā)表于 12-27 16:00 ?0次下載

    Arduino自制個(gè)只有表針的時(shí)鐘

    我們來(lái)起看看如何用Arduino自制個(gè)只有表針,沒(méi)有表盤的“空心時(shí)鐘”。
    的頭像 發(fā)表于 03-09 13:33 ?1342次閱讀

    使用Arduino制作簡(jiǎn)單的數(shù)字時(shí)鐘

    電子發(fā)燒友網(wǎng)站提供《使用Arduino制作簡(jiǎn)單的數(shù)字時(shí)鐘.zip》資料免費(fèi)下載
    發(fā)表于 06-26 10:48 ?5次下載
    使用<b class='flag-5'>Arduino</b>制作簡(jiǎn)單的<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>