Robot Sumo

Buenas noches, les ceunto que soy estudiante y estamos haciendo un robot sumo y tenemos una competencia pronto y necesito ayuda, hice un pcb con un cristal de 16MHz y 2cap de 2,2pf y bueno el pulsador de mclr,los sensores CNY70 para la lectura de linea con un circuito comparador que anda perfecto, los sensores infrarojos que detectan oponente E18-D80NK y motores que lo conectamos a sus peuntes H realizados con un l293 y unos mosfet que andan perfecto, en fin hicimos un programa y lo probamos con leds(en vez de las activaciones de los motores) y switch para simular los sensores y andaba perfecto, pero cuando lo montamos en el pcb tenemos un comportamiento medio raro, los motores empiezan a girar de manera indefinida cuando los sensores no detctan nada, en lugar de seguir su rutina, como si se estaria activando algun sensor por ruido o demas, adjunto el codigo y espero alguna ayuda. muchas gracias.

Programa_Sumo_2.0.ino (10.7 KB)

Probaron eso mismo con un UNO/NANO?

Digo porque lo primero es crear un código funcional y luego si quieres armas un PCB pero son dos problemas, ahora tienes dos problemas, no sabes si tu PCB esta bien o si tu código esta bien.

La compentencia es en pocos días, creo que estan muy retrasados.

Repito probaron con un arduino el código?

Hola,
Si con la simulación va bien y una vez montado mal. se me ocurren dos razones:
1/ Como dice Surbyte, puede que la placa tenga problemas de conexiones, soldaduras que fallan, etcétera. Un UNO (nano) no cuesta apenas dinero y es bueno contrastar que no sea esto lo que ocurre.
2/ Que los arranques y paradas de los motores causen interferencias en lo demás: aunque las tensiones no son altas las corrientes son apreciables.
Saludos

Sin esquemas de como estan conectadas las cosas poco podemos decir.

Muchas gracias por sus respuestas, el arduino que utilizamos es el Uno, por lo tanto el Atmel328P-PU. La verdad que si, la competencia es el sábado y estamos muy retrasados, pero le estamos dedicando prácticamente todo el día, hablando con profes y demás también me dijeron lo de los motores y que le ponga un capacitor de .1uf abajo del zocalo para evitar un poco el ruido y lo hice, pero seguía fallando hasta que pensé que se me podían estar disparando los sensores de linea por una falsa lectura, asi que en el programa, una vez que lee los sensores de linea o oponente, espera 5 mili-segundos y después vuelve a leer, para asegurarse de que la lectura es correcta, y de esa manera me desapareció el problema, disculpen por no haber insertado los esquemas, les dejo el código de como hicimos la lectura de los sensores, les agradecería que si ven algo que podemos modificar o algo que dejen su opinión así la tendremos en cuenta.

Chequeo de uno de los sensores de linea

byte chequeoSensorLineaDD()
{
 if(digitalRead(1)==0){
   delay(5);
   if(digitalRead(1)==0){return 1;}// Preguntamos si DD esta activado, si es 0 es porque esta activado y devolvemos 1
   } 
 else { return 0; }   // En caso contrario devolvemos 0
}

Chequeo de uno de los sensores de oponente

byte chequeoSensorOponente1()  // El "Sensor Oponente 1" es el sensor frontal
{
 if(digitalRead(A3)==0){   //En caso de activarse devuelve 1, el mismo se activa con estado bajo
   delay(5);
   if(digitalRead(A3)==0){return 1;}
   }
 else { return 0; }
}

@Maxi2393 en tu apuro obvias pasos que para nosotros son fundamentales.
Tienes un problema de hardware y me muestras el parche con el que ahora no se manifiesta, el problema pero seguimos sin ver todo el problema.

Aca no podemos leer mentes y sin esquema se hace dificil entender TODO el contexto electrónico y de programación.

