Cómo empecé con Arduino
danielperez.webcindario.com  Ing. Daniel Pérez LW1ECP  danyperez1 { arrroba } yahoo.com.ar


Recopilación de mis primeras experiencias con Arduino, por si a alguien le guía en las suyas.
- Conseguí un Arduino (compré lo más barato, un Nano chino; si cuando haga algo en serio me queda chico no lo lamentaré) y un cable miniUSB.



- El vendedor me dijo que hará falta el 'driver (controlador) para CH340'. CH340 es el integrado de interfase con USB de este chino.
  (El Arduino que Ud. tenga puede que traiga los tradicionales FT232RL o ATMEGA16u2).
  Lo busqué en web y lo bajé a una carpeta del rígido.
- Lo enchufo por 1a vez en USB.
- Salta 'No se pudo instalar el soft de controlador de dispositivo USB2.0-Serial'
  Nota: mi PC la tengo seteada para 'No instalar nunca software de controlador de Windows Update'
- Inicio -> Panel de Control -> Administrador de Dispositivos (se encuentra más fácil si no estoy en modo 'Ver por Categoría')
- En 'Otros Dispositivos' aparece el 'USB2.0-SERIAL' con un ! amarillo -> clic derecho -> actualizar controlador -> Buscar en el Equipo -> ir hasta donde lo puse.
- Instalando -> 'Finalizó la instalación para este dispositivo: USB-SERIAL CH340 (COM3)'
- Ahora se borra de 'Otros Dispositivos' y aparece en 'Puertos (COM y LPT)' como 'USB-SERIAL CH340 (COM3)' y sin el  '!' amarillo.
- Ahora necesito un entorno de programación para Arduino. Por ejemplo el que ofrece la misma empresa:
  www.arduino.cc -> Sign In -> Create New Account -> elijo nombre y contra -> me mandan mail, ingreso -> termino en https://create.arduino.cc/
- Puedo elegir entre descargar el entorno a mi PC (Desktop IDE), o usar el online (Create, en
create.arduino.cc). Quiero el Desktop IDE.
  En https://www.arduino.cc/en/Guide/Windows están las instrucciones del Desktop IDE
  Está el instalador y el zip. Elijo el zip porque permite una instalación portable (no toca cosas de Windows).
- https://www.arduino.cc/en/Main/Software -> 'Windows ZIP file for non admin install' (son 159MiB)
- Adentro del zip hay una carpeta 'arduino-1.8.2', la descomprimo en c:\Archivos de Programa\ o a otro lado si Windows no me deja. Son 5195 archivos, 416MiB.
- Según instrucciones en https://www.arduino.cc/en/Guide/PortableIDE agrego una carpeta 'Portable' a las que se descomprimieron.
- Ejecuto arduino.exe -> Herramientas -> Placa: selecciono Nano. Procesaror: AtMega328. Puerto: COM3.
- Archivo -> Ejemplos -> 01.Basic -> Blink ->  Subir (ícono flecha derecha) -> Compilando... -> veo que comienza a parpadear el LED 'L'. Eureka!!!
- Archivo -> Ejemplos -> 01.Basic -> AnalogReadSerial ->  Subir -> Compilando... -> Herramientas -> Monitor Serie.
  Van saliendo números caprichosos, por captación de zumbido y ruido en el contacto A0 (entrada analógica)
  O bien, usar el SerialPlotter y grafica como un osciloscopio lento.
- Al otro día ahora Windows dice que el Arduino está en COM4!?! Y eso que en Panel de Control -> Adm de Disps -> Puertos no figura ocupado con otra cosa el COM3!

