Paso 3: programación
La forma en fue sobre la programación de este dispositivo fue un buen viaje. Quería que el led s reaccionan en el sensor de ultrasonidos y cambian de color según la distancia regresó el sensor de ultrasonidos. Cuando la distancia entre objeto y sensor es baja, por lo que el objeto está cercano, el color es rojo. Cuanto más lejos el objeto va, el verde el color consigue. Evrithing entre es una mezcla de esos colores y escala hasta a medida que aumenta la distancia. Esto resulta en un espectro de colores entre rojo y verde.
Carga el código para el arduino hacer que usted no tiene acceso al puerto usb una vez que el arduino se inserta en la carcasa.
/*
Ciclo de la RGB usando un sensor de ultrasonidos.
Autor: Bryan Vermaat - 2016
Ver para un uso de este código.
Este código está públicamente disponible y puede ser creado/modificado *
Los tres LEDs de color primario, conducidos como analgue salidas (realmente PWM, pero / / lo suficientemente cerca para nuestros ojos analógicas).
const int ledPinRed = 11; LED rojo conectado al análogo a perno const int ledPinGrn = 10; LED verde conectados al análogo a perno const int ledPinBlu = 9; LED azul conectado al análogo de la clavija de salida
const trigPin int = 13; const echoPin int = 12; const int modeSwitchPin = 12;
El potenciómetro de tono va a un pin analógico, teniendo el pin de / / 0V a 5V.
const int potPinHue = 0;
Constantes que definen los rangos.
const int hueRedLow = 0; const int hueRedHigh = 255; const int hueBlue = 170;
El rango mínimo y máximo para el sensor de ultrasonidos.
const int rangeMin = 0; const int rangeMax = 200;
const int brightMin = 0; const int brightMax = 255;
Variables de trabajo.
El valor del potenciómetro se asigna a la gama de 0 a 360 (grados). int valueHue;
El matiz es el intervalo de 0 (rojo) a 170 (azul) en el arco iris / modo o 255 (rojo) en modo de rueda de colores. Las gamas de brillo de 0 (oscuro) a 255 (brillo máximo)
int color, brillo;
La saturación se fija en 255 (completo) para quitar guían a través de diferentes / / colores. Podría relacionarse con el otro potenciómetro si una demostración de hue / / es deseada.
const int saturación = 255;
El brightess de cada LED (0 a 255).
unsigned int r, g, b;
void setup() {/ / todavía necesita establecer una velocidad en baudios, incluso para USB. Serial.Begin(9600);
Sets pasadores LED a la salida. pinMode (ledPinRed, salida); pinMode (ledPinGrn, salida); pinMode (ledPinBlu, salida);
Ajuste los pernos del sensor ultrasónico. pinMode (trigPin, salida); pinMode (echoPin, entrada); }
void loop() {/ / tono el potenciómetro valor se asigna a grados - 0 a 360 para conveniencia. valueHue = map(MeasureDistance(), 0, 1023, 0, rangeMax);
Modo de rueda de color (rojo con rojo, envuelto todo en un ciclo).
Hue = mapa (valueHue, rangeMin, rangeMax, hueRedLow, hueRedHigh);
El brillo es fijo en el total de la rueda de color. Esto podría ser / / vinculado a otro poteniometer si es un concepto que se desea / / demostrar. brillo = 255;
Hacer la conversión. HSBToRGB (tono, saturación, brillo y r, g & b);
analogWrite (ledPinRed, r); analogWrite (ledPinGrn, g); analogWrite (ledPinBlu, b);
Serial.Print ("brillante ="); Serial.Print(Brightness); Serial.Print ("color ="); Serial.Print(Hue); Serial.Print ("rojo ="); Serial.Print(r); Serial.Print ("verde ="); Serial.Print(g); Serial.Print ("azul ="); Serial.Print(b); Serial.println(""); Delay(50); }
Esta función tomada desde aquí: / / http://eduardofv.com/2011/01/15/arduino-rgb-led-h...
void HSBToRGB (unsigned unsigned int inSaturation, int inHue, unsigned int, unsigned int inBrightness * o, unsigned int * oG, unsigned int * oB) {si (inSaturation == 0) {/ / acromático (gris) * o = * oG = * oB = inBrightness;} más {unsigned int scaledHue = (inHue * 6); unsigned int sector = scaledHue >> 8; / / sector de 0 a 5 en el color de la rueda unsigned int offsetInSector = scaledHue - (sector << 8); / / posición dentro del sector de unsigned int p = (inBrightness * (255 - inSaturation)) >> 8; unsigned int q = (inBrightness * (255 - ((inSaturation * offsetInSector) >> 8))) >> 8; unsigned int t = (inBrightness * (255 - ((inSaturation * (255 - offsetInSector)) >> 8))) >> 8;
interruptor (sector) {caso 0: * o = inBrightness; * oG = t; * oB = p; break; caso 1: * o = q; * oG = inBrightness; * oB = p; break; caso 2: * = p; * oG = inBrightness; * oB = t; break; case 3: * = p; * oG = q; * oB = inBrightness; break; caso 4: * o = t; * oG = p; * oB = inBrightness; break; default: / / caso 5: * o = inBrightness; * oG = p; * oB = q; break;}} }
Función para medir la distancia con un sensor de ultrasonidos HC-SR04 MeasureDistance() largo {larga duración, distancia, digitalWrite (trigPin, bajo) delayMicroseconds(2); digitalWrite (trigPin, alto); delayMicroseconds(10); digitalWrite (trigPin, baja); duración = pulseIn (echoPin, HIGH); distancia = (duración/2) / 29,1; si (distancia > = rangeMax || distancia < = rangeMin) {Serial.println ("fuera de rango ajustado. vuelve Max."); volver rangeMax; } else {Serial.print(distance); Serial.println ("cm"); volver a distancia; } }