作者: Don Johanneck
[Kitronik][Simply Servos]板(圖 1)解決了在項(xiàng)目中使用多個(gè)伺服機(jī)構(gòu)時(shí)如何提供充足的 3 V - 12 V 電源軌的問題。內(nèi)置的 3 V 電源穩(wěn)壓功能和排針可用于快速添加 [Raspberry Pi][Pico] 以操作伺服機(jī)構(gòu)。但是,如果其他的設(shè)備采用三線式引線,且需要 5 V 電源,而且可能需要很大的電流時(shí),該怎么辦呢?比如 [Adafruit]的 [NeoPixel LED 燈條]!
圖 1:Kitronik Simply 伺服機(jī)構(gòu)板。(圖片來源:Kitronik)
最近,我有個(gè)想法,用我的遙控飛機(jī)制作一架夜間飛行器。我可以在其中安裝任何微控制器,然后想辦法把 NeoPixel 燈條與電源連接,但是,如果使用[伺服引線]能快速完成而且易于維修,將是什么樣的結(jié)果呢?Simply 伺服機(jī)構(gòu)板不僅僅適用于伺服機(jī)構(gòu)。選擇該平臺(tái)簡(jiǎn)化了項(xiàng)目,并最大限度地減少了對(duì)定制接線和大量連接器的需求。
本文結(jié)尾給出了相關(guān)的博客和有趣的視頻鏈接,幫助您詳細(xì)了解飛行平臺(tái)以及如何改裝遙控飛機(jī)。我們使用 [Arduino IDE] 對(duì) Pico 進(jìn)行編程,以便根據(jù)遙控發(fā)射器的輸入運(yùn)行 NeoPixels。我計(jì)劃在飛機(jī)機(jī)身兩側(cè)使用“發(fā)光”功能,隨著油門的加大,追逐速度也會(huì)加快。隨著夜幕降臨,Neopixels 會(huì)因亮度過高而使眼睛不舒服。一個(gè)輔助通道可用于調(diào)暗 LED。最后,當(dāng)飛機(jī)在黑暗中著陸時(shí),有著陸燈將非常方便。與其增加另一個(gè)通道,不如在油門達(dá)到或低于著陸速度時(shí)將底部 NeoPixels 變?yōu)榱涟咨N沂褂玫氖腔揪幊?,但仍有改進(jìn)空間或者仍能夠探索其他功能。
復(fù)制Arduino IDE Code:
//Rx throttle as LED speed control. Rx Aux 2 as dimmer. Channels 1 and 2 as inputs on Simply Servos.
//Remaining servo ports on board (channels 3-8, pins 4-9) used as NeoPixel outputs.
#include < neopixelconnect.h >
//Number of NeoPixels in each string
#define FIN_LEN 34 //Number of NeoPixels on each fin
#define BOT_LEN 28 //Number of NeoPixels on each bottom skid
#define AUX_LEN 61 //Number of NeoPixels on each auxiliary location
#define THRESH 60 //Landing versus flight throttle threshold
//Rx channel Pico GPIO inputs
#define THROT 2
#define AUX2 3
// Create an instance of NeoPixelConnect and initialize it for each strand of NeoPixels
// (pin, number of pixels in string, programmable IO location (0 or 1), programmable IO state machine usage (0-3))
NeoPixelConnect R_Aux(4, AUX_LEN, pio0, 0);
NeoPixelConnect L_Aux(5, AUX_LEN, pio1, 0);
NeoPixelConnect R_Bot(6, BOT_LEN, pio0, 1);
NeoPixelConnect L_Bot(7, BOT_LEN, pio1, 1);
NeoPixelConnect R_Fin(8, FIN_LEN, pio0, 2);
NeoPixelConnect L_Fin(9, FIN_LEN, pio1, 2);
uint8_t AuxSingLED; //Single LED variable on auxiliary string
//Function - Get intensity level from Rx Aux2 output
uint8_t get_pixel_intensity() {
return map(pulseIn(AUX2, HIGH), 900, 2200, 0, 255);
}
//Function - Get speed level from Rx Throttle output
uint8_t get_pixel_speed() {
return map(pulseIn(THROT, HIGH), 990, 1902, 100, 0);
}
void setup() {
pinMode(THROT, INPUT); //Set Pico GPIO pin 2 as input
pinMode(AUX2, INPUT); //Set Pico GPIO pin 3 as input
}
void loop() {
uint8_t LEDInten = get_pixel_intensity(); //Get NeoPixel intensity value
uint8_t LEDSpeed = get_pixel_speed(); //Get NeoPixel speed value
if (LEDSpeed < 10) LEDSpeed = 0; //Dampen lower speed limit
if (LEDSpeed < THRESH) { //Throttle high color
R_Bot.neoPixelFill(LEDInten, 0, 0, true); //Fill string with red
L_Bot.neoPixelFill(LEDInten, 0, 0, true); //Fill string with red
} else { //Throttle low color
R_Bot.neoPixelFill(LEDInten, LEDInten, LEDInten, true); //Fill string with white
L_Bot.neoPixelFill(LEDInten, LEDInten, LEDInten, true); //Fill string with white
}
R_Fin.neoPixelFill(0, LEDInten, 0, true); //Fill string with green
L_Fin.neoPixelFill(0, LEDInten, 0, true); //Fill string with green
R_Aux.neoPixelFill(0, 0, LEDInten, false); //Fill string with blue
R_Aux.neoPixelSetValue(AuxSingLED, LEDInten, 0, 0, false); //Set a NeoPixel to red
R_Aux.neoPixelSetValue(AuxSingLED - 1, LEDInten / 10, 0, 0, false); //Set trailing NeoPixel to dimmed red
R_Aux.neoPixelSetValue(AuxSingLED + 1, LEDInten / 10, 0, 0, true); //Set leading NeoPixel to dimmed red
L_Aux.neoPixelFill(0, 0, LEDInten, false); //Fill string with blue
L_Aux.neoPixelSetValue(AuxSingLED, LEDInten, 0, 0, false); //Set a NeoPixel to red
L_Aux.neoPixelSetValue(AuxSingLED - 1, LEDInten / 10, 0, 0, false); //Set trailing NeoPixel to dimmed red
L_Aux.neoPixelSetValue(AuxSingLED + 1, LEDInten / 10, 0, 0, true); //Set leading NeoPixel to dimmed red
AuxSingLED = AuxSingLED + 3; //Marquis - move R_Aux and L_Aux red LEDs along NeoPixel string 3 pixels at a time.
if (AuxSingLED >= AUX_LEN) AuxSingLED = 0; //If at end of string, return to start.
delay(LEDSpeed); //Set how long to delay code execution cycle depending upon throttle level.
}
Arduino IDE Code END:
< /neopixelconnect.h >
清單 1:用于控制 NeoPixel 燈條的 Arduino IDE 代碼。
消除任何延遲功能都將有益于整個(gè)程序,通過操作油門的輸入值或輸入值映射,LED 可以更快地運(yùn)行。您可根據(jù)需要,靈活地選擇其余燈條的圖案或顏色。請(qǐng)記住,飛行員需要依靠可識(shí)別的燈光圖案來確定飛機(jī)的方位和航向。夜間飛行既有趣又有挑戰(zhàn)性。在傍晚時(shí)分練習(xí)夜間飛行,仍能同時(shí)看到飛機(jī)和 LED 燈。
審核編輯 黃宇# NeoPixel
-
微控制器
+關(guān)注
關(guān)注
48文章
7658瀏覽量
152153 -
led
+關(guān)注
關(guān)注
242文章
23375瀏覽量
663383 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5124瀏覽量
98276 -
伺服機(jī)構(gòu)
+關(guān)注
關(guān)注
0文章
7瀏覽量
7187
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于DSP的數(shù)字伺服機(jī)構(gòu)控制系統(tǒng)設(shè)計(jì)
導(dǎo)彈伺服機(jī)構(gòu)與CAN總線的連接和通信
Linklt ONE開發(fā)板如何利用Adafruit_NeoPixel庫(kù)驅(qū)動(dòng)WS2812彩燈?
基于VXI總線的導(dǎo)彈伺服機(jī)構(gòu)單元測(cè)試基本型系統(tǒng)
基于PC/104伺服機(jī)構(gòu)自動(dòng)化測(cè)試系統(tǒng)研究
基于PC104伺服機(jī)構(gòu)自動(dòng)化測(cè)試系統(tǒng)研究
關(guān)于伺服機(jī)構(gòu)的動(dòng)態(tài)測(cè)試系統(tǒng)
電液伺服機(jī)構(gòu)與CAN總線接口設(shè)計(jì)
![電液<b class='flag-5'>伺服機(jī)構(gòu)</b>與CAN總線接口設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A5/F6/wKgZomUMOwaAJfOjAAAPqxKAt2A227.jpg)
基于DSP的數(shù)字伺服機(jī)構(gòu)控制系統(tǒng)設(shè)計(jì)
![基于DSP的數(shù)字<b class='flag-5'>伺服機(jī)構(gòu)</b><b class='flag-5'>控制</b>系統(tǒng)設(shè)計(jì)](https://file.elecfans.com/web2/M00/49/5F/pYYBAGKhtEqAWuJSAAAPjRK0eHY876.jpg)
基于LS-SVM的機(jī)載天線伺服機(jī)構(gòu)自適應(yīng)控制
電動(dòng)伺服機(jī)構(gòu)可靠性驗(yàn)證試驗(yàn)
![電動(dòng)<b class='flag-5'>伺服機(jī)構(gòu)</b>可靠性驗(yàn)證試驗(yàn)](https://file.elecfans.com/web1/M00/4E/44/pIYBAFq5rsaAWArSAAA-S1-Q1MI082.jpg)
導(dǎo)彈電液伺服機(jī)構(gòu)原理仿真裝置的軟硬件設(shè)計(jì)與實(shí)現(xiàn)
![導(dǎo)彈電液<b class='flag-5'>伺服機(jī)構(gòu)</b>原理仿真裝置的軟硬件設(shè)計(jì)與實(shí)現(xiàn)](https://file.elecfans.com/web1/M00/6F/CC/pIYBAFvw4KuAReJ2AABjK1aTG94426.jpg)
基于DSP的數(shù)字伺服機(jī)構(gòu)控制系統(tǒng)設(shè)計(jì)
![基于DSP的數(shù)字<b class='flag-5'>伺服機(jī)構(gòu)</b><b class='flag-5'>控制</b>系統(tǒng)設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論