Lección 7 – Raspberry Pi – Tweets a voz

El pasado Halloween, noche de brujas o día de muertos, según el país donde nos lean :), teníamos pensado construir algún animatronic alusivo a la celebración, basado en algunos ejemplos de Makers que ya habían echo algo similar, desafortunadamente nos quedamos sin tiempo y no pudimos dar a luz el proyecto.

Aun así queremos compartir la idea y una de las muchas maneras que existen para realizarla. Básicamente consiste en leer nuestra linea de tiempo en Twitter y pasar cada uno de nuestros tweets a voz, al mismo tiempo que activamos algún juguete animado (bailarín, parlanchín, etc.), veamoslo paso a paso:

1. Antes de empezar debemos crear una “Twitter App”, el proceso es muy sencillo, solo vamos a https://dev.twitter.com/ nos logueamos con nuestra cuenta de Twitter y creamos una aplicación.

tapp tapp2

el proceso es simple e intuitivo así que no deberíamos tener problema con esto.

2. El circuito, también es sencillo y prácticamente podríamos acoplar cualquier cosa, mediante un transistor o un relevador, en esta ocasión empezaremos con el ya clásico encendido del LED conectado al pin 14 de la GPIO (conector físico numero 8).

rpi

3. Una ves creada nuestra aplicación y armado el circuito, tendremos que instalar algunos módulos para poder enlazar nuestra Timeline con Python.

Desde consola actualizaremos e instalaremos el core de git, para poder descargar proyectos de github.

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install git-core

después clonaremos el modulo que nos permitirá autentificarnos con Twitter desde Python.

git clone https://github.com/leah/python-oauth.git

accedemos a la carpeta que se creo para continuar instalando el modulo

cd python-oauth
sudo python setup.py install

en caso de que nos aparezca el siguiente error:

tapp4

será necesario instalar un complemento adicional (python setup tools component distribute) para poder continuar. Esto lo hacemos dentro de la misma carpeta creada (python-oauth):

mkdir python-distribute
cd python-distribute
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

al terminar solo tenemos que regresar un nivel en el directorio e intentar nuevamente la instalación:

cd ..
sudo python setup.py install

y esta ves tendría que haber instalado sin mensajes de error.

3. El siguiente modulo nos permitirá conectar con el stream de twitter:

sudo apt-get install python-pycurl

4. Y al final el “mplayer” una aplicación que nos permitira reproducir el audio de nuestros tweets:

sudo apt-get install mplayer

Bien hasta aquí tenemos instalado todos los módulos y aplicaciones que nos harán la magia, solo nos resta el script que ejecutaremos para estar monitoreando nuestra cuenta. Desde cualquier editor o desde la misma consola, creamos un archivo con el nombre que nos agrade pero con extensión .py, esto ultimo es importante, y lo guardamos en el directorio que queramos.

sudo nano TalkingTweet.py

y pegamos el siguiente código, reemplazando la información con las llaves que Twitter asigno a nuestra aplicación:

tapp3


