Rocky Rover: Sistema de Visión Robótica con PixyCam y Arduino 101
Componentes y materiales
- 1x Arduino 101
- 1x Adafruit Motor/Stepper Shield V2
- 1x Chasis tanque SparkFun Dagu DG102
- 1x Pilas AA
- 1x Cable USB‑A a B
- 1x Adafruit USB Battery Pack
- 4x Separadores M2.5 con tornillo y tuerca
- 1x Conectores JST polarizados macho/hembra
- 1x Header macho 40 posiciones 1 fila (0.1")
- 1x Cables jumper macho/macho
- 1x Pixy (CMUcam5)
- 1x Kit Pan‑Tilt para Pixy
Aplicaciones y servicios online
- Arduino IDE
- Blynk
Sobre el proyecto
Rover basado en Intel Arduino 101 con PixyCam
Los eventos Hackster Live son geniales. Intel patrocinó nuestro evento en Dallas y nos envió placas Arduino 101 para construir rovers. Siguiendo el tutorial de Johnathan Hottell (vídeos incluidos), construí la base del rover con 4 motores y lo conecté a Blynk. Luego decidí mejorarlo añadiendo una PixyCam, moviendo el portapilas al frente para montar la cámara en un mecanismo pan/tilt.
PixyCam
PixyCam simplifica la visión robótica: es un sensor de visión rápido para robótica DIY, se enseña un objeto pulsando un botón, rastrea cientos de objetos y solo entrega datos de los que sigue.

Elegí rastrear una calabaza naranja.

La integración con Arduino es sencilla. Sigue las instrucciones de conexión y el montaje del pan/tilt.
API de PixyCam para Arduino
Incluye las cabeceras SPI y Pixy:
#include <SPI.h>
#include <Pixy.h>
Crea una instancia global:
Pixy pixy;
El método clave es getBlocks(), que devuelve el número de objetos detectados. Cada objeto en pixy.blocks[] contiene:
signature (1‑7)x (0‑319),y (0‑199)width (1‑320),height (1‑200)angle (para códigos de color)print() envía info al puerto serie
Código principal del rover (modificado del original BLE con seguimiento de objetos):
void setup() {
.....
pixy.init();
....
}
void loop() {
......
static int i = 0;
int j;
uint16_t blocks;
char buf[32];
int32_t panError, tiltError;
blocks = pixy.getBlocks();
if (blocks) {
panError = X_CENTER - pixy.blocks[0].x;
tiltError = pixy.blocks[0].y - Y_CENTER;
panLoop.updatePan(panError);
tiltLoop.update(tiltError);
pixy.setServos(panLoop.m_pos, tiltLoop.m_pos);
i++;
if (i % 10 == 0) {
int trackedBlock = 0;
sprintf(buf, "Detected %d:\n", blocks);
Serial.print(buf);
long maxSize = 0;
for (j = 0; j < blocks; j++) {
sprintf(buf, " block %d: ", j);
Serial.print(buf);
pixy.blocks[j].print();
long newSize = pixy.blocks[j].height * pixy.blocks[j].width;
if (newSize > maxSize) {
trackedBlock = j;
maxSize = newSize;
}
}
int32_t followError = RCS_CENTER_POS - panLoop.m_pos;
size += pixy.blocks[trackedBlock].width * pixy.blocks[trackedBlock].height;
size -= size >> 3;
int forwardSpeed = constrain(400 - (size / 256), -100, 400);
int32_t differential = (followError + (followError * forwardSpeed)) >> 8;
int leftSpeed = constrain(forwardSpeed + differential, -400, 400);
int rightSpeed = constrain(forwardSpeed - differential, -400, 400);
motor1->setSpeed(leftSpeed);
motor3->setSpeed(leftSpeed);
motor2->setSpeed(rightSpeed);
motor4->setSpeed(rightSpeed);
double width = pixy.blocks[trackedBlock].width;
if (width <= 5) { }
else if (width < 20 && !running) {
Serial.println("running");
motor1->run(FORWARD); motor3->run(FORWARD);
motor2->run(FORWARD); motor4->run(FORWARD);
running = true;
}
else if (width > 80 && !running) {
Serial.println("running");
motor1->run(BACKWARD); motor3->run(BACKWARD);
motor2->run(BACKWARD); motor4->run(BACKWARD);
running = true;
}
else if (width >= 20 && width <= 80 && running) {
motor1->setSpeed(128); motor2->setSpeed(128);
motor3->setSpeed(128); motor4->setSpeed(128);
motor2->run(RELEASE); motor4->run(RELEASE);
motor1->run(RELEASE); motor3->run(RELEASE);
running = false;
}
}
}
}
Para usar Blynk sin interferencia de PixyCam, tapa la lente. Si te interesa programar Arduino o usar PixyCam, dale a "Respect Project" y sígueme. Preguntas bienvenidas.
Código
Rocky Rover
Código completo disponible en el repositorio del proyecto.
Proceso de manufactura
- Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
- SERENA: Sistema de Alarma Personalizado Arduino Mega 2560 con Pantalla TFT LCD Táctil
- Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
- Soluciones de Alimentación Optimizadas para Proyectos Arduino
- Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
- Arduino 101 BLE + Blynk: Robot Tanque Controlado por Bluetooth DIY
- Crea gafas inteligentes de match-making con Arduino 101 y tinyTILE BLE
- Construir una pantalla de persistencia de visión portátil con Arduino UNO y ATtiny85
- Smartwatch Arduino DIY: Construye tu Propio Reloj Estilo Apple Watch
- Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino
- Optimizando diseño de iluminación para sistemas de visión en cirugía robótica