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

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

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

自制Arduino RFID門鎖—第二部分:用智能手機解鎖

張麗 ? 來源:羅姆 ? 作者:羅姆 ? 2023-02-23 11:10 ? 次閱讀

這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。點擊此處閱讀本文第一部分 >

pYYBAGPzEZmAO50ZAASnlsaOAUY36.jpeg

在上一篇文章自制 Arduino RFID門鎖中,我們制作了Arduino RFID門鎖,并且能夠使用RFID標簽或鍵盤來解鎖。那么,如果您想要進一步簡化流程該怎么辦呢?在第二部分中,我們將添加一個附加功能:使用智能手機來解鎖。這是一種更簡單的控制門的辦法,尤其是當所有人都希望能夠通過一個設備就能控制所有物品的時候。那么我們該怎么做呢?我們將會把藍牙模塊連接到先前的設置中,并連接電子門。

硬件

HC-05 藍牙模塊

ABK-704L 電氣設備

Arduino Nano

RFID RC522

壓電蜂鳴器

2x 330 電阻

4×4 鍵盤

LCD適配器I2C

LCD16X2BL

DC-DC 降壓模塊 MP1584EN

軟件

MIT App Inventor 2

Arduino IDE

Github

步驟1:連接藍牙

在這一步中,我們將深入研究HC-05藍牙模塊。

Arduino-info Wiki

有以下兩種操作模式:

指令模式 – 將AT指令發(fā)送到藍牙模塊;

數(shù)據(jù)模式 – 從另一個藍牙模塊接收和傳輸數(shù)據(jù)。默認的模式是數(shù)據(jù)模式,默認設置如下:

波特率:9600 bps,數(shù)據(jù):8位,停止位:1位,奇偶校驗:無

密碼:1234

設備名稱:HC-05

針對我們的應用程序,我們將使用數(shù)據(jù)模式,因為我們僅需要使用串行通信來從手機接收信息。

有關串行通信的更多信息,請參考Arduino串行通信教程。

poYBAGPzEZyAXJR4AADuUPzCz3M435.jpg

圖1:藍牙模塊引腳

在此應用程序中,我們需要使用以下引腳—Arduino-info Wiki:

VCC: +5 電源

GND: 系統(tǒng) / Arduino接地

TX: 將串行數(shù)據(jù)從HC-05傳輸?shù)?Arduino 串行接收端口

RX: 接收來自Arduino 串行發(fā)送端口的串行數(shù)據(jù)

pYYBAGPzEZ-ACMDIAADCKmDsh_o698.jpg

圖2:HC-05 和Arduino Nano的接線圖

poYBAGPzEaOAfTrZAAPH4CNWtuQ666.jpg

圖3:藍牙和Arduino之間的連接

代碼

藍牙使用串行通信;“Serial.write(Serial.read());”連接了RX和TX引腳后,該指令將會正常運行。如果這對藍牙模塊不適用,則下面的代碼返回的內(nèi)容與您在Arduino IDE中編寫的文本相同。

void setup(){
 
 Serial.begin(9600);
 Serial.println("What did you say?:");
 }

void loop(){
 if (Serial.available())
 Serial.write(Serial.read());
 }

您需要在設備管理器中找到Arduino的編程端口;連接藍牙后,將出現(xiàn)“藍牙鏈接上的標準串行”,您必須選擇“USB-SERIAL”才能對Arduino進行編程。您需要使用串行電纜上傳程序,不能使用無線藍牙將程序上傳到開發(fā)板。

poYBAGPzEaWAf3NDAAA6pd9Ifkg475.jpg

連接RX和TX后,您將收到許多錯誤信息,如下所示:

pYYBAGPzEamAQXMyAAJs2E1qGWo699.jpg

