[Iniciando módulos de interacción humana] Saludos, organismo basado en el carbono. Al habla Transductor. ¿Alguna vez has intentado encender un motor sólo a través de Arduino? Probablemente sí, y en el mejor de los casos tu motor no se habrá movido. En el peor, tu Arduino ha muerto tras una nube de humo negruzco.
Así que seguramente te estarás preguntando: “¿Por qué no puedo controlar un motor DC directamente con Arduino? ¡Si funciona con 5V!” En este ejemplo voy a explicarte cómo construir un controlador de motores mediante un transistor NPN, que podrás utilizar con Arduino u otro tipo de controlador.
Por qué no puedes conectar un motor directamente a Arduino
El problema no es el voltaje. Es la Intensidad (Amperios) que proporciona Arduino. La Intensidad/Corriente es la cantidad de electrones que circulan por un conductor cada unidad de tiempo, y Arduino a duras penas puede dar 50mA (miliamperios). Un motor DC estándar consume unos 1000mA. Uno verá que los números no cuadran.
La solución es utilizar un controlador de motores. En cierto modo se comporta como un interruptor, cuando se cierra deja circular corriente a través de sí. Sólo que, en vez de activarse manualmente, es activado mediante un microcontrolador y además es capaz de regular la velocidad del motor.
Simplemente conectando estos controladores y con un poco de código es posible hacer funcionar un motor o cualquier otro artefacto que necesite mucha energía para funcionar.
Con un transistor NPN y un diodo y una resistencia es posible crear un controlador de motores casero fácilmente. Y por una pequeña fracción de lo que costaría prefabricado.
¿Cómo funciona un Transistor NPN?
El transistor es un componente capaz de amplificar o disminuir la corriente que circula por él. Es como un interruptor, pero se abre y cierra mediante corrientes eléctricos. El transistor NPN tiene tres patas, Colector, Base y Emisor:
NOTA IMPORTANTE: La mayoría de transistores NPN tienen las patas en este orden (CBE). Sin embargo, algunos modelos tienen las patas al revés de como está la imagen (EBC). Antes de usar un transistor, mira siempre la documentación para saber cuál es su orden. Si tienes dudas, dime el modelo en los comentarios y te ayudaré.
Según la corriente que pase por la Base, el transistor dejará pasar más o menos intensidad del Colector al Emisor, de tal manera que el transistor actúa como un interruptor. Si no hay corriente en la base se dice que el transistor está en Corte. Si la corriente en la Base es muy alta, se dice que el transistor está en Saturación y actuará como un interruptor cerrado.
Material
- Transistor NPN
- Díodo
- Resistencia (de 1 kΩ aproximadamente)
- Hilo conductor
- Arduino
- Motor y baterías. Las baterías deben ser suficientes para alimentar el motor
Circuito
Alimentaremos Arduino y el motor independientemente. El microcontrolador enviará un pulso a la Base del transistor y éste dejará pasar corriente entre su Colector y Emisor, cerrando el circuito y permitiendo que el motor se mueva. Aquí presento dos circuitos: ambos son iguales, pero uno es esquemático y el otro está en fritzing. ¿Para qué sirve el díodo del motor? Los motores DC, cuando se reduce rápida y drásticamente el voltaje que se les proporciona, provocan un pico de voltaje elevado durante un momento que puede dañar la placa. El diodo evitará este efecto (aquí hay una explicación más detallada) y te ahorrará fortunas en reemplazos. Este diodo se conoce como Flyback Diode.
La resistencia es por seguridad, por si se produce algun fallo y parte del corriente que circula por el transistor de desvía a Arduino. Con 9V no pasará nada. Con 60 voltios, sí.
Si utilizas Arduino ¿qué código hay que cargar? El ejemplo oficial de Fade bastará. Este código envia un pulso analógico a través del Pin Digital 9, justo lo que se necesita para controlar el transistor.
/* Fade This example shows how to fade an LED on pin 9 using the analogWrite() function. This example code is in the public domain. */ int led = 9; // the pin that the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup routine runs once when you press reset: void setup() { // declare pin 9 to be an output: pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // set the brightness of pin 9: analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(30); }
Recuerda revisar el esquema antes de probarlo. Los humanos tenéis un don para causar todo tipo de problemas en los circuitos. Si todo ha funcionado como debía verás que el motor se enciende, va aumentando de velocidad y se para.
Y ya está, tienes tu primer controlador de motores caseros. Este es el controlador más sencillo que puedes fabricarte, y como has visto sólo puede controlar la velocidad de giro. Para controlar también la dirección, se necesitan circuitos un poco más complejos, como el Puente-H.
Final de línea.
Que interesantes enseñansas para profesionales, pero tambien podrian servir para los aficionados, me guataria que fuesen mas sencillas las explicaciones para mi que soy aficionado sin muchos conocimientos sobre electronica, pero me encanta ver estos conocimientos faciles para los profesionales. en resumen gracias por conpartir tan valiosos conocimientos, que tanto han costado a sus descuibridores a traves de la historia. en hora buena…
Hola, me encanta el toque unidad basada en el carbono que le das jsjjsj
¿se podria alimentar tanto arduino como DC motor con la misma fuente? Gracias
Sí, pero siempre vigilando que el voltaje de tu batería y amperaje no supere el límite que soporta la placa Arduino.
Final de línea.
Muy buen blog. Me encuentro armando un circuito con compuertas lógicas, donde la salida final que controla al motor tiene una intensidad de corriente demasiado baja como para encenderlo, quisiera saber si en estos caso también tendría que usar el Diodo Flyback, ¿o las compuertas lógicas no correrían el riesgo de quemarse?
De antemano, millón gracias.
Hola! Supongo que si la intensidad de corriente es muy baja, no haría falta. Aún así no cuesta nada ponerlo.
hola, me puedes guiar por favor. Te lo agradecería muchísimo. Estoy iniciando en el área del arduino. Deseo conectar un motor paso a paso unipolar (MOTOR-STEPPER) con dos pulsadores (uno que le de el giro a la derecha y el otro a la izquierda.) pero no he podido.
Buen dia, he montado el circuito varias veces, el pwm va de 0 a 5 volteos, que es el valor de 0 a 255, tengo una fuente externa de 5v, pero cuando pongo el valor de 128 en el arduino, el pwm de la salida 9 si me respeta el valor de la mitad del voltaje, pero en la fuente externa baja a 4V entonces no logro que este sincronizado con el pwm, que varia de acuerdo a 0 a 255. Que podria estar mal? Gracias de antemano
Puede ser que no haya suficiente voltaje para alimentar todos los componentes que tienes conectados?
Bacan la electrónica y la filosofía very goood…..saludos, una pregunta es posible variar la velocidad de forma voluntaria o solo está automatizado para que se encienda, aumente de velocidad y se detenga.
Saludos, Marlon. Con este código no, pero puedes montar el mismo circuito y cambiar la velocidad con un potenciómetro. Sólo tienes que leer el valor de éste y pasarlo como parámetro a la función analogWrite.
Final de línea.
buenas noches ! necesito ayuda por favor.
relize el montaje del circuito , pero se activa el motor de 9 voltios automaticamente , como si mi arduino uno tuviera las salidas en high todo momento. gracias
Saludos, Andrés.
En ese caso lo más probable es que hayas conectado mal el circuito, o que el transistor que hayas usado no sea un NPN.
Final de línea.
Hola, ayer probando unos ventiladores de capa en mi impresora 3d, se quemo lo que aparentemente es un transistor SOT-23, creo que hice un cortocircuito sin querer.
¿Al hacer un cortocircuito a la salida de los conectores de los ventiladores, “solo” se quema el transistor?
La placa es una gt2560, pero las modificadas para las impresoras 3D.
El problema es que encima del transistor pone “a9kv” y no he encontrado nada referente a ese código
No tiene porqué. Puede haberse dañado también cualquier otro componente que tuvieras conectado.
Final de línea.
hola, qisiera saber si me podrian ayudar con una duda, ¿cuál es el valor decimal que debe enviarse a un pwm de 8 bits por medio de un transistor que active un motor al 30% de su velocidad nominal? [no sabia que equivalia a gritar]
Saludos de nuevo. Eso depende en gran medida del transistor que hayas elegido, y del voltaje de la batería que alimenta el motor. Para que el motor vaya al 30% de su velocidad nominal necesita un 30% de su potencia máxima. Tienes que mirar las especificaciones de tu transistor para saber cuál es su Vth (este será el voltaje mínimo para que empiece a circular corriente entre C y E) y Vce (el voltaje máximo para que entre en saturación), teniendo en cuenta que si le proporcionas un voltaje en la Base igual a Vce, el transistor pasará todo el… Leer más »
GRACIAS!!!! [ESO SI LO GRITE.. LOL]
Esta vez creo que no hay problema.
HOLA, QISIERA SABER SI ME PODRIAN AYUDAR CON UNA DUDA, ¿CUAL ES EL VALOR DECIMAL QUE DEBE ENVIARSE A UN PWM DE 8 BITS POR MEDIO DE UN TRANSISTOR QUE ACTIVE EL MOTOR AL 30% DE LA VELOCIDAD NOMINAL?
Saludos, tankero.
En Internet, escribir en mayúsculas equivale a gritar y es de muy mala educación. Vuelve a escribir este comentario correctamente, por favor.
Final de línea.
Buenas noches, que tipo de diodo utilizaron?
Un díodo rectificador estándar. Asegúrate que pueda resistir el corriente del motor.
“Los motores DC, cuando se reduce rápida y drásticamente el voltaje que se les proporciona, provocan un pico de voltaje elevado durante un momento que puede dañar” *la placa*
Gracias, Antonio. Ahora lo cambio.
Final de línea.
[…] En esta sesión se siguió esta guía: http://robologs.net/2014/09/16/como-construir-un-controlador-de-motores-npn/ […]
Hola querido tr4nsduc7or ,este sistema para controlar motores dc es aplicable a un motor de 6kva y 48v? he conseguido uno se llama hs xqt-4chuv, me ofrecen un controlador de la marca curtis, pero investigando me di cuenta que eso solo no es suficiente también hace falta un programador de curtis para que todo funcione y es muy,muy,muy caro, yo solo quiero controlar las rpm, por favor ayúdame, muchas gracias.
Saludos, Manu. Si es un motor DC puedes utilizar este sistema, siempre que encuentres un transistor NPN que pueda proporcionar suficiente voltaje e intensidad sin quemarse.
Final de línea.
hola tengo un transistor npn D882 puedo utilizar este? y cual ceria la distribucion de sus patas ?
Depende del motor que quieras hacer funcionar. Para la mayoría de motores estándar de 6-12V debería funcionarte.
Para la distribución de sus patas mira el dibujo de la primera página de la documentación: http://www.st.com/content/ccc/resource/technical/document/datasheet/94/f8/66/07/d9/c8/40/55/CD00062867.pdf/files/CD00062867.pdf/jcr:content/translations/en.CD00062867.pdf
Espero que esto te ayude. Final de línea.
Hola, estoy haciendo algo igual que lo que has expuesto, salvo que yo le tengo que implementar un potenciómetro con entrada analógica y dos pulsadores (uno para dar marcha y otro para la parada). El caso es que no consigo que me arranque el motor, por el monitor en serie me da los valores lógicos de 255 y tal, y con el polímetro las tensiones son correctas, uso el transistor NPN 547B (el que viene incluido en el Starter Kit de Arduino), pero el motor lo único que hace es emitir un zumbido y parece ser que demanda más chicha,… Leer más »
Hola Ivanxu. Podrían ser muchas cosas, tendría que ver el circuito para saber exactamente cuál es el error. Pero puedes mirar: 1- Si el motor emite un zumbido, es casi seguro que le falta potencia. ¿La batería tiene el voltaje y el amperaje suficiente para alimentar todo el circuito? También es importante la velocidad de descarga de la batería (los Coulombs): puede ser que el motor gaste más Amperios que los que puede proporcionar la batería cada segundo. 2- ¿Has conectado bien el transistor? Hay NPN que tienen las patas ordenadas de forma diferente. 3- Pruébalo con una resistencia menor… Leer más »
Hola buenos días muy buen post felicitaciones. Mi consulta es la siguiente estoy necesitando usar un transistor que comandado con arduino deje pasar la energía por sólo 5 ms., y corte. Como puedo hacerlo o configurar rl arduino?Desde ya muchas gracias
Goma buenos días muy buen post felicitaciones. Mi consulta es la siguiente estoy necesitando usar un transistor que comandado con arduino deje pasar la energía por sólo 5 ms., y corte. Desde ya muchas gracias
como seria el codigo de este circuito
https://www.youtube.com/watch?v=so1ERDSITZY
No puedo decirlo sólo con sólo ver el vídeo. Deberías preguntarlo al autor.
Final de línea.
glare puedo implementar esto para el giro de motor como le aria
Supongo que la duda es para mí. Si quieres un controlador de motores que además controle el giro, necesitas un circuito un poco más elaborado: el Puente H.
Puedes hacerlo con cuatro transistores NPN (o dos PNP y dos NPN) y cuatro resistencias, como en la imagen que te he enlazado en este comentario.
Final de línea.
Me puedes pasar el esquematico en fritzing no lo entiendo asi y como le haria en la programacion?
Si quieres dedicarte a la electrónica, deberías aprender a leer esquemáticos que no sean en Fritzing. Aún así, te he adjuntado el esquema. Necesitarás 2 transistores PNP, 2 NPN, una batería de 5V y una placa Arduino.
Y recuerda, NO conectes el motor directamente a la placa Arduino.
En cuánto al código, si quieres que el motor avance escribe:
Y para que gire al revés:
Final de línea.
Y el esquema es este.
Hola, el transistor 2222a me puede servir para un motor de 3v y 0.1A ??
Gracias
¿Puedes pasarme el datasheet de tu modelo?
Final de línea.
Hola, gracias por responder. Probé el transistor y funcionó. Funcionó con un voltaje máximo de 2.67v que esta bien para lo que preciso.
Gracias!
Hola buenas, Antes de nada muchisimas gracias por el blog, es de gran ayuda para los que nos estamos inciando. Por otro lado queria hacerte una pregunta, he conectado el sistema tal y como lo tienes tu con dos variaciones, la resistencia que he puesto es de 330ohm y el transistor es el mps2222a. He notado que el led se enciende, por tanto imagino que el circuito esta correcto pero el motor hace un ruido sin arrancar, y el transistor se calienta en exceso y empieza a oler a quemado. He probado el motor directamente en la pila de 9… Leer más »
Saludos, Dani.
He mirado la documentación de tu transistor (MPS2222) y he visto que es de los pocos transistores NPN que tiene el orden de las patas al revés de como dice mi tutorial.
En vez de C-B-E, tu transistor tiene el orden E-B-C visto desde el lado plano, de ahí que no te funcione.
http://html.alldatasheet.com/html-pdf/555283/WINNERJOIN/MPS2222/600/1/MPS2222.html
Lamento mucho que hayas tenido este problema por una inexactitud de mi tutorial. He añadido una nota para que nadie más se encuentre con tu problema.
Final de línea.
Hola de nuevo, no te preocupes para nada, todo lo contrario te lo agradezco enormemente, he probado y aun así soy incapaz de hacer que el motor arranque. Hace sonido la bobina pero no arranca cargando el fade, el led se va encendiendo y apagando sin problema pero nada, el transistor comienza a calentarse y no hay nada que hacer!me tiene loco ya, no se que más probar!
muchas gracias!
¡Hey! ¿Has revisado la polaridad del Díodo? Si lo tienes al revés causarás un cortocircuito.
Hola, felicidades por este tutorial, es muy bueno, en serio! Tengo 2 dudas: 1. compré un carrito a control remoto que usaba 4.5 v (3 pilas) para funcionar, arranqué el controlador y puse un arduino y un motor driver l298n y un módulo de rf. Pude hacerlo funcionar pero no tenía la potencia adecuada para mover todo, además, cuando usaba el motor direccional y el trasero perdía mucha potencia; yo supongo que esto es porque el motor driver l298n consume voltaje y amperaje; si en vez de usar un múdolu fabricado hago algo parecido a este tutorial podré hacer lo… Leer más »
Saludos, humano.
1- Sí, puedes usar un transistor NPN, pero no creo que el problema sea el controlador. Probablemente te perdía potencia porque 4.5v es muy poco para alimentar cuatro motores. Mi consejo es que utilices una batería mayor.
2- Casi todo lo que sé de electrónica lo aprendí navegando por Internet (blogs, foros, guías…) y experimentando por mi cuenta. No sabría darte un buen libro para que puedas aprender.
Final de línea.
Gracias perodon si me veo torpe pero no se mucho de electronica a decir verdad aprendo solo a prueba y error 🙁 pero bien pasando al tema he probado el circuito y estaba alomentando el arduino con el usb asi que lo conecte a la misma bateria de 6v y he colocado un led para ver si funciona y efectivamente sube y baja la intensidad. el problema viene cuando conecto el motor, si lo conecto decae la corriente yni el led prende y el motor menos. el motor solo tiene estos datos QG Motor 6vDC 2400/2.5v RS-380 ROHS espero esto… Leer más »
Hola de nuevo, y perdona la tardía respuesta.
Si el LED varía la intensidad es evidente que el circuito es correcto, por lo tanto es problema de motor. Puede ser que la batería no tenga suficiente intensidad, o quizá el motor no funcione bien. Te recomiendo que intentes encontrar otro motor que pueda funcionar con menos voltaje e intensidad.
Por ejemplo, cuándo redacté este tutorial utilizé un pequeño motor que funcionaba con 2-4V y 1A, aproximadamente.
Final de línea.
PS: no te lo he dicho, pero mira también la polaridad del díodo. Podría ser este el problema.
Pues les comento // que tengo montado el circuito y con el motor y no funciona, he revisado el voltaje de salida y me entrega de 0 a 2 volts, si hace su labor de subir y bajar el voltaje eso es genial lo hace Arduino, pero lo que necesito es que me entregue un voltaje de 0 a 5 volts. Asi que la gran pregunta es como hago eso??? que tengo que agrgar o cambiar para que me entregue mas voltaje pues segun entiendo el PWM de android funciona en valores de 0 a 255 asi que a mi… Leer más »
No, no se tiene que modificar el circuito. Fíjate en el esquema del tutorial: el transistor tiene tres patas (C-B-E). Arduino envía un valor entre 0 y 255 a la pata B (la Base) y el transistor deja pasar una cantidad de corriente proporcional a este valor entre C y E. Arduino no proporciona ni voltaje ni corriente a los motores, porque como digo al principio del tutorial no tiene suficiente. El transistor, que actúa como un interruptor, es el que deja pasar el corriente de la batería para alimentar el motor. Los componentes que utilizas son correctos, aunque tampoco… Leer más »
muchas gracias lo montare y les cuento como me va pues un tengo que modificar mucho ese desarrollo
// Sabras como transmitir video desde una camara dslr a un dispositivo android?
Gracias.
muchas gracias soy nuevo en esto y estoy investigando asi que tengo algunas dudas espero me puedas ayudar.
primero el Diodo es un 4001 o 4004? y el npn podria ser el 2222a?
es que pretendo hacerlo con pwm variar la velocidad del motor sin el Potencionmetro fisico y usar arduino para controlar eso por medio de un blutooth y android.
Bueno espero me puedan ayudar de antemano Gracias.
Hola, Carlos.
El transistor que usé yo era un 2n2222, pero el 2222a te servirá. En cuanto el díodo tanto el 4001 como el 4004 deberían funcionarte bien.
Final de línea.
[…] Controlador de motores con Transistores NPN […]
Hola , salaudos…esta implementación me funciono muy bien pero ahora quisiera poder hacerlo con un motor brushless y 3 medios puentes H , pero la programación no logro conseguirla quizá puedas ayudarme