Problemas con motores y puertos digitales

Tenia pensado usar arduino para hacer un robot impulsado con ruedas, y como chasis me he comprado un coche r/c cutrecillo (45euros).
El motor de dirección y el de la tracción funciona con idéntico funcionamiento: invirtiendo la polaridad. El problema es que no se como hacer que con cuatro puertos digitales unos hagan de Vcc y otros de Gnd. He visto que se puede usar pinMode() fuera del setup pero me encuentro con dos problemas.

1- El puerto digital en output solo da 2,5v
2- El puerto digital en input no funciona como Gnd.

¿Como lo resolveríais vosotros?

Te sugiero que investigues sobre los puentes H. Te servira para solucionar el problema de controlar el motor, y de un problema adicional (que oarece que no has tenido en cuenta) y es el tema del onsumo y la disipacion de potencia.

Hola!
Para el manejo de motores de corriente continua, lo mejor es utlizar las señales PWM del arduino y un L293 (puente en H). Con la señal PWM controlas la velocidad y el puente en H te la la corriente necesaria para mover los motores (hasta 1amperio), ya que de los pines del arduino como mucho puedes conseguir 40 mA (creo), ademas segun como lo configures, puedes controlar solo la velocidad o ademas el sentido de giro.

Un Saludo

Con el puente H controlas la direccion del giro. Me llamo la atencion lo de controlar la velocidad con las señales PWM. Investigue un poco, y vi que se refiere a las salidas analogicas del Arduino, y como se modula la corriente en dichas salidas modulando la anchura del pulso. Entonces, la duda que tengo sobre tu sugerencia de controlar la velocidad es la siguiente: la manera inmediata de usar las salidas analogicas para controlar la velocidad, es alimentar con ellas la VCC del puente H, pero con eso seguimos en los 40 mA de intensidad que es capaz de suministrar Arduino. La unica alternativa posible, seria alimentar con la salida analogica las entradas de control del puente H, tomando la corriente para el motor fuera del Arduino. De esta manera, la anchura de pulso que se produce en la salida analogica de Arduino, se reproduciria en las salidas de potencia del puente H, ignorando impunemente los retardos ya que se compensarian unos con otros. ¿Estoy en lo cierto?

Tras buscar algo de información y comprar el el l923 he terminado una placa provisional y he estado probándola.

El robot en acción. Me falta meterle un par de sensores cny70 que tengo por ahi. Mas no puedo porque los pines digitales del 8 para adelante no casan con los agujeros de la placa de baquelita... :cry:

Cuando estaba probando el codigo que tenia para el robot me encuentro que los sensores no van bien... Asi que simplifico el codigo y lo hago de tal manera que pueda ir probando para encontrar el fallo...

Y tras cargar el programa en el arduino, pincho el circuito (la baquelita) donde esta el puente y las conexiones. Y antes de que pinche los sensores se enciende el led del pin 13... que raro... solo debería pasar si recibe un uno logico... reviso la placa... tras arreglar una cosa vuelvo a probar... Y esta vez solo con rozar los pines ya se enciende...

Cogo un pin suelto y el led encendido suelto el pin, y se apaga..., toco con un dedo y se enciende..., acerco el dedo a uno o dos centimetros y se enciende el led...

Mi arduino debe ser hipersensible y con acercar un dedo o algo metalico le es suficiente para interpretar que es un uno logico....

Pruebo los sensores y a veces van, a veces no...
¿teneis alguna solución?

Suena a que no está conectado a 0 voltios, ¿como alimentas el arduino?, los dispositivos que usan 0 voltios, también están a 0 voltios, y usan el mismo 0 que el arduino?

/BlueIcaro


Una imagen vale mas que mil palabras. Con colocar un pin y acercar o tocar con el dedo ya interpreta que hay 1

Y lo he conseguido solo rozando el plastico con el dedo...

Hola!
No estoy muy seguro de porque te lo hace, pero ten encuenta que en los pines de entradas no es muy recomendable tenerlos al "aire" (porque te pueden leer cualquier cosa por el ambiente), lo normal esque esten conectados a una tension (la que tienen que leer), el problema lo tendrias si tienes una tension de 5v y te lee 0.
También puede ser por el código (auque lo veo poco probable)

Un Saludo!

En cuanto coloco la placa solo lee 1. ni conectando los sensores cny70. Solo esta en 1. :cry:

Pero que es lo que se supone que tiene que leer ese pin?
por cierto los CNY donde los conectas a la entrada digital o analógica??

los cny70 estan modificados para que solo de 0 ó 1. Estan en los puertos digitales.

Te lo digo porque yo los conectaria a las entradas analógicas (polarizado por ejemplo con una resistencia de 330ohmios para el diodo y otra de 10K para el transistor) y con el AnalogRead obtienes un valor entre 0 y 1023 y tu pones el margen de valores para blanco o negro.
No se prueba descartando posibles fallos:

Imagino que ya as probado con otros pines, no? para descartar que sea el pin el que no funcione.

Otra opcion seria con un pulsador y una resistencia probar si lee 0 y 1 (para descartar que no sea el CNY)

Un saludo!

Investigue un poco, y vi que se refiere a las salidas analogicas del Arduino, y como se modula la corriente en dichas salidas modulando la anchura del pulso. Entonces, la duda que tengo sobre tu sugerencia de controlar la velocidad es la siguiente: la manera inmediata de usar las salidas analogicas para controlar la velocidad, es alimentar con ellas la VCC del puente H, pero con eso seguimos en los 40 mA de intensidad que es capaz de suministrar Arduino. La unica alternativa posible, seria alimentar con la salida analogica las entradas de control del puente H, tomando la corriente para el motor fuera del Arduino.

MYCOLLECTS

Los puentes en H, basicamente esta compuesto por transistores que dan potencia y la vez funcionan como interruptores (para controlar el sentido de giro), lo tienes que alimentar a su tension nominal (5v creo recordar), ademas tienes la posibilidad de meterle una segunda alimentacion que esta destinada a alimentar los motores (ya que los motores entre otras cosas meten picos muy altos al arrancar, ruido.. y si alimentas todo con la misma fuente (bateria) te puedes encontar con que se reinicie cada dos por tres el micro, si son motores pequeños tampoco hace falta).

Entonces tu metes como entrada al l293 una señal PWM, y tienes a la salida la misma señal pero amplificada, y luego segun las conexiones que hagas a la entrada del l293 puedes controlar solo la velocidad (porque es una señal PWM, y con el micro controlas esta señal) o ademas controlar el sentido de giro.

Un Saludo!!

Por cierto en el arduino, los pines para generar señales PWM los los pines 3,5,6,9,10 y 11 y son pines digitales porque con lo que trabajas son con los anchos de los impulsos (el tiempo que la señal esta a 1)