為了避免這些錯誤,您需要在藍牙的TX引腳沒有連接到Arduino開發(fā)板的情況下上傳程序。藍牙的TX引腳具有低阻抗,而Arduino的RX輸入具有高阻抗。最終的阻抗將為較低的一個,而RX輸入將會被繞過(從USB端口產(chǎn)生的電流直接通過藍牙輸出,而不是Arduino開發(fā)板)。這就是數(shù)據(jù)無法傳輸?shù)狡谕恢命c的原因。另外,電流直接流入設備的輸出端將會在模塊之間產(chǎn)生錯誤的連接,會導致電氣故障。我們想要做的是對Arduino進行編程,而不是將數(shù)據(jù)發(fā)送到藍牙模塊。

斷開藍牙的TX引腳后,一切都會正常工作,您就可以上傳代碼了。

pYYBAGPzEauARam9AABE4P-8WNk580.jpg

圖4:連接藍牙TX引腳而導致的電氣故障

pYYBAGPzEa6ACtHzAADB1slSQfo529.jpg

圖5: HC-05 和Arduino Nano的接線圖,顯示了上傳代碼之前的正確連接

上傳代碼后,下一步是連接到電腦上的藍牙。您需要重新連接藍牙的TX引腳,因為現(xiàn)在我們將使用無線通信,串行電纜只用于供電。

請按照以下步驟將藍牙連接到PC(在Windows 10系統(tǒng)上):

打開設置(Settings)

點擊設備(Devices)

選擇藍牙(Bluetooth)

點擊開啟(ON)

找到“HC-05”并點擊“PAIR”

輸入密碼“1234”

pYYBAGPzEbCABaW1AABUkDobO4E081.jpg

圖6:在Windows 10系統(tǒng)上連接藍牙模塊

如果您已經(jīng)按照上述步驟進行了操作,那么您的藍牙連接應該就成功了,您可以對模塊進行測試。有一種簡單的檢查連接是否成功建立的方法:在Arduino IDE中鍵入一個單詞,然后查看是否返回相同的單詞,如果是的話,就說明一切正常,您可以繼續(xù)往下進行了!如果不是,請返回之前的步驟并再次對藍牙配對。

因為我們不再使用通過電纜的串行通信,所以需要找到藍牙的COM。我們需要回到端口(PORTS)部分的設備管理器(Device Manager),并搜索藍牙設備。在我的應用中是PORT 17:

poYBAGPzEbKAFfNcAAAn84BqJto299.jpg

在設備管理器中找到COM后,您需要在Arduino IDE中執(zhí)行相同的操作(即將COM端口設置為COM 17)。您需要點擊TOOLS → PORT → COM 17。

pYYBAGPzEbSAMHPeAAB09tLsug8716.jpg

圖7:在Arduino IDE中設置COM

選擇正確的COM后,您可以對模塊進行測試,查看是否工作正常。

請確保您在串行監(jiān)視器中選擇了以下兩個選項:

NL & CR

9600 波特

在我們的演示中,我們將輸入信息“Hello!”

poYBAGPzEbaAGKciAAApzCg3pf4284.jpg

輸出內(nèi)容應與輸入內(nèi)容相同:

pYYBAGPzEbmAJvivAAAueh7CHBI511.jpg

步驟2:設備

讓我們參考一下上一篇文章自制Arduino RFID門鎖!我們將使用與之前相同的組件,然后增加一個藍牙模塊(HC-05)。為了將數(shù)據(jù)從智能手機傳輸?shù)紸rduino,我們需要藍牙模塊。

斷開藍牙的TX引腳很重要,否則我們將會遇到跟步驟1中相同的錯誤。

有三種方式可以打開門鎖:

從鍵盤輸入密碼

將標簽放在RFID附近

從智能手機輸入密碼

poYBAGPzEbyAbLIFAAFqCgktObg348.jpg

圖8:所有組件的接線圖

該鎖具有很高的電流量(800mA)。我們添加一個綠色LED燈來查看代碼是否運行正常。鍵入“*123456#” 代碼且系統(tǒng)解鎖后,LED指示燈將為高電平。

