Durante el 2013 Bay Area Maker Faire , el distribuidor Electric Imp repartieron una asombrosa cantidad de caramelos M & Ms con el prototipo «SnackBot» .Cientos de asistentes les encantó, así que decidieron compartir la forma en que lo construyeron.El SnackBot se basa en el dispositivo Electric Imp del que ya se ha hablado en este blog , que como recodareis una plataforma de hardware, software y basada en la nube que hace que sea muy fácil de conectar casi cualquier cosa en Internet.
Este proyecto implica un poco de soldadura (y desoldar), y debe usted tomar cerca de 2-3 horas para completarlo
Para completar este proyecto, usted va a necesitar lo siguiente:
1 x Brookstone SnackManTM
1 x Electric Imp tarjeta
1 x April Breakout Board
1 x NFET
1 x Diodo
1 x 10KΩ resistencia
Usted también va a necesitar algunas herramientas:
Philips Destornillador
Soldador
Soldadura
Cinta de espuma (u otro adhesivo)
Un iPhone o teléfono Android
Lo primero que tenemos que hacer es desmontar un SnackMan tradicional .
Se va a cambiar (casi) toda la electrónica, y sustituirlos por una placa nueva y un FET.Desmontar el SnackMan:
Retire la cúpula de plástico transparente presionando el botón en la parte frontal de la SnackMan.
Retire la pieza superior de plástico para exponer la cubierta de engranajes y tapas de rosca.
Quite la cubierta de engranaje, el engranaje, tapones de rosca, y tornillos.
Presione sobre el botón (el mismo botón de # 1) y tire hacia arriba para retirar la cubierta de plástico.
Una vez retirada la cubierta de plástico, tenemos acceso a la electrónica.
Quite los tornillos que sujetan las placas de circuito a la base.
Suelte todos los cables de la placa principal.
El SnackMan tiene una esfera que se usa para encender la máquinay tambien para la desconexión, así como controlar el tamaño de la porción. Vamos a modificarlo para actuar como un interruptor de alimentación para el Electric imp.Cuando el interruptor está en el estado desactivado, el SnackBot estará apagado. En cualquier otro estado, el SnackBot estará encendido. Nosotros no tenemos que preocuparnos acerca de cómo controlar el tamaño de porción, ya que será gestionado por nuestra página web.
Esto es lo que tenemos que hacer:
Cortar el conector del extremo de los cables.
Tire de los cables separados (esto hará que los próximos pasos más fácil).
Desoldar todos los cables excepto el tercero de la parte superior (que debe ser de color negro).
Suelde el cable rojo de la fuente de alimentación de la SnackMan al segundo desde el orificio superior.
El cable rojo de la fuente de alimentación, y el cable negro que dejamos debería ser uno junto al otro.
Ahora debería tener 5 piezas:
La cubierta superior del motor +
El codificador rotatorio (tablero de dial circular +) de la parte delantera de la SnackMan
La parte inferior de la SnackMan (con el cable de alimentación que viene desde la base)
La placa principal
La placa IR
Usted no tendrá que utilizar la placa principal ni la placa IR , por lo que se puede descartar (o guardarlo para futuros proyectos si se quiere).
Lo siguiente que tenemos que hacer es conseguir que el motor se conecte a nuestra placa :
Dobla los cables del NFET para los pasadores fuera alinean con GND y Pin9
Soldar Pin S (origen) a GND (a la imp).
Soldar Pin G (puerta) para Pin9 (en la imp).
Soldar el (negro) cable negativo desde el motor al pin D (fuga).
Conexiones de la Electric Imp :
Suelde la resistencia 10k entre Pin9 y GND.
Conexión de la Electric imp a la alimentación:
Suelde el cable negro de la fuente de alimentación (base) del SnackMan al pin GND del diablillo.
Suelde el cable extra que sale de la codificación giratorio para pin VIN del imp.
Soldar el (rojo) positivo desde el motor al pin VIN del imp.
Añadir el diodo:
Suelde el diodo entre los terminales positivo y negativo del motor de la SnackMan(el l lado banda / rayas del diodo debe ser soldado a (rojo) del motor positivo).
Antes de cerrar el SnackBot recién imp habilitados, vamos a parpadear para arriba y ejecutar algún código de prueba para asegurarse de que todo funciona correctamente.Obtenga su imp online:
Añadir baterías (o enchufe el cable de alimentación).
Gire el codificador giratorio a cualquier posición que no sea la posición «Off».
Inserte la tarjeta Eelctric Imp en en la ranura para tarjeta SD de la placa adaptadora.
Un LED en el interior del imp debe comenzar a parpadear.
Siga los pasos de BlinkUp para obtener su línea.
Si su imp no se enciende, es probable que tenga problema de cableado.Vayan y vuelva a comprobar que sueldan todas las cosas que había que soldar.
En este punto, el imp debe parpadear verde, para indicar que está en línea y hablar con nuestro servidor.
Pruebe el hardware:
Acceda a Electric Imp basada en web IDE .
Si el IDE no se parece a la imagen, es necesario optar por la Beta IDE .
Copia y pega el código de prueba del repositorio SnackBot en la ventana de dispositivos en el IDE.
Hit Run.
El motor debería haber encendido durante 10 segundos, y luego vuelve a apagar.Si no fuera así, usted tiene un problema y usted debe asegurarse de que el NFET está orientado en la dirección correcta.
Cuando navegas URL Agent del dispositivo, se le presentará con una página web. Si hace clic en uno de los botones, se debe encender el motor y distribuir el caramelo.
Ahora que todo está conectado y probado, vamos a añadir los toques finales.Asegure Electrónica del SnackBot:
Si lo desea, retire la pieza roja de plástico. Esto hará más fácil BlinkUp en el futuro.
Vuelva a colocar el interruptor de codificación / potencia rotativa.
Añadir cinta de espuma a la base del conjunto SnackBot para sostener el tablero del desbloqueo de abril en su lugar.
Presione firmemente el tablero del desbloqueo de abril (con la imp) en la cinta de espuma que acaba de dejar.
Vuelva a montar el resto de la SnackBot:
Añadir la cubierta de plástico que se coloca sobre la electrónica.
En este post vamos a tratar de un original sensor de color controlado con Netduino,Netduino Plus o Netduino Go.
Gracias al sensor de Color de Sparkfun ADJD-S371-q999 y un Netduino en este proyectos se imprimirá el nombre de color HTML (es decir DarkRed) de un objeto que se ve( de hecho esta aplicacion podria ser particularme interesante para las personas daltónicas , pues basandose en este sensor, podrian obtener un rango de mejora)
He aquí un breve video para demostrar el fuincionamiento del sensor :
El ADJD-S371 es un 4 canal de sensor RGB + Claro que utiliza el protocolo I2C 2 hilos para comunicar con el microcontrolador. Es un poco complejo el dispositivo pues no se limita a dar el color correcto cuando usted la pida y necesitaremos usar el algoritmo de calibración de ganancia,aunque para realizar pruebas sencillas puede utilizar el código descrito en este post
El código fue creado originalmente por Nathan Seidle para el microcontrolador PIC y fue portado y modificado para el Arduino por Marcus de Matter Interactive y despues Paul King lo porto en lenguaje C # para el net Framework Micro..
Haga clic para ampliar
El esquema de arriba muestra el sencillo circuito con Netduino,donde hay que a tener en cuenta, que se usa un LED externo solo como fuente de luz por lo que no hay necesidad de conectar el pin LED en el ADJD-S371-Q999. En cuanto a los piuertos podemos utilizar cualquiera de las IO pines digitales: sólo tiene que cambiar un poco de código al configurar los puertos de salida. Por último, el LED RGB puede ser conectado a 3.3V o 5V y es posible que tenga que ajustar el tamaño de resistencias para su RGB LED de todos modos.
A continuación se describe el código en c# de este demo:
C # Código
1
2
3
4
5
6
using System;
utilizando System.IO.Ports;
using System.Threading;
utilizando Microsoft.SPOT;
utilizando Microsoft.SPOT.Hardware;
utilizando SecretLabs.NETMF.Hardware.Netduino;
Las líneas 1 a 6 definen un espacio de nombres, lo cual permite utilizar las clases o tipos sin tener que escribir el espacio de nombres completo donde existen esos tipos.
Por ejemplo, en lugar de escribir: SecretLabs . NETMF . Hardware . Netduino . Pins . ONBOARD_LED
Líneas 7 a 33 son constantes definidas en la documentación y sensores de color. Línea 35 crea un nuevo objeto de dispositivo C I 2 llamado rtc. Utilizamos este objeto para enviar realmente los datos de la Netduino al sensor de color. I 2 C es un protocolo de bus que significa que varios dispositivos pueden compartir los mismos cables. Así el objeto I2CDevice nos obliga a darle una dirección de esclavo para lo cual se ha definido como la constante I2C_Address en la línea 11. El objeto I2CDevice también nos requiere que se especifique un tipo en kilohercios (en este ejemplo se ja usado 100 Khz)
Línea 37 crea una variable de tipo array de bytes que debe tener en cuenta que solamente estamos inicializando el tamaño de la matriz a 1. El sensor de color no necesita realmente una matriz de bytes, pero el metodo I2CDevice.CreateReadTransaction requiere una matriz de bytes como uno de sus parámetros y no tiene un método sobrecargado para usar sólo un byte.
public static void Main ()
{
OutputPort redpin = nueva OutputPort (pines GPIO_PIN_D10, cierto.);
OutputPort greenpin = nueva OutputPort (pines GPIO_PIN_D9, cierto.);
OutputPort BluePin = nueva OutputPort (pines GPIO_PIN_D7, cierto.);int cc = 0;
int rojo = 0;
int verde = 0;
int azul = 0;int clearGain;
int colorGain;int num_samples;
Líneas 38 es el principal punto de entrada para nuestro programa. En las líneas 40 a 42 definen que 3 puertos de I/O estamos utilizando para controlar un LED RGB. Al añadir el SecretLabs.NETMF.Hardware.Netduino.dll a nuestra lista de recursos y declarándola con la instrucción using de la línea 6 que no tenemos que recordar los números de pin microcontroladores reales. SecretLabs ya ha visto todo esto para nosotros y que nos permitirá usar Pins.xxxxx.(de hecho con la función completa de código alias intellisense de Visual Studio automáticamente aparece un menú contextual que le permite seleccionar de una lista de pines disponibles).
[* ACTUALIZACIÓN:. Si utiliza el instalador del SDK SecretLabs puede iniciar una nueva «Aplicación Netduino», que elimina la necesidad de añadir manualmente las dll a su lista de recursos y también elimina la necesidad de añadir manualmente los SecretLabs usando declaraciones]
En la línea 56 creamos un bucle infinito de modo que nuestro programa no se acaba nunca. Sin este nuestro programa sólo se ejecutará una vez y luego terminaria.
Líneas 58 y 64 es donde se puede ser creativo. La hoja de datos de sensores de color y nota de aplicación son un poco borroso en la explicación de la manera adecuada para calibrar y ajustar la ganancia de su sensor. Sin embargo, se debe establecer la ganancia de cada color antes de que usted solicite el color pues de NO ajustar la ganancia solo recibiría resultados bajos.
Líneas 65 a la 78 es donde nos muestra los colores mediante el uso de unos métodos de ayuda que usted va a leer a continuación. La clave a destacar aquí es que cuantas más muestras se toma más estable aparecerán sus números. En este caso se toman muestras de 10 y se suman los resultados juntos y se dividen por 10 para obtener el valor medio.
Líneas 80 a 93 es donde establecemos el color de nuestra RGB LED. El algoritmo usado es muy simple para determinar el color más dominan y encender sólo el pin del LED RGB via experimental
En la línea 95 que llamamos Debug.Print e imprimir los valores de la ventana de resultados de Visual Studios. El valor claro indica una intensidad de luz general que los valores Azul Rojo, Verde, y son la intensidad, como se ve a través de un filtro de luz.
99
100
101
102
public static void performMeasurement ()
{
set_register (0x00, 0x01); / / inicio de detección
}
Ahora empezamos a conseguir profundamente en el protocolo de sensores de color. Para decir el sensor de color para tomar una muestra fijamos el registro 0 × 00 con el valor de 0 × 01. El sensor de color a continuación, toma una muestra y la almacena.
El sensor de color almacena sus valores de color en dos registros de 8 bits. Así. en las líneas 103 a 106, get_readout () toma el primer registro como parámetro y asume el siguiente registro está a sólo 1 más direcciones por encima de ese registro. Así leemos el valor del primer registro y luego leemos el valor del segundo registro y luego cambiamos el valor del segundo registro de 8 bits a la izquierda que nos deja con el pleno entero de 16 bits. Sin embargo, sólo 10 bits se ponen realmente en el entero debido a que los altos registros sólo devuelven los dos bits menos significativos y el bajo registro devuelve 7 Bits.
107
108
109
110
111
112
113
114
115
116
117
public static void set_gain (gainRegister byte, int ganancia)
{
if (ganancia <4,096)
{
byte hi = (byte) (ganancia >> 8);
lo = byte (byte) (ganancia);set_register (gainRegister, lo);
set_register ((byte) (gainRegister + 1), hi);
}
}
Cada color tiene dos de sus propios registros de ganancia. Definimos estos en nuestros constantes en las primeras líneas. Aquí suponemos que ya que sabemos la dirección del registro del registro inferior, por lo que sólo podemos añadir 1 a la dirección para obtener la dirección del registro superior. Luego asignamos los valores de ganancia a través de la ayuda de set_register ().
118
119
120
121
122
123
124
125
126
public static void set_register (byte r, byte v)
{rtc. Ejecutar ( nueva I2CDevice. I2CTransaction []
{
I2CDevice. CreateWriteTransaction ( nuevo byte [] {r, v})}, 5000);
}
set_register es donde sucede la magia. Aquí creamos una nueva matriz de bytes que contiene dos valores. La primera es r para el registro y el segundo es v por valor. Transmitimos esta matriz de bytes a un nuevo objeto I2CDevice.CreateWriteTransaction y luego pasamos ese objeto con el método rtc.Execute. Usted debe recordar que rtc es nuestro objeto I2CDevice que sabe acerca de la dirección del esclavo de nuestro sensor de color. Así, en pocas palabras nuestra función set_register es donde empaquetamos todo y lo enviamos en su camino.
En líneas 127 a 136 estamos enviando una solicitud de nuestros valores de color. Nos pasamos ‘r’, que es el color que queremos leer. Recuerde que esto ocurre dos veces para cada color con el fin de obtener el valor total. Esperamos 5.000 milisegundos o 5 segundos para que el regreso antes de tiempo de espera.
public static int getClearGain ()
{
int gainFound = 0;
int upperBox = 4,096;
int lowerBox = 0;
int media = 0;
int halfValue;mientras que (gainFound == 0)
{
media = ((upperBox – lowerBox) / 2) + lowerBox;
/ / Possbile no más lejos Halfing
if (media == lowerBox)
{
gainFound = 1;
}
más
{
set_gain (REG_INT_CLEAR_LO, medio);
performMeasurement ();
halfValue = get_readout (REG_DATA_CLEAR_LO);si (halfValue> 1000)
{
upperBox = medio;
}
else if (halfValue <1,000)
{
lowerBox = medio;
}
más
{
gainFound = 1;
}
}
}
devolver la mitad;
}
Líneas 137-174 es donde usted puede volver a probar para perfeccionar sus resultados. Usted tendrá que obtener una forma de obtener un valor de ganancia que compensa la luz ambiental y todos los demás factores ambientales que pueden cambiar la sensibilidad.
public static int getColorGain ()
{
int gainFound = 0;
int upperBox = 4,096;
int lowerBox = 0;
int media = 0;
int halfValue;mientras que (gainFound == 0)
{
media = ((upperBox – lowerBox) / 2) + lowerBox;
/ / Possbile no más lejos Halfing
if (media == lowerBox)
{
gainFound = 1;
}
más
{
set_gain (REG_INT_RED_LO, medio);
set_gain (REG_INT_GREEN_LO, medio);
set_gain (REG_INT_BLUE_LO, medio);
performMeasurement ();
halfValue = 0;halfValue = Sistema de Matemáticas Max (halfValue, get_readout (REG_DATA_RED_LO))..;
halfValue = Sistema de Matemáticas Max (halfValue, get_readout (REG_DATA_GREEN_LO))..;
halfValue = Sistema de Matemáticas Max (halfValue, get_readout (REG_DATA_BLUE_LO))..;si (halfValue> 1000)
{
upperBox = medio;
}
else if (halfValue <1,000)
{
lowerBox = medio;
}
más
{
gainFound = 1;
}
}
}
devolver la mitad;
}
}
}
Por último, las líneas 175-220 intenta establecer una ganancia adecuada para cada color. Esto será llamado 3 veces porque cada color tiene una sensibilidad diferente. Usted puede ser creativo aquí y venir con su propio algoritmo que se adapte a su aplicación específica. Si usted tuviera un ambiente controlado, en teoría, esto sería muy simple.
Debe estar conectado para enviar un comentario.