0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用伺服机构开发板控制 NeoPixel LED

海阔天空的专栏 来源: Don Johanneck 作者: Don Johanneck 2025-01-25 15:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者: Don Johanneck

[Kitronik][Simply Servos]板(图 1)解决了在项目中使用多个伺服机构时如何提供充足的 3 V - 12 V 电源轨的问题。内置的 3 V 电源稳压功能和排针可用于快速添加 [Raspberry Pi][Pico] 以操作伺服机构。但是,如果其他的设备采用三线式引线,且需要 5 V 电源,而且可能需要很大的电流时,该怎么办呢?比如 [Adafruit]的 [NeoPixel LED 灯条]!

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

最近,我有个想法,用我的遥控飞机制作一架夜间飞行器。我可以在其中安装任何微控制器,然后想办法把 NeoPixel 灯条与电源连接,但是,如果使用[伺服引线]能快速完成而且易于维修,将是什么样的结果呢?Simply 伺服机构板不仅仅适用于伺服机构。选择该平台简化了项目,并最大限度地减少了对定制接线和大量连接器的需求。

本文结尾给出了相关的博客和有趣的视频链接,帮助您详细了解飞行平台以及如何改装遥控飞机。我们使用 [Arduino IDE] 对 Pico 进行编程,以便根据遥控发射器的输入运行 NeoPixels。我计划在飞机机身两侧使用“发光”功能,随着油门的加大,追逐速度也会加快。随着夜幕降临,Neopixels 会因亮度过高而使眼睛不舒服。一个辅助通道可用于调暗 LED。最后,当飞机在黑暗中着陆时,有着陆灯将非常方便。与其增加另一个通道,不如在油门达到或低于着陆速度时将底部 NeoPixels 变为亮白色。我使用的是基本编程,但仍有改进空间或者仍能够探索其他功能。

复制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 代码。

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

审核编辑 黄宇# NeoPixel

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    8250

    浏览量

    162428
  • led
    led
    +关注

    关注

    243

    文章

    24438

    浏览量

    687490
  • 开发板
    +关注

    关注

    25

    文章

    6126

    浏览量

    113407
  • 伺服机构
    +关注

    关注

    0

    文章

    7

    浏览量

    7528
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于DSP的数字伺服机构控制系统设计

    为满足对直流无刷伺服机构的数字化控制,介绍了一种数字无刷直流电机伺服控制系统,以TMS320F2812型DSP为控制核心,包括中央处理电路,
    发表于 11-07 14:40

    导弹伺服机构与CAN总线的连接和通信

    较好的途径。电液伺服机构是导弹控制系统中重要的组成部分。它的性能往往严重影响到导弹的控制精度,甚至决定飞行的成败。在总线式导弹控制系统中,导弹电液
    发表于 06-11 05:00

    Linklt ONE开发板如何利用Adafruit_NeoPixel库驱动WS2812彩灯?

    Linklt ONE开发板,下载Adafruit_NeoPixel库后,按照示例上传固件到开发板后,发现编译能通过也能上传成功,但是挂上彩灯就是没有反应,用Arduino UNO开发板
    发表于 04-12 11:43

    基于VXI总线的导弹伺服机构单元测试基本型系统

    本文以导弹伺服机构单元测试为应用背景,从硬件设计和软件两方面详细介绍了基于VXI总线的导弹伺服机构单元测试基本型系统的设计,特别在通用信号转接箱设计上进行了有益尝
    发表于 07-15 10:24 29次下载

    基于PC/104伺服机构自动化测试系统研究

    以提高导弹伺服机构测试的效率和精度为目的,提出了基于PC/104 总线组建导弹伺服机构自动化测试系统的方案,阐述了该自动化测试系统的功能、硬件构成、软件设计和工作原理。
    发表于 09-09 16:30 21次下载

    基于PC104伺服机构自动化测试系统研究

    以提高导弹伺服机构测试的效率和精度为目的,提出了基于PC/104 总线组建导弹伺服机构自动化测试系统的方案,阐述了该自动化测试系统的功能、硬件构成、软件设计和工作原理。
    发表于 12-22 10:50 29次下载

    仪器伺服机构循环电路图

    仪器伺服机构循环电路图
    发表于 06-20 11:17 489次阅读
    仪器<b class='flag-5'>伺服机构</b>循环电路图

    伺服机构自动搜索及控制电路图

    伺服机构自动搜索及控制电路图
    发表于 07-02 13:12 643次阅读
    <b class='flag-5'>伺服机构</b>自动搜索及<b class='flag-5'>控制</b>电路图

    关于伺服机构的动态测试系统

    为了验证伺服机构设计以及测试系统的正确性,提出并研制了伺服机构模拟器以及相应的动态测试系统;模拟器采用数字和模拟电路,能够模拟各种型号伺服机构工作特性;动态测试系
    发表于 04-04 14:38 43次下载

    电液伺服机构与CAN总线接口设计

    导弹电液伺服机构将作为总线上的一个节点挂接在总线上,因此必须设计一个将总线与电液伺服机构连接起来的接口。
    发表于 08-16 11:12 5777次阅读
    电液<b class='flag-5'>伺服机构</b>与CAN总线接口设计

    基于DSP的数字伺服机构控制系统设计

    为满足对直流无刷伺服机构的数字化控制,介绍了一种数字无刷直流电机伺服控制系统,以TMS320F2812型DSP为控制核心,包括中央处理电路,
    发表于 06-13 12:27 199次下载
    基于DSP的数字<b class='flag-5'>伺服机构</b><b class='flag-5'>控制</b>系统设计

    基于LS-SVM的机载天线伺服机构自适应控制

    针对机载天线伺服机构运行时所受外力是快时变、变化范围大、且自身摩擦等非线性特性不能忽略的问题,提出一种基于最小二乘支持向量机(LS-SVM)的自适应控制设计方法。此方法将
    发表于 10-24 10:48 32次下载

    电动伺服机构可靠性验证试验

    针对某型火箭第三级发动机尾喷管姿态控制的电动伺服机构可靠性验证试验方法开展研究,采用Weibull分布模型确定了电动伺服系统的可靠性验证试验的试验时间,同时在对电动伺服系统任务阶段的环
    发表于 03-27 10:37 1次下载
    电动<b class='flag-5'>伺服机构</b>可靠性验证试验

    导弹电液伺服机构原理仿真装置的软硬件设计与实现

    电液伺服机构作为导弹控制系统的执行机构,广泛用于各种型号的弹道式导弹上,它的响应速度和精度直接影响导弹的命中精度。对于电液伺服机构这样一个结构复杂、要求精密的武器装备,需要电路、液路和
    发表于 11-18 09:59 2157次阅读
    导弹电液<b class='flag-5'>伺服机构</b>原理仿真装置的软硬件设计与实现

    基于DSP的数字伺服机构控制系统设计

    电子发烧友网站提供《基于DSP的数字伺服机构控制系统设计.pdf》资料免费下载
    发表于 10-24 09:58 0次下载
    基于DSP的数字<b class='flag-5'>伺服机构</b><b class='flag-5'>控制</b>系统设计