Aún con todo eso, sabes que es dificil responder.
No sabemos como controlan los motores, si usan puentes H o no. No sabemos como alimentan todo.
No sabemos como hicieron el impreso. Solo tenemos el código general y como parchearon el problema aparentemente.
Entiendo que con poco tiempo es dificil responder a estos pedidos porque implica dedicar el escaso tiempo que tienen a algo que no sabes si te dará o no resultados.

Para la proxima aprendan a usar un cronograma de tiempos y cumplirlo y no llegarán a la fecha de entrega en esta situación.
Se que no te gustará este comentario pero verás con el tiempo que es lo mejor.

El esquema no tiene porque ser hecho con un CAD/CAE, lo haces a mano alzada y le tomas una foto y lo posteas bien.

Veo que no has leído las normas tampoco y porque el último código tuve que editarlo yo.
Por favor... te envio privado y vean como se postea, código/errores, imagenes y enlaces.

Su participación en el foro no va a terminar ni hoy ni mañana.

NOTA: yo iba a particiipar en el concurso y decidi hacerlo en año proximo porque solo tenia un mes cuando me enteré. De modo que vean lo que es hacer una previsión para un trabajo que se supone debe hacerlo bien.

Respuesta a tu código
Lo que implementan ahi es una especie de rutina antirebote de 5mseg.
Si tu robot esta lleno de delay() ahora entiendo como tienes este y otros problemas.
Acaso tus profesores no te enseñaron a NO USAR delay() en un robot?

Delay detiene el funcionamiento, 5 mseg de tu sensor detectando linea mas 5 de la posible detección del oponente son 10 mseg que no responde a otras cosas y si sigo sumando imagina los momentos de NO HAGO NADA que tiene tu robot.
Es algo que no visualizas pero es totalmente negativo.

Ya es tarde para cambiarlo.

Ojala puedas mostrarnos un esquema.

Aisla todo (me refiero a que simplifiques tu código a minima expresión). comienza con un motor, pruebalo en tu PCB y observa si trabaja bien, ve aumentando paso a paso los elementos utilizados hasta dar con aquel que te genera problemas.

Gracias por tu respuesta y tienes razon, la competencia iba a ser en noviembre y bueno, este año cambio el reglamento y para sumar puntos tuvimos que ir a la competencia, que no nos fue muy bien, como era de esperar, pero bueno, estamos cambiando unos ajustes para la proxima que es a fin de mes, lei las normas pero no entendi bien por eso pude tener errores, espero que sepas disculparme es mi primer post, siempre trate de no usar los delays, de usar la funcion millis() para todo, salvo en esos antirebotes, si sabes alguna forma de hacer algun antirebote o algo te lo agradeceria que me lo expliques, tengo un pdf con todos los pcb, esquemas y demas del sumo que si quieres puedo adjuntar asi te puedes guiar un poco mas, necesitamos desarrollar mas el programa y demas, creo que de hardware estamos bien, muchas gracias

Y bueno ajunta los archivos, y si te da problemas subilos como .zip
pdf podes subirlo directamente.

Lee las normas del foro porque veo que seguis sin prestar atención a lo que se te indica. Creo haberte enviado un privado (ver arriba derecha en tu avatar) con instrucciones con las normas.

surbyte:
Y bueno ajunta los archivos, y si te da problemas subilos como .zip
pdf podes subirlo directamente.

Lee las normas del foro porque veo que seguis sin prestar atención a lo que se te indica. Creo haberte enviado un privado (ver arriba derecha en tu avatar) con instrucciones con las normas.

No me llego ningun mensaje, si puedes enviarme bien las normas o decirme a donde estan te lo agradeceria, asi puedo subir todos mis esquemas asi me pueden ayudar mejor, asi para la proxima competencia puedo mejorar, gracias

Primer hilo de cada sección.
Todo foro tiene las normas el en primer hilo de cada sección.

Los msg llegan si tienes habilitada la opción para que eso ocurra.