安卓机器人 发表于 2018-4-3 12:16:09

魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]

魔幻玫瑰{:5_129:}



了解玫瑰,我们才懂欣赏它的美:原产地中国,多达一百多种有红色、粉色、白色、黑色、黄色,紫色、浅绿色,橙色,蓝色,橘红色,彩虹色等名称有“黑美人”“碧海云天”“紫影”“红衣主教”“海洋之歌”“蓝色妖姬”“金香玉”“冷美人”......
各种各样的准备小礼物的办法,其中一种有意思的是DIY!因为“买狠简单,造更有趣”造 起 来...为了做成“永不凋谢的玫瑰”,3D打印小白的我开始搜索打印资料rose.stlrose-closed.stlROSE模型文件链接【包含花柄支架等】

打印过程中,碰巧有小伙伴来做客。在等待打印中,聆听着“咝咝”“嗡嗡”探着小脑袋仔细瞅瞅这儿,还想摸摸这儿摸摸那儿不时地问这问那的...
“永不凋谢”已经完成,那么怎么做到魔幻色彩呢?变才是根本!1600万种颜色变换、颜色渐变,非RGB_LED莫属魔法手势变换,也做得简单、灵敏准备清单:
1 Monome专用RGB共阳极LED*4
2 红外手势传感器(带RGB/环境光检测)*1
3 DFRduino UNO R3 *1
4 IO 传感器扩展板 V7.1*1
5 3D打印机、杜邦线,胶带等 X

【注】RGB_LED实测应该是共阴极吧,接线如下图所示

简单的手势,快速的反应http://v.youku.com/v_show/id_XMzUwOTg2MzYzMg==.html
UNO 可提供两朵花的颜色渐变【D9D10D11,D3D5D6】http://v.youku.com/v_show/id_XMzUwOTc4Mjg4MA==.html
/****************************************************************
* 20180330Bir.
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor

Tests the gesture sensing abilities of the APDS-9960. Configures
APDS-9960 over I2C and waits for gesture events. Calculates the
direction of the swipe (up, down, left, right) and displays it
on a serial console.

To perform a NEAR gesture, hold your hand
far above the sensor and move it close to the sensor (within 2
inches). Hold your hand there for at least 1 second and move it
away.

To perform a FAR gesture, hold your hand within 2 inches of the
sensor for at least 1 second and then move it above (out of
range) of the sensor.

Hardware Connections:

Arduino PinAPDS-9960 BoardFunction

3.3-5V         VCC            Power
GND          GND            Ground
A4         SDA            I2C Data
A5         SCL            I2C Clock
2            INT            Interrupt


*******************Modify the description**********************
3.3V-5V   VCC       Power
Void loop () to increase serial port statement causes the wave, will not stop
Library function will be waved in recognition of the changed
***************************
eg."myledRoseW" RGB_LED Connection:
   R-D9
   G-D10
   B-D11
   GND-Gnd
***************************/
#include <RGBLED.h>
#include <Wire.h>
#include <SparkFun_APDS9960.h>

// Pins
#define APDS9960_INT    2 // Needs to be an interrupt pin

// Constants

// Global Variables
RGBLED myledRoseW = RGBLED(9,10,11); //White big flower 9:Red10:Green   11:Blue
RGBLED myledRoseY = RGBLED(7,8,12); // Yellow big flower
RGBLED myledRoseWS = RGBLED(3,5,6); // White small
RGBLED myledRoseYS = RGBLED(A0,A1,A2); // Yellow small
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {

// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));

// Initialize interrupt service routine
attachInterrupt(0, interruptRoutine, FALLING);

// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
} else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
}

// Start running the APDS-9960 gesture sensor engine
if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
} else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
////////////////////////////////////////////////
void loop() {
if( isr_flag == 1 ) {
    handleGesture();
      if(digitalRead(APDS9960_INT) == 0){
      apds.init();
      apds.enableGestureSensor(true);
    }
    isr_flag = 0;
}
}
////////////////////////////////////////////////
void interruptRoutine() {
isr_flag = 1;
}
////////////////////////////////////////////////
void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
      Serial.println("Red");
      myledRoseW.colorRGB(255,0,0);
      myledRoseY.colorRGB(255,0,0);
      myledRoseWS.colorRGB(255,0,0);
      myledRoseYS.colorRGB(255,0,0);
      break;
      case DIR_DOWN:
      Serial.println("OFF");
      myledRoseW.colorRGB(0,0,0);
      myledRoseY.colorRGB(0,0,0);
      myledRoseWS.colorRGB(0,0,0);
      myledRoseYS.colorRGB(0,0,0);
      break;
      case DIR_LEFT:
      Serial.println("Green");
      myledRoseW.colorRGB(0,255,0);
      myledRoseY.colorRGB(0,255,0);
      myledRoseWS.colorRGB(0,255,0);
      myledRoseYS.colorRGB(0,255,0);
      break;
      case DIR_RIGHT:
      Serial.println("Blue");
      myledRoseW.colorRGB(0,0,255);
      myledRoseY.colorRGB(0,0,255);
      myledRoseWS.colorRGB(0,0,255);
      myledRoseYS.colorRGB(0,0,255);
      break;
      case DIR_NEAR:
      Serial.println("Breath");
      breathLED();
      break;
      case DIR_FAR:
      Serial.println("VARITY");
      colorLedHSV();
      break;
      default:
      Serial.println("NONE");// WHITE LIGHT
      myledRoseW.colorRGB(255,255,255);
      myledRoseY.colorRGB(255,255,255);
      myledRoseWS.colorRGB(255,255,255);
      myledRoseYS.colorRGB(255,255,255);
      break;
    }
}
}
////////////////////////////////////////////////
void colorLedHSV(){
for(int j = 0;j < 360; j++){
myledRoseW.colorHSV(j,255,255); //H:0-360   S:0-255V:0-255
myledRoseY.colorHSV(j,255,255);
myledRoseWS.colorHSV(j,255,255);
myledRoseYS.colorHSV(j,255,255);
delay(20);
}
}
////////////////////////////////////////////////
void breathLED(){
for(int i = random(0,10);i <= 255;i++){
    myledRoseW.colorRGB(i,i,i);
    myledRoseY.colorRGB(i,i,i);
    myledRoseWS.colorRGB(i,i,i);
    myledRoseYS.colorRGB(i,i,i);
    delay(20);
}
for(int i = 255;i >= random(0,10);i--){
    myledRoseW.colorRGB(i,i,i);
    myledRoseY.colorRGB(i,i,i);
    myledRoseWS.colorRGB(i,i,i);
    myledRoseYS.colorRGB(i,i,i);
    delay(20);
} // WHITE
delay(200);
for(int i = random(0,10);i <= 255;i++){
    myledRoseW.colorRGB(i,0,0);
    myledRoseY.colorRGB(i,0,0);
    myledRoseWS.colorRGB(i,0,0);
    myledRoseYS.colorRGB(i,0,0);
    delay(20);
}
for(int i = 255;i >= random(0,10);i--){
    myledRoseW.colorRGB(i,0,0);
    myledRoseY.colorRGB(i,0,0);
    myledRoseWS.colorRGB(i,0,0);
    myledRoseYS.colorRGB(i,0,0);
    delay(20);
} // RED
delay(200);
for(int i = random(0,10);i <= 255;i++){
    myledRoseW.colorRGB(0,i,0);
    myledRoseY.colorRGB(0,i,0);
    myledRoseWS.colorRGB(0,i,0);
    myledRoseYS.colorRGB(0,i,0);
    delay(20);
}
for(int i = 255;i >= random(0,10);i--){
    myledRoseW.colorRGB(0,i,0);
    myledRoseY.colorRGB(0,i,0);
    myledRoseWS.colorRGB(0,i,0);
    myledRoseYS.colorRGB(0,i,0);
    delay(20);
} // GREEN
delay(200);
for(int i = random(0,10);i <= 255;i++){
    myledRoseW.colorRGB(0,0,i);
    myledRoseY.colorRGB(0,0,i);
    myledRoseWS.colorRGB(0,0,i);
    myledRoseYS.colorRGB(0,0,i);
    delay(20);
}
for(int i = 255;i >= random(0,10);i--){
    myledRoseW.colorRGB(0,0,i);
    myledRoseY.colorRGB(0,0,i);
    myledRoseWS.colorRGB(0,0,i);
    myledRoseYS.colorRGB(0,0,i);
    delay(20);
} // BLUE
}
////////////////////////////////////////////////



页: [1]
查看完整版本: 魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]