# http://hardware-hackingmx.com/
from oauth.oauth import OAuthRequest, OAuthSignatureMethod_HMAC_SHA1
from hashlib import md5
import json, time, random, math, urllib, urllib2, pycurl, subprocess, sys, re
import RPi.GPIO as io
io.setmode(io.BCM)
# Usaremos el pin 14 de la GPIO para activar nuestro juguete
pinLed = 14
io.setup(pinLed, io.OUT)
io.output(pinLed,io.LOW)
# twitter oauth keys, dentro de las ' ' agregamos las llaves de nuestra App
CONSUMER_KEY = 'consumer_key'
CONSUMER_SECRET = 'consumer_secret'
ACCESS_TOKEN = 'access_token'
ACCESS_TOKEN_SECRET = 'access_token_secret'
# Retorna la URL adecuada para generar el audio de nuestro tweet a traves del servicio de Google.
def getGoogleSpeechURL(phrase):
phrase = (phrase[:99])
phrase = re.sub(r".http?:\/\/[a-z'.'\/A-Z0-9]*", '', phrase)
phrase = unicode(phrase)
googleTranslateURL = "http://translate.google.com/translate_tts?tl=es&"
phrase = urllib2.quote(phrase.encode('utf8'))
parameters = {'q': phrase}
data = parameters
googleTranslateURL = "%s%s" % (googleTranslateURL,data)
return googleTranslateURL
# Reproduce a traves de mplayer.
def speakSpeechFromText(phrase):
googleSpeechURL = getGoogleSpeechURL(phrase)
io.output(pinLed,io.HIGH)
subprocess.call(["mplayer",googleSpeechURL], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
io.output(pinLed,io.LOW)
# Clase para gestionar las llaves.
class Token(object):
def __init__(self,key,secret):
self.key = key
self.secret = secret
def _generate_nonce(self):
random_number = ''.join(str(random.randint(0, 9)) for i in range(40))
m = md5(str(time.time()) + str(random_number))
return m.hexdigest()
##########################################
### Clase principal ###
##########################################
class TalkingTwitterStreamClient:
def __init__(self, streamURL):
self.streamURL = streamURL
self.buffer = ""
self.conn = pycurl.Curl()
self.conn.setopt(pycurl.URL, self.streamURL)
self.conn.setopt(pycurl.WRITEFUNCTION, self.on_receive)
self.conn.perform()
def on_receive(self, data):
sys.stdout.write(".")
self.buffer += data
if data.endswith("\n") and self.buffer.strip():
content = json.loads(self.buffer)
self.buffer = ""
if "friends" in content:
self.friends = content["friends"]
if "text" in content:
print u"{0[user][name]}: {0[text]}".format(content).encode('utf-8')
speakSpeechFromText(u"Tuit de {0[user][name]}".format(content))
speakSpeechFromText(u"{0[text]}".format(content))
# obtenemos la URL necesaria para abrir nuestra linea de tiempo en Twitter
def getTwitterUserStreamURL():
STREAM_URL = "https://userstream.twitter.com/2/user.json"
access_token = Token(ACCESS_TOKEN,ACCESS_TOKEN_SECRET)
consumer = Token(CONSUMER_KEY,CONSUMER_SECRET)
parameters = {
'oauth_consumer_key': CONSUMER_KEY,
'oauth_token': access_token.key,
'oauth_signature_method': 'HMAC-SHA1',
'oauth_timestamp': str(int(time.time())),
'oauth_nonce': access_token._generate_nonce(),
'oauth_version': '1.0',
}
oauth_request = OAuthRequest.from_token_and_callback(access_token,
http_url=STREAM_URL,
parameters=parameters)
signature_method = OAuthSignatureMethod_HMAC_SHA1()
signature = signature_method.build_signature(oauth_request, consumer, access_token)
parameters['oauth_signature'] = signature
data = urllib.urlencode(parameters)
return "%s?%s" % (STREAM_URL,data)
# Ejecutamos nuestro script (Cliente)
client = TalkingTwitterStreamClient(getTwitterUserStreamURL())

view raw

TalkingTweet.py

hosted with ❤ by GitHub

Espero sea de lo mas entendible, el método “speakSpeechFromText”  nos recibe como parámetro el texto a reproducir, y el método “getGoogleSpeechURL” arma la URL adecuada para generar el audio,  en la ejecución algunas veces las palabras con “acentos” no las lee como debe ser, esto es un problema al armar la URL, pero es algo que esperamos pronto resolver.

Y bueno para terminar solo tenemos que ejecutar nuestro script:

sudo python TalkingTweet.py

Es una aplicación sencilla que prácticamente nos lee un Tweet y lo pasa por el traductor de google para generar la voz, mientras se reproduce el audio nos activa el pin 14 de la GPIO para activar lo que sea que tengamos conectado a el, algunos de los inconvenientes, pues es la voz que no podemos cambiar o distorsionar, al menos no directamente del servicio de Google, y que solo nos acepta 100 caracteres, es por eso que en el script hemos cortado la cadena, aun así es bastante funcional y se pueden hacer algunas cosas interesantes, esperamos pronto nos compartan sus Hacks!

tapp7

Nota: si quisiéramos cambiar el idioma del servicio de Google solo hay que cambiar el parámetro “tl=es” a “tl=en” para el ingles por ejemplo, aproximadamente en la linea 18.

Referencia:

http://www.stuffaboutcode.com/2012/10/raspberry-pi-python-talking-twitter.html

Fuente de Alimentación Casera

Sin duda uno de las herramientas, si no mas importante, indispensable para nuestros proyectos de Hardware es la fuente de poder. En cuantas ocasiones no nos hemos encontrado con la necesidad de alimentar alguno de nuestros proyectos de Hardware, y por alguna extraña razón el eliminador/cargador lo estamos utilizando para el Móvil, lo hemos prestado o la corriente que suministran no es suficiente, las baterías se quedaron sin carga, etc. Estoy seguro que la mayoría, mas de una ves ha pasado por un caso similar.
En esta ocasión, trataremos de mostrar como construir una Fuente de Alimentación casera para nuestra mesa de trabajo (Workbench Power Supply), con variedad de Tensiones (Voltajes) y suficiente Corriente (Amperes) para conectar incluso varios proyectos a la vez…
1. Consigamos un Fuente ATX.
 En general una Fuente ATX, es la caja de poder que viene en todos los ordenadores de mesa o PCs y que incluye diferentes conectores para alimentar los dispositivos que podrían existir en el mismo.
Algunas de las opciones que tenemos para adquirir este componente fundamental para nuestra Fuente, es comprarla en alguna de nuestras tiendas de equipos de computo favoritas o podemos extraerla de esa PC antigua que tenemos olvidada en un rincón desde que usamos para todo el portátil  :D. He conseguido la que usaremos para este pequeño tutorial por la fabulosa cantidad de $11.5USD aproximadamente, que aunque la marca y calidad no es la mejor, seguramente es una buena opción para nuestro objetivo.
 PS01
2. Cortando Cables
  Una vez hayamos conseguido la Fuente ATX, empezaremos a “Hackearla”, el primer paso es remover los conectores, esos que normalmente irían conectados a la tarjeta madre, una unidad de CDs o un Disco Duro no nos servirán, así que podemos guardarlos. Como recomendación, siempre es bueno conservar hasta el mas mínimo pedazo de cable, nunca se sabe cuando nos salvara la vida.
PS02
3. Hola Fuente de Poder
 Ahora el momento de abrir la caja misteriosa, no debe ser nada difícil, normalmente llevan cuatro tornillos en la parte superior que sujetan la tapa principal. Ya abierta podemos ver claramente la parte de la Electrónica, no entraremos en detalles por ahora ya que cada Marca/Fabricante tiene su sello personal y aun es un poco complejo entender todo ese embrollo incluso para mi.
4. Colores
PS03
 El siguiente paso es separar por colores y unir todos los cables que han quedado sueltos después de cortar los conectores. Cada color representa un voltaje, indicador o función especifica de la Fuente ATX. En algunos casos el cable cafe viene junto a uno naranja, como es el caso de la fuente que hemos conseguido, esto para determinar cuando hay una caída de tensión, no debería existir problema al dejar este cable solo, aunque he sabido de Fuentes que no encienden si no se conecta tal como vienen, así que para no fallar lo dejamos tal cual.  En la imagen siguiente podemos apreciar la configuración estándar  del conector principal en una Fuente ATX (El mas grande).
Power Supply
“Imagen de Wikipedia”
5. Identificando Voltajes
En la imagen vemos claramente el voltaje que cada uno de los colores nos proporciona, así como el indicador de Power(Gris) y el Encendido (Verde), en nuestro caso tomaremos tres cables de cada Voltaje para cada uno de los postes o conectores tipo banana que usaremos para suministrar la Alimentación, podríamos usar un cable por conector en teoría funcionaria sin problema aunque dudando de la calidad de la Fuente que se ha conseguido creo que lo mejor es usar tres, por si acaso .
PS04
He optado por terminales de latón de anillo (en algunos lugares conocidas como terminales de “ojillo”) para fijar los cables a los conectores tipo banana, irán soldadas con un poco de estaño y para aislar usaremos algunos tubos termo encogibles (Thermofit o Heat Shrink), personalmente los recomiendo, se me hacen mucho mas fácil de usar que la cinta aislante o el silicon, ademas nos servirán para separar los cables que nos quedan sin usar, pero que no recomiendo cortar ya que podríamos necesitar en algún Hack futuro.

PS05

Podríamos colocar tantos conectores de banana como cables tenga nuestra fuente, aunque creo quedaría algo saturada y no luciría nada bonita, una de las mejores opciones por las que optado es, dos conectores de Tierra/Masa (Negro), uno +3v (Naranja), uno +5v (Rojo), uno +12v (Amarillo), uno -12v (Azul) y uno +5vSB (Purpura), este ultimo proporciona alimentación incluso cuando la fuente esta apagada pero conectada a una toma eléctrica, la corriente que ofrece suele ser muy inferior a las demás pero en nuestro caso suficiente para un par de proyectos.
PS06
PS07
 6. Afinando el Exterior
   El siguiente paso es ordenar de la manera mas estética y cómoda los conectores de banana (hembra), todo depende de las dimensiones de la Fuente ATX que se haya conseguido, así como de la posición y espacio que ocupara en nuestra mesa de trabajo, yo recomiendo jugar un poco con la posición de la fuente e imaginar el “Hack” finalizado, solo para darnos una idea.
PS08

 Una vez hayamos decidido la ubicaciones de los conectores podemos empezar con los trazos, podemos usar algunos trozos de cinta de pintor (Maskingtape) para marcar lo necesario y no dejar marcas sobre la tapa, para nuestra fuente hemos trazado una cuadricula en la parte superior, quedando dos renglones de manera horizontal con separación suficiente para poder perforar y montar los conectores sin problema.

7. El Trabajo Pesado

 Creo que la parte mas complicada sera la de usar el taladro/rotomartillo para agujerar la pieza de metal, así que si es necesario pidan ayuda a un adulto ;). En la imagen vemos el resultado después de perforar y pulir las imperfecciones en el metal, hemos echo un agujero por cada voltaje y dos de tierra o masa, mas uno mas por la parte frontal donde montaremos un pequeño LED indicador.

