Descripción de Pixy2
Podemos adquirir esta cámara en la página de DFRobot en el sigueinte link https://www.dfrobot.com/product-1752.html
En este proyecto aprenderemos a como configurar la cámara pixy 2, con el programa pixymon y a través de un botón que posee en la parte superior de la cámara.
Como proyecto propuesto vamos a reconocer distintos objetos con pixy 2 y con un reproductor de mp3 escucharemos mediante un audio el objeto que tenemos en frente. En un display oled veremos el número de objeto reconocido, ya que pixy puede reconocer hasta 7 objetos distintos.
Pixy2 es la segunda versión de Pixy. Es más rápido, más pequeño y más capaz que el Pixy original, agregando algoritmos de seguimiento / seguimiento de línea, así como otras características. Esto es lo que hemos agregado a Pixy2:
-
Pixy2 detecta líneas, intersecciones y pequeños códigos de barras, diseñados para robots que siguen líneas.
-
Velocidad de fotogramas mejorada: 60 fotogramas por segundo
-
Se han agregado algoritmos de seguimiento a la detección de objetos basada en color.
-
Bibliotecas mejoradas y simplificadas para Arduino, Raspberry Pi y otros controladores
-
Fuente de luz integrada
Y, por supuesto, Pixy2 hace todo lo que el Pixy original puede hacer:
-
Sistema de visión pequeño, rápido, fácil de usar, de bajo costo y fácilmente disponible
-
Aprende a detectar los objetos que le enseñas.
-
Se conecta a Arduino con el cable incluido. También funciona con Raspberry Pi, BeagleBone y controladores similares.
-
Se proporcionan todas las bibliotecas para Arduino, Raspberry Pi, etc.
-
C / C ++ y Python son compatibles
-
Se comunica a través de una de varias interfaces: SPI, I2C, UART, USB o salida analógica / digital
-
La utilidad de configuración se ejecuta en Windows, MacOS y Linux
-
Todo el software / firmware tiene licencia GNU de código abierto
-
Se proporciona toda la documentación del hardware, incluidos los esquemas, la lista de materiales, el diseño de PCB, etc.
Podemos conectar directamante la cámara a un arduino uno o mega, según como se ve en la siguiente imagen.
CARACTERISTICAS
- Pixy2 detecta líneas, intersecciones y pequeños códigos de barras, diseñados para robots que siguen líneas.
- Velocidad de fotogramas mejorada: 60 fotogramas por segundo
- Se han agregado algoritmos de seguimiento a la detección de objetos basada en color.
- Bibliotecas mejoradas y simplificadas para Arduino, Raspberry Pi y otros controladores
- Fuente de luz integrada
ESPECIFICACIÓN
- Tipo de lente: Estándar M12
- Procesador: NXP LPC4330, 204 MHz, doble núcleo
- Sensor de imagen: Aptina MT9M114, resolución 1296 × 976 con procesador de flujo de imagen integrado
- Campo de visión de la lente: 60 grados horizontal, 40 grados vertical
- Consumo de energía: 140 mA típico
- Entrada de alimentación: entrada USB (5 V) o entrada no regulada (6 V a 10 V)
- RAM: 264K bytes
- Flash: 2M bytes
- Salidas de datos disponibles: UART serie, SPI, I2C, USB, digital, analógica
- Dimensiones: 1.5 “x 1.65” x 0.6 “
- Peso: 10 gramos
- Fuente de luz integrada, aproximadamente 20 lúmenes.
Link recomendados
Hacemos click en siguiente
Para terminar de click en “finish”
Ejecutamos pixymon v2
Y verificamos su funcionamiento.
Si vamos a File, luego a configure
En la pestaña Signature Labels, podemos agregar una etiqueta cada objeto que aprende pixy
En “Action” hacemos click en “Set signature #” y podemos enseñarle a pixy el objeto que debe recordar, se pueden almacenar hasta 7 objetos.
La imagen se congelara, el puntero del mouse se convertirá en una cruz, y luego arrastramos el puntero sobre el objeto abarcando la mayor superficie posible, sin pasarnos.
Nos puede ocurrir que se produzcan falsos positivos.
Podemos calibras y solucionar este problema en la pestaña “Tuning”, elegimos el objeto que queremos calibrar y lo movemos hasta encontrar el punto, donde el objeto es detectado correctamente.
Tenemos que tener la precaución de no pasarnos, sobre todo cuando el fondo es muy parecido.
Tiene la capacidad de detectar más de un objeto al mismo tiempo
Otra forma de enseñarle a pixy un objeto, es a través de un botón que posee en la parte superior.
Al soltar, la luz trata de imitar el color del objeto que tiene en frente. No hace falta tener conectado pixy a la pc, pero se lo puede dejar conectada, si lo deseamos, notaremos que la figura se pone blanca cuadriculado.
Una vez que estamos seguro del color del objeto en el led, apretamos una vez más el botón y el objeto queda almacenado.
Una función muy útil, cuando las condiciones de luminosidad son muy malas, es encender un par de led que tiene incorporados la cámara. La haremos yendo a “Action” y luego a “Toggle Lamp”, donde se encienden o apagan los led.
Si queremos usar nuestra cámara con un arduino, debemos instalar la librería “arduino_pixy2”, debemos descargarla.
A continuación en el IDE de arduino nos dirigimos a Progrma -> Incluir Librería -> Añadir Librería .Zip
Elegimos el archivo y hacemos click en “Abrir”
Nos vamos a Archivo-> Ejemplos->Pixy2->ccc_hello_world
Cargamos la ejemplo a nuestro arduino y veremos que pixy empieza a enviar datos a nuestro terminal serial, dependiendo del objeto que este viendo en ese momento.
Código Fuente
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
#include <Pixy2.h> #include "U8glib.h"//Librería para el control del display oled U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);// I2C / TWI // Se habilita esta linea según el display a usar en este caso el driver SH1106 // This is the main Pixy object Pixy2 pixy; String camara=""; void setup() { Serial.begin(9600);//Velocidad de 9600 bps para enviar comandos al reproductor mp3 pixy.init();//Inicializamos la cámara } void loop() { int i; // grab blocks! pixy.ccc.getBlocks(); // Si se detecta un objeto if (pixy.ccc.numBlocks) { if(pixy.ccc.blocks[0].m_signature==1){ //rectangulo violeta camara="uno"; objeto(); Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x06); Serial.write(0xef); delay(2000); } if(pixy.ccc.blocks[0].m_signature==2){ camara="dos"; objeto(); //rectangulo verde Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x07); Serial.write(0xef); delay(2000); } if(pixy.ccc.blocks[0].m_signature==3){ camara="tres"; objeto(); //triangulo rojo Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x01); Serial.write(0xef); delay(2000); } if(pixy.ccc.blocks[0].m_signature==4){ camara="cuatro"; objeto(); //triangulo azul Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x02); Serial.write(0xef); delay(2000); } if(pixy.ccc.blocks[0].m_signature==5){ camara="cinco"; objeto(); //cuadrado amarillo Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x03); Serial.write(0xef); delay(2000); } if(pixy.ccc.blocks[0].m_signature==6){ camara="seis"; objeto(); //triangulo naranja Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x04); Serial.write(0xef); delay(2000); } if(pixy.ccc.blocks[0].m_signature==7){ camara="siete"; objeto(); //circulo blanco Serial.write(0x7e); Serial.write(0xff); Serial.write(0x06); Serial.write(0x03); Serial.write(0x00); Serial.write(0x00); Serial.write(0x05); Serial.write(0xef); delay(2000); } } } void objeto(){ u8g.firstPage(); do { draw();//Llama a la función draw } while( u8g.nextPage() ); // Reconstruye la imagen después de un tiempo delay(50); } void draw(void) { //Los comandos gráficos para volver a dibujar la pantalla completa deben colocarse aquí u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 20); u8g.print("Objeto:"); u8g.print(camara); } |
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]
VIDEOS RECOMENDADOS





























