Archivo de la etiqueta: Pines Arduino

Entradas y Salidas en Arduino

Arduino dispone de una serie de entradas y salidas digitales y analógicas programables que es la base de manejo de Arduino. Es fundamental conocerlas para empezar a programar Arduino.

En Arduino UNO la disposición de los pines de entrada y salida son:

En el Wemos D1 Mini la disposición de los pines de entrada y salida son:

En todas las placas los pines son multifunción o multipropósito, es decir en función de la configuración tienen una funcionalidad u otra.

Pines Digitales

Una señal digital es un tipo de señal generada por algún tipo de fenómeno electromagnético en que cada signo que codifica el contenido de la misma puede ser analizado en término de algunas magnitudes que representan valores discretos, en lugar de valores dentro de un cierto rango. Por ejemplo, el interruptor de la luz sólo puede tomar dos valores o estados: abierto o cerrado, o la misma lámpara: encendida o apagada.

En arduino y todas las placas compatibles los pines digitales se describen y tienen la propiedades siguientes:  http://arduino.cc/en/Tutorial/DigitalPins

En arduino y placas compatibles para tratar las entradas y salidas digitales usamos las siguientes funciones:

En la imagen siguiente se muestra el estado por defecto de una I/O digital en un microcontrolador de Arduino. Se ha simplificado con interruptores la compleja electrónica que hay dentro. Por defecto los digital I/O pins están configurados como inputs en un estado de alta impedancia (equivalente a una resistencia de 100 Mohms en frente del pin), es decir, SW3 a ON y no hace falta llamar a la función pinMode() aunque es recomendable para aclarar el código.

  • PinMode(x, INPUT) –> SW3 = ON (resto a OFF). Los valores leídos serán aleatorios si el pin de Arduino está al aire. El pin está en un estado de alta impedancia (resistencia de 100 Mohms).
  • PinMode(x,INPUT_PULLUP) –> SW3 = ON & SW4 = ON (resto a OFF). Los valores leídos sin nada conectado al pin es HIGH. La Resistencia R1 tiene un valor dependiendo del microcontrolador, pero tiene un valor entre 20kOhm y 150kOhm.
  • PinMode(x, OUTPUT) & digitalWrite(x,HIGH) –> SW2 = ON & SW1 = +5V (resto a OFF). Estado de baja impedancia, no hay resistencia interna y es necesario poner una resistencia adecuada a la salida el pin para no superar los 40mA (source) máximos admitidos
  • PinMode(x, OUTPUT) & digitalWrite(x,LOW) –> SW2 = ON & SW1 = GND (resto a OFF). Estado de baja impedancia, no hay resistencia interna y es necesario poner una adecuada para no superar los 40mA (sink) máximos admitidos

Pines Analógicos

Una señal eléctrica analógica es aquella en la que los valores de la tensión o voltaje varían constantemente y pueden tomar cualquier valor. En el caso de la corriente alterna, la señal analógica incrementa su valor con signo eléctrico positivo (+) durante medio ciclo y disminuye a continuación con signo eléctrico negativo (–) en el medio ciclo siguiente.

La señal digital obtenida de una analógica tiene dos propiedades fundamentales:

En arduino los pines analógicos se definen y tienen las propiedades siguientes: http://arduino.cc/en/Tutorial/AnalogInputPins

En arduino para tratar las entradas y salidas analógicas usamos las siguientes funciones:

Entradas analógicas:

Las Salidas PWM (Pulse Width Modulation) permiten generar salidas analógicas desde pines digitales. Arduino Uno no posee salidas analógicas puras, sin embargo el Arduino Due sí tiene salidas analógicas puras mediante dos DAC. El arduino due, posee dos salidas analógicas puras mediante dos conversores digital a analógico. Estos pines pueden usarse para crear salidas de audio usando la librería correspondiente.

Diferentes valores de una señal PWM:

Para el Wemos D1 Mini, solo hay un pin de entrada analógica y de pines con capacidad PWM como indica esta imagen:

Anuncios

Arduino vs Raspberry Pi

Desde hace tiempo han irrumpido en el mercado distintas soluciones de placas PC  también llamadas “Single Board Computer” (SBC), como Raspberry Pi, Beaglebone, pcduino, etc… Pero estos sistemas son diferentes a las placas con microcontrolador como Arduino, nanode, waspmote, freescale freedom, etc…

Existe la creencia popular que Arduino es una Raspberry Pi pero con menos capacidades. Obviamente si comparamos los valores de memoria RAM, frecuencia de CPU y capacidad de almacenamiento, podemos creer que así es, pero se trata de dos placas con funcionalidades diferentes.

Analogía: Arduino es un Autómata programable y Raspberry Pi es un Ordenador, así que a la hora de decidirse que utilizar para un proyecto deberíamos pensar si usar un autómata o un ordenador.

Las diferencias principales entre una Raspberry Pi y un Arduino son:

  • Número de entradas y salidas disponibles y sus capacidades de corriente y voltaje.
  • La programación, Arduino se usa para programación en tiempo real, en Raspberry Pi se usa para programación intensiva con gran cantidad de datos.

Estas diferencias se deben a que Arduino tiene un microcontrolador (MCU) y Raspberry Pi tiene un microprocesador. Un microcontrolador es un HW optimizado no para capacidad de cálculo sino para interactuar con el exterior, con sensores y actuadores.

Para más información: https://aprendiendoarduino.wordpress.com/2015/03/29/microcontrolador-vs-microprocesador/

A la hora de elegir uno u otro para hacer un proyecto, debemos usar cada uno en la tarea que mejor sabe hacer. Por ejemplo, la recolección de datos, supervisión del entorno, envío de alarmas, accionar motores, etc.. lo dejaremos para el arduino, el tratamiento de los datos recogidos, el interfaz gráfico de usuario, envío de correos, etc… lo dejaremos para una una raspberry pi o un ordenador.

Comparativa:

Un ejemplo de que Raspberry Pi no es la mejor opción para algunos proyectos es por ejemplo para manejar un neopixel https://www.adafruit.com/products/1463, estos dispositivos requieren una señal de datos con unas especificaciones de tiempo muy concretas para funcionar. Puesto que Raspberry Pi usa un sistema operativo multitarea Linux, no dispone de un control de tiempo real sobre los pines.

Aun así es posible hacer usar neopixel con Raspberry Pi pero de una forma un poco más complicada que con un Arduino. https://learn.adafruit.com/neopixels-on-raspberry-pi/overview

Para acabar de entenderlo, este video explica perfectamente la diferencia entre un Arduino y una Raspberry Pi: https://www.youtube.com/watch?v=7vhvnaWUZjE

Puertos Arduino vs Raspberry Pi

Pinout Raspberry Pi: https://pinout.xyz/

IMPORTANTE: Todos los pines de Raspberry Pi tienen un nivel lógico de 3.3V incluido puerto serie, bus I2C y SPI. Los pines de Raspberry Pi no soportan entradas de 5V. Para Arduino UNO el nivel lógico es de 5V.

Cada pin de Raspbery Pi soporta un máximo de 16mA hasta un total de 51mA para toda la placa. Arduino Uno soporta un máximo de 40mA por pin (20mA recomendado) y hasta 300mA en total para la placa.

Práctica: ver una Raspberry Pi en funcionamiento, entorno gráfico y entorno CLI.

Ejemplo de blink con una Raspberry Pi: https://gist.github.com/Indavelopers/2d2597d2d4e0a736ab1ae0d7a419bfe1

Para finalizar varios enlaces interesantes sobre la diferencia entre Arduino y Raspberry Pi:

Arduino Uno a fondo. Mapa de pines

Los Arduino y en general los microcontroladores tienen puertos de entrada y salida y de comunicación. En Arduino podemos acceder a esos puertos a través de los pines.

Otro aspecto importante es la memoria, Arduino tiene tres tipos de memoria:

  • SRAM: donde Arduino crea y manipula las variables cuando se ejecuta. Es un recurso limitado y debemos supervisar su uso para evitar agotarlo.
  • EEPROM:  memoria no volátil para mantener datos después de un reset o apagado. Las EEPROMs tienen un número limitado de lecturas/escrituras, tener en cuenta a la hora de usarla.
  • Flash: Memoria de programa. Usualmente desde 1 Kb a 4 Mb (controladores de familias grandes). Donde se guarda el sketch.

Más información en: http://arduino.cc/en/Tutorial/Memory y https://aprendiendoarduino.wordpress.com/2015/03/29/memoria-flash-sram-y-eeprom/

Placa Arduino Uno a fondo:

Especificaciones detalladas de Arduino UNO: http://arduino.cc/en/Main/ArduinoBoardUno

Microcontroller & USB-to-serial converter ATmega328P & Atmega16U2
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 6
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz

Aspectos más destacados de Arduino UNO.

  • No necesita de un cable FTDI para conectarse al MCU, en su lugar uso un MCU especialmente programado para trabajar como conversor de USB a serie.
  • En la revisión 3 de HW nuevo pineado
  • Alimentación: vía USB, batería o adaptador AC/DC a 5V, seleccionado automáticamente. Arduino puede trabajar entre 6 y 20V, pero es recomendado trabajar entre 7 y 12V por las características del regulador de tensión.
  • Puerto Serie en los pines 0 y 1.
  • Interrupciones externas en los pines 2 y 3.
  • Built-in LED en el pin 13.
  • Bus TWI o I2C en los pines A4 y A5 etiquetados como SDA y SCL
  • El MCU ATmega328P tiene un bootloader precargado que permite cargar en la memoria flash el nuevo programa o sketch sin necesidad de un HW externo.
  • Arduino Uno dispone de un fusible autoreseteable que protege el puerto USB de nuestro ordenador de cortocircuitos y sobrecorrientes. Si se detectan más de 500mA salta la protección.

En este pdf podemos ver el esquema de un Arduino UNO, muy importante conocerlo para evitar hacer maniobras que lo dañen: http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

Documentación del Microcontrolador muy importante cuando necesitemos hacer operaciones avanzadas con Arduino: http://www.atmel.com/Images/doc8161.pdf. Por ejemplo: página 423 con un resumen de todos los registros o página 18 con detalle de cómo se distribuye la memoria SRAM o página 76 con detalle de los puertos digitales I/O y página 79 donde da el código para definir un pines a high y low y también como input pullup.

Están disponible los esquemas y diseño en formato Eagle http://arduino.cc/en/uploads/Main/arduino_Uno_Rev3-02-TH.zip. Para ver los esquemas podemos usar Eagle, se trata de un programa de diseño de diagramas y PCBs con autoenrutador:

Ejercicio: Ver esquemático y placa de Arduino UNO con eagle

Opción open source: http://www.kicad-pcb.org/ (recomendada)

También es importante conocer cómo están distribuidos los pines del MCU en Arduino:

Antes de empezar las prácticas y trabajar con el Arduino UNO, veamos 10 formas de destruir un Arduino, para saber que NO debemos hacer.

¡¡¡IMPORTANTE!!!: http://www.ruggedcircuits.com/10-ways-to-destroy-an-arduino/

La traducción: http://www.trastejant.es/blog/?p=192

Videos de como destruir un Arduino:

También es posible conseguir un “Arduino” gratis: https://aprendiendoarduino.wordpress.com/2015/02/25/como-conseguir-un-arduino-gratis/