Luces de ambiente de la computadora - utilizando un Arduino con la tira de NeoPixel (1 / 1 paso)

Paso 1: El código

La real de carne y hueso de este proyecto es el código que hace posible las luces ambiente. Hace un tiempo atrás que encontré un código por Rajarshi Roy que tuvo valores rgb promedio de una captura de pantalla de la computadora (usando procesamiento) para ser utilizado con un rgb led. Entonces modifiqué el código para analizar la captura de pantalla en 10 secciones (192 x 1080 resolución). Una vez tuve el valor promedio de cada sección que pude luego a la salida los valores a arduino y luego a la franja de NeoPixel. Puesto que hay 30 led de trabajar con, asignado 3 led de representar cada sección de la pantalla.

Experimenté con más secciones, pero más de 10 demasiado uso de la cpu.

Poco después decidió implementar TouchOSC en el programa para control de iPhone. Ese código no está incluido en este instructable, sin embargo si te email me (cgmalantonio con mucho gusto te enviaremos el código. Este código permite un palanca de las luces de ambiente, así como deslizadores RGB y un teclado XY para generar colores más.

Bueno, vamos a empezar!

En primer lugar tenemos el código de Arduino, este es responsable de tomando los valores rgb del bosquejo de procesamiento y la salida de esos valores a la franja de NeoPixel.

--------------------------------------------------------------------------------------------
--------------------------------Arduino Sketch----------------------------------------
--------------------------------------------------------------------------------------------

AMBI: AmbientNeoPixel Sketch de Arduino
Creado por: Cory Malantonio

#include < Adafruit_NeoPixel.h >
#define PIN 6
Tira de Adafruit_NeoPixel = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);

int r [11]; matriz para cada valor de color
int g [11];
int b [11];

void setup() {}
Serial.Begin(9600);
Strip.Begin(); preparación para el neopixel
Strip.Show();
}

void loop() {}

Si (Serial.available() > = 31) {}
Si (Serial.read() == 0xff) {}
para (int x = 1; x < 11; x ++) {}
r [x] = Serial.read(); leer los valores de proceso
g [x] = Serial.read(); en el mismo orden nos enviaron
b [x] = Serial.read();

r [x] = limitar (r [x], 0, 255); sólo en caso cualquier resbalón de valores a
g [x] = limitar (g [x], 0, 255);
b [x] = limitar (b [x], 0, 255);

}
}
}

int Xval = 1; contar hasta 30
int Yval = 2; al cargar valores rgb
int Zval = 3; 3 led's en un momento

para (int z = 1 z < 11; z ++) {}

strip.setPixelColor (Xval, r [z], g [z], b[z]);
strip.setPixelColor (Yval, r [z], g [z], b[z]);
strip.setPixelColor (Zval, r [z], g [z], b[z]);

XVal = Xval + 3;
YVal = Yval + 3;
Zval Zval = 3;
}

Strip.Show(); salida a la neopixel
Delay(20); para la seguridad
}

--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------

