電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>車(chē)庫(kù)MC(監(jiān)視器和控制器)開(kāi)源分享

車(chē)庫(kù)MC(監(jiān)視器和控制器)開(kāi)源分享

2022-11-16 | zip | 1.25 MB | 次下載 | 免費(fèi)

資料介紹

描述

我建造 Garage MC 是因?yàn)槲蚁肓私飧嚓P(guān)于電子學(xué)的知識(shí)。作為獎(jiǎng)勵(lì),我想下次我出去讓車(chē)庫(kù)門(mén)開(kāi)著時(shí),它會(huì)節(jié)省我的屁股。

*我在 2021 年 1 月 6 日添加了一個(gè)更新,其中包含 OTA 更新和 MQTT 到 Home Assistant(詳情如下)*

我的目標(biāo)

  • 能夠監(jiān)控車(chē)庫(kù)門(mén)的狀態(tài)(關(guān)閉/半開(kāi)/打開(kāi))。
  • 能夠用我的安卓手機(jī)(我的妻子用她的蘋(píng)果手機(jī))控制(打開(kāi)/關(guān)閉)車(chē)庫(kù)門(mén)。
  • 學(xué)習(xí)新東西。
  • 不花很多錢(qián)。

第 1 步:項(xiàng)目規(guī)劃

在這個(gè)項(xiàng)目之前,我從亞馬遜購(gòu)買(mǎi)了一個(gè)兼容 Arduino 的入門(mén)套件。所以我是電子產(chǎn)品的初學(xué)者,只是學(xué)習(xí)繩索。但我確實(shí)受益于 15 年前做一些計(jì)算機(jī)編程,所以我能夠在 Arduino IDE 上快速學(xué)習(xí) C++ 編碼。

車(chē)庫(kù)開(kāi)門(mén)器:首先,我必須確定我是否可以輕松地將微控制器與我的 Liftmaster 車(chē)庫(kù)開(kāi)門(mén)器連接起來(lái)。幸運(yùn)的是,Liftmaster 使用兩條線在常開(kāi)(認(rèn)為是打開(kāi)的開(kāi)關(guān))狀態(tài)下連接回壁掛式遙控器。當(dāng)按下壁掛式遙控器上的按鈕時(shí),它會(huì)通過(guò)“短路”電線并觸發(fā)門(mén)打開(kāi)或關(guān)閉來(lái)短暫完成電路。哦,別忘了檢查這些電線上的電壓……Liftmaster 手冊(cè)上說(shuō)這些電線大約是 20 伏(不是 120 伏),但您的設(shè)備可能會(huì)有所不同。

微控制器:接下來(lái),我必須決定如何將 Garage MC 連接到互聯(lián)網(wǎng)。我最初考慮使用 ENC28J60 以太網(wǎng)板,雖然我更喜歡硬線連接,但將線路連接到我的路由器會(huì)比它的價(jià)值更麻煩。我研究了 wifi 板并決定使用 NodeMCU ESP8266,因?yàn)樗鼈兂杀镜颓揖哂卸鄠€(gè) GPIO 引腳。

手機(jī)應(yīng)用程序:有多種方法可以通過(guò)手機(jī)連接到 NodeMCU,包括通過(guò) SMS 消息、將 NodeMCU 用作 Web 服務(wù)器等。對(duì)我來(lái)說(shuō),使用 Blynk 應(yīng)用程序是啟動(dòng)和運(yùn)行最簡(jiǎn)單、最快捷的方式。

車(chē)庫(kù)門(mén)監(jiān)控:我決定使用兩個(gè)霍爾效應(yīng)傳感器來(lái)監(jiān)控車(chē)庫(kù)門(mén)的位置。可能已經(jīng)可以從 Liftmaster 單元獲取門(mén)的位置甚至行進(jìn)方向。但是,如果有人拉動(dòng)緊急釋放繩并手動(dòng)打開(kāi)門(mén),傳感器仍會(huì)通知我門(mén)已打開(kāi)。