poYBAGPzEb-AbnCXAAFAUQCIieY803.jpg

圖9:組件之間的連接

在下一步中,我們將添加電池和繼電器。我們使用兩節(jié)9V電池給門鎖供電。如果您打算將設備電壓設置為固定值,則需要購買一種可以從開關電源的220V電壓中獲得5V電壓的設備。

因為鎖的電流消耗很高,所以電池并聯(lián)連接。在這種情況下,Arduino由電池供電。我們需要使用將9V轉(zhuǎn)換為5V的DC-DC降壓模塊。輸入電壓由Arduino開發(fā)板的Vin引腳進入。我們將不再使用計算機USB的供電。

降壓模塊的輸出電壓要固定在5V。您需要使用萬用表進行校準;輸入電壓為9V,我們將旋扭電位器,直到輸出電壓為5V。

pYYBAGPzEcKAfF6pAABdotmMLpA668.jpg

圖10:DC-DC降壓模塊(MP1584EN)

pYYBAGPzEcSAK9SWAAD46uUgUiA534.jpg

圖11:測量電池電壓

poYBAGPzEceAEmbYAADjqFXIJzA851.jpg

圖12:最終設置的接線圖

poYBAGPzEcqADGNlAAGnA1Uar3w573.jpg

圖13:最終設置

完整代碼

#include 
#include 
#include 
#include 
#include 
#include 


int state_bt=1;
int relPin;
int stare=0;
byte COD[10];
byte AUX[10];
int k=0;
String codacces="*123456#";
String ;
//nfc
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
#define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF}
MFRC522::MIFARE_Key key;
//lcd
LiquidCrystal_I2C lcd(0x27,16,2);

//TASTATURA
const byte numRows= 4; //number of rows on the keypad
const byte numCols= 4; //number of columns on the keypad

//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols]= 
{
{'1', '2', '3', 'A'}, 
{'4', '5', '6', 'B'}, 
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

//Code that shows the the keypad connections to the arduino terminals
byte rowPins[numRows] = {2,3,4,5}; //Rows 0 to 3
byte colPins[numCols]= {A0,7,8,9}; //Columns 0 to 3

//initializes an instance of the Keypad class
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);


void setup() {
pinMode(A0,OUTPUT);
digitalWrite(A0,HIGH);
pinMode(A3,OUTPUT);
digitalWrite(A3,HIGH);
pinMode(A1,OUTPUT);
digitalWrite(A1,HIGH);
pinMode(A2,OUTPUT);
digitalWrite(A2,LOW);
pinMode(6,OUTPUT);
digitalWrite(6,HIGH);
//nfc
Serial.begin(9600); // Initialize serial communications with the PC
Serial.println("What did you say?:");
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card

for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}

lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.clear();
lcd.print("BLOCKED");

}

void citireNFC(){
for (byte i =0; i<(mfrc522.uid.size); i++) {
COD[i]=mfrc522.uid.uidByte[i];
} 
Serial.print("COD");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);

}

void pairNFC(){
Serial.println("COD in pair");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);
long r=0;
int c=0;
for(int i=1;i<=EEPROM.read(0);i++){
switch(i%4){
case 1 :{AUX[0]=EEPROM.read(i); break;}
case 2 :{AUX[1]=EEPROM.read(i); break;}
case 3 :{AUX[2]=EEPROM.read(i); break;}
case 0 :{AUX[3]=EEPROM.read(i); break;}
}
if((i)%4==0)
{Serial.println(r);
if( AUX[0]==COD[0] && AUX[1]==COD[1] && AUX[2]==COD[2] && AUX[3]==COD[3] ){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CODE ALREADY IN");
lcd.setCursor(0,1);
lcd.print("SYSTEM");
delay(2000);
c=1;
break;} 
}
}
if(c==0){int ttt=EEPROM.read(0);
Serial.println("CODE PAIRED");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);

