Sensor De Trayectoria Trackball
- Alimentación
- 2,5 a 5,25 V
- Movimiento
- 4 salidas digitales (UP, DWN, LFT, RHT) que dan pulsos al girar la bola
- Botón
- Salida BTN: se va a 0 V al presionar la bola
- Luces
- 4 LED bajo la bola (blanco, rojo, verde y azul), uno por pin
Características
Pequeña bola giratoria como la de los antiguos celulares BlackBerry, montada en una placa. Bajo la bola hay 4 rodillos con imanes y 4 sensores de efecto Hall: cuando la bola gira hacia un lado, el sensor de ese lado da pulsos. La bola además se presiona como un botón y tiene 4 LED (blanco, rojo, verde y azul) que la iluminan.
Sirve como control para moverse por menús en pantallas, para juegos y para controles hechos en casa.
| Alimentación | 2,5 a 5,25 V |
|---|---|
| Movimiento | 4 salidas digitales (UP, DWN, LFT, RHT) que dan pulsos al girar la bola |
| Botón | Salida BTN: se va a 0 V al presionar la bola |
| Luces | 4 LED bajo la bola (blanco, rojo, verde y azul), uno por pin |
| Pines | VCC, GND, BTN, LFT, RHT, UP, DWN, WHT, GRN, RED y BLU |
| Equivalente | SparkFun BlackBerry Trackballer |
¿Para qué sirve?
- Moverse por menús en pantallas LCD u OLED
- Controles para juegos y robots
- Un mouse o control hecho en casa
Diagrama de conexión de prueba
Placa usada: Arduino UNO
| Cable | Módulo | Arduino UNO | Nota |
|---|---|---|---|
| rojo | VCC | 5V | |
| negro | GND | GND | |
| morado | BTN | D2 | Botón |
| amarillo | LFT | D3 | Izquierda |
| naranja | RHT | D4 | Derecha |
| verde | UP | D5 | Arriba |
| azul | DWN | D6 | Abajo |
| gris | WHT | D7 | LED blanco |
Código de prueba
// Prueba del trackball: cuenta cuánto gira la bola en X e Y y, al
// presionarla, enciende o apaga el LED blanco.
const int PIN_BOTON = 2;
const int PIN_LED = 7;
const int PINES[4] = { 3, 4, 5, 6 }; // LFT, RHT, UP, DWN
const int PASO_X[4] = { -1, 1, 0, 0 };
const int PASO_Y[4] = { 0, 0, -1, 1 };
int anterior[4];
long x = 0, y = 0;
bool led = false;
int botonAntes = HIGH;
void setup() {
Serial.begin(9600);
pinMode(PIN_BOTON, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(PINES[i], INPUT_PULLUP);
anterior[i] = digitalRead(PINES[i]);
}
}
void loop() {
// Cada sensor cambia de estado cuando la bola gira hacia su lado
bool movio = false;
for (int i = 0; i < 4; i++) {
int ahora = digitalRead(PINES[i]);
if (ahora != anterior[i]) {
anterior[i] = ahora;
x += PASO_X[i];
y += PASO_Y[i];
movio = true;
}
}
if (movio) {
Serial.print("X: ");
Serial.print(x);
Serial.print(" Y: ");
Serial.println(y);
}
int boton = digitalRead(PIN_BOTON);
if (boton == LOW && botonAntes == HIGH) { // se acaba de presionar
led = !led;
digitalWrite(PIN_LED, led ? HIGH : LOW);
Serial.println(led ? "Botón: LED encendido" : "Botón: LED apagado");
delay(30); // evita rebotes
}
botonAntes = boton;
}
Abre el Monitor serie a 9600 baudios y gira la bola: verás cómo cambian X e Y. Presiónala para encender o apagar el LED blanco. Los otros LED (GRN, RED y BLU) se conectan igual, a otros pines.
Precauciones
- Aliméntalo con una fuente regulada de 2,5 a 5,25 V.
- Cada pulso es un paso pequeño: para mover un cursor, multiplica los pasos en el código.
- Mantén la bola limpia: el polvo hace que los rodillos patinen.
Fuentes consultadas: SparkFun: guía del BlackBerry Trackballer · Core Electronics: BlackBerry Trackballer. Ficha preparada por Electrodrone; verifica siempre el voltaje de tu módulo antes de conectarlo.