第 2 步:開(kāi)發(fā)

NodeMCU:我首先將 NodeMCU 插入面包板并通過(guò) USB 連接到我的計(jì)算機(jī)為其供電。下面的鏈接有一個(gè)很好的教程,用于在 Arduino IDE 上初始設(shè)置 NodeMCU:

Blynk :接下來(lái),我將 NodeMCU 連接到互聯(lián)網(wǎng)和手機(jī)上的 Blynk 應(yīng)用程序。

面包板:是時(shí)候添加組件了。雖然我是在裝上所有組件后制作了 Fritzing 電路圖,但我在這里添加了它,以便更容易參考...

pYYBAGNy7hmAYpOfAAOkc328isA491.jpg
Garage MC - Fritzing 圖
?

項(xiàng)目代碼:我附上了我的項(xiàng)目的完整代碼。我試圖評(píng)論它,但如果有什么你不明白,或者我可以改進(jìn),請(qǐng)告訴我。我在教程中添加了一些小代碼片段來(lái)強(qiáng)調(diào)一些事情,例如:

  • 我使我的代碼非阻塞。這意味著它沒(méi)有“延遲()”語(yǔ)句(好吧,設(shè)置中有一個(gè)等待串行端口)。相反,我依賴于基于“SimpleTimer”庫(kù)的 Blynk 計(jì)時(shí)器。
poYBAGNy7h-AVugYAAqblz67eRE834.jpg
我的工作區(qū)
?

首先是繼電器(控制器):我使用的繼電器是一個(gè)單通道繼電器,觸發(fā)“LOW”以激活。繼電器需要 5 伏電壓,所以我使用 NodeMCU 上的 VIN 引腳為其供電。繼電器有兩個(gè)用途。

  • 首先是激活車(chē)庫(kù)門(mén)開(kāi)啟器。這是通過(guò)將一根電線從車(chē)庫(kù)門(mén)開(kāi)啟器連接到繼電器上的公共 (COM) 引腳來(lái)完成的。第二根線連接到繼電器上的 N/O(常開(kāi))引腳。當(dāng)繼電器被觸發(fā)(300 毫秒)時(shí),電路閉合。
  • 第二個(gè)目的是保護(hù) NodeMCU 免受車(chē)庫(kù)門(mén)開(kāi)啟器的 20 伏電線的影響,因?yàn)?NodeMCU 上的數(shù)字引腳只能承受 3.3 伏電壓。

我使用了兩個(gè)函數(shù)來(lái)觸發(fā)我的繼電器,使其無(wú)阻塞。在我的 Blynk 應(yīng)用程序中按下按鈕時(shí),它會(huì)調(diào)用一個(gè)函數(shù)來(lái)激活門(mén)。請(qǐng)注意,“ActivateDoor()”僅在按下按鈕時(shí)(上升 = 1)很重要,而不是在釋放按鈕時(shí),否則您將激活門(mén)兩次。ActivateDoorRelay 函數(shù)將繼電器引腳設(shè)置為“LOW”,然后設(shè)置一個(gè) 300 毫秒的計(jì)時(shí)器,而不是使用“delay()”。然后定時(shí)器觸發(fā)第二個(gè)功能將引腳重置為“HIGH”以關(guān)閉繼電器。我正在檢查該州的原因

BLYNK_WRITE(V10) {
    if (param.asInt()) {  // only do it on button "rising=1"
        ActivateDoor();     // trigger the door
    }
}

void ActivateDoor() {
    activateState = garageState; // get garage state when the button was pressed
    long songLength = PlaySong(); // Play a song
    // Wait for the song to finish, then activate the relay
    myTimer.setTimeout(songLength, ActivateDoorRelay);
}

