<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>SMCE:您的Arduino汽車模擬器

SMCE:您的Arduino汽車模擬器

2023-06-27 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

隨著大流行的持續,硬件不僅難以采購,而且難以安全地協同工作。智能微型車輛的情況下,可用單元的數量本質上是有限的,我們部署它們的“環境”也是如此,例如賽道或障礙賽。我們如何解決硬件資源稀缺問題?我們將資源數字化!

> 本文最初發布于platis.solutions

SMCESmartcar 平臺的數字雙胞胎,以及一個酷炫且可定制的3D 世界,供您的漫游車漫游。核心概念是您編寫可在兩者上運行的 Arduino 代碼真實的硬件和虛擬環境。通過這種方式,可以減輕或大大減少對汽車的專有和頻繁訪問的需求。理想情況下,模擬器允許限制與物理汽車的不可避免的接觸,以至于開發團隊可以在模擬器上開發他們的功能,并且只訪問真實的硬件來驗證它們。使用網絡物理系統的虛擬表示不僅在大流行期間很有價值。我們這些使用嵌入式系統的人可能會痛苦地認識到由于缺乏硬件可用性而被阻止的不利影響。在這篇文章中,我將向您展示如何開始使用SMCE以及它的許多功能。如果你想要一些關于什么的靈感您可以使用該軟件查看我們的學生如何利用SMCE 來模擬 Arduino 車輛。

poYBAGNkW9uAHCt1AASgWJTwEtE744.jpg
?

關于 SMCE

在深入了解模擬器之前,讓我們澄清一下 SMCE 不是什么:一個 3D 環境,用于您的超級自定義愛好項目,它使用各種奇異的傳感器和第三方庫。開箱即用的模擬器可支持Smartcar 庫的用戶并適應他們的典型用例和傳感器設置。模擬器不僅適用于特定的庫,但是,如果您使用它,您的生活會輕松得多。我并不是因為模擬器而這么說。它帶有很多例子,它用途廣泛,總體上是一個非常容易使用的庫,您應該嘗試一下!此外,我應該注意,模擬器不是由我制作或維護的,所以請不要聯系我尋求支持。它是由我的兩個非常有才華的前學生Ryan JansonRuthger 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 的一個非??岬牡胤绞撬?/font>可以您的計算機上運行。SMCE 也可以安裝在WindowsMacOS 上。如果 SMCE 安裝正確,您將看到以下屏幕:smce-gd

pYYBAGNkW96AE4LXAAAiiQFeeCs860.png
?

選擇Start Fresh選項,然后在下一個屏幕中單擊+標志。

poYBAGNkW-GAFiFGAACbSjGqQaw700.png
?

然后是時候選擇在 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向左轉彎。任何其他角色都會停下車。選擇草圖后,單擊“編譯”選項。

poYBAGNkW-qAGDrvAACf0KO2Vsk645.png
?

編譯成功后,點擊開始按鈕。您會看到汽車在虛擬世界中彈出。酷吧?讓我們開車吧!單擊屏幕左下方的“串行”選項,鍵入并按鍵盤上的“Enter”。汽車將開始行駛。按下“跟隨”選項,使相機隨著汽車一起移動,并使用我們上面描述的簡單命令進行操作。完成后,您可以單擊停止。專業提示:您可能希望在函數結束時放置一個微小的延遲(例如),以避免占用您的 CPU 資源,因為仿真器將在您的草圖中快速循環。floop()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 ,您將獲得傳感器指向的位置及其范圍的指示。這對于調試傳感器輸入特別有價值。

poYBAGNkW-2AXrr2AACnRCeTtrw599.png
?

作為額外的真實感,傳感器讀數故意不完全準確并且包含噪聲。默認設置中當前可用的傳感器有:

  • 車輛前部的一個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_pubmosquitto_sub實用程序訂閱前超聲波傳感器測量并發送油門命令,如下面的屏幕截圖所示。50一旦在/smartcar/control/throttle主題上得到適當的消息,汽車就開始加速行駛,并在/smartcar/ultrasound/front.

pYYBAGNkW--AA32DAADlPEQLVRw284.png
?

相機

當試圖了解你的漫游者的環境時,傳感器只能讓你走這么遠。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 完成事情的要點。

poYBAGNkW_OAbAUfAAFKrgZo3s4971.png
?

自定義傳感器配置

默認情況下,車輛預裝了一組特定的傳感器、執行器和可用引腳。這在 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) 傳感器連接到引腳23。前者是觸發銷,后者是回聲銷。
  • 我們通過串行端口“打印”出測量值,間隔由 的值指定transmissionInterval。
pYYBAGNkW_WAJl2uAACIbD7SJAU437.png
?

默認設置不支持上面的草圖,原因有兩個:(a)默認汽車沒有配備四個傳感器,SR04只有一個,(b)在典型 ESP32 板上可用的引腳在默認情況下不可用仿真板。幸運的是,我們可以改變它!我們需要做的第一件事是使所有必要的引腳可用,并確保它們是正確的類型(即數字或模擬)。在這里我們應該注意,由于技術原因,傳感器的回波引腳必須指定為。以下是您應該遵循的步驟:1617SR04analog

  • 在與您的草圖相同的目錄中創建一個空文件。board_config.json
  • 獲取SMCE 使用的默認板配置,以便我們可以在它的基礎上進行構建(補?。?。
  • 使用該gpio_drivers屬性來指定您的草圖需要的所有引腳。注意:不要忘記您需要指定電機、里程表(如果您使用它們)、陀螺儀等所需的引腳。就我而言,我想移除一些我不使用的引腳(0和),1添加新的(1617)并確保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,使用與草圖中相同的引腳,并確保這些引腳已經被.RightBackboard_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
      }
   }
}

修改環境

poYBAGNkW_iAGg75AAJdJVJyCfU325.png
?

。

?

?


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

評論

查看更多

下載排行

本周

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

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>