Modulación por ancho de pulso (PWM)

En esta pequeña introducción a la programación mediante señales PWM veremos qué significa exactamente este concepto, analizaremos ejemplos de código en Arduino y veremos algunos casos prácticos.

Concepto de PWM

PWM son las siglas de Pulse Width Modulation, que en español se traduciría como modulación por ancho de pulsoUna señal PWM consiste en una señal con una determinada frecuencia (y por lo tanto con un mismo periodo) que consta de dos valores fijos de tensión: uno alto (HIGH), que es la amplitud, y otro bajo (LOW), que es el valor nulo.

Duty_cycle_general

También consta de otro parámetro, que se denomina ciclo de trabajo (duty cycle), y que se refiere al porcentaje de tiempo que el pulso (la cantidad de voltaje entregada) está en activo durante un ciclo o periodo.

Otro parámetro importante es el ancho de pulso (PW – Pulse Width), que define el tiempo que dura el pulso.

Pwm_5steps

Por tanto, el PWM es una técnica que consiste en variar el ancho de pulso de una señal de voltaje cuadrada con el objetivo de controlar la cantidad de potencia administrada a los componentes o elementos electrónicos conectados. De esta forma, con un ciclo de trabajo del 100 % entregaríamos los 5V totales; un ciclo de trabajo del 50 % entregaría un voltaje de 2.5 V; con un ciclo de trabajo del 10 % conseguiríamos un voltaje del 0.5 V; y así sucesivamente.

Para ilustrar este concepto, vamos a analizar un pequeño programa para controlar el siguiente montaje:

circuito 1

Como se puede observar en la imagen, conectamos el cátodo (-) de un LED directamente a un pin GND (tierra) de la placa y el ánodo (+) a una salida digital PWM, que en Arduino se señalan con el símbolo ~.

Para que sea más visual y fácil de comprender, en vez de programar usando el IDE de Arduino, lo haré mediante LabVIEW:

image1

Si hacéis memoria, este es el mismo programa que ya usé en un post anterior (Arduino & LabVIEW (II). Control de un LED mediante PWM).

Con la barra deslizante (slider) podemos variar la tensión de salida de la señal PWM entre dos valores de tensión fijos (cada uno de los extremos). Los valores de 0 a 255 corresponden al mapeado de la función AnalogWrite de Arduino. 0 se corresponde con 0 voltios de tensión de salida y 255 se corresponden con 5 voltios de tensión de salida de la placa. Los valores entre 0 y 255 se corresponden con valores de tensión en el intervalo de 0 a 5 V. En el caso de la myRIO que utilizamos en el equipo UPCT Racing Team, los valores del slider irán del 0 al 1 (en lugar del intervalo 0-255 que utiliza Arduino).

Es muy fácil ver el potencial que tienen las señales PWM. Siguiendo con el ejemplo del LED, con una salida digital normal, solo podríamos programar dos valores: 0 o LOW (apagado) y 1 HIGH (encendido). Sin embargo, mediante una salida digital PWM, podemos no solo apagar y encender un LED, sino variar su brillo.

Otras aplicaciones podrían ser controlar la velocidad de giro de un ventilador, controlar la velocidad de un motor de continua, controlar servomotores…

Algunos ejemplos con Arduino

En Arduino, usaremos la función analogWrite, que sigue el siguiente esquema:

analogWrite(número de pin, valor);

Así por ejemplo, si tomamos cualquiera de las salidas digitales PWM, como la 3:

analogWrite(3,0);                           // Ciclo de trabajo del 0 %

analogWrite(3,64);                         // Ciclo de trabajo del 25 %

analogWrite(3,127);                       // Ciclo de trabajo del 50 %

analogWrite(3,255);                       // Ciclo de trabajo del 100 %

Conociendo el manejo de esta función, procedemos a analizar algunos ejemplos sencillos de código. Estos programas de ejemplo pueden encontrarse en la carpeta Examples en el directorio donde hayamos instalado el IDE de Arduino.

PROGRAMA DE EJEMPLO 1

En este programa se utilizan tres fotorresistores, protegidos por una cubierta de diferentes colores, para encender un LED RGB. Este LED emitirá un determinado color con un determinado brillo en función de la luz que le llegue a las fotorresistencias.

En esta primera parte del programa se declaran las variables necesarias para la ejecución del mismo:

image2

En esta segunda parte se llama a la función setup para iniciar la comunicación con la placa y se configuran los pines en su correspondiente modo (input o output):

image3

En esta cuarta parte se realiza la lectura de los sensores mediante la función analogRead, estableciendo un pequeño retardo (delay) entre cada ejecución, y se saca por pantalla los resultados con la instrucción Serial.print

image4

En esta última parte se mapean los resultados de las medidas de los sensores y se les asigna una nueva variable. Este mapeo se realiza porque los valores que los sensores leen varían entre 0 y 1023, pero la salida PWM solo puede dar un valor entre 0 y 255. Dividiendo entre 4 se consigue que los valores de respuesta asociados a cada valor de entrada sean coherentes (mapeo).

image5

Con este programa tan sencillo hemos aprendido a controlar el brillo y color de un LED RGB en función de unos datos recogidos por sensores.

De manera análoga, podríamos controlar la velocidad de giro de un ventilador en función de los datos que recoge un sensor de temperatura.

PROGRAMA DE EJEMPLO 2

Con este programa aprenderemos a controlar un servomotor. Los servomotores son dispositivos que tienen engranajes integrados y un eje que podemos controlar con gran precisión. Normalmente podemos controlar el ángulo de rotación entre 0 y 180 grados, aunque hay muchos servomotores de rotación continua, como los de Parallax usados en el Home Boe-Bot. Son muy utilizados en robótica. Un servomotor tiene tres cables: alimentación (rojo), masa (negro) y el de señal (que suele ser blanco o amarillo) y que es el que utilizamos para controlar la rotación y comunicarnos con Arduino.

image6

En la primera parte del programa creamos los objetos y variables necesarias, cargamos las librerías correspondientes e iniciamos la comunicación con la placa.

image7

En la entrada analógica A0 leemos el valor del potenciómetro, y lo asignamos a la variable potVal (potentiometer value). Mostramos por pantalla este valor.

Después, realizamos el mapeo necesario para que el servomotor pueda funcionar, con la función map(). Esta función necesita cinco parámetros: el número a escalar (en este caso el valor leído por el potenciómetro y que hemos almacenado en la variable correspondiente), el mínimo valor de la entrada (0), el máximo valor de la entrada (1023), el mínimo valor de la salida (0 = 1 grado) y el máximo valor de la salida (179 = 180 grados).

Después del mapeo le transmitimos la orden al servomotor para que se mueva.

image8

Es importante notar que con las salidas digitales sería impensable realizar este programa. Como he mencionado, las salidas digitales solo pueden enviar dos valores (0 y 1). Sin embargo, con las salidas digitales podemos dar muchos más valores discretos (digital – variable discreta, analógico – variable continua) por lo que podemos tener un movimiento preciso de un servomotor, con apenas unas pocas líneas de código y mapeando correctamente los valores de entrada y salida.

Práctica propuesta

Con este pequeño ejercicio aprenderemos a controlar un motor de continua. Con los dos pulsadores podemos cambiar el sentido de giro del motor, así como apagarlo y encenderlo. Con el potenciómetro seremos capaces de regular la velocidad del motor (mediante una entrada analógica y una salida PWM).

Untitled Sketch_bb

Declaración de variables:

image9

Definimos las entradas y salidas correspondientes:

image10

Cuerpo del programa:

image11

image12

Este mismo concepto puede trasladarse, por ejemplo, al control de la velocidad de giro de un ventilador. Esta velocidad la podremos regular cambiando el potenciómetro por un sensor de temperatura. De esta forma, con el mapeo correcto, podremos controlar la velocidad del ventilador en función de la temperatura que capte el sensor.

20160221_181844


Todos los ejemplos pueden encontrarse en el libro incluido en el kit de Arduino.
Fuente propia. Imágenes propias (excepto las dos primeras, que son de Wikipedia).

 

Introducción a Raspberry Pi (II). «Españolizar» nuestra Raspberry.

raspberry-pi-572481_640En este pequeño post, que continúa con la serie de tutoriales para aprender a usar la Raspberry Pi, modificaremos algunos parámetros para terminar de configurar nuestra placa.

Cuando instalamos Raspbian en nuestra Raspberry Pi, por defecto se configura en inglés. Lo que haremos a continuación será configurarla en español.

Configuración del idioma