void ActivateDoorRelay() {
    // only trigger the relay if the state hasn't changed since the button press
    if (garageState == activateState) {
        digitalWrite(RELAY1_PIN, LOW); // trigger the relay to activate the door
        myTimer.setTimeout(300, ActivateDoorRelayReset);  // Wait 300ms
    }
}

void ActivateDoorRelayReset() {
    digitalWrite(RELAY1_PIN, HIGH);  // Deactivate the door relay
    Blynk.virtualWrite(V10, 0);  // Reset the Blynk app switch
}

霍爾效應(yīng)傳感器(監(jiān)視器):霍爾效應(yīng)傳感器監(jiān)控車(chē)庫(kù)門(mén)的位置。傳感器是非鎖定的并且是數(shù)字的(它可以感應(yīng)或不感應(yīng)磁鐵;模擬輸出傳感器將測(cè)量磁鐵的強(qiáng)度)。我在車(chē)庫(kù)門(mén)上使用了兩個(gè)釹磁鐵(一起使它們更堅(jiān)固)來(lái)觸發(fā)傳感器。我有一些 CAT6 電纜,所以我將它從車(chē)庫(kù)天花板上的 NodeMCU 連接到每個(gè)霍爾傳感器。車(chē)庫(kù)門(mén)可以處于三種狀態(tài)之一(因?yàn)槲也辉诤蹰T(mén)的移動(dòng)方向):

  • 關(guān)閉:門(mén)關(guān)閉位置的霍爾效應(yīng)傳感器由磁鐵激活。
  • 打開(kāi):門(mén)打開(kāi)位置的霍爾效應(yīng)傳感器由磁鐵激活。
  • 半開(kāi):霍爾效應(yīng)傳感器均未激活。因此,門(mén)可以在打開(kāi)位置移動(dòng)或停止。
pYYBAGNy7iOAPr5qAAOaMxMu5Gk722.jpg
霍爾效應(yīng)傳感器(距磁鐵約 2 厘米)
?

我不喜歡輪詢事件的發(fā)生。因此,霍爾傳感器使用“中斷”來(lái)指示狀態(tài)變化(例如門(mén)關(guān)閉移動(dòng))。中斷就是當(dāng)霍爾傳感器發(fā)生狀態(tài)變化時(shí),它會(huì)中斷程序代碼以立即運(yùn)行一個(gè)短函數(shù)。

// Interrupt Declarations
// ESP boards need ICACHE_RAM_ATTR included
void ICACHE_RAM_ATTR InterruptDoorClosed();
void ICACHE_RAM_ATTR InterruptDoorOpen();

// this is only a snippet from the "setup" function
void setup() {
  // Interrupts set for the two hall sensors activated on a CHANGE of state
  // the Hall sensors require a pullup resistor, I used the internal pullup
  pinMode(HALL_CLOSED_PIN,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(HALL_CLOSED_PIN), InterruptDoorClosed, CHANGE);
  pinMode(HALL_OPEN_PIN,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(HALL_OPEN_PIN), InterruptDoorOpen, CHANGE);
}

// Interrupt for the Hall Sensor at the Door CLOSED point
// activated on CHANGE and Sets a timer to immediately CheckGarageState
void InterruptDoorClosed() {
    hallClosedState = digitalRead(HALL_CLOSED_PIN); // get the sensor state
    myTimer.setTimeout(10, GarageStateChanged); // run the function in 10ms
}
// Interrupt for the Hall Sensor at the Door OPEN point
// activated on CHANGE and Sets a timer to immediately CheckGarageState
void InterruptDoorOpen() {
    hallOpenState = digitalRead(HALL_OPEN_PIN); // get the sensor state
    myTimer.setTimeout(10, GarageStateChanged); // run the function in 10ms
}