PS09

8. Pan comido!
 A partir de aquí ya solo nos queda organizar, hemos aislado y sujetado los cables que no usaremos, quedaran por dentro de la fuente así que no estorbaran, solo debemos tener cuidado de alejarlos del cooler para no ocasionar una averia.

PS11

Lo siguiente es montar los conectores de banana hembra en los agujeros que hicimos y sujetar a estos las terminales de latón de cada juego de cables.
Nota: como muy seguramente encontraremos variedad de este tipo de conectores les recomiendo hacer algunos agujeros en un trozo de madera o plástico para encontrar la medida de la broca que mejor nos convenga y asi asegurar que nuestros conectores encajaran perfecto.

9. ON/OFF
PS12
 Por ultimo queda integrar algunos LED indicadores y el interruptor de encendido. Para nuestro “Hack” usamos un LED para indicar cuando la fuente esta conectada a una toma eléctrica por lo que estará conectado al cable purpura (+5vSB) quien es el único que proporciona voltaje en “StandBy”. Y para el interruptor principal solo hay que unir el Cable Verde a Tierra para activar la fuente y energizar las terminales restantes (3, 5, 12 y -12v). Como indicador principal se ha aprovechado el mismo interruptor, ya que incluye bulbo que lo ilumina por completo, según las especificaciones enciendo a 12v, por lo que hemos agregado un cable para unirlo a la terminal de 12v.
PS13
10. Hora de Quemar!

 Ya solo nos queda cerrar la fuente con el mejor de los cuidados, procurando sobre todo, que los cables no rocen el Ventilador. Una vez todo en su lugar podemos probar cada una de las terminales para asegurarnos de que proporcionan el voltaje correcto.