Para configurar el idioma, abrimos el terminal e introducimos el siguiente comando:

sudo dpkg-reconfigure locales

Se nos desplegará una lista de codificaciones disponibles. Debemos buscar la codificación es_ES.UTF-8. La seleccionaremos con la barra espaciadora y procederemos a su instalación con Enter. A continuación nos pedirá seleccionar un idioma de los instalados como predeterminado. Seleccionamos el que acabamos de instalar.

Configuración del teclado

Ahora continuaremos con la configuración del teclado. Para ello ejecutaremos el siguiente comando desde el terminal:

sudo dpkg-reconfigure keyboard-configuration

Seleccionamos el teclado conectado de los que hay entre la lista que se despliega (si nuestro teclado no está entre ellos, usar un Generic). Pulsamos Enter para continuar. Acto seguido se nos despliega otra lista con los layout disponibles. Seleccionamos Spanish. Configuramos los demás parámetros a nuestra elección y continuamos.

Configuración de la zona horaria

A continuación seleccionaremos la zona horaria. Para ello, ejecutamos el siguiente comando desde el terminal:

sudo dpkg-reconfigure tzdata

En nuestro caso, seleccionaremos primero Europa, y después Madrid para establecer nuestra zona horaria.

Por último, reiniciamos para que los cambios tengan efecto con el comando:

sudo reboot

Una vez reiniciada nuestra Raspberry Pi, podremos observar que está todo correctamente configurado.

En el siguiente tutorial veremos como ampliar la conectividad de nuestra placa con la instalación de un dispositivo USB nano para dotar de WiFi a la Raspberry Pi.


Fuente propia

Raspberry Pi para beginners. ¿Qué es y para qué sirve?

En esta entrada intentaré explicar de forma breve, clara y sencilla, qué es y para qué sirve la Raspberry Pi.

Si bien en el anterior post realicé una introducción al funcionamiento de la Raspberry Pi, no expliqué en qué consiste exactamente ni tampoco a qué usos puede ir destinada. Siguiendo la recomendación de un lector -siempre agradezco críticas, sirven para enriquecer y mejorar el blog-, haré una explicación breve y concreta de estas cuestiones.

¿Qué es Raspberry Pi?

6701327189_0d35efce6c_bEn esencia, Raspberry Pi es un ordenador. Se trata de un pequeño computador, del tamaño de una tarjeta de crédito, que puede conectarse a un monitor, un teclado y un ratón, y comenzar a funcionar.

Es capaz de correr distribuciones basadas en Linux, por lo que bastará seleccionar una e instalarla. También puede correr una versión de Windows 10 especial, enfocada al IoT. Más adelante presentaré sus características técnicas y especificaciones.

Además del tamaño, tiene la ventaja de ser muy barato (alrededor de los 30-35 euros), lo que hace de esta pequeña placa el complemento perfecto para nuestros proyectos del llamado IoT (Internet of Things).

Raspberry Pi es un proyecto de la Raspberry Pi Foundation, que surgió con la intención de acercar la programación a estudiantes de todas las edades. Por ello, se trata de un excelente dispositivo (por su tamaño, sencillez y precio) para introducir a los más pequeños en el mundo de la programación. Para ello, incluye software destinado a enseñar el lenguaje de programación Scratch. Para aquellos que ya tienen un nivel algo superior, es una placa de desarrollo excelente en lenguaje Python.

Pero este pequeño computador no solo está destinado a las aulas. Puede ser utilizado como un ordenador normal: ver vídeos en alta definición, navegar por internet, usar procesadores de texto…

¿Para qué sirve?

7473604878_a03610a75e_bPara todo. Las posibilidades son infinitas y el único límite es tu imaginación y creatividad. Es ampliamente utilizada en la comunidad Maker, pero también en el mundo laboral, en trabajos relacionados con la electrónica, con la regulación y automatización…

Puedes usar esta pequeña placa para incorporarla a tus proyectos de Arduino, para hacer estaciones meteorológicas, para aplicaciones en domótica, para hacer tu propia máquina arcade, para crear tu media-center…

Personalmente, yo uso mi Raspberry Pi 2 para realizar proyectos con Arduino, lo que otorga al trabajo en cuestión un alto grado de movilidad, eficiencia energética y compacidad. También la usé para controlar remotamente el encendido/apagado de los inversores de un campo solar. De esta forma, puedo conectarme remotamente desde cualquier dispositivo (un iPad, un PC o un smartphone) al campo fotovoltaico y apagar los inversores que desee.