被動(dòng)壓電蜂鳴器:當(dāng)門(mén)被遠(yuǎn)程激活(使用 Blynk 應(yīng)用程序)時(shí),我想提醒車(chē)庫(kù)里的任何人門(mén)即將移動(dòng)。所以我加了一個(gè)蜂鳴器來(lái)播放一首短歌。我在電路中添加了一個(gè) 100 歐姆的電阻,盡管我不確定是否有必要。我還讓這首歌不阻塞。盡管這需要我獲得歌曲的長(zhǎng)度,所以我在完成之前不會(huì)激活門(mén)。

LED :最后,我添加了兩個(gè) LED,一個(gè)綠色和一個(gè)紅色。每個(gè) LED 在其電路中都需要一個(gè) 220 歐姆的電阻器。綠色 LED 表示 Garage MC 已連接到 Blynk 服務(wù)器。紅色 LED 表示 Garage MC 已失去連接。

我的編程流程:如果您通常不在代碼中使用計(jì)時(shí)器,我的程序流程可能難以掌握。它基本上是這樣工作的:

  • setup() 函數(shù)將計(jì)時(shí)器設(shè)置為:1。檢查互聯(lián)網(wǎng)connection.2。檢查車(chē)庫(kù)門(mén)的狀態(tài) (CheckGarageState),如果門(mén)打開(kāi)時(shí)間過(guò)長(zhǎng),它會(huì)更新 Blynk 應(yīng)用程序并向 Blynk 發(fā)送通知。
  • loop() 函數(shù)使計(jì)時(shí)器保持運(yùn)行。
  • 當(dāng)車(chē)庫(kù)門(mén)的狀態(tài)發(fā)生變化(關(guān)閉到打開(kāi))時(shí),會(huì)觸發(fā)中斷。中斷標(biāo)記狀態(tài)更改,然后設(shè)置即時(shí)計(jì)時(shí)器(10 毫秒)來(lái)檢查車(chē)庫(kù)門(mén)的狀態(tài) (CheckGarageState),從而更新 Blynk 應(yīng)用程序。

第 3 組:是時(shí)候把它放在一起并連接起來(lái)了

我希望 Garage MC 看起來(lái)是半專業(yè)的,所以我決定將所有組件安裝在 Perfboard 上(帶有預(yù)鉆孔的單個(gè)銅墊)。有了這個(gè),我必須學(xué)習(xí)如何焊接。這不一定是困難的,但可能很難做好。

案例:一臺(tái) 3D 打印機(jī)我兒子的圣誕清單上。希望圣誕老人能通過(guò),因?yàn)槲乙蚕胧褂盟?/font>事實(shí)證明,我有一個(gè)舊的 Chamberlain myQ(現(xiàn)在是“Merlin”),我將它拆開(kāi)、切割和鉆孔,然后把它變成一個(gè)項(xiàng)目案例。我認(rèn)為結(jié)果沒(méi)問(wèn)題,即使繼電器伸出底部。

Perfboard :根據(jù)機(jī)箱的大小,我選擇了適合機(jī)箱的 perfboard,并且?guī)缀踹m合 NodeMCU。正如您在我的圖表中看到的那樣,每側(cè)的頂部引腳不適合(D0 和 A0),但無(wú)論如何我都沒(méi)有使用它們。我沒(méi)有刪除它們,它們只是沒(méi)有連接到任何東西。

poYBAGNy7iqANR9jAAI9QIxLka0609.jpg
穿孔板布局
?

我在 Perfboard 上焊接了兩個(gè)插頭引腳(16 個(gè)引腳長(zhǎng),但 NodeMCU 每側(cè)有 15 個(gè)引腳)。因此,NodeMCU 位于底部的 15 個(gè)引腳上。我主要在 Perfboard 底部焊接連接線(有幾個(gè)例外)和頂部的組件。長(zhǎng)話短說(shuō)……

并將其安裝在車(chē)庫(kù)門(mén)開(kāi)啟器上方的車(chē)庫(kù)中(黃色 CAT6 電纜通過(guò)門(mén)軌連接到霍爾傳感器)..