EEPROM.write(ttt+1,COD[0]);
EEPROM.write(ttt+2,COD[1]);
EEPROM.write(ttt+3,COD[2]);
EEPROM.write(ttt+4,COD[3]);

ttt=ttt+4;
Serial.println("ttt");
Serial.println(ttt);
EEPROM.write(0,0); 
EEPROM.write(0,ttt); 
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CODE PAIRED");
delay(2000);} 
}


boolean validareNFC(){
boolean c=false;
for(int i=1;i<=EEPROM.read(0);i++){
switch(i%4){
case 1 :{AUX[0]=EEPROM.read(i); break;}
case 2 :{AUX[1]=EEPROM.read(i); break;}
case 3 :{AUX[2]=EEPROM.read(i); break;}
case 0 :{AUX[3]=EEPROM.read(i); break;}
}
if((i)%4==0)
{
if( AUX[0]==COD[0] && AUX[1]==COD[1] && AUX[2]==COD[2] && AUX[3]==COD[3])
c=true;
}} 
return c; 
}

int comparareCOD(String a)
{ 
if(a.equals(codacces))
return 1;
else if(a.equals(codpairing)) return 2;
else return 0; 
}


String iaCOD(char x)
{ char vec[10];
vec[0]=x;
lcd.setCursor(0,0);
lcd.clear();
lcd.print('X');
for(int i=1;i<8;i++)
{vec[i]=myKeypad.waitForKey();
lcd.print('X');}
vec[8]=NULL;
String str(vec);
return str;
} 



void loop() {

//Start BT autentification
if(Serial.available())
{
char c=Serial.read();
switch (state_bt) {

case 1:
if(c=='*') state_bt=2;
else state_bt=1;
break;

case 2:
if(c=='1') state_bt=3;
else state_bt=1;
break;

case 3:
if(c=='2') state_bt=4;
else state_bt=1;
break;

case 4:
if(c=='3') state_bt=5;
else state_bt=1;
break;

case 5:
if(c=='4') state_bt=6;
else state_bt=1;
break;

case 6:
if(c=='5') state_bt=7;
else state_bt=1;
break;

case 7:
if(c=='6') state_bt=8;
else state_bt=1;
break;

case 8:
if(c=='#') state_bt=9;
else state_bt=1;
break;

case 9:

lcd.init(); 
lcd.backlight();
lcd.print("OPEN");
digitalWrite(6,LOW);
delay(5000);
digitalWrite(6,HIGH);
lcd.init(); 
lcd.backlight();
lcd.print("BLOCKED");
state_bt=1;
break;

default:

break;
}
}
switch(stare){
case 0: {
mfrc522.PCD_Init();
if ( mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ){

citireNFC();
if(validareNFC()) 
{stare=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VALID NFC CODE");
delay(1000);
return; 
}
else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("INVALID NFC CODE");
delay(1000);
lcd.setCursor(0,0);
lcd.clear();
lcd.print("BLOCKED");
return;
}
}
char c=myKeypad.getKey();
if(c != NO_KEY){

String codcurent=iaCOD(c);
int A=comparareCOD(codcurent);
if(A==0)
{lcd.clear();
lcd.print("INVALID CODE");
delay(2000);
lcd.setCursor(0,0);
lcd.clear();
lcd.print("BLOCKED");
return;}
if(A==1)
{lcd.setCursor(0,0);
lcd.clear();
lcd.print("VALID CODE");
delay(2000);
stare = 1;
return;}
if(A==2);
{stare=2;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pairing...");
delay(2000);
return;}
} break;
}
case 1:{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("UNLOCKED");
digitalWrite(A3,LOW);
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH);
//tone(6,3000,5010);
digitalWrite(6,LOW);
delay(5000);
digitalWrite(6,HIGH);
digitalWrite(A3,HIGH);
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
stare=0;
lcd.setCursor(0,0);
lcd.clear();
lcd.print("BLOCKED");



return;
}
case 2:{

mfrc522.PCD_Init();
if ( mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ){
citireNFC();
pairNFC();
stare=0;
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BLOCKED"); }
break;
}
}
}

