ROS与Arduino-RGB流水灯

学习目标:

ROS与Arduino-RGB流水灯


ROS与Arduino-RGB流水灯:

说明:

通过三种基色 LED 分别点亮两个 LED 时,它可以发出黄、紫、青色(如红、蓝两 LED 点亮时发出紫色光);若红、绿、蓝三种 LED 同时点亮时,它会产生白光。如果有电路能使红、绿、蓝光 LED分别两两点亮、单独点亮及三基色 LED 同时点亮,则他就能发出七种不同颜色的光来,于是就出现了七彩 LED 灯的这种现象。


RGB器件简介:

变色灯是由红(R)、绿(G)、蓝(B)三基色 LED 组成的。双色 LED 是我们十分熟悉的。一般由红光 LED 及绿光 LED 组成。它可以单独发出红光或绿光。若红光及绿光同时亮点时,红绿两种光混合成橙黄色。RGB 分为共阴和共阳两种,长引脚是公共端,其他引脚如下:
在这里插入图片描述


工作原理:

RGB 代表红色,绿色和蓝色通道,是行业颜色标准。RGB 通过改变三个通道并叠加它们来显示各种新颜色,根据统计,它可以创建 16777216 种不同的颜色。如果你说显示的颜色与自然颜色不完全匹配,那么它几乎无法用肉眼区分。
红色,绿色和蓝色的三个颜色通道中的每一个具有 255 级亮度。 当三原色全部为 0 时,“LED 灯”最暗,即关闭。当三原色全部为 255 时,“LED 灯”是最亮的。当叠加三原色发出的光时,颜色将混合。但是,亮度等于所有亮度的总和,混合得越多,LED 就越亮。 该过程称为添加剂混合。
在这个实验中,我们也将使用 PWM,在 RGB LED 的三个引脚之间输入 0 到 255 之间的值,使其显示不同的颜色。

电路原理图:

在这里插入图片描述

程序代码:

/* 
 * Blinks an RGB on callback
 */
#include <ros.h>
#include <std_msgs/Empty.h>
#define RGB_RED 11
#define RGB_GREEN 10
#define RGB_BLUE 9
ros::NodeHandle  nh;
void messageCb( const std_msgs::Empty& toggle_msg)
{
 int i;
 for (i=255; i>0 ;i--)
 {
 analogWrite(RGB_RED, i);
 analogWrite(RGB_GREEN, 255);
 analogWrite(RGB_BLUE, 255);
 delay(4);
 }
 delay(500); //将RGB LED变为红色渐变
 for (i=255; i>0; i--)
 {
 analogWrite(RGB_RED, 255);
 analogWrite(RGB_GREEN, i);
 analogWrite(RGB_BLUE, 255);
 delay(4);
 }
 delay(500); //将RGB LED变为绿色渐变
 for (i=255; i>0; i--)
 {
 analogWrite(RGB_RED, 255);
 analogWrite(RGB_GREEN, 255);
 analogWrite(RGB_BLUE, i);
 delay(4);
 }
 delay(500); //将RGB LED变为蓝色渐变
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
void setup()
{ 
  // 初始化I/O口
  pinMode(RGB_RED,OUTPUT);
  pinMode(RGB_GREEN,OUTPUT);
  pinMode(RGB_BLUE,OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}
void loop()
{  
  nh.spinOnce();
  delay(1);
}

运行代码:
方式一:

  1. 运行roscore
$ roscore
  1. 新终端运行,/dev/ttyUSB0为Arduino设备
rosrun rosserial_python serial_node.py /dev/ttyUSB0

rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0
  1. 发布主题,点亮Arduino板上的RGB灯
rostopic pub toggle_led std_msgs/Empty --once

方式二:

  1. 运行roscore
$ roscore
  1. 新终端运行,/dev/ttyUSB0为Arduino设备
rosrun rosserial_python serial_node.py

3.使用QT工具箱设置RGB亮灯频率:
终端输入:

rqt

设置QT工具箱时钟频率:使用rqt向话题发布消息(前面已经介绍)

实验现象:

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值