電源:天花板上有一個(gè)用于 Liftmaster 開(kāi)啟器的電源插座。所以我決定讓事情變得簡(jiǎn)單。我插入了舊的黑莓手機(jī)充電器并使用舊的 USB 電纜為 Garage MC 供電。

我會(huì)做些什么不同的事情?

我實(shí)際上對(duì)我的最終結(jié)果很滿意。但是我會(huì)做一些改變:

  • 我將霍爾效應(yīng)傳感器的螺絲連接器彼此相對(duì)放置,認(rèn)為我很聰明并且節(jié)省空間。這使得將 CAT6 電纜的電線完美彎曲到位變得困難。下次我肯定會(huì)采取直接的方法,并將連接器并排放置。
  • 完成 - 我正在考慮添加通過(guò)無(wú)線 (OTA) 更新我的代碼的功能,這樣我就不必拿出我的梯子來(lái)進(jìn)行更改。

V1.1 更新

在 Covid 呆在家里的圣誕假期期間,我開(kāi)始學(xué)習(xí)和設(shè)置 Home Assistant。因此,我決定讓 Garage MC 報(bào)告回來(lái)并由 Home Assistant 控制。因此,我決定對(duì)我的代碼進(jìn)行以下更改:添加 OTA 更新,并添加 MQTT 以與 Home Assistant 通信。

OTA 更新

這是我自 10 月以來(lái)對(duì) Garage MC 所做的第一次更新,因?yàn)樘孤实卣f(shuō),它不需要更新。但是,爬梯子進(jìn)行更新很痛苦,所以我實(shí)施了 OTA 更新。

poYBAGNy7jiAH2OSAAC6hFMSydc445.png
Blynk 應(yīng)用程序的小更新以打開(kāi)/關(guān)閉 OTA 更新
?

我在我的 Blynk 應(yīng)用程序中添加了一個(gè)開(kāi)關(guān),以便打開(kāi)和關(guān)閉 OTA 更新,因?yàn)槲也幌M恢边\(yùn)行。接下來(lái),我添加了#include 庫(kù)。

我添加了一個(gè) MD5 散列密碼,一個(gè)超時(shí)(關(guān)閉更新過(guò)程以防我忘記),并讓 LED 閃爍,這樣我就知道 GarageMC 處于“更新模式”。全局變量如下:

// OTA variables
#define CLIENT_NAME   "GarageMC"  // For MQTT topics, MQTT Client ID, and ArduinoOTA
const char ota_pass[]           = SECRET_OTA_PWD;
const unsigned long OTA_TIMEOUT = 600000;  // Turn off OTA after 10 min. if no update
unsigned long otaTimeout        = 0;        // End time for OTA = millis()+OTA_TIMEOUT
bool otaOn                      = false;    // set to "true" to turn on OTA updates
const int OTA_BLINK_DELAY       = 300;      // blink the leds while OTA is ON
unsigned long otaBlinkTimer     = 0;        // next led blink time

在 setup() 中,我按如下方式初始化 OTA:

ArduinoOTA.setHostname(CLIENT_NAME);
ArduinoOTA.setPasswordHash(ota_pass);
ArduinoOTA.onStart([]() {
    DEBUG_PRINTLN("OTA Starting update");
    digitalWrite(WIFI_ON_PIN, true);
    digitalWrite(WIFI_OFF_PIN, true);
});
ArduinoOTA.onEnd([]() {
    DEBUG_PRINTLN("OTA Finished");
});