步驟3:應用程序

在此步驟中,我們將為系統(tǒng)創(chuàng)建應用程序。我使用的是MIT App Inventor 2程序。這個程序很簡單,不需要很高的編程技能,可以在此處下載:MIT AppInventor。為了打開該應用程序,您需要:

下載應用程序

用您的Google賬號進行登錄

開始一個新的項目

在安裝了程序之后,您會找到如下的一個圖形界面:

pYYBAGPzEc2AQrKHAACEDz8TVno254.jpg

圖 14 : MIT AppInventor

為了對您的程序進行測試,您需要在手機上從Google Play下載“MIT AI2”應用程序。這是一個免費的應用程序,專門用于將網(wǎng)絡應用程序同步到智能手機上。

poYBAGPzEdCAKoSqAAE7ys_uCS0479.jpg

圖15:Google Play上的MIT AppInventor

如果您想要在手機上查看應用程序的屏幕,需要點擊Connect → AI Companion。

pYYBAGPzEdOABkCeAADpKmNBlSE033.jpg

圖16:連接應用程序

點擊之后,該應用程序?qū)槟峁﹥煞N操作方式:

您可以掃描條形碼(在您的設備上啟動MIT AI2 Companion,然后掃描條形碼或鍵入用于連接的代碼,以對您的應用程序進行實時測試)

在您的應用程序中輸入6個字母的代碼

我將使用第二種方法,將電腦產(chǎn)生的6個字母的代碼輸入到手機應用程序中。

pYYBAGPzEdWAQ3z9AADevxttltU189.jpg

圖17:網(wǎng)絡與手機同步

我選擇這個應用程序是因為它易于使用;您無需具備編程技能即可實現(xiàn)如上所述的簡單代碼。您只需要構(gòu)思一下應用程序的外觀,在該應用程序中進行外觀設置也非常簡單。

我們先從用戶界面開始:

poYBAGPzEdiAaf4yAADb-MQ5hWs853.jpg

圖18:用戶界面

pYYBAGPzEdqACkZTAACoYYn33m4944.jpg

圖19:我的用于無線打開門鎖的應用程序

您可以在屏幕上添加應用程序的任何元素(按鈕,圖像,文本框,標簽)。在右側(cè)菜單中,您可以選擇想要從屏幕上獲取的特征(水平對齊,應用名稱,標題)。如果您想要背景圖像,可以從背景圖像(Background Image)菜單中進行選擇。在該應用程序中,我選擇在藍牙和手機之間的連接打開時顯示綠色背景,在連接關閉時顯示紅色背景。

該應用程序中屏幕上的三個要素:

pYYBAGPzEdyAZz0wAAAXvX_YAH4510.jpg

圖20:不可見的組件

傳感器組件 & 用戶界面組件 – MIT App Inventor

1.Bluetooth Client1檢測藍牙設備的組件。該系統(tǒng)中返回以下內(nèi)容的函數(shù):

配對的藍牙設備的地址和名稱 – AddressesAndNames

設備上的藍牙是否可用 – 可用(Available)

是否啟用藍牙 – 是(Enabled)

2.Clock1 – 不可見的組件,通過手機上的內(nèi)置時鐘提供即時時間。它可以按照設置的時間間隔定期地觸發(fā)計時器,并執(zhí)行時間的計算、操作和轉(zhuǎn)換。

3.Notifier1 – 通知器組件顯示警報對話框、消息和臨時警報,并通過以下方式創(chuàng)建Android日志條目:

ShowMessageDialog: 顯示一條用戶必須通過按下按鈕才能關閉的消息。

LogError: 將錯誤消息記錄到Android日志中。

LogInfo: 將信息消息記錄到Android日志中。