PS14

Según las especificaciones del fabricante, esta fuente puede proporcionar hasta 30 Amperes a 5V, aunque seguramente esta un 10% aproximadamente por debajo de eso, es mas que suficiente para un par de proyectos conectados a la vez, dependiendo del consumo de cada uno.

+Hacking

PS15

Sin duda nos queda algo por hacer, y con un poco de paciencia y creatividad lograremos hacer un Hacking digno de envidiar. Les dejo como quedo la fuente solo con un poco de pintura y stickers, espero pronto nos compartan la suya.

PS16

Construye tu propio GameBoy con Beagle Bone

Además de Arduino y Raspberry Pi existen otras plataformas para desarrollar proyectos de hardware como lo es Beagle Bone. Beagle Bone es una pequeña computadora del tamaño de una tarjeta de crédito que se puede conectar a Internet y correr sistemas operativos como Android 4.0 o Ubuntu. En esta ocasión algunos interns de Texas Instruments transformaron esta pequeña tarjeta de desarrollo en toda una consola de video juegos portátil parecida al Game Boy.

El proyecto fue desarrollado para el Texas Instruments 2013 Intern Design Challenge el cual es un concurso organizado cada año para poner a prueba el ingenio y talento técnico de los interns de Texas Instruments. Los desarrolladores de este proyecto llamaron a su nuevo juguete BeagleBone GamingCape y es capaz de correr juegos de NES, GameBoy, GameBoy Advance entre otros. Con ayuda de una impresora 3D y otras herramientas los Interns lograron hacer realidad esta hermosa pieza de entretenimiento y diversión, al igual todos los recursos están disponibles en la siguiente pagina para que tu también puedas construir tu propio BeagleBone GamingCape. 

Vale la pena ver todo el video completo para poder apreciar todo el proceso de diseño y desarrollo del proyecto.

Lección 6 – Raspberry Pi – Primeros pasos con Python en IDLE

Python es un lenguaje de programación muy utilizado al rededor del mundo gracias a su gran capacidad y a su facilidad de aprendizaje. Python cuenta con numerosas herramientas que permiten un rápido desarrollo de software. Además Python fue adoptado como lenguaje de programación que utiliza la Raspberry Pi para aprender a programar y su razón ha sido la gran documentación y herramientas que tiene, además como ya habíamos comentado es muy fácil de aprender.

El propósito de esta lección es aprender lo más básico de python y empezar a utilizar algunas herramientas que tiene la Raspi para utilizar Python. En esta lección nos vamos a enfocar en el uso del IDLE con el que cuenta nuestro Raspberry Pi.  Así que comencemos, para eso vamos a abrir IDLE 3 dando doble click sobre el icono.

pi1

Y ahora tendremos una ventana como la siguiente donde  vamos a hacer nuestro primer “Hola mundo!” en python y para eso tecleamos el siguiente comando en la ventana:

print("Hola mundo!")

y damos enter para que se ejecute la linea de código que acabamos de escribir

pi1

Python, como cualquier otro lenguaje de programación es capaz de realizar operaciones aritméticas, vamos a hacer algunos ejemplos. Tecleamos los siguientes comandos en la consola y damos enter para ejecutar y que imprima el resultado.

9+8

pi2

Hagamos una operación algo más compleja

(8*5)+9

pi3

Si, es demasiado fácil lo que acabamos de hacer, pero recuerda es lo más básico.

Ahora vamos a hacer algo un poco más interesante, vamos a crear un programa ejecutable. Hasta ahora con nuestros pequeños demos habíamos tecleado algunas lineas  que se ejecutaban al dar enter, pero sabemos que lo normal no es programar así sino crear un programa que este corriendo instrucciones y las ejecute. Bueno, ahora vamos a crear un pequeño script de python para ejecutar más código.

Para eso vamos a seguir usando el mismo IDLE. Vamos a seleccionar File/New Window

pi4

A continuación va a parecer una especie de notepad o espacio de trabajo donde vamos a empezar a escribir nuestro código.

pi6

Ahora vamos a escribir un comentario en la parte de arriba, para eso vamos a apoyarnos del símbolo de #, todo lo que escribamos después de este símbolo python lo va a omitir y no lo va a ejecutar.

pi8

Y ahora vamos a guardar nuestro archivo ejecutable, para eso vamos a hacer lo siguiente. Seleccionamos File/Save

pi9Y nos va a aparecer una ventana como la siguiente y teclearemos en nombre “miprimerprograma.py”

pi10

Ahora vamos a hacer de nuevo un “Hola mundo” pero que se va a ejecutar de manera diferente, para eso tecleamos

print("Hola Mundo!")

En el editor de texto.

pie1Y ahora para ejecutarlo vamos a presionar Run/Run Module

pie2Y cuando el script se corra nos va a aparecer una ventana donde se ejecuto nuestro código.

pie3Entradas y Salidas

Lo que hace realmente interesante a los programas de computadora es su capacidad para interactuar con el usuario. Es por eso que ahora aprenderemos un poco acerca de entradas y salidas en python. Todo lo que habíamos hecho en el paso anterior solo nos daba salidas, ya que el programa imprimia información que nosotros podíamos ver en la pantalla.

