37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百零一:12位 WS2812 5050 RGB LED 智能全彩RGB环开发板大环
WS2812B 是一种将控制电路和rgb芯片集成在一起的智能控制led光源。5050组件的包装。内部包括智能数字端口数据锁存和信号整形放大驱动电路。还包括精密内部振荡器和12V电压可编程恒流控制部分,有效保证了像素点光色高度一致。数据传输协议采用单NZR通信方式。像素上电复位后,DIN端口接收数据来自控制器,第一个像素收集初始24位数据,然后发送到内部数据锁存器,其他数据由内部信号整形放大电路通过DO端口发送到下一个级联像素进行整形。后对于每个像素的传输,信号要减少24位。像素采用自动整形传输技术,使像素级联数不受信号传输的限制,只取决于信号传输的速度。复位时间>280μs,中断时不会造成误复位,支持较低频率,价格低廉单片机。刷新频率更新到2kHz,画面频率低,高清摄像机无闪烁,提高出色的展示效果。LED具有驱动电压低、环保节能、亮度高、散射角大、一致性好、功率低、寿命长等优点。集成在led上的控制芯片越来越多电路简单,体积小,安装方便。 主要特点 控制电路和LED共用唯一的电源。 控制电路和RGB芯片集成在5050个组件的封装中,形成完整的可寻址像素。内置信号整形电路,对下一个驱动器进行波形整形后,确保波形不失真累积。 内置电气复位电路和失电复位电路。 三基色各像素可实现256亮度显示,完成16777216色全彩色显示,扫描频率为2kHz。 单线路级联端口传输信号。 任意两点距离不超过3米的传输信号,无任何增加电路。 刷新率为30fps时,层叠数不小于1024像素。以800Kbps的速度发送数据。 灯光颜色一致性高,性价比高。
应用 全彩模块,全彩软灯带。 LED装饰照明,室内外LED视频不规则屏幕。
名称:12位WS2812智能全彩圆盘LED模块 整体尺寸:直径7cm 芯片:WS2812B(内置于LED) LED:5050封装RGB全彩高亮 电压:5V 端口:数字 平台:单片机(Arduino 、51单片机等) 控制方式:内置控制芯片,只需一个IO口即可控制 (1)Arduino参考开源代码
#include <Adafruit_NeoPixel.h>
#define PIN 7
#define MAX_LED 12
#define ADD true
#define SUB false
int val = 0;
boolean stat = ADD;
Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );
void setup(){
strip.begin();
strip.show();
}
void loop(){
uint8_t i,a=0;
uint32_t color = strip.Color(255, 100, 0);
while(a<17) {
for(i=0;i<16;i++)
{
if(i==a) strip.setPixelColor(i, color);
else strip.setPixelColor(i, 0);
}
strip.show();
delay(20);
a++;
}
}
实验场景图
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 7
Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
strip.begin();
strip.show();
}
void loop() {
rainbow(20);
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256*5; j++) {
for(i=0; i< strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}
void theaterChase(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) {
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, c);
}
strip.show();
delay(wait);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0);
}
}
}
}
void theaterChaseRainbow(uint8_t wait) {
for (int j=0; j < 256; j++) {
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, Wheel( (i+j) % 255));
}
strip.show();
delay(wait);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0);
}
}
}
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
实验项目三
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
leds[0] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
leds[1] = CRGB(0, 255, 0);
FastLED.show();
delay(500);
leds[2] = CRGB(0, 0, 255);
FastLED.show();
delay(500);
leds[3] = CRGB(150, 0, 255);
FastLED.show();
delay(500);
leds[4] = CRGB(255, 200, 20);
FastLED.show();
delay(500);
leds[5] = CRGB(85, 60, 180);
FastLED.show();
delay(500);
leds[6] = CRGB(150, 255, 20);
FastLED.show();
delay(500);
leds[7] = CRGB(0, 50, 255);
FastLED.show();
delay(500);
leds[8] = CRGB(255, 255, 0);
FastLED.show();
delay(500);
leds[9] = CRGB(20, 25, 255);
FastLED.show();
delay(500);
leds[10] = CRGB(255, 0, 20);
FastLED.show();
delay(500);
leds[11] = CRGB(50, 0, 55);
FastLED.show();
delay(500);
}
实验项目四
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
for (int i = 0; i <= 11; i++) {
leds = CRGB ( 0, 0, 255);
FastLED.show();
delay(60);
}
for (int i = 11; i >= 0; i--) {
leds = CRGB ( 255, 0, 0);
FastLED.show();
delay(40);
}
}
实验项目五
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
leds[0] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
leds[1] = CRGB(0, 255, 0);
FastLED.show();
delay(500);
leds[2] = CRGB(0, 0, 255);
FastLED.show();
delay(500);
leds[5] = CRGB(150, 0, 255);
FastLED.show();
delay(500);
leds[9] = CRGB(255, 200, 20);
FastLED.show();
delay(500);
leds[3] = CRGB(85, 60, 180);
FastLED.show();
delay(500);
leds[7] = CRGB(50, 255, 20);
FastLED.show();
delay(500);
}
实验开源图形编程(Mind+、编玩边学) 实验开源仿真编程(Linkboy V4.63) 实验项目八 Arduino参考开源代码
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#include <FastLED.h>
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
const int ledPin = 6;
int sensorPin = 7;
boolean val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(sensorPin, INPUT);
Serial.begin (9600);
FastLED.addLeds<WS2812B, ledPin, RGB>(leds, NUM_LEDS);
}
void loop () {
val = digitalRead(sensorPin);
Serial.println (val);
if (val == HIGH) {
leds[0] = CRGB(180, 0, 0);
FastLED.show();
delay(3);
leds[1] = CRGB(0, 180, 0);
FastLED.show();
delay(3);
leds[2] = CRGB(0, 0, 240);
FastLED.show();
delay(3);
leds[3] = CRGB(150, 0, 240);
FastLED.show();
delay(5);
leds[4] = CRGB(180, 200, 20);
FastLED.show();
delay(5);
leds[5] = CRGB(85, 60, 180);
FastLED.show();
delay(10);
leds[6] = CRGB(50, 220, 20);
FastLED.show();
delay(5);
FastLED.show();
leds[7] = CRGB(0, 0, 250);
FastLED.show();
delay(5);
FastLED.show();
leds[8] = CRGB(240, 0, 0);
FastLED.show();
delay(10);
leds[9] = CRGB(0, 250, 0);
FastLED.show();
delay(10);
leds[10] = CRGB(0, 0, 255);
FastLED.show();
delay(10);
leds[11] = CRGB(220, 200, 20);
FastLED.show();
delay(10);
}
else {
leds[12] = CRGB(150, 0, 255);
FastLED.show();
}
FastLED.clear();
}
实验场景图 实验场景图 动态图 https://www.arduino.cn/data/attachment/forum/202110/08/162957oq9ih9nzzrh979s9.gif
实验视频剪辑
https://v.youku.com/v_show/id_XNTgxMTczNDcwOA==.html?firsttime=0
|