poYBAGPzEd6ALK0uAABawqh13V0962.jpg

圖21:屏幕模塊

如果未連接藍牙,您會收到一個錯誤信息,該錯誤信息會顯示在連接狀態(tài)(Link Status)部分中。我在沒有連接設備的情況下輸入了打開門的密碼,應用程序提醒我設備沒有打開。這是一個很好的通知器,因為您有可能會忘記進行設備的配對,這樣就無法把門打開。

pYYBAGPzEeGACcFjAADz0nHpfb0401.jpg

圖22:通知器顯示錯誤信息

該應用程序有三個按鈕:

1. 連接:該按鈕被啟動時,將會顯示一個文本列表供用戶選擇。此按鈕相當于藍牙查找器。如果您使用該應用時附近開啟的藍牙設備多余一個,則這些藍牙將會顯示在搜索框中。我的附近只有一個打開的藍牙,即HC-05模塊。

poYBAGPzEeOAYwAvAAAi-YSHXVo731.jpg

圖23:搜索藍牙設備

poYBAGPzEeWADj_LAAC9Cr43Pao580.jpg

圖24:listpicker模塊

2. 斷開連接:此按鈕將會把應用程序與手機之間的連接斷開。點擊按鈕后,背景色變?yōu)榧t色。

pYYBAGPzEeiAWbBFAABjuIsqlsc841.jpg

圖25:斷開連接模塊

3. 發(fā)送文本:僅在建立連接時有效。程序通過藍牙的“SendText”函數(shù)發(fā)送文本數(shù)據(jù)。在狀態(tài)部分將顯示消息“消息已發(fā)送”(Message Sent)。

poYBAGPzEeqAXNgxAAB8GmAwh90570.jpg

圖26:發(fā)送文本模塊

應用程序是如何工作的 – Pevest App Inventor 2: 學習編碼

“當輸入Clock1.Timer指令時,該應用程序會檢查藍牙是否打開。變量 ByteAvailableCommandByte將被初始化設置為0,以用于傳輸。如果獲取到了有關數(shù)據(jù),則使用ReceiveSigned1ByteNumber讀取傳入數(shù)據(jù)的第一個字節(jié)。這是指令字節(jié)。根據(jù)指令的值,將采用合適的藍牙模塊中的方法(method)來讀取下一個字節(jié)。”

poYBAGPzEe2AL_P-AAFeyHHs3YQ998.jpg

圖 27: 傳輸模塊/ ? Pevest App Inventor 2

結(jié)論

該項目由于需要使用大量的外圍設備之間的通信而具有一定的挑戰(zhàn)性,因此我花了一些時間來尋找連接所有組件的理想方式。它幫助我了解了制造復雜設備的過程中可能發(fā)生的一些錯誤,以及避免這些錯誤的方法。

pYYBAGPzDmSAfn_UAAAF-_P5AGo881.jpg

Tiberia Todeila

Tiberia目前在Politehnica大學進行最后一年的學習,專業(yè)方向為電氣工程。她非常熱衷于設計和開發(fā)那些讓我們的日常生活變得更加輕松的智能家居設備。

審核編輯黃宇

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

    關注

    66

    文章

    18375

    瀏覽量

    179544
  • RFID
    +關注

    關注

    387

    文章

    6055

    瀏覽量

    237097
  • Arduino
    +關注

    關注

    187

    文章

    6455

    瀏覽量

    186388