Ahora vamos a trabajar con entradas, vamos a preguntar al usuario cual es su nombre y para eso vamos a teclear el siguiente código.

nombre = input('Cual es tu nombre?')
print("Hola", nombre, "como te va?")

pie4Ahora podemos ejecutar nuesto programa Run / Run Module para ver la ejecución. El programa nos va a preguntar por nuestro nombre, nosotros tecleamos el “nombre” y damos enter, después de esto el programa nos desplegará un saludo.

pie5Como puedes ver utilizamos una función que se llama “input” con esta función todo lo que escribamos se guarda en una variable. En nuestro caso la variable donde se guardo todo se llama “nombre”, al utilizar la función “print” para imprimir en pantalla escribimos un mensaje que incluia a nuestra variable, en este caso no se imprime el nombre de la variable sino el valor que contiene. En el ejemplo imprimio “vic” porque ese era el valor que guardo la variable “nombre”. Hagamos algo más interesanre con las entradas y salidas.

Vamos a teclear el siguiente código en nuestro editor de texto para hacer un programa un poco más interactivo y acabar de enterder entradas y salidas.

pie7Y lo vamos a correr y teclear la información que nos pide dando enter después de teclear cada palabra.

pie8Como vez esta lección fue muy sencilla, el objetivo era que conocieras IDLE la erramienta para programar en python desde el Raspberry Pi. Si te gusto python y quieres seguir aprendiendo más te sugerimos que visites los tutoriales de python en Codeacademy, sin duda son la mejor opción para seguir aprendiendo a programar en este lenguaje. Varios de los proyectos que hagamos con la Raspberry Pi seguiran usando python así que valdrá la pena que entiendas más este lenguaje.

Lección 17 – Arduino – Utilizando Relevadores

Hasta ahora hemos estado trabajando con proyectos donde utilizamos solamente voltajes pequeños de corriente directa, sin duda Arduino es una plataforma muy amigable para proyectos electrónicos pero sería muy interesante poder controlar sistemas que usen voltajes más altos y de corriente alterna. Imagina poder prender y apagar un foco incandescente de 110 volts corriente alterna como los que se usan en los hogares para iluminar recamaras. Pues conectar estos aparatos de 110 volts CA es posible utilizando Arduino pero además necesitaremos hacer uso de un nuevo componente, el Relevador.

El relevado es un pequeño switch electromagnético el cual tiene 2 terminales, una para 5 volts CD y otra que podemos utilizar para 110 volts CA. Internamente el relevador cuenta con una bobina que puede ser activada con los 5 volts que nos proporciona el Arduino, este voltaje crea un campo magnético que es capaz de cerrar el switch para cerrar el circuito de 110 volts CA.

bobina1

Bobina sin voltaje, el interruptor magnético permanece abierto

bobina2

Al activar la bobina con 5 volts crea un campo magnético que hace cerrar el interruptor magnético

relé

Nosotros vamos a hacer uso de un pequeño relevador comercial que conectaremos a nuestro Arduino. Ojo, si estas usando otro tipo de relevador tendrás que buscar su hoja de datos (datasheet) para saber cuales son sus terminales, a manera de que puedas construir un circuito correcto y seguro. Para evitar cualquier accidente primero vamos a armar un circuito pero no con corriente alterna sino que con un pequeño LED.

circuitoLED

Esquemático del Relé con el circuito del LED

En la siguiente imagen podemos ver el relevador con vista como si lo viéramos desde arriba y se transparentaran las terminales. Las terminales pintadas con rolo van a ir conectadas a la señal de Arduino y las terminales en azul son las que van a cerrar el circuito que enciente el LED. Ojo, NO son terminales que van a alguna fuente, son terminales que cierran un circuito que hace encender un LED, en el diagrama anterior lo podemos ver de una forma más clara.

reledesc

En el siguiente circuito vemos como se conecta el relevador junto con con el Arduino. Podríamos decir que son dos circuitos totalmente diferentes, uno que enciente un LED y el otro que activa una bobina. Este circuito nos ayudará a saber si conectamos de manera correcta el relevador para después poder usarlo con el circuito de 110 v CA.

relecircuito1

2013-07-25 15.21.01

Así es como se debe de ver el circuito después de ponerlo a trabajar, pero antes no olvides programar el Arduino, más abajo pusimos un código sencillo para trabajar con el relevador.

Código

En este código vamos a inicializar como salida el pin 2, donde vamos a conectar el Relevador. El programa solo se la pasa apagando y prendiendo el relevado en intervalos de 1 segundo, nada del otro mundo.


int pinOut = 2;
void setup()
{
//configuramos el pin 2 como salida
pinMode (pinOut, OUTPUT);
}
void loop()
{
//Le mandamos la señal de HIGH a la salida del
//Arduino, la salida es el pin 2
digitalWrite (pinOut, HIGH);
//Hacemos un delay de 1 segundo
delay (1000);
digitalWrite (pinOut, LOW);
delay (1000);
}

view raw

rele

hosted with ❤ by GitHub

Usando un foco de 110 volts corriente alterna

