Buenas compañeros. Os cuento un poco lo que tengo en mente para mi proyecto:
Quiero hacer un sistema complejo de motores accionados desde teclado y que se muestre por pantalla información. Pero para ello, cosa que está aún lejos, quiero aprender a montar bien y controlar un motor con sensores de inicio y fin de carrera, y un pulsador.
He elegido un motor DC con reductora, y no un servo porque no me hace falta mucha precisión, y gracias a mi diseño de sistema mecánico puedo acoplar un switch para final de carrera en un sentido, y otro para final de carrera en otro sentido. El motor moverá un eje y este accionará los finales de carrera.
Por ello me surge la duda de como debo conectar dichos switches, si de manera independiente al circuito del motor o acoplarlos dentro de el. Me explico: A lo que me refiero si para estos switch debo sacar de una salida digital un cable, pasarlo por una R=10K (para evitar el corto), pasarlo por el switch y meterlo a tierra, y repetir ete proceso tantas veces quiera como switches haya, o debo implementarlo en algún punto medio de mi circuito de control del motor.
Para el motor he pensado el siguiente circuito:
La diferencia es que yo alimento desde batería externa y no desde arduino. Por ello me surge también la siguiente duda. Para ello debo conectar el diodo a arduino de igual forma que el esquema, pero ¿la tierra también la debo conectar al GND de arduino y al GND de mi alimentación? De esta forma me quedaría ese esquema pero con los 5v (que serán realmente 6v a los que trabaja el motor) alimentados externamente, y la tierra compartida entre ARD y la tierra de la alimentación.
No se si este procedimiento será erróneo.
Por otro lado, os pregunto por aquí también sobre el código o creo un post nuevo en Software?
Por partes, qué tipo de final de carrera (FC) vas a utilizar? Yo por lo general utilizo optoacopladores o interrupteres mecánicos, dependiendo de la aplicación, fuere como fuere yo esto implemento un circuito independiente del motor, lo único en común es el arduíno que controla.Dependiendo de si utilizas lógica negativa o positiva coloca una resistencia de pull up o down a una entrada digital y conectas la salida digital del final de carrera. Ahí ya es el arduíno el que tenga que gestionar, cuando se active el FC paras el motor.
Segundo, las masas deben ir unidas todas sí, entiendo que la alimentación al motor es externa de 9V y no la del aruduíno de 5V no?
Por último, en cuanto a código lo que te he comentado, lees el FC y si está activado paras el motor. Tendrás que tener en cuenta el sentido de giro para leer uno u otro FC.
Gracias compañero. Ayer al final conseguí hacer un circuito tanto física como lógicamente. Lo que monté fue lo que muestro en la img adjunta.
En cuanto al código, hice un contador de cuantas veces se pulsa un boton en el simulador, así se en que estado está mi mecanismo. Esto puede generar problemas, pero al estar todo el mecanismo activado mediante una orden, solo cabe una posibilidad de recorrido, así que no será problemático.
En la realidad usaré un teclado para activar las opciones deseadas y tambíen lo mostraré por pantalla, pero eso más adelante. Ahora quiero aprender un poco sobre conectar arduino con excel para escribir y leer datos, así podré almacenar la información necesaria puesto que a mi dispositivo solo deberían poder acceder usuarios, así podré crear una base de usuarios. Si sabes donde puedo encontrar más información al respecto te lo agradecería.
En cuanto a los pulsadores, como bien has dicho he usado una pull-up, muy sencillo y fácil de implementar. Además, he conectado los sensores del recorrido todos a la misma entrada, que tiene permitida la interrupción, y según mi contador pues ejecuto un código u otro con un if.
Para la comunicación Arduíno - Excel léete este post que te ayudará bastante
En cuanto a las resistencias de pull up que has puesto, están bien, pero puedes quitarlas y ahorrar HW activando por SW las resistencias de pull up internas que tiene arduíno. Aquí puedes leer más al respecto de como activar estas pull up.
Por ahora prefiero dejar las resistencias físicas que he colocado por si fundo algo para poder cambiarlas fácilmente. Al final de mi proceso haré un circuito en una placa para compactar todo lo máximo posible.
Miraré detenidamente el post del excel para aprender un poco más. También he buscado por internet alguna información y parece que hay más de lo que yo pensaba, así que en ese aspecto estoy contento.
Por otro lado, quiero implementar una pantalla, en un principio pensaba de 16x2, pero viendo que se conectan iguales las de 20x4 posiblemente ponga esta, así tengo más pantalla aunque ambas me valen puesto que no tengo mucho que mostrar por ellas. Entiendo que toda la programación será exactamente igual, ¿no?
Por ahora como os dije, pretendo poner en paralelo todos los circuitos con los switches que activen funciones de mi máquina, y todos a la misma entrada de interrupción de arduino. Pero me surge la duda de si me quedo sin entradas/salidas, creo que existen módulos para amplificar estas, ¿estoy en lo cierto? Puesto que debo de colocar 8 switches, una pantalla, un teclado 4x4, 4 motores simples DC (no de los de paso a paso), y posiblemente alguna cosilla más como un ventilador para refrigerar y cosas así. De ahí mi preocupación por el número de entradas y salidas.
Me auto respondo, acabo de leer que existe el I2C, con el cual conecto los pines de la pantalla a este dispositivo y así solo ocupo 2 pines de arduino. Qué algún compañero me confirme si esto es cierto.
Las pantallas van parecidas unas de otras, en lo que te tienes que fijar es en el controlador que lleve cada pantalla y buscar su datasheet. De él dependerá la codificación de los caracteres.
En cuanto a lo de las entradas, mi consejo es que busques una pantalla por I2C, de este modo controlarás la pantalla sólo con 2 hilos, mucho mas fácil a nivel HW. En cuanto a SW no hay mucha complicación, tienes millones de ejemplos por internet y librerías, si no recuerdo mal la LiquidCrystal.h (no estoy seguro al 100% del nombre, pero era algo así) funcionaba bastante bien.
Con el teclado lo mismo, aunque me parece que no hay ningún teclado comercial con I2C, por lo menos cuando yo miré en su día, pero si lo puedes hacer tu con un PCF8584, googlea teclado 4x4 I2C arduíno y tienes información de sobra para hacerlo.
De este modo tendrás pantalla y teclado colgados de 2 hilos (SCA, SCL) del arduíno, dejándote todos los pines de entrada/salida disponibles para los switches y los motores.
Para los motores y el ventilador necesitarás 5 salidas analógicas, arduíno tiene 6 y cuentas con 14 pines digitales, más que de sobra para lo que en principio necesitas.
Multiplexadores de entradas salidas seguro que puedes encontrar, pero en caso de que te quedes corto te recomendaría que buscaras un arduíno MEGA ya que te simplificará bastante las cosas.
He comprado una pantalla LCD de 20x4 con un módulo de I2C, por lo que por ese aspecto ya estoy cubierto. Como dices y como he leido por internet, con las librerías es muy facil mostrar por pantalla lo deseado.
Por otro lado también he comprado un teclado 4x4, pero por lo que dices parece que no podré conectarlo a I2C a no ser que compre uno específico para ello. Voy a investigar más en ello porque me gustaría tenerlo todo en el mismo bus, por aquello de que queda mucho mejor el trabajo.
También al tener el arduino leonardo ya de hace tiempo, no creo que cambie a mega, en último caso si veo que si o si es necesario lo haré. Lo que si me interesaría saber es si existen módulos para ampliar entradas y saldias para mi arduino, o me apaño con lo que tengo.