Hablemos de uno de esos momentos del taller que ponen de los nervios a todos.
El estudiante llega emocionado: Profe, el codigo esta listo, todo perfecto, ¡vamos a probar! Colocan el robot al inicio de un pasillo con mucha esperanza. El pasillo esta vacio. Ni pared ni obstaculo. Pero en cuanto se mueve, de pronto entra en panico: frena, retrocede o gira en el sitio como si hubiera chocado con una pared invisible.
Se le cae la cara: Pero profe, el frente estaba libre — por que paro? Tu sonries... porque sabes que malinterpreto el robot.
Que pasa cuando el sensor se confunde?
La fuente suele ser nuestro famoso sensor ultrasonico de ojo de murcielago: HC-SR04. Envia un pulso de sonido y espera el eco.
La vida real no es un laboratorio limpio. A veces la tela absorbe el sonido. A veces el angulo esta mal y el eco no vuelve. En ese momento el sensor no puede medir. Lo que quiere decirle a Arduino es: No pude medir la distancia. No lo se.
Como lo dice? Con una senal de error conocida: un gran 0.
Diferencia con nuestro tip hermano: En Por que tu robot ve fantasmas? filtramos muestras aleatorias incorrectas (ruido) con promedio. Aqui el tema es otro: el sensor devuelve a proposito 0 = medicion fallida. Y nosotros tratamos ese cero como tengo la nariz contra una pared.
El error matematico inocente
En el codigo del estudiante suele estar esta linea inocente:
if (distancia < 15) {
parar();
}
El sensor manda 0. El robot hace la cuenta: 0 es menor que 15? Si — y mucho!
Entonces el pobre robot cree que su nariz esta pegada a una pared y pulsa el boton de panico. No hay pared. Solo un sensor confundido que no midio. El robot no ve fantasmas; malinterpreta un codigo de error.
Habla la experiencia: ensenale logica al robot
Ensenale esto: Un 0 no significa que te acercaste al maximo. Significa que el sensor fallo. No lo trates como obstaculo — pasalo.
Logica plana antigua: Si la distancia es menor que 15, para.
Logica con experiencia: Si la distancia es menor que 15 y no es 0, para.
if (distancia > 0 && distancia < 15) {
parar();
}
Eso es todo. Con este pequeno toque, el robot deja de tratar esos ceros fantasma como obstaculos y solo reacciona a distancias reales.
Tambien puedes combinarlo con el promedio: toma varias muestras, calcula la media y sigue guardando el distancia > 0 en la decision. No son rivales; se completan.
Recordemos; la robotica es tambien el arte de manejar hardware imperfecto con codigo inteligente.