ATENCIÓN: En esta parte de la lección vamos a usar corrientes alternas de 110 volts, si deseas seguir haciendo esta parte te pedimos que tengas mucho cuidado ya que de no trabajar con cuidado y responsabilidad te puedes electrocutar. No nos hacemos responsables por el mal uso que puedas hacer con el circuito de corriente alterna, por eso te pedimos que tengas mucho cuidado y que primero hagas la parte del LED para ver que verdaderamente funciona el circuito. Además también debes tener cuidado porque puedes poner en riesgo tu equipo (PC) y tu Arduino, es por eso que debes conocer muy bien la hoja de datos de tu relevador y que soporte corriente alterna y 110 volts. Te recomendamos que te asesores con alguien que conozca más de circuitos en caso de que no estas seguro de lo que estas haciendo. Para tu mayor seguridad traba en una superficie no metálica. 

Vamos a hacer uso del mismo circuito con el relevador solo que ahora con el circuito de 110 volts CA.

Como ves en la siguiente imagen hemos hecho una extensión la cual enciende un pequeño foco de 110 volts CA 10 watts. Esos dos cables sueltos que se ven son los que se usaran con el relevador, si conectamos la clavija y juntamos esos dos cables nuestro foco va a encender. Por ningún motivo se te ocurra tocar las puntas de esos dos cables cuando la clavija este conectada a la corriente.

2013-07-25 17.53.49

La siguiente imagen muestra un acercamiento a las puntas para que veas como fue que las pegamos.

2013-07-25 15.23.52

Ahora conectamos nuestro circuito de 110 v Ca al relevador para trabajar con el Arduino.

2013-07-25 15.22.20

circuitoRele

Y listo, ahora conectamos el Arduino con nuestro pequeño programa y veremos algo como el siguiente video.

Lección 16 – Arduino – LCD Display + Sensor de temperatura

Esta lección haremos uso de el LCD Display de la lección anterior y el sensor de temperatura de la lección 10 (sensor de temperatura). La diferencia es que en lugar de desplegar el valor de la temperatura en el monitor serial  lo desplegaremos en el Display. Para eso vamos a hacer uso del circuito de la lección anterior y las funciones de LiquidCrystal, además vamos a usar una nueva función de esta biblioteca para representar el caracter ‘º’ ya que no lo podemos imprimir directamente en el display. La función se llama createChar():

createChar()

Creamos un char a partit de un arreglo de bytes, primero creamos el arreglo de bytes de la siguiente manera:

byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

y ahora hacemos uso de la función createChar() para construir el nuevo caracter

lcd.createChar(0, smiley);

Y ahora lo imprimimos en el LCD Display

 lcd.write(byte(0));

Circuito

Ahora vamos a hacer el circuito como el siguiente, es el mismo circuito que la lección anterior solo que ahora le vamos a agregar el sensor de temperatura.

disptemp

Código

En el código vamos a hacer la lectura del sensor de temperatura, y este mismo valor lo vamos a impirmir en el Display. Si el valor de la lectura es mayor a 30 grados se imprimirá un mensaje de que la temperatura es muy grande. Como siempre comentamos el código para que lo puedas entender de una mejor manera.


