資料介紹
描述
隨著大流行的持續,硬件不僅難以采購,而且難以安全地協同工作。在智能微型車輛的情況下,可用單元的數量本質上是有限的,我們部署它們的“環境”也是如此,例如賽道或障礙賽。我們如何解決硬件資源稀缺問題?我們將資源數字化!
> 本文最初發布于platis.solutions
SMCE是Smartcar 平臺的數字雙胞胎,以及一個酷炫且可定制的3D 世界,供您的漫游車漫游。核心概念是您編寫可在兩者上運行的 Arduino 代碼真實的硬件和虛擬環境。通過這種方式,可以減輕或大大減少對汽車的專有和頻繁訪問的需求。理想情況下,模擬器允許限制與物理汽車的不可避免的接觸,以至于開發團隊可以在模擬器上開發他們的功能,并且只訪問真實的硬件來驗證它們。使用網絡物理系統的虛擬表示不僅在大流行期間很有價值。我們這些使用嵌入式系統的人可能會痛苦地認識到由于缺乏硬件可用性而被阻止的不利影響。在這篇文章中,我將向您展示如何開始使用SMCE以及它的許多功能。如果你想要一些關于什么的靈感您可以使用該軟件查看我們的學生如何利用SMCE 來模擬 Arduino 車輛。
關于 SMCE
在深入了解模擬器之前,讓我們澄清一下 SMCE 不是什么:一個 3D 環境,用于您的超級自定義愛好項目,它使用各種奇異的傳感器和第三方庫。開箱即用的模擬器可支持Smartcar 庫的用戶并適應他們的典型用例和傳感器設置。模擬器不僅適用于特定的庫,但是,如果您使用它,您的生活會輕松得多。我并不是因為模擬器而這么說。它帶有很多例子,它用途廣泛,總體上是一個非常容易使用的庫,您應該嘗試一下!此外,我應該注意,模擬器不是由我制作或維護的,所以請不要聯系我尋求支持。它是由我的兩個非常有才華的前學生Ryan Janson和Ruthger Dijt 開發的。您可以通過在相關 GitHub 存儲庫之一上創建問題或開始討論來聯系他們。
SMCE 由兩部分組成:“前端”(smce-gd)和“后端”(libSMCE)。libSMCE
是負責在您的計算機上編譯和運行 Arduino 草圖的庫。
這個跨平臺的 C++ 庫為其消費者提供了在托管環境中編譯和執行 Arduino 草圖的能力,并綁定到其虛擬 I/O 端口以允許主機應用程序與其子草圖進行交互。
這個跨平臺的 C++ 庫為其消費者提供了在托管環境中編譯和執行 Arduino 草圖的能力,并綁定到其虛擬 I/O 端口以允許主機應用程序與其子草圖進行交互。
smce-gd
取決于在libSMCE
多彩的虛擬 3D 世界中可視化草圖執行以及與周圍環境的交互。除非您打算做一些“聰明”的事情,擴展或為項目做出貢獻等,否則smce-gd
您應該主要關心的軟件。對于本教程,我將使用1.3.1版本,smce-gd
在 Ubuntu 20.04 上運行。
開始使用
為了在我的 Ubuntu 筆記本電腦上安裝 SMCE,我按照Wiki上的這些說明進行操作。SMCE 的一個非常酷的地方是它可以在您的計算機上運行。SMCE 也可以安裝在Windows或MacOS 上。如果 SMCE 安裝正確,您將看到以下屏幕:smce-gd
選擇Start Fresh選項,然后在下一個屏幕中單擊+
標志。
然后是時候選擇在 Arduino 上運行的代碼了。我建議從Smartcar 庫示例中的manualControl.ino草圖開始。獲取示例的一種簡單方法是Smartcar shield
通過 Arduino IDE 的庫管理器下載庫,然后在您的光盤上找到它。讓我們看一下草圖:
#include
const int fSpeed = 70; // 70% of the full speed forward
const int bSpeed = -70; // 70% of the full speed backward
const int lDegrees = -75; // degrees to turn left
const int rDegrees = 75; // degrees to turn right
ArduinoRuntime arduinoRuntime;
BrushedMotor leftMotor(arduinoRuntime, smartcarlib::pins::v2::leftMotorPins);
BrushedMotor rightMotor(arduinoRuntime, smartcarlib::pins::v2::rightMotorPins);
DifferentialControl control(leftMotor, rightMotor);
SimpleCar car(control);
void setup()
{
Serial.begin(9600);
}
void loop()
{
handleInput();
}
void handleInput()
{ // handle serial input if there is any
if (Serial.available())
{
char input = Serial.read(); // read everything that has been received so far and log down
// the last entry
switch (input)
{
case 'l': // rotate counter-clockwise going forward
car.setSpeed(fSpeed);
car.setAngle(lDegrees);
break;
case 'r': // turn clock-wise
car.setSpeed(fSpeed);
car.setAngle(rDegrees);
break;
case 'f': // go ahead
car.setSpeed(fSpeed);
car.setAngle(0);
break;
case 'b': // go back
car.setSpeed(bSpeed);
car.setAngle(0);
break;
default: // if you receive something that you don't know, just stop
car.setSpeed(0);
car.setAngle(0);
}
}
}
上述示例指示流動站(即SimpleCar
實例)遵循從串行端口發送的簡單命令。具體來說,當f
發送時,汽車將以預定義的速度前進,當b
發送時,它將向后行駛,r
它會向右和l
向左轉彎。任何其他角色都會停下車。選擇草圖后,單擊“編譯”選項。
編譯成功后,點擊開始按鈕。您會看到汽車在虛擬世界中彈出。酷吧?讓我們開車吧!單擊屏幕左下方的“串行”選項,鍵入并按鍵盤上的“Enter”。汽車將開始行駛。按下“跟隨”選項,使相機隨著汽車一起移動,并使用我們上面描述的簡單命令進行操作。完成后,您可以單擊停止。專業提示:您可能希望在函數結束時放置一個微小的延遲(例如),以避免占用您的 CPU 資源,因為仿真器將在您的草圖中快速循環。f
loop()
delay(1)
使用傳感器
現在您已經了解了環境物理原理以及如何通過串行端口向汽車發送命令,讓我們使用一些傳感器讓汽車自動移動。默認情況下,汽車預裝了一堆方便的傳感器。默認配置包括車輛前部的超聲波傳感器 ( SR04) ,連接到引腳 6 和 7。如果距離小于 70 厘米的障礙物,讓我們使用傳感器停止汽車。
#include
ArduinoRuntime arduinoRuntime;
BrushedMotor leftMotor{arduinoRuntime, smartcarlib::pins::v2::leftMotorPins};
BrushedMotor rightMotor{arduinoRuntime, smartcarlib::pins::v2::rightMotorPins};
DifferentialControl control{leftMotor, rightMotor};
SimpleCar car(control);
const int triggerPin = 6; // D6
const int echoPin = 7; // D7
const unsigned int maxDistance = 100;
SR04 front{arduinoRuntime, triggerPin, echoPin, maxDistance};
void setup()
{
// Move the car with 50% of its full speed
car.setSpeed(50);
}
void loop()
{
const auto distance = front.getDistance();
// When distance is `0` it means there's no obstacle detected
if (distance > 0 && distance < 70) {
car.setSpeed(0);
}
#ifdef __SMCE__
// Avoid over-using the CPU if we are running in the emulator
delay(1);
#endif
}
加載草圖并在模擬器中運行它。它會一直直行,直到遇到障礙物。您可以通過單擊屏幕左側的傳感器讀數來實時監控它們。在下面的屏幕截圖中,我們可以看到,一旦遇到墻壁,電機就沒有油門,并且檢測到的距離在預期范圍內。專業提示:如果按F3 ,您將獲得傳感器指向的位置及其范圍的指示。這對于調試傳感器輸入特別有價值。
作為額外的真實感,傳感器讀數故意不完全準確并且包含噪聲。默認設置中當前可用的傳感器有:
- 車輛前部的一個SR04超聲波傳感器,距離相對較遠,但其測量速度較慢且噪聲較大。
- 四個 SHARP 紅外傳感器(例如GP2Y0A21 ),位于汽車側面。它們的射程更短,但更準確、更快速。
- 兩個方向里程表,每側一個,用于測量汽車行駛了多少。
- 一個GY50陀螺儀,可以告訴您汽車的方向,或者更確切地說,以度數 [0, 360) 為單位的角位移。
- OV767X攝像頭,可用于流式傳輸汽車所看到的內容。
連接性
通過串行端口發送命令并根據傳感器輸入使汽車自動行駛很有趣,但不可否認的是,您可以完成的任務是有限的。您經常需要您的車輛與“外部世界”進行通信,無論它可能是不同設備上的應用程序還是服務器。物理Smartcar平臺圍繞 ESP32 微控制器構建,因此它可以通過 WiFi 或藍牙輕松連接到其他設備。SMCE 允許其用戶通過WiFi 和 MQTT模擬連接。雖然 WiFi 庫的模擬還沒有完全實現,因為仍有工作要做,但應該不會超過一些#ifdef __SMCE__
編寫一個可在真實硬件和仿真器上無縫運行的 Arduino 草圖。讓我們看看如何編寫一個簡單的草圖,通過 MQTT 消息控制汽車并廣播遙測數據,即前超聲波傳感器的距離測量值。注意:雖然下面的草圖在 SMCE 上運行良好,但它需要一些添加/更改才能在實際的 ESP32 上運行,主要是關于 WiFi 連接。
#include <MQTT.h>
#include <WiFi.h>
#include <Smartcar.h>
#ifndef __SMCE__
WiFiClient net;
#endif
MQTTClient mqtt;
ArduinoRuntime arduinoRuntime;
BrushedMotor leftMotor(arduinoRuntime, smartcarlib::pins::v2::leftMotorPins);
BrushedMotor rightMotor(arduinoRuntime, smartcarlib::pins::v2::rightMotorPins);
DifferentialControl control(leftMotor, rightMotor);
SimpleCar car(control);
const auto oneSecond = 1000UL;
const auto triggerPin = 6;
const auto echoPin = 7;
const auto maxDistance = 400;
SR04 front(arduinoRuntime, triggerPin, echoPin, maxDistance);
void setup() {
Serial.begin(9600);
#ifdef __SMCE__
// ================= 1
// mqtt.begin("aerostun.dev", 1883, WiFi);
mqtt.begin(WiFi); // Will connect to localhost
#else
mqtt.begin(net);
#endif
// ================= 2
if (mqtt.connect("arduino", "public", "public")) {
mqtt.subscribe("/smartcar/control/#", 1);
mqtt.onMessage([](String topic, String message) {
if (topic == "/smartcar/control/throttle") {
car.setSpeed(message.toInt());
} else if (topic == "/smartcar/control/steering") {
car.setAngle(message.toInt());
} else {
Serial.println(topic + " " + message);
}
});
}
}
void loop() {
if (mqtt.connected()) {
mqtt.loop();
const auto currentTime = millis();
static auto previousTransmission = 0UL;
if (currentTime - previousTransmission >= oneSecond) {
previousTransmission = currentTime;
const auto distance = String(front.getDistance());
// ================= 3
mqtt.publish("/smartcar/ultrasound/front", distance);
}
}
#ifdef __SMCE__
// Avoid over-using the CPU if we are running in the emulator
delay(1);
#endif
}
我用內聯注釋突出顯示了草圖中的三個有趣點,然后是=================
:
-
這是與 MQTT 代理建立連接的地方。如果沒有傳遞參數,
begin
那么它將連接到localhost
. 您有責任在本地或遠程主機上設置代理。 - 在這里,我們訂閱我們感興趣的主題,并定義一旦收到帶有特定主題的消息將發生什么。
- 我們想提供一些反饋,因此我們每隔一秒發送/發布前視超聲波傳感器測量的距離。
如果您使用的是 Ubuntu,Mosquitto是最容易設置的 MQTT 代理之一。我使用mosquitto_pub
和mosquitto_sub
實用程序訂閱前超聲波傳感器測量并發送油門命令,如下面的屏幕截圖所示。50
一旦在/smartcar/control/throttle
主題上得到適當的消息,汽車就開始加速行駛,并在/smartcar/ultrasound/front
.
相機
當試圖了解你的漫游者的環境時,傳感器只能讓你走這么遠。SMCE 允許您獲取虛擬世界的圖像流。這樣,您既可以在汽車的微控制器本身上進行一些非常簡單的圖像處理,也可以將圖像流廣播到功能更強大的設備并在那里進行圖像處理。為簡單起見,SMCE 僅支持Arduino_OV767X庫,并且可以利用 MQTT 來廣播流。讓我們看一個草圖,它為 MQTT 客戶端偵聽提供圖像流/smartcar/camera
。和之前一樣,只是增加了攝像頭流:
#include
#include <MQTT.h>
#include <WiFi.h>
#include <OV767X.h>
#include <Smartcar.h>
#ifndef __SMCE__
WiFiClient net;
#endif
MQTTClient mqtt;
ArduinoRuntime arduinoRuntime;
BrushedMotor leftMotor(arduinoRuntime, smartcarlib::pins::v2::leftMotorPins);
BrushedMotor rightMotor(arduinoRuntime, smartcarlib::pins::v2::rightMotorPins);
DifferentialControl control(leftMotor, rightMotor);
SimpleCar car(control);
const auto oneSecond = 1000UL;
const auto triggerPin = 6;
const auto echoPin = 7;
const auto maxDistance = 400;
SR04 front(arduinoRuntime, triggerPin, echoPin, maxDistance);
std::vector<char> frameBuffer;
void setup() {
Serial.begin(9600);
Camera.begin(QVGA, RGB888, 15);
// ================= 1
frameBuffer.resize(Camera.width() * Camera.height() * Camera.bytesPerPixel());
#ifdef __SMCE__
// mqtt.begin("aerostun.dev", 1883, WiFi);
mqtt.begin(WiFi); // Will connect to localhost
#else
mqtt.begin(net);
#endif
if (mqtt.connect("arduino", "public", "public")) {
mqtt.subscribe("/smartcar/control/#", 1);
mqtt.onMessage([](String topic, String message) {
if (topic == "/smartcar/control/throttle") {
car.setSpeed(message.toInt());
} else if (topic == "/smartcar/control/steering") {
car.setAngle(message.toInt());
} else {
Serial.println(topic + " " + message);
}
});
}
}
void loop() {
if (mqtt.connected()) {
mqtt.loop();
const auto currentTime = millis();
static auto previousFrame = 0UL;
// ================= 2
if (currentTime - previousFrame >= 65) {
previousFrame = currentTime;
Camera.readFrame(frameBuffer.data());
mqtt.publish("/smartcar/camera", frameBuffer.data(), frameBuffer.size(),
false, 0);
}
static auto previousTransmission = 0UL;
if (currentTime - previousTransmission >= oneSecond) {
previousTransmission = currentTime;
const auto distance = String(front.getDistance());
mqtt.publish("/smartcar/ultrasound/front", distance);
}
}
#ifdef __SMCE__
// Avoid over-using the CPU if we are running in the emulator
delay(1);
#endif
}
- 在堆上分配足夠的內存以包含單個幀。
-
每
65
毫秒,從相機中讀取一幀并將其復制到frameBuffer
. 然后通過 MQTT 廣播它。
為了向您展示這在真實場景中會是什么樣子,您可以使用參考 Android 應用程序通過 MQTT 消息控制汽車以及可視化圖像流。它不是最漂亮的,但您將了解如何使用 JAVA 和 Android 完成事情的要點。
自定義傳感器配置
默認情況下,車輛預裝了一組特定的傳感器、執行器和可用引腳。這在 SMCE 的 wiki 中的車輛功能下進行了描述。要使用您自己的設置,您可以定義您的自定義配置,使用與您的草圖json
位于同一目錄中的文件。假設我們想要一個允許我們通過串行端口駕駛汽車的草圖(如前所述),從車輛的所有四個側面測量距離并將它們發送給我們。你最終會得到一個如下圖所示的草圖:
#include
const int fSpeed = 70; // 70% of the full speed forward
const int bSpeed = -70; // 70% of the full speed backward
const int lDegrees = -75; // degrees to turn left
const int rDegrees = 75; // degrees to turn right
const unsigned long transmissionInterval = 100; // In milliseconds
const int maxDistance = 300;
ArduinoRuntime arduinoRuntime;
BrushedMotor leftMotor(arduinoRuntime, smartcarlib::pins::v2::leftMotorPins);
BrushedMotor rightMotor(arduinoRuntime, smartcarlib::pins::v2::rightMotorPins);
DifferentialControl control(leftMotor, rightMotor);
SimpleCar car(control);
// ================= 1
SR04 left(arduinoRuntime, 2, 3, maxDistance); // trigger and echo pin respectively
SR04 right(arduinoRuntime, 4, 5, maxDistance);
SR04 front(arduinoRuntime, 6, 7, maxDistance);
SR04 back(arduinoRuntime, 16, 17, maxDistance);
void setup()
{
Serial.begin(9600);
}
void loop()
{
static auto previousTransmission = 0UL;
const auto currentTime = millis();
// ================= 2
if (currentTime > previousTransmission + transmissionInterval) {
previousTransmission = currentTime;
Serial.println("===");
Serial.println("Left: " + String(left.getDistance()));
Serial.println("Right: " + String(right.getDistance()));
Serial.println("Front: " + String(front.getDistance()));
Serial.println("Back: " + String(back.getDistance()));
}
handleInput();
#ifdef __SMCE__
// Avoid over-using the CPU if we are running in the emulator
delay(1);
#endif
}
void handleInput()
{
if (Serial.available())
{
char input = Serial.read(); // read everything that has been received so far and log down
// the last entry
switch (input)
{
case 'l': // rotate counter-clockwise going forward
car.setSpeed(fSpeed);
car.setAngle(lDegrees);
break;
case 'r': // turn clock-wise
car.setSpeed(fSpeed);
car.setAngle(rDegrees);
break;
case 'f': // go ahead
car.setSpeed(fSpeed);
car.setAngle(0);
break;
case 'b': // go back
car.setSpeed(bSpeed);
car.setAngle(0);
break;
default: // if you receive something that you don't know, just stop
car.setSpeed(0);
car.setAngle(0);
}
}
}
-
在這里,我們定義了我們的傳感器應該連接到的引腳。例如,
left
超聲波 (SR04
) 傳感器連接到引腳2
和3
。前者是觸發銷,后者是回聲銷。 -
我們通過串行端口“打印”出測量值,間隔由 的值指定
transmissionInterval
。
默認設置不支持上面的草圖,原因有兩個:(a)默認汽車沒有配備四個傳感器,而SR04
只有一個,(b)在典型 ESP32 板上可用的引腳在默認情況下不可用仿真板。幸運的是,我們可以改變它!我們需要做的第一件事是使所有必要的引腳可用,并確保它們是正確的類型(即數字或模擬)。在這里我們應該注意,由于技術原因,傳感器的回波引腳必須指定為。以下是您應該遵循的步驟:16
17
SR04
analog
-
在與您的草圖相同的目錄中創建一個空文件。
board_config.json
- 獲取SMCE 使用的默認板配置,以便我們可以在它的基礎上進行構建(補?。?。
-
使用該
gpio_drivers
屬性來指定您的草圖需要的所有引腳。注意:不要忘記您需要指定電機、里程表(如果您使用它們)、陀螺儀等所需的引腳。就我而言,我想移除一些我不使用的引腳(0
和),1
添加新的(16
和17
)并確保SR04
傳感器使用的所有引腳都處于正確的模式。
{
"gpio_drivers": [
{ "pin": 2, "digital": true },
{ "pin": 3, "analog": true },
{ "pin": 4, "digital": true },
{ "pin": 5, "analog": true },
{ "pin": 6, "digital": true },
{ "pin": 7, "analog": true },
{ "pin": 16, "digital": true },
{ "pin": 17, "analog": true },
{ "pin": 12, "digital": true },
{ "pin": 13, "analog": true },
{ "pin": 14, "digital": true },
{ "pin": 18, "analog": true },
{ "pin": 25, "digital": true },
{ "pin": 26, "digital": true },
{ "pin": 27, "analog": true },
{ "pin": 34, "digital": true },
{ "pin": 35, "analog": true },
{ "pin": 85, "analog": true },
{ "pin": 135, "analog": true },
{ "pin": 39, "digital": true },
{ "pin": 36, "analog": true },
{ "pin": 86, "analog": true },
{ "pin": 136, "analog": true },
{ "pin": 250, "digital": true },
{ "pin": 205, "analog": true }
]
}
創建board_config.json
指定仿真 Arduino 板上可用引腳的文件后,是時候設置您的車輛了。同樣,我們將使用默認設置來獲取靈感并相應地對其進行修補。
-
在與您的草圖相同的目錄中創建一個文件。
vehicle_config.json
- 獲取 SMCE 使用的默認車輛配置,以便我們在此基礎上進行構建。
-
更改
slots
您感興趣的。在我的情況下,我想在和插槽上連接SR04
傳感器Left
,使用與草圖中相同的引腳,并確保這些引腳已經被.Right
Back
board_config.json
{
"slots": {
"Left": {
"class": "UltraSonic",
"name": "Left Ultrasound",
"props": {
"trigger_pin": 2,
"echo_pin": 3
}
},
"Right": {
"class": "UltraSonic",
"name": "Right Ultrasound",
"props": {
"trigger_pin": 4,
"echo_pin": 5
}
},
"FrontTop": {
"class": "UltraSonic",
"name": "Front Ultrasound",
"props": {
"trigger_pin": 6,
"echo_pin": 7
}
},
"Back": {
"class": "UltraSonic",
"name": "Back Ultrasound",
"props": {
"trigger_pin": 16,
"echo_pin": 17
}
}
}
}
專業提示:如果您想完全覆蓋任何配置,可以將from_scratch
頂級元素添加為true
. 如果您想完全移除占用您根本不使用的插槽的攝像頭或其他傳感器,這將非常有用。引腳也是如此。例如,下面的配置將創建一輛汽車,其后側僅配備一個超聲波傳感器和一對電機。沒有別的,沒有相機,沒有里程表,沒有陀螺儀。
{
"from_scratch": true,
"vehicle": "RayCar",
"slots": {
"Back": {
"class": "UltraSonic",
"name": "Back Ultrasound",
"props": {
"trigger_pin": 16,
"echo_pin": 17
}
}
},
"builtin": {
"Left BrushedMotor": {
"forward_pin": 12,
"backward_pin": 14,
"enable_pin": 13
},
"Right BrushedMotor": {
"forward_pin": 25,
"backward_pin": 26,
"enable_pin": 27
}
}
}
修改環境
。
?
- 生存危機-Arduino角色扮演游戲模擬器
- Wokwi Arduino模擬器介紹
- 用于飛行模擬器的帶Arduino的LCD面板
- 停車模擬器開源硬件
- 基于Arduino Nano R3的DIY 2D運動賽車模擬器 1次下載
- 帶有Arduino的糾纏量子比特模擬器
- Arduino Altair 8800模擬器
- 通過在線模擬器上的Arduino操作伺服電機
- DIY 2D運動賽車模擬器
- Arduino模擬器開源分享
- 一個真正的Arduino UNO電子寵物模擬器
- 基于DSP的電磁脈沖模擬器控制系統設計方案 13次下載
- 倍?;赑C和EtherCAT的控制平臺控制的賽車模擬器 13次下載
- 汽車駕駛模擬器控制系統的設計
- 汽車駕駛模擬器新一代實時場景系統的開發
- DC/DC模擬器的特征和使用方法 382次閱讀
- 使用Netropy廣域網模擬器測試簡化SD-WAN測試 397次閱讀
- 華為eNSP模擬器安裝教程 2718次閱讀
- 華為新版模擬器eNSP Lite 5693次閱讀
- 華為新版模擬器eNSP Lite安裝攻略 6676次閱讀
- 用于測試項目的4個最佳樹莓派Raspberry Pi模擬器 5985次閱讀
- 具有故障注入功能的高精度旋轉變壓器模擬器系統 5194次閱讀
- 如何對PNET 模擬器進行初始化安裝 1756次閱讀
- 使用LED作為模擬輸出的汽車警報模擬器電路 1738次閱讀
- HarmonyOS本地模擬器的版本演進與使用方法 6020次閱讀
- 基于CPLD芯片在汽車駕駛模擬器系統中的應用研究 2414次閱讀
- 基于AT89C52單片機和傳感器實現汽車駕駛模擬器單片機系統的應用方案 3111次閱讀
- 基于QEMU系統模擬器Xilinx/QEMU的運行與調試 8887次閱讀
- 基于TL431的電動汽車多節串聯鋰電池模擬器 7262次閱讀
- 基于FPGA的飛行模擬器通信接口設計 2598次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多