Bueno, esta es la parte exitosa de la historia. Si quiere aburrirse, o por si le pasó lo mismo, antes había sufrido esto:
La 1a vez yo no quería bajar nada, entonces en https://create.arduino.cc/ -> Arduino Web Editor -> me dice que tengo que instalar un 'plugin', y que está en https://github.com/arduino/arduino-create-agent y http://create.arduino.cc/getting-started/plugin pero no hay nada que se llame 'plugin'. Después de muchas vueltas y googlear de repente me avivo de que se llama "ArduinoCreateAgent-1.1-windows-installer.exe", son 10 megas! Cómo, no era que no había que instalar nada? Mejor voy a https://www.arduino.cc/en/main/software pero el zip instalador del IDE son 166MB que descomprimidos son 436!!! Vuelvo con el caballo cansado a la opción web: analizo con antivirus y ejecuto el dichoso Agent. "At the end of the plugin installation you will be redirected to the Arduino login page", no pasó eso. Tipeo manualmente https://create.arduino.cc/editor Ahí me dice que no detectó plugin, el help me dice que veififique si está el ícomo del plugin en la barra de arriba o abajo, pero no sé qué forma tiene el ícono. Tras un rato aparece "we are about to install some drivers to use Arduino/Genuino boards". Pero si ya tengo el driver! Instala el "Arduino USB Driver", editor: Arduino SRL. Le dije que NO.
Ahora, cada vez que voy a hacer algo con el Arduino:
- Lo enchufo a USB. En Administrador de Dispositivos me me dice que ahora es COM6!
- https://create.arduino.cc/ -> Web Editor -> user y pass -> dice 'Loading Arduino Create'
- a la derecha del botón de Upload hay un símblo de conexión cortada con una X roja: "-x- Arduino Nano"
- luego 'No plugin connection. Uploading is disabled until you reconnect'
- Aunque esté el -x- a veces el botón Upload (flecha hacia derecha) está en gris permanentemente. Otras, se activa tras unos segundos. Entonces sí puedo upload.
Y siguieron las peripecias pero me cansé de seguir anotando. Todo se normalizó... después de reinstalar Windows, AUNLC...


Interfase entre lógicas de 5 y 3,3V
La tendencia es hacia sistemas de 3,3V. Mientras dure la transición, existirá la necesidad de interconectar sistemas de ambos mundos. Se venden plaquetitas adaptadoras de nivel. Pero hay quienes que dicen tener éxito con conexiones directas. Veamos el caso de conectar una salida de un sistema de 3,3V a una entrada de 5:



Cuando la salida de 3,3 está en nivel bajo, su tensión es 0V, y si se conecta directamente a la entrada de 5 va perfectamente.
Pero su nivel alto será de 3,3V, y la entrada de 5 le gustaría que fuese lo más cercano a 5 posible. Alcanzará?
Al menos en el caso del ATMEGA328 usado en el Arduino Nano, alimentado con 5V, el pdf de datos pide que el nivel bajo aplicado a una entrada sea menor que 1,5V y que el alto sea mayor que 3,0V. Y entre esos valores, no se sabe cómo lo interpretará.
O sea que así nomás estamos bien. Pero podríamos estar mejor.
- Le estamos dando apenas 0,3V por encima del mínimo, o sea que si los cables entre ambos sistemas captan un pulso de ruido mayor que 0,3V hacia abajo se corre el riesgo de que la entrada se confunda.
- Además, en las compuertas CMOS cuando las tensiones de entrada no son lo suficientemente cercanas a 0V o Vdd, aunque interpreten correctamente el nivel, comienza a haber un consumo en el MOS de canal N o el P respectivamente. Otra razón para ser generosos con los niveles.
- Una más: si los 5V están en más de ese valor, y los 3,3 en menos, empeora el margen.
Sumando la caída de un 1N4148 vemos que el nivel bajo empeora un poco, pero el margen del alto mejora a 0,72V. Probé también cn un LED infrarrojo como el de los remotos, que tiene mayor caída, y el nivel 0 ya queda un poco demasiado alto, pero se puede tener en cuenta para conectar a otras familias CMOS que tengan niveles simétricos, como la 74HC que pide menos de 1,5V tanto con respecto a 0 como a 5. O sea 3,5V en el alto: si le aplicáramos sólo 3,3 estaríamos en la zona gris.
Y al revés, conectar una salida de 5 a una entrada de 3,3?. El nivel alto será abundante, demasiado abundante. Las entradas CMOS suelen tener diodos de potección: uno a masa y otro a Vdd, que normalmente están en inversa. Si la tensión de entrada supera la Vdd más aprox. 0,6V conduce el diodo de arriba, tomando corriente desde la salida de 5. No es probable que se queme nada. Como la corriente circulante termina yendo a la línea de 3,3V, podría hacer que ésta se vaya para arriba. Se aconseja intercalar un R de p. ej. 10k en serie con la entrada. Si es importante no degradar la velocidad de la conexión, agregar 47pF en paralelo con el R.