//Importmos la Biblioteca para poder usar el Display LCD
#include <LiquidCrystal.h>
//Inicializamos el display con los pines de interfaz
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
double temp; //Declaramos la variable de temperatura
/*Creamos un arreglo de 8 bytes
donde haremos el caracter 'º' que necesitamos
*/
byte charGrado[8] = {
0b01110,
0b01010,
0b01110,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup() {
Serial.begin(9600);
//Hacemos la inicializacion del display
// En la configuracion le decimos que cuenta con 16 columnas y 2 filas
lcd.begin(16, 2);
//Imprimimos un mensaje
lcd.setCursor(0,0);
lcd.print("Leccion 16");
lcd.setCursor(0,1);
lcd.print("Hardware Hacking");
delay(3000);
lcd.createChar(0, charGrado);
}
void loop() {
//Hacemos la lectura de la temperatura
temp = analogRead(A0)*5/1024.0;
temp = temp – 0.5;
temp = temp / 0.01;
/*
La funcion lcd.setCursor tiene nos ayuda a posicionar el lugar donde vamos a escribir
el primer dato hace referencia al renglon y el segundo dato hace referencia a la columna
por lo tanto vamos a escribir en la primer columna, primer renglon
*/
lcd.setCursor(0,0);
//Imprimimos el mensaje que esta dentro del parentesis
lcd.print("La Temperatura");
//Movemos el cursor para escribir en la primer columna, segundo renglon
lcd.setCursor(0, 1);
lcd.print("es de: ");
//En esta parte imprimimos la temperatura en el Display
lcd.print(temp);
//Aqui imprimimos el caracter 'º'
lcd.write(byte(0));
lcd.print("C");
//Hacemos un delay para que el display muestre el mensaje
delay(2000);
//Borramos el display
lcd.clear();
//Si la temperatura es mayor de 30 entonces se imprimira un
//mensaje de aviso de temp alta
if(temp>30.00){
lcd.setCursor(0,0);
lcd.print("La temperatura");
lcd.setCursor(0,1);
lcd.print("es muy alta");
delay(2000);
lcd.clear();
}
}

view raw

disptemp

hosted with ❤ by GitHub

2013-07-18 15.36.26

2013-07-18 16.02.56

Lección 15 – Arduino – Display LCD

En esta lección vamos a hacer uso de un elemento muy importante que hace nuestros proyectos interactivos, se trata de un Display LCD de 16×2. Este display no es más que una pequeña pantalla con la cual podemos mostrar información o datos. Por ejemplo, si recuerdas en las lecciones anteriores donde mostrábamos información en el monitor Serial , bueno ahora toda esa información la podemos mostrar en nuestro Display y no necesitaremos de nuestro PC para desplegar los datos. En esta lección vamos a conocer la librería LiquidCristal, la cual fue desarrollada con el fin de simplificar el uso del Display.

Existen muchos modelos de display, nosotros vamos a usar un modelo estándar de 16×2 el cual cuenta con 16 pines. Cada pin tiene una función diferente para manipular el Display. Los pines con los que cuenta el Display son los siguientes:

  • Register Selected (RS): Controla la memoria del LCD que está escribiendo datos.
  • Read/Write (R/W): Selecciona el modo de lectura o escritura.
  • Enable (E): Habilita la escritura en el display.
  • Bus de datos (D0-D7): Sirven para escribir los datos en forma de bits. Solo se usan 4 en el modo de 4 bits.
  • Pin de contraste, voltaje, tierra e iluminación : Sirven para energizar el display y modificar su contraste.

frontdisplay

backdisplay

A continuación describimos cada uno de los pines del Display numerando del 1 al 16:

  1. Vss: Tierra (GND)
  2. Vcc: Voltaje para el Display (5 volts)
  3. Vee: Voltaje para el contraste del display
  4. RS: Register Selected
  5. R/W: Read/Write
  6. E: Enable
  7. D0 – Bus de Datos
  8. D1
  9. D2
  10. D3
  11. D4
  12. D5
  13. D6
  14. D7
  15. Iluminación display (V+)
  16. Iluminación display (V-)

Funcionamiento de la librería LiquidCristal

La librería LiquidCristal cuenta con diversas funciones para facilitar el manejo del LCD Display las cuales son las siguientes:

  • LiquidCrystal(rs, enable, d4, d5, d6, d7) : Es el constructor, ayuda a configurar los pines del Arduino para conectar el LCD Display. Cada parámetro que recibe es un pin del Arduino y esta configuración se usa en todo el programa. Existen más configuraciones pero nosotros vamos a utilizar esta, las demás configuraciones las puedes ver en la siguiente referencia.
  • begin(columnas, filas): Sirve para indicar al Arduino el tamaño del Display, número de columnas y número de filas.
  • setCursor(columna, fila): Sirve para indicar el lugar donde queremos empezar a escribir en el Display, se pone primero la columna y después la fila.
  • print(“Mensaje”): Esta función escribe un mensaje/string en el lugar que le hayamos indicado con la función “setCursor()”.
  • clear(): Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda.

Existen muchas más funciones para usar esta biblioteca con el Display pero nosotros vamos a usar solo las que describimos que son las básicas.

Materiales para el proyecto:

  • Arduino
  • Cables o Jumpers
  • LCD Display (16×2)
  • Potenciometro de 5 o 10 K

Circuito

En nuestro circuito vamos hacer la conexión de los elementos al Arduino, como podrás ver conectamos los el bus de datos a los pines del 5 al 2 del Arduino. Conectamos el la linea 1 y 2 del display al tierra y voltaje (5V). La tercer linea del display va conectada a el potenciometro, la cuarta linea del display va conectada al pin 12 del Arduino, la quinta linea del display va a GND y la sexta linea del display va conectada al pin 6 del Arduino. En la siguiente imagen podemos ver la forma en que esta conectado todo.

displayDiagrama

2013-07-16 18.21.08

Código

En código esta comentado para su fácil entendimiento.


//Importmos la Biblioteca para poder usar el Display LCD
#include <LiquidCrystal.h>
//Inicializamos el display con los pines de interfaz
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
//Hacemos la inicializacion del display
// En la configuracion le decimos que cuenta con 16 columnas y 2 filas
lcd.begin(16, 2);
//Imprimimos un mensaje en el Display, se imprime en la
//primer columna, primer renglon
lcd.print("Hardware Hacking");
}
void loop() {
/*
La funcion lcd.setCursor tiene nos ayuda a posicionar el lugar donde vamos a escribir
el primer dato hace referencia al renglon y el segundo dato hace referencia a la columna
por lo tanto vamos a escribir en la primer columna, primer renglon
*/
lcd.setCursor(0,0);
//Imprimimos el mensaje que esta dentro del parentesis
lcd.print("Hardware Hacking");
//Hacemos un pequeño delay para mostrar el mensaje
delay(2000);
//Borramos toda la informacion que contiene el display
lcd.clear();
//Ponemos el cursor en la primer columna primer renglon
lcd.setCursor(0,0);
lcd.print("Siguenos en:");
//Movemos el cursor para escribir en la primer columna, segundo renglon
lcd.setCursor(0, 1);
lcd.print("@hardwarehackmx");
delay(4000);
//Borramos el display
lcd.clear();
}

view raw

displaylcd

hosted with ❤ by GitHub


 

Lección 14 – Arduino – Comunicación Serial (Parte 2)

Esta es la segunda lección en la que usaremos la comunicación serial entre nuestro PC y Arduino. Si bien en las lecciones anteriores usamos comunicación serial para obtener datos del Arduino, recordemos que cuando trabajamos con el sensor de temperatura desplegábamos la temperatura en un monitor serial. Pues bien, en esta segunda parte vamos a seguir usando la comunicación serial pero ahora para enviar datos al Arduino, haremos uso de nuestro servo el cual usamos en la lección anterior para enviar comandos con las posiciones que le queremos dar.