我的主循環(huán)已更新,因此如果打開(kāi) OTA 更新,其他一切都會(huì)停止(我發(fā)現(xiàn)如果 Blynk 仍在運(yùn)行,更新會(huì)很慢或失?。?/font>

if (otaOn) {
    ArduinoOTA.handle();
    if (millis() > otaTimeout) {  // timeout if no upload, then restart
        ESP.restart();
    }
    // blink the red and green leds while OTA is on
    if (millis() > otaBlinkTimer) {
        SetWifiLeds(!digitalRead(WIFI_ON_PIN));
        otaBlinkTimer = millis() + OTA_BLINK_DELAY;
    }
} else {
    if (Blynk.connected()) {Blynk.run();} // run Blynk if it's connected
    myTimer.run();                        // Blynk Events Timer (run either way)
    // MQTT - loop or reconnect if needed
    mqttLoop();
}

最后,當(dāng)我在 Blynk 應(yīng)用程序中撥動(dòng)開(kāi)關(guān)時(shí),它會(huì)向虛擬引腳 V0 發(fā)送一條消息(off=1 和 on =2,但我希望它是一個(gè)布爾值):

BLYNK_WRITE(V0) {
    otaOn = param.asInt() - 1;
    DEBUG_PRINTLN((String)"V0: " + otaOn);
    if (otaOn) {                            // OTA turned ON
        otaTimeout = millis() + OTA_TIMEOUT;  // Timeout end time
        ArduinoOTA.begin();                   // Start the OTA service
    } else {                                // OTA turned OFF
        ESP.restart();              // Restart to turn stop ArduinoOTA service
    }
}

從 Arduino IDE 處理 OTA 更新所需的一切。我喜歡這樣一個(gè)事實(shí),除非我通過(guò)撥動(dòng) Blynk 中的開(kāi)關(guān)來(lái)采取行動(dòng),否則它不會(huì)運(yùn)行。

MQTT 到家庭助理

我不會(huì)進(jìn)入家庭助理,因?yàn)槲抑皇窃趯W(xué)習(xí)它。但我建議在 YouTube 上搜索 JuanMTech。而且我只是幾乎不了解 MQTT,所以在那里也不會(huì)有太大幫助。我使用了流行的#include 庫(kù)。詳細(xì)信息可以在我的完整代碼中找到。但基本上,作為客戶端,您連接到 Home Assistant 上的 MQTT 代理。您將更新“發(fā)布”到 MQTT 代理,并“訂閱”您希望通過(guò)“回調(diào)”函數(shù)接收更新的主題。

最簡(jiǎn)單的方法是連接到 MQTT 代理:

// subscribe to the control topic which can "activate" the garage door (open/close)
const char topicGarageControl[] = CLIENT_NAME"/control";
// publish to the state topics, the state of the door
const char topicGarageState[]   = CLIENT_NAME"/state";

WiFiClient espClient;
PubSubClient client(espClient);    // client for connection to MQTT broker
client.setServer(mqtt_server, mqtt_port);    // server to connect to
client.setCallback(callback);    // the "callback" function for subscribed topics
client.connect(mqtt_client_name, mqtt_user, mqtt_pass);    // connect to MQTT broker

// after connecting, subscribe to topics you want
client.subscribe(topicGarageControl);

當(dāng)車(chē)庫(kù)門(mén)狀態(tài)發(fā)生變化(open->ajar->closed)時(shí),我將更改發(fā)布到 Home Assistant:

// topic = CLIENT_NAME/state
// payload = door state (open/ajar/closed)
client.publish(topic.c_str(), payload.c_str(), retain);

到目前為止,一切都很好。現(xiàn)在我只需要找出 Home Assistant 來(lái)處理數(shù)據(jù)!

最后的評(píng)論

我故意沒(méi)有詳細(xì)介紹設(shè)置 Blynk 應(yīng)用程序和控件的具體細(xì)節(jié)。雖然我添加了原理圖,但我也沒(méi)有詳細(xì)介紹我的生產(chǎn)布線等。我相信我們自己嘗試會(huì)學(xué)到更多。話雖如此,如果您遇到困難或需要幫助才能使項(xiàng)目正常運(yùn)行(或想知道我為什么要做某事),請(qǐng)給我發(fā)消息,我很樂(lè)意提供幫助。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)