Alimentar consumos adicionales
Si el Arduino se alimenta desde una fuente específica de 5V es lógico que las cosas conectadas alrededor de él también sean de 5V, o 3,3. Pero si la alimentación principal es p. ej. de 12V, y se está bajando a 5 a propósito para el Arduino, hay probabilidad de que la mejor opción es que los periféricos de alto consumo sean de 12V.
Veamos esta popular placa de 8 relés. Por cada uno tiene un optoacoplador y un transistor. Opino que el opto es innecesario, pero
así es esta placa y sus clones. No encontré datos del fabricante sobre su consumo, sólo dice que el relé se energiza poniendo un 0 en la entrada, y que en ese estado la corriente de entrada está entre 15 y 20mA. Esa corriente activa su optoacoplador y enciende su LED.




Hay una Vcc para los primarios de los optos, y una 'JD-Vcc' para los relés, ambas de 5V, que mediante un jumper pueden puentearse, o alimentarlas con fuentes distintas (Vcc desde Arduino y JD-Vcc con fuente aparte).
La hoja de datos de ese modelo de relé especifica que consume máx. 90mA. En el peor caso, si se energizan los 8, y está colocado el jumper, el consumo total de relés y entradas sería de (90+20)*8=880mA, más el interno del Arduino. Pongamos 900mA total-total.
Esto era la consulta de alguien que iba a alimentar todo desde 12V. El regulador interno del Arduino, si le entramos con 12V, disiparía 0,9A * (12 - 5)V = 6,3W. Mmm... ese regulador es capaz de 1A y de esos watts, según su hoja de datos, pero sólo si se le pone un generoso disipador, y en el Arduino disipa lo que puede en la plaqueta... No, yo los 5V para los relés los obtendría con un 7805 con disipador, conectado a JD-Vcc, y que el Arduino regule sólo lo que va a consumir él mismo y los optos del módulo.  Unir la entrada del 7805 con la Vin del Arduino, y aplicarles 12V en serie con un R que haga caer la tensión a 7,5V ente máximo consumo, para que trabajen descansados ambos reguladores.
Pero por qué no usar relés de 12V? Para una misma tecnología de relés en los que sólo cambia la tensión de la bobina, la corriente es inversamente proporcional a esa tensión de diseño. Efectivamente, el SRD-12VDC-SL-C consume máximo 37,5mA. Abajo a la derecha está el esquema propuesto. En este caso, el relé se energiza con un 1 en la salida del Arduino.


Un caso intermedio de consumo
Alguien necesitaba conectar un display GLCD 128x64 Winstar WDG0151-TMI al Arduino Mega, alimentado desde su pata de 5V, y todo desde una batería de 12V.
La lógica del display consume 3,4mA máximo desde los 5V, la iluminación trasera sugieren fijarla en 64mA aplicados con un R desde los 5V. Como la V del LED es de 3,5V la R será de (5-3,5)/0,064=23,4 ohm, se usará 22.
Y el Arduino, no encuentro especificación de su propio consumo, pongamos que sea 30mA.
Total=100mA. Usando el regulador interno del Arduino, con la batería en máxima tensión (cargando) éste disipará 0,1A x (14,4V - 5V) = 0,94W. Este regulador es un modelo SMD que usa la plaqueta como disipador, no tendrá problemas en disipar esa potencia.
Pero será mejor poner una R en serie con los 12V para que baje a 7,5V en caso de máximo consumo. El valor sería (12-7.5)/0,1=45 ohm. Esto hará trabajar más frío al regulador.
En breve: poner 47 ohm entre los 12V y el contacto Vin, tratar de lograr la condición de máximo consumo posible, y verificar cuánto vale Vin: si cae a menos de 7,5V achica la R.
PLAN B: por qué alimentar la iluminación del display desde los 5V? Que se alimente desde los 12V con un resistor mayor, y nos olvidamos de la disipación del regulador interno.
PLAN C: no contacté nuevamente al interesado para preguntarle por qué pensaba en una batería de 12V. Mirando un circuito de Mega2560 veo que el regulador interno es del tipo LDO (Low DropOut, baja caída) que se conforma con 1,2V entre entrada y la salida de 5V, o incluso 1V con bajas corrientes. Esto significa que bastaría con meter 6,2V en el contacto Vin. Ojo, no en el conector enchufe porque en ese además hay un diodo en serie. Y una batería de 6V siempre tiene más de 6V salvo que esté muy descargada, con riesgo de estropearse por sulfatación. Y aun en ese caso, si el regulador interno deja caer su salida en 0,1 o 0,2V, cabe analizar si realmente afecta el funcionamiento del sistema.


