【创客创意】制作夜间飞行器 一招解决伺服机构板巧解LED灯控难题

B站影视 韩国电影 2025-08-28 17:00 1

摘要:在科技与创意的融合中,制作一架夜间飞行器是一个充满挑战与乐趣的项目。本文将介绍如何利用 Kitronik Simply Servos 板解决 LED 灯条的控制难题,实现一个功能完善的夜间飞行器。

文章概述

在科技与创意的融合中,制作一架夜间飞行器是一个充满挑战与乐趣的项目。本文将介绍如何利用 Kitronik Simply Servos 板解决 LED 灯条的控制难题,实现一个功能完善的夜间飞行器。

KitronikSimply Servos 板(图 1)是一款功能强大的工具,它解决了在项目中使用多个伺服机构时如何提供充足的 3 V - 12 V 电源轨的问题。该板内置的 3 V 电源稳压功能和排针可用于快速添加 Raspberry PiPico 以操作伺服机构。然而,在实际应用中,可能会遇到一些新的问题。例如,当其他设备采用三线式引线,且需要 5 V 电源,还可能需要很大的电流时,该如何解决呢?一个典型的例子是 AdafruitNeoPixel LED 灯条

图 1:Kitronik Simply 伺服机构板。图片来源:Kitronik)

在制作夜间飞行器时,可以选择在遥控飞机上安装任何微控制器,并将 NeoPixel 灯条与电源连接。如果使用伺服引线,不仅可以快速完成连接,还能便于维修。实践证明,Simply 伺服机构板不仅适用于伺服机构,还能有效解决 LED 灯条的控制问题。选择该平台可以简化项目,并最大限度地减少对定制接线和大量连接器的需求。

为了实现夜间飞行器的功能,可以使用 Arduino IDE 对 Pico 进行编程,以便根据遥控发射器的输入运行 NeoPixels。具体功能设计如下:

在飞机机身两侧使用“发光”功能,随着油门的加大,追逐速度也会加快。随着夜幕降临,Neopixels 会因亮度过高而使眼睛不舒服,因此可以使用一个辅助通道来调暗 LED。当飞机在黑暗中着陆时,有着陆灯将非常方便。可以在油门达到或低于着陆速度时将底部 NeoPixels 变为亮白色。

以下是用于控制 NeoPixel 灯条的 Arduino IDE 代码:

//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

//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

if (LEDSpeed

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:

通过这个项目,成功地制作了一架夜间飞行器,并解决了 LED 灯条的控制难题。消除任何延迟功能都将有益于整个程序,通过操作油门的输入值或输入值映射,LED 可以更快地运行。可以根据需要,灵活地选择其余灯条的图案或颜色。请记住,飞行员需要依靠可识别的灯光图案来确定飞机的方位和航向。夜间飞行既有趣又有挑战性。在傍晚时分练习夜间飞行,仍能同时看到飞机和 LED 灯。

本文开头提供了有趣的视频链接,帮助读者详细了解飞行平台以及如何改装遥控飞机。希望这个项目的经验能给大家带来一些启发,也期待大家在探索科技的道路上,创造出更多有趣的作品。

来源:小帆科技天地

相关推荐