Aquí está el bosquejo de procesamiento,
el ajuste real sólo que tendrás que hacer será la línea de
puerto = serie nueva (este, Serial.list() [#], 9600;

la # se refiere al número de dispositivo usb que está enchufado el arduino.
sugeriría probar 0 luego 1 luego 2, etc. hasta que encuentres uno que utiliza.

--------------------------------------------------------------------------------------------
--------------------------------Processing Sketch-----------------------------------
--------------------------------------------------------------------------------------------
Edit: tengo un gran email preguntando sobre cómo cambiar la resolución en el bosquejo del proceso.
Desde entonces, ha cambiado hacia fuera el esbozo de procesamiento con una más para editar (sin tener que bucear en el código).
--------------------------------------------------------------------------------------------

/ * Ambi2: AmbientNeoPixel proceso de bosquejo
** Creado por: Cory Malantonio
** ambiArray se basa en un diseño por Rajarshi Roy
*/

Import cc.arduino.*;
Import java.awt.Robot;
Import java.awt.AWTException;
Import java.awt.event.InputEvent;
java.awt.image.BufferedImage importación;
importación java.awt.Rectangle;
importación java.awt.Dimension;
Import processing.serial.*;

---Establecer resolución aquí---/ /
int resX = 1920;
resY int = 1080;
//-------------------------------//

int sectW = resX / 10;  Anchura de sección para las secciones de 10
int SectRx = sectW / 4; Resolución de la sección x
int SectRy = resY / 4;  Resolución de la sección y

Puerto serial;
Robot GrabRGBval;

void setup()
{
puerto = serie nueva (este, Serial.list() [2], 9600);
Serial.List() [#], # = número de dispositivo usb

tratar de
{
GrabRGBval = nueva Robot();
}
catch (AWTException e)
{
println ("Robot clase no admite el sistema!");
Exit();
}

tamaño (200, 200);
Background(0);
noFill();
}

void draw()
{
int pixel;

Float [] rA = new float [11];
Float [] gA = new float [11];
bA de Float [] = new float [11];
reso de int [] = new int [11];

para (int Ar = 1; Ar < 11; Ar++) {//load las resoluciones en la matriz
reso [Ar] = sectW * Ar;              192 es 1/10 de la resolución de 1920
}

Float r = 0;
flotador de g = 0;
Float b = 0;
reso [0] = 0;

BufferedImage imagen = GrabRGBval.createScreenCapture (nuevo rectángulo (nueva dimensión (resX, resY)));

para (int LED = 1; LED < 11; LED++) {}
int x = 0;
int y = 0;

incrementos de la matriz de reso en 10ths de la resolución de 1920, a partir de las 0
para (x = reso [LED-1]; x < reso [LED]; x = x + 4) {//"x + 4" es saltar píxeles
para (y = 0; y < resY; y = y + 4) {/ / para ayudar a correr más rápido
Pixel = screenshot.getRGB (x, y);
r = r+(int) (255 & (pixel >> 16));
g = g+(int) (255 & (pixel >> 8));
b = b+(int) (255 y (pixel));
}
}

r=r/(SectRx*SectRy); 48 es 1/4 cada 10 de la pantalla. Sobre nosotros estamos omitiendo píxeles
g=g/(SectRx*SectRy); nos quedamos con 1/4 de los píxeles.
b=b/(SectRx*SectRy); 270 es de 1/4 de la resolución 1080
rA [LED] = r;
gA [LED] = g;
bA [LED] = b;

}

Port.Write(0xFF); escribir el marcador, esto busca arduino
para (int Br = 1; Br < 11; Br++) {}
Port.Write((byte)(RA[br]));
Port.Write((byte)(GA[br]));
Port.Write((byte)(BA[br]));
}

Delay(10); retardo por seguridad

para (cono int = 1; cono < 11; cono ++) {}
Fill(0);
accidente cerebrovascular (rA [cono] gA [cono], bA[cOne]);
Rect ((cOne-1) * 20, 0, cono * 20, 200);
relleno (rA [cono] gA [cono], bA[cOne]);
Rect ((cOne-1) * 20, 0, cono * 20, 200);
}
}

Artículos Relacionados

Conceptos básicos de convertir su vehículo de control remoto en un sistema autónomo (abejón) utilizando un Arduino

Conceptos básicos de convertir su vehículo de control remoto en un sistema autónomo (abejón) utilizando un Arduino

comencé este proyecto con el objetivo de convertir barato mi RC helicóptero en algo de un UAV o al menos para algunos sensores para reducir las colisiones y otros "haps mal."Ahora por desgracia al principio del proyecto calcularon mal las capaci
Convertir un control de N64 en un Gamepad USB utilizando un Arduino Leonardo

Convertir un control de N64 en un Gamepad USB utilizando un Arduino Leonardo

La forma más fácil de convertir un control de N64 en un Gamepad USB es comprar un N64 controlador adaptador para alrededor £15. Sin embargo también puede hacer si usted tiene un Arduino Leonardo o cualquier otro tablero de Arduino con comunicación US
Utilizando un Arduino y Python para parcela/guardar datos

Utilizando un Arduino y Python para parcela/guardar datos

una manera rápida y fácil de ver (y guarde) datos extraídos utilizando un Arduino a tu ordenador.(Nota: no es el método más sólido, pero funciona bastante bien)Materiales:-Arduino (estoy usando un Uno)-Ordenador (tengo un Dell, pero no importa si est
Utilizando un Arduino para cargar un DS lite

Utilizando un Arduino para cargar un DS lite

Este instructable es para una ds lite utilizando un Arduino y dos cables de carga. Este también es mi primer instructivo, así que no puede ser lo mejor posible. :)Aviso: no soy responsable por cualquier daño hecho a tu ds, por favor, trabajo con cuid
Detector de campo electromagnético utilizando un Arduino