Entrar por la salida de 5V?
Podría prescindirse del regulador interno de 5V y alimentar el Arduino con la misma fuente de 5V usada para otros circuitos. Pero por alguna razón
la hoja de datos del Mega2560 dice "Proveer tensión por los pines de 5V o 3,3V saltea el regulador, y puede dañar la plaqueta. No lo aconsejamos". Por qué? Explicaciones que se me ocurren:
- Si por un accidente se cortocircuita a masa la Vin del regulador habiendo tensión a su salida, al integrado no le gusta porque su transistor de paso queda con Vce invertida. Aunque es difícil que ocurra. Podría ser si el C de entrada es un tantalio, que les gusta ponerse en corto.
- O bien, el C a masa que tiene conectada la entrada el LDO está descargado en el momento de alimentar desde la salida.


Mover MOS de potencia
Los MOS más comunes necesitan algo más de 3V en compuerta para empezar a conducir. Para conducción plena les gusta 10V. Alcanza con 5V?  Hay modelos llamados 'logic level' que tienen un umbral de aprox. 2V. Pero no descartemos uno común, simplemente habrá que usar un modelo sobrediseñado en corriente y mirar bien la hoja de datos.
Tomemos el IRFZ44N, el más económico que encontré en ML Argentina: 1u$d, 55V, hasta 49A @ 25 grados en cápsula, 35A @ 100 grados, menos de 17,5 miliohm. La hoja dice que la tensión de umbral Vgs(th) puede ser cualquier cosa entre 2 y 4V. Qué falta de respeto al diseñador! Pero bueno, adoptemos que las curvas típicas están dadas para Vgs(th)=3V.


Entonces, si queremos saber cómo se comportará con 5V un especimen 'duro', que tenga Vgs(th)=4V, tomemos las curvas normales pero suponiendo 4V. Vemos que es capaz de conducir más de 10A con Vds=0,5V, lo que es suficiente para muchas aplicaciones.
También podemos adaptar la ya mencionada técnica de desplazar niveles con una juntura, si se tiene alguna alimentación mayor a 5V. Con un LED rojo le sumamos aprox. 1,6V. El MOS seguirá cortado con el nuevo nivel bajo, pero con el alto tendrá más ganas de conducir.


Tengo muchos relés pero son de 6V. Andarán con 5?
Normalmente los relés pegan con bastante menos que la V nominal. Pero para estar tranquilo asegúrate que peguen al aplicarles 4V. Porque al tomar temperatura por calentamiento propio, más lo que suba la temperatura dentro del gabinete, y que encima sea un día de calor, ponele que aumente 40 grados. La R del cobre aumenta 0,4% por grado, así que subirá un total de 16%. La tensión necesararia para mantener la I (que es lo produce el campo) habrá subido de 4 a 4,64V. Y a eso súmale la V de saturación del transistor. Por eso debes probarlos con 4V en frío. O con menos si  se prevé un ambiente de trabajo aún más caliente. Si la aplicación es crítica, o sea que puede haber un efecto grave si un relé no llega a pegar, olvídalos y usa relés de 5.
También deberás trabajarlos con menos corriente en los contactos porque estarán haciendo menos fuerza que con la tensión nominal.


Los sitios de Arduino están sólo en inglés
Antiguamente tenía traducciones a varios idiomas hechas por voluntarios. De repente las eliminaron, hasta la italiana. Pero gracias a Archive.org todavía puede accederse a la versión en castellano poniendo www.arduino.cc/es en su buscador. Son válidas las capturas hasta la del 19/08/2014:
https://web.archive.org/web/20140626042522/http://www.arduino.cc:80/es/
Pero contienen una advertencia de que mucho material no refleja la actualización 2010 del material en inglés.

<eof>