收藏 人收藏

    評論

    相關推薦

    實現(xiàn)免調(diào)整VCO1的IC (第二部分)

    實現(xiàn)免調(diào)整VCO1的IC (第二部分)
    發(fā)表于 05-07 13:18 ?46次下載

    AT91SAM9260使用手冊第二部分

    AT91SAM9260使用手冊第二部分
    發(fā)表于 03-10 09:13 ?86次下載

    常用單片機實例與仿真_第二部分

    第二部分 常用單片機實例與仿真 需要的下載
    發(fā)表于 11-10 17:37 ?13次下載

    微型模塊電源產(chǎn)品第二部分

    微型模塊電源產(chǎn)品第二部分,有需要的下來看看
    發(fā)表于 03-17 17:43 ?0次下載

    中國NB-IOT產(chǎn)業(yè)聯(lián)盟-第二部分問題清單-20160824

    中國NB-IOT產(chǎn)業(yè)聯(lián)盟-第二部分問題清單
    發(fā)表于 01-11 12:00 ?7次下載

    2012年PSoC數(shù)?;旌显O計培訓_第二部分

    2012年PSoC數(shù)?;旌显O計培訓_第二部分
    發(fā)表于 10-27 09:32 ?26次下載
    2012年PSoC數(shù)?;旌显O計培訓_<b class='flag-5'>第二部分</b>

    如何使用 Nios II 處理器進行你中意的設計之第二部分教程

    使用 Nios II 處理器進行設計”第二部分
    的頭像 發(fā)表于 06-11 14:36 ?4973次閱讀
    如何使用 Nios II 處理器進行你中意的設計之<b class='flag-5'>第二部分</b>教程

    AN-389: 使用Σ-Δ轉(zhuǎn)換器—第二部分[中文版]

    AN-389: 使用Σ-Δ轉(zhuǎn)換器—第二部分[中文版]
    發(fā)表于 03-19 06:38 ?0次下載
    AN-389: 使用Σ-Δ轉(zhuǎn)換器—<b class='flag-5'>第二部分</b>[中文版]

    有時你需要一點收獲第二部分

    有時你需要一點收獲第二部分
    發(fā)表于 04-19 11:32 ?9次下載
    有時你需要一點收獲<b class='flag-5'>第二部分</b>

    超聲波感應器會被用于何處?—— 第二部分

    超聲波感應器會被用于何處?—— 第二部分
    發(fā)表于 11-01 08:27 ?2次下載
    超聲波感應器會被用于何處?—— <b class='flag-5'>第二部分</b>

    如何實現(xiàn)更高的系統(tǒng)效率——第二部分:高速柵極驅(qū)動器

    如何實現(xiàn)更高的系統(tǒng)效率——第二部分:高速柵極驅(qū)動器
    發(fā)表于 11-02 08:15 ?2次下載
    如何實現(xiàn)更高的系統(tǒng)效率——<b class='flag-5'>第二部分</b>:高速柵極驅(qū)動器

    設計一臺物聯(lián)網(wǎng)模塊燈——第二部分

    設計一臺物聯(lián)網(wǎng)模塊燈——第二部分
    發(fā)表于 11-02 08:16 ?0次下載
    設計一臺物聯(lián)網(wǎng)模塊燈——<b class='flag-5'>第二部分</b>

    救世主Ga N來啦!第二部分:測量

    救世主Ga N來啦!第二部分:測量
    發(fā)表于 11-03 08:04 ?0次下載
    救世主Ga N來啦!<b class='flag-5'>第二部分</b>:測量

    生成任意量級的偏置電流網(wǎng)絡(第二部分

    生成任意量級的偏置電流網(wǎng)絡(第二部分
    發(fā)表于 11-03 08:04 ?0次下載
    生成任意量級的偏置電流網(wǎng)絡(<b class='flag-5'>第二部分</b>)

    使用Raspberry Pi 3自制智能相框和日歷—第二部分

    本教程的第二部分將帶您完成構(gòu)建智能相框和日歷的框架、連接PIR運動傳感器和控制相框幻燈片顯示向日歷顯示的過渡這些步驟。該項目將繼續(xù)使用本教程的使用Raspberry Pi 3自制智能
    的頭像 發(fā)表于 02-24 17:51 ?1232次閱讀
    使用Raspberry Pi 3<b class='flag-5'>自制</b><b class='flag-5'>智能</b>相框和日歷—<b class='flag-5'>第二部分</b>