Circuito

Vamos a utilizar la misma conexión que utilizamos en la lección anterior del servomotor.

servoCódigo

En esta ocación vamos a utilizar dos nuevas dos nuevas funciones las cuales son las siguiente:

  • Serial.available() :  Revisa que haya datos en el buffer de entrada del Arduino. De ser así regresa un valor mayor a 0 el cual es el tamaño del dato.
  • Serial.read() : lee el dato de entrada, lee un byte y lo podemos almacenar en una variable.

Explicación

El siguiente código tiene una sentencia if (Serial.available() > 0) { … para revisar que hayan llegado datos en el buffer de entrada de la comunicación serial. Hay una parte que dice Serial.read()  donde vamos a leer el dato que recibimos por el puerto serial, dicha lectura devolvera el valor ASCII al cual le vamos a restar 48 para convertir al valor decimal que le corresponde. Dependiendo del valor que leamos vamos a entrar en una estructura de descición “switch” y en cada uno de los casos vamos a mandarle el ángulo.


#include <Servo.h> //Importamos la biblioteca Servo
//Declaramos una variable donde vamos a guardar
//la informacion que recibamos del teclado
int byteDeEntrada;
//Declaramos miServo para poder usar el servomotor
Servo miServo;
void setup (){
//Inicializamos la velocidad del serial
Serial.begin(9600);
//asociamos miServo al pin 9
miServo.attach(9);
}
void loop (){
if (Serial.available() > 0) {
//Lee la informacion de entrada
byteDeEntrada = Serial.read() – 48;
switch(byteDeEntrada){
case 0 :
Serial.println("He recibido: 0");
miServo.write(0);
break;
case 1 :
Serial.println("He recibido: 30");
miServo.write(30);
break;
case 2 :
Serial.println("He recibido: 60");
miServo.write(60);
break;
case 3 :
Serial.println("He recibido: 90");
miServo.write(90);
break;
case 4 :
Serial.println("He recibido: 120");
miServo.write(120);
break;
case 5 :
Serial.println("He recibido: 150");
miServo.write(150);
break;
case 6 :
Serial.println("He recibido: 180");
miServo.write(180);
break;
}
}
}

view raw

serial2

hosted with ❤ by GitHub

Una vez que corramos el proyecto vamos mandarle números del 0 al 6, donde 0 corresponde a 0 grados y 6 a 180 grados.servoserial

Lección 12 – Arduino – Moviendo servomotores

En lecciones pasadas trabajamos con motores de corriente directa, esta lección es algo similar ya que trabajarmos con una variante del motor, el servomotor. Un servomotor es un dispositivo muy similar al motor, la diferencia es que nosotros podemos posicionarlo en cualquier ángulo que este dentro de su rango de operación. Vamos a crear un programa en Arduino para darle la posición a la cual queremos que se mueva el “servo”, es muy útil este tipo de dispositivos ya que es utilizando en proyectos donde se necesite movimiento de presición.

Los servomotores cuentan con un juego de engranes que posicionan el eje con presición. Los servos pueden ser posicionados en diferentes ángulos y por lo genera es que sean entre 0 y 180 grados. El servomotor cuenta con 3 terminales: 1 para voltaje, 1 para tierra (GND) y otra terminal para la señal, con esta ultima le vamos a mandar la posición que queremos.

Arduino cuenta con una biblioteca llamada <Servo.h> la cual necesitamos agragar a nuestro proyecto para poder trabajar con el. La librería <Servo.h> cuenta con diferentes funciones  pero las más importantes por el momento son las siguientes:

  • attach() : Asocia nuestra terminal de Servo de posición a un pin de nuestro Arduino.
  • write() : Escribe un valor en el servo para controlar su posicón. El valor que se escribe tiene que ser un ángulo entre 0 y 180 grados. Ejemplo : miServo.write(ángulo);
  • read(): Lee el ángulo actual del servomotor y devuelve un valor entre 0 y 180 grados.

Circuito

Para hacer nuestro ejercicio con el servomotor vamos a hacer las siguientes conexiones con el Arduino. Valos a conectar las terminales a voltaje, tierra (GND y conectar la terminal de voltaje al pin 9 del Arduino.

servo

Código

Nuestro código va a hacer solamente algo sencillo, vamos a mover el servo 30 grados cada segundo.


#include <Servo.h> //Importamos la biblioteca Servo.h
Servo miServo; //Declaramos un servo y se llama miServo, con esto vamos a trabajar
void setup(){
//Asociamos el servomotor al pin 9 del Arduino
miServo.attach(9);
}
void loop(){
//Le mandamos un angolo de 0 grados a nuestro servo
miServo.write(0);
//Hacemos un delay de 1 segundo antes de mandarle la siguiente posicion
delay (1000);
//Escribimos mas posiciones esperando 1 segundo entre una
//posicion y otra
miServo.write(30);
delay (1000);
miServo.write(60);
delay (1000);
miServo.write(90);
delay (1000);
miServo.write(120);
delay (1000);
miServo.write(150);
delay (1000);
miServo.write(180);
delay (1000);
}

view raw

servo

hosted with ❤ by GitHub

Demo