Detector de campo electromagnético utilizando un Arduino

Dispositivo electrónico nunca emite una cierta cantidad de campos electromagnéticos y podemos utilizar esta radiación para aprender algunas cosas sobre el circuito.En la actualidad instructable voy a mostrar cómo construir tu propio medidor de campo
ABCUR - regulador de uso de computadora basado en Arduino

ABCUR - regulador de uso de computadora basado en Arduino

¿Recuerda aquel momento cuando estabas tan absorto en el trabajo en su computadora que completamente perdido noción del tiempo?¿Recuerdo que tenía un dolor de cabeza y calambres en el momento en que se levantó?Recuerde preguntar a ti mismo en cuanto
Cómo capturar codigos de control remoto utilizando un Arduino y un IRreceiver

Cómo capturar codigos de control remoto utilizando un Arduino y un IRreceiver

En este instructable mostraré cómo escribir un pequeño código para capturar los códigos de control remoto en valores hexadecimales y decimales.Esto lo haremos usando al serial monitor que está integrado en el IDE de Arduino.Esto le dará a conocer una
Juego el francés puede poder utilizando un Arduino y un zumbador

Juego el francés puede poder utilizando un Arduino y un zumbador

Bonjour!Hacer que tu Arduino el francés puede poder mediante una señal acústica. No pinzas. No se dispara. Es tan directo que resulta tan escandaloso el puede puede implica.Este instructivo cubre información electrónica introductorio y se centra en e
Construir un Robot sencillo utilizando un Arduino y un L293 (Puente H)

Construir un Robot sencillo utilizando un Arduino y un L293 (Puente H)

Hola amigos, este es mi primer instructivo y estoy aquí para demostrar cómo construir un robot sencillo con un poco de Arduino programación no te preocupes, he adjuntado el archivo de código a continuación, se puede utilizar para la referencia.Aquell
Serial Servo Controller w/Arduino - Control hasta 12 Servos a la vez utilizando el Arduino y una conexión USB

Serial Servo Controller w/Arduino - Control hasta 12 Servos a la vez utilizando el Arduino y una conexión USB

voy a mostrarle cómo usar el Arduino para controlar hasta 12 servos a la vez con variación mínima.  Mediante una sencilla interfaz serial puede controlar la posición del servo hasta 12 canales.  Hasta 10 posiciones instantáneas se puede guardar y rep
Cómo hacer una cerradura electrónica utilizando un Arduino UNO

Cómo hacer una cerradura electrónica utilizando un Arduino UNO

Este es un proyecto bastante fácil. No necesitas soldar. Aparte de la Arduino UNO, todos los materiales son fáciles de encontrar y no son costosos. Este proyecto es una divertida manera para bloquear la puerta de su dormitorio y es totalmente persona
Temperatura ambiente en pantalla de matriz de puntos con Arduino y LM35

Temperatura ambiente en pantalla de matriz de puntos con Arduino y LM35

¡ Hola allí!Este es mi primer instructivo, y te voy a mostrar cómo puede interactuar un sensor de temperatura y una pantalla de matriz de puntos con arduino en tiempo real.He adjuntado el sketch de arduino, que es un poco grande a simple vista, pero
!! GRAN ORDENADOR BROMAS!! comandos de la computadora utilizando el Bloc de notas y el símbolo del sistema

!! GRAN ORDENADOR BROMAS!! comandos de la computadora utilizando el Bloc de notas y el símbolo del sistema

en este Instructable le mostraré cómo hacer unas cuantas travesuras en equipo de los pueblos utilizando comandos simples en Bloc de notas y cmd pronto.Hice este INSTRUCTABLE para participar en el concurso de velocidad de los tontos de abril así que p
Cómo hacer una luz de ambiente para su computadora

Cómo hacer una luz de ambiente para su computadora

este es un proyecto simple y fácil que le dará su computadora iluminación ambiental. Esto por supuesto requiere su cara ordenadores extraíble y ventilada permitiendo acceso y una manera de ver la luz.Paso 1: fuentes de Necesita algunas cosas para hac