Te dejo unos enlaces para que veas las enormes posibilidades que tiene esta pequeña placa:

16 geniales usos para tu Raspberry Pi

Raspberry Pi: nuevo proyectos increíbles que puedes hacer con ella

Las 13 mejores ideas que hemos encontrado hechas con Raspberry Pi

Como ves, los usos son prácticamente infinitos.

Especificaciones técnicas

El último modelo que hay disponible en el mercado es la Raspberry Pi 2 Model B. Apenas hay diferencia de precio con sus antecesores. Es el modelo que yo tengo, y sin duda, es el que recomiendo que compres.

Especificaciones:

  • SoC Broadcom BCM2836
  • CPU ARM11 ARMv7 ARM Cortex-A7 Quad-core 90o MHz
  • GPU Broadcom VideoCore IV 250 MHz. OpenGL ES 2.0
  • Memoria RAM: 1 GB LPDDR2; SDRAM 450 MHz
  • 4 puertos USB 2.0
  • 40 pines GPIO (General Purpose Input/Output)
  • Salida HDMI 1.4 (1920 x 1200)
  • Ranura para micro SD
  • Puerto Ethernet 10/100 Mbps
  • Interfaz de cámara (CSI)
  • Interfaz de pantalla (DSI)
  • Puerto combinado micrófono+audio
Raspberry Pi 2 Model B
Raspberry Pi 2 Model B

Para ver una lista completa de especificaciones, pinchar en el enlace: http://www.raspberryshop.es/hardware-raspberry-pi.php

Cabe destacar que se puede hacer Overclocking a los procesadores para aumentar su frecuencia de reloj, aunque si lo haces te arriesgas a quemar los componentes, por lo que se recomienda usar disipadores de aluminio. También es interesante mencionar que la Raspberry Pi tiene un montón de accesorios interesantes para complementarla: cámara, cámara infrarroja, caja de protección, pantalla táctil de 7″…

Te dejo el enlace por si quieres comprarla:

http://www.pccomponentes.com/raspberry_pi_2_modelo_b.html

Espero haber resuelto algunas dudas y que quede más claro qué es exactamente y para qué sirve una Raspberry Pi. Os recuerdo que en los próximos días seguiré subiendo tutoriales de introducción a Raspberry Pi. ¡Nos vemos pronto!


Fuentes
Texto: propia
Especificaciones: http://www.raspberryshop.es/hardware-raspberry-pi.php

Introducción a Raspberry Pi (I). Instalación de un SO y First Boot.

20151024_145413_HDR-1En este primer post que inicia una nueva serie de tutoriales acerca de Raspberry Pi, procederemos con la instalación de un Sistema Operativo y el arranque del mismo.

El SO que instalaremos será Raspbian, una distribución de Linux basada en Debian y especialmente diseñada para Raspberry Pi.

Requisitos previos

La instalación del SO se realiza en la tarjeta de memoria microSD (es recomendable que sea mayor de 8 GB). También es importante remarcar la clase de la tarjeta. Podemos encontrar tarjetas de clase 2, 4, 6 y 10; este número nos indica la tasa de megabytes (MB) que graba por segundo. Cuanto mayor sea ésta, más rápido y óptimo será el sistema; por tanto, es recomendable hacerse con una tarjeta de clase 10.

Raspbian_logo

Descarga del SO

Procederemos con la instalación del sistema operativo NOOBS (v.1.4.x), que a su vez contiene a otros sistemas operativos, como RASPBIAN. Se puede descargar desde la página oficial de Raspberry: https://www.raspberrypi.org/downloads/

2015-10-24_14-33-04Como se puede comprobar, el archivo que hemos descargado se trata de un archivo comprimido ZIP. Una vez descargado el archivo, lo descomprimimos, y procedemos al formateado de memoria.

Formateo de la tarjeta de memoria

Para llevar a cabo el formateo de la tarjeta microSD usaremos el software SD Formatter 4.0 proporcionado por SD Association. Lo podemos descargar de su página web: https://www.sdcard.org/downloads/formatter_4/

Una vez descargado, seguimos las instrucciones para instalar el software.

Insertamos la tarjeta de memoria en el ordenador mediante un adaptador y anotamos la letra de la unidad.

raspIniciamos el software, seleccionamos la unidad y formateamos con los siguientes parámetros (para modificarlos desplegamos la pestaña Option):

  • Volume label: boot
  • Format option: Full (erase) Format, Format size adjustment off

Durante el formateo no podremos retirar la tarjeta de memoria bajo ningún concepto.

Copy/Paste de los archivos del SO

Una vez que hemos formateado la memoria, procederemos al copiado y pegado de los archivos que hemos descomprimido anteriormente. Una vez copiados, retiraremos la tarjeta de memoria de forma segura y la introduciremos en la Raspberry Pi.

rasp2

Primer arranque (First Boot)

Conectamos la Raspberry Pi a un monitor y a los periféricos pertinentes (teclado y ratón). Después conectamos la Raspberry Pi a una toma de corriente mediante el conector USB.

Al iniciarse, aparecerá un menú con una lista de sistemas operativos similar al de la imagen.

rasp3

Seleccionamos el SO Raspbian y clickamos en Install. Comenzará entonces el proceso de instalación, que puede llevar de 10 a 25 minutos aproximadamente.

Una vez instalado se iniciará el programa raspi-config, donde dispondremos de un menú con diferentes opciones. Para salir del menú, seleccionamos la opción Finish, y se nos abrirá una ventana de comandos.

Para iniciar el entorno gráfico del SO, teclearemos el comando startx.

Menú de configuración (raspi-config)

A continuación se muestra el menú de configuración que se despliega al iniciar la Raspberry Pi, tal y como hemos mencionado en el apartado anterior. Por ahora no modificaremos ningún parámetro. Únicamente nos desplazaremos por el menú hasta seleccionar la opción Finish (desplazándonos con la tecla Tab o con las teclas de dirección y pulsado Enter para ejecutar la opción deseada), y posteriormente iniciaremos la interfaz gráfica con el comando startx.

raspi3

Inicio de Raspbian

Si al iniciar Raspbian por segunda vez, no hemos modificado antes ningún parámetro del menú anterior, nos pedirá un usuario y contraseña para loguearnos. Por defecto, el nombre de usuario es pi y la contraseña raspberry. Como medida de seguridad de Linux, cuando introduzcamos la contraseña, no aparecerá nada por pantalla. Una vez introducidos los datos, entraremos a la interfaz gráfica del SO mediante el comando startx.

En caso de haber modificado los parámetros del programa raspi-config, podremos hacer login mediante el username y password que hayamos establecido con anterioridad. Incluso es posible configurar el inicio automático de la interfaz gráfica sin necesidad de pasar por la ventana de comandos, como veremos en tutoriales siguientes.


Fuente propia

La familia crece: Intel y Arduino presentan Genuino 101.

Intel y Arduino vuelven a aliarse para presentar la nueva placa Arduino 101 (que llegará a los mercados internacionales con el nombre de Genuino 101). Será la primera placa de desarrollo en montar el módulo Intel Curie, que se caracteriza por su bajo consumo.

Arduino101El módulo Intel Curie estará dotado de un diminuto SoC 32-bit Intel Quark de bajo consumo con una frecuencia de 32 MHz. En cuanto a memoria, dispondrá de 384 kB de memoria flash y 80 kB de SRAM.

Además, incorporará Bluetooth LE (Low Energy) de escaso consumo, 14 pines I/O (input/output) digitales (4 de ellos podrán usarse como PWM), 6 pines analógicos, un sistema conjunto de acelerómetro y giroscopio de 6 ejes.

La comunicación con el ordenador se realizará con el típico conector USB que montan las placas de la familia Arduino, conector que también podrá dar la alimentación necesaria a la placa para su funcionamiento.

Genuino 101 está pensado tanto para la comunidad maker como para los estudiantes que se inician en el mundo de la electrónica. Destaca por su escaso consumo y su tamaño compacto, con unas dimensiones de 68.6 x 53.4 mm.

Genuino 101 saldrá a la venta en el primer trimestre de 2016, con un precio realmente competitivo: 30 dólares (27 euros aproximadamente).


Fuentes:
- https://www.arduino.cc/en/Main/ArduinoBoard101
- https://blog.arduino.cc/2015/10/16/intel-and-banzi-just-presented-arduino-101-and-genuino-101/