lunes, 30 de abril de 2012

Hacer funcionar un motor de CD con Arduino

En esta entrada explicare como hacer funcionar un motor de CD (de corriente directa) en un Arduino UNO. Primero que nada hay que entender que para hacer funcionar dispositivos como motores vamos a requerir algo más que solo el arduino. ¿Por qué? Los microcontroladores con los que comúnmente cuentan los arduinos por ejemplo el ATmega328 son muy poderosos pero están limitados en cuanto a la energía que proporciona cada uno de sus pines.
Este es un microcontrolador Atmega328, el cual es utilizado en la mayoría de los Arduinos actuales cada uno de sus pines es capaz de proporcionar 20ma y todos sus pines combinados 50ma. Entonces como podemos hacer funcionar algún dispositivo que ocupe más corriente.Existen varias opciones por ejemplo para el caso de los motores podemos adquirir un Shield de Motores con el cual podremos conectar de forma directa el motor al arduino pero incluso el shield está limitado a una cierta cantidad de corriente o puede que no exista un shield especifico para algún dispositivo que queramos controlar, para estos casos tendremos que amplificar la señal que proporciona el arduino, esto lo podemos lograr utilizando un transistor, un transistor es un dispositivo eléctrico semiconductor que cumple funciones de amplificador, oscilador, conmutador o rectificador.
Motor Shield:
Ya que sabemos todo esto podemos pasar a realizar el circuito.El material que utilizaremos es el siguiente:
Arduino UNO
Protoboard
Cables Jumpers Macho-Macho
Transistor BC337-25
2 Resistencias de 1KΩ
Motor DC


El diagrama del circuito es el siguiente:Realizado con FritzingComo podemos ver en el circuito con ayuda del transistor logramos amplificar la señal generada por el pin 13 del Arduino para después enviarla al motor y que este logre funcionar correctamente.
El código que utilice es el siguiente:El código no tiene gran ciencia incluso es el mismo de encender y apagar un LED reciclado en este caso lo único que modifique fue los tiempos de encendido y de apagado.Imágenes reales del circuito
Vídeo del circuito funcionando

Fuentes:http://es.wikipedia.org/wiki/Transistor
http://www.youtube.com/watch?v=cEz1i5xzGEE&feature=fvst

viernes, 27 de abril de 2012

Bluetooth Shield

En esta entrada mostrare la información del Shield de Bluetooth que usare para mi proyecto junto con el Arduino.
Este es el Shield Bluetooth comprado en www.seeedstudio.com

El Shield Bluetooth integra un modulo serial de Bluetooth, puede ser utilizado con cualquier versión de Arduino para lograr una comunicación inalambrica. Puede mantener conexion mediante bluetooth con la mayoria de los dispositivos moviles con sistema operativo Android a excepcion de algunos cuantos.

Especificaciones
  • Compatible con Arduino y Seeeduino
  • 10 metros de alcance
  • Interfaz UART con Velocidad de transmicion programable
  • Antena PCB incorporada




Por lo pronto es solo la información del modulo, después pondré entradas sobre el uso del Shield cuando empiece a trabajar con el.

Fuentes:

martes, 24 de abril de 2012

Memoria disponible pics y arduinos

En los microcontroladores la memoria de instrucciones y datos está integrada en el propio circuito integrado. Una parte debe ser no volátil, tipo ROM, y se destina a contener el programa de instrucciones que gobierna la aplicación. Otra parte de memoria será tipo RAM, volátil, y se destina a guardar las variables y los datos.
Ahora plantemos la diferencia entre una PC y un microcontrolador.En un microcontrolador es obvio que no existe un dispositivo de gran capacidad de almacenamiento como un disco duro, por otra parte un microcontrolador se enfoca a cumplir con una sola tarea ya que su memoria solo alcanza para almacenar un único programa de trabajo.

Hay que tomar en cuenta que todos los microcontroladores son diferentes, la aplicación y utilización de los mismos puede varias según sea el uso que le queremos dar. Por lo pronto explicare los 5 tipos de memoria no volátil con la que cuentan la mayoría de los micros disponibles en el mercado.


1. Rom con mascara: Rom con mascara es un tipo de memoria no volatil del tipo solo lectura la cual queda establecida a la hora de fabricar el micro. Máscara viene de la forma cómo se fabrican los circuitos integrados. Estos se fabrican en obleas que contienen varias decenas de chips. Estas obleas se obtienen a partir de procesos fotoquímicos, donde se impregnan capas de silicio y oxido de silicio, y según convenga, se erosionan al exponerlos a la luz. Como no todos los puntos han de ser erosionados, se sitúa entre la luz y la oblea una máscara con agujeros, de manera que donde deba incidir la luz, esta pasará. Debido al alto costo de la fabricación solo es aconsejable su producción cuando se precisan de varias cantidades de dichas unidades.



2. OTP: OTP es un tipo de memoria no volatil de solo lectura OTP significa One Time Programmable lo que quiere decir que solo se puede programar 1 vez. La memoria OTP es recomendable solo para construccion de prototipos y series muy pequeñas.


3. EPROM: EPROM significa Erasable Programmable Read OnIy Memory lo que significa que puede borrarse y grabarse las veces que se desee con ayuda de un grabador de PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. Las cápsulas son de material cerámico y son más caros que los microcontroladores con memoria OTP que están hechos con material plástico.


4. EEPROM: Electrical Erasable Programmable Read OnIy Memory esta memoria es parecida a la EPROM la diferencia es que tanto la programación como el borrado se realizan electricamente desde un grabador conectado a la PC.


5. Flash: Memoria no volatil de bajo consumo que se puede escribir y borrar. A diferencia de la EEPROM es mas rapida y de mayor densidad.

Ejemplo en PIC16F84A
La memoria de programa se divide en páginas de 2,048 posiciones. El PIC16F84A sólo tiene implementadas 1K posiciones es decir de 0000h a 03FFh y el resto no está implementado. (es aquello que se ve en gris)
Memoria en Arduino
En el caso del Arduino existen 3 fuentes de memoria las cuales vienen del micro utilizado por el Arduino que puede ser el Atemga328 o 168.

Memoria Flash: Memoria no volátil que funciona como almacén para los sketchs que se cargan al Arduino. Cuenta con 16k bytes de los cuales 2k son utlizados por el bootloader.

SRAM: Memoria Estatica de Acceso Aleatorio es donde se manipulan los sketchs y manipulan variables, dispone de 1024 bytes.

EEPROM: Memoria que puede ser utilizada para almacenar informacion de largo plazo, es del tipo no volatil cuenta con 512 bytes.

Algunos aspectos a tomar en cuenta:
  • No hay mucha SRAM disponible
  • Si se acaba la SRAM el programa fallara






Fuentes:
http://es.wikipedia.org/wiki/Microcontrolador#Memoria
http://r-luis.xbot.es/pic1/pic03.html
http://perso.wanadoo.es/pictob/microcr.htm
http://arduino.cc/es/Tutorial/Memory





Amplificar señal de pines de Arduino(Transistor)

En la entrada anterior hable un poco sobre el uso de un Transistor para amplificar la señal de los pines de Arduino. En esta entrada explicare un poco mas sobre el tema, ademas de explicar que es exactamente un transistor como funciona y como conectarlo.



¿Que es un transistor?
Un transistor es un aparato que funciona a base de un dispositivo semiconductor que cuenta con tres terminales, los que son utilizados como amplificador e interruptor. Una pequeña corriente eléctrica, que es aplicada a uno de los terminales, logra controlar la corriente entre los dos terminales.


Como se muestra en la siguiente imagen cada uno de los pines del Transistor tiene una función, el colector, la base y el emisor. Una de ellas es la que se encarga de emitir electrones, por lo tanto, es el emisor. Una segunda parte es la que los recibe, el denominado colector, y por último, una tercera parte que opera como un modulador del paso de los electrones. 


¿De que nos sirve el transistor en el Arduino?
Como ya lo había explicado en la entrada del motor el Arduino cuenta con un microcontrolador Atmega328 el cual puede proporcionar 20ma por pin y 50ma entre todos los pines, es probable que muchos dispositivos que queramos conectar al arduino requieran mas energía por lo cual ocuparemos amplificar la señal de alguna manera.


¿Como lo conectamos?
Por ejemplo en la entrada anterior para el uso del motor conectamos la señal emitida por el Arduino a la base el colector lo conectamos a tierra y por ultimo el emisor debe recibir corriente y a la ves proporcionar una salida al dispositivo que queramos conectarlo.



Tipos de Transistores

Transistores Bipolares: Surgen a partir de la unión de tres cristales de material semiconductor. Este tipo de transistores son generalmente utilizados en aparatos electrónicos analógicos y en ciertos aparatos digitales.
Transistores de efecto de campo: Este tipo de transistores, en la actualidad se encuentran en múltiples aparatos de diversos usos, como calculadoras, radios, televisores, videos, grabadoras, reproductores de mp3, celulares



Fuentes:



jueves, 5 de abril de 2012

Estableciendo comunicación entre el Arduino y CPU

En este ejemplo mostrare como enviar datos del Arduino a la computadora. En los ejemplos pasados lo único que hacía era una ves cargado el programa en el Arduino este actuaba independientemente sin regresar valores ni nada a la computadora.

Pero primero que nada algunos conceptos que son importantes en este ejemplo ya que es importante conocerlos.

¿Que es una librería de software?
Una librería de software es un conjunto de procesos los cuales están todos relacionados. Por ejemplo si queremos controlar un motor o alguna otra cosa lo más conveniente sería buscar una librería sobre lo que estamos haciendo, de esta forma nos ahorramos el trabajo de estar investigando el funcionamiento del motor. En este ejemplo la librería que usare será la serial ya que esta permite que el Arduino sea capaz de enviar datos a la computadora.


¿Que es Serial?
Serial es la transmisión de bits 1 a la vez, por ejemplo en este ejemplo lo que hare será enviar y recibir bits entre la computadora y el Arduino, explicándolo de manera más sencilla se trata básicamente de mandar y recibir 0 y 1.


El material que utilizare es el siguiente:

Arduino junto con el cable USB


Primero que nada hay que conectar el Arduino con la computadora para ya tenerlo listo para realizar la práctica.

Después abrimos el ide de Arduino y creamos un nuevo sketch con el nombre de hola mundo File/New y empezamos a escribir el código.


El código que yo utilice es el siguiente:


Para utilizar la libreria Serial como podemos ver en el codigo y como cualquier otra librería que usemos en programacion basta con escribir el nombre de la libreria un punto y la acción que querramos usar de dicha libreria. Lo primero que se hizo fue el inicio de la comunicación entre el arduino y la computadora con una velocidad de transmision de 9600 bites por segundo. Despues embes de utilizar print line como la libreria serial contiene una funcion de impresión mas corta utilizamos println imprimimos hola mundo y por ultimo ponemos un ciclo sin fin solamente para poder probar el programa ya que sino no podriamos probarlo.

Compilamos el código, lo cargamos al arduino y podemos verlo funcionar abriendo el monitor serial en Tools/Serial Monitor o con Ctrl+Shift+M y nos deberia aparecer la impresion en el monitor como en la siguiente foto.

Si no contamos con un arduino que se reinicie solo, reiniciandolo manualmente podremos lograr que vuelva a enviarse datos.


Fuentes:
http://www.ladyada.net/learn/arduino/lesson4.html

miércoles, 4 de abril de 2012

Generando un programa y cargando al pic

Este es un ejemplo que realice primer que nada para poder entender un poco el cómo generar el archivo HEX y también para probar el funcionamiento del PIC y del programador.

El material que utilice es el siguiente:

PIC16F628A


Protoboard


1Led


1Cargador (Cualquier fuente de energía funciona que no sobre pase los 5v)


Programador PIC-500(Puerto Serial)


ICProg


mikroBasic Pro


Empezamos a utilizar mikroBasic PRO for PIC

Lo primero que tenemos que hacer es utilizando el mikroBasic o algún otro compilador del lenguaje basic generar nuestro código, la mayoría de los compiladores vienen con este código de prueba de encendido de un LED precisamente para probar el PIC. Pero en caso de que la versión que estemos utilizando no lo contenga haríamos lo siguiente.
Dentro de mikroBasic vamos a File/New/NewProject y nos aparece la siguiente ventana en ella escribimos el nombre de nuestro proyecto además de seleccionar el PIC que utilizaremos.


Después ya podemos empezar a escribir nuestro código en este caso el código que utilize es el siguiente.


Una vez que hayamos terminado o querremos verificar nuestro código para compilar elegimos la opción de build Project para generar el archivo .Hex.


Si no hay ningún error el programa nos generara el archivo .Hex con el mismo nombre de nuestro proyecto en la carpeta donde estemos trabajando.


Empezamos a utilizar icprog

Ya que tenemos el archivo .HEX podemos pasar a programar nuestro PIC, para esto utilizaremos el programador de PIC y el icprog. El programador que yo conseguí es el PIC-500 con puerto serial, compre este programador más que nada por su bajo costo la desventaja que tiene es que el puerto serial difícilmente lo encontramos en computadoras nuevas y no podemos utilizarlo con un adaptador ya que el voltaje que ocupa para programar no llegaría al programador, si contamos con una computadora vieja se recomienda este programador ya que el costo si es muy bajo en comparación con uno de USB.

Lo que haremos será abrir la versión de ic-prog que tengamos para poder programar el PIC16F628A es posible que ocupemos descargar una versión más nueva de icprog ya que la que viene con el programador no cuenta con este PIC.

Ya abierto el programa simplemente cargamos el archivo .HEX previamente generado y elijimos la opción de programar todo, conectamos el programador y colocamos el PIC con cuidado en la base, confirmamos el mensaje de que queremos programar el PIC si no hay ningún problema nos aparecerá una ventana de que se programado con éxito. Si nos aparece algún error hay que borrar primero el contenido que tenga el PIC abrir y cerrar el programa e intentar nuevamente.


Por último armamos el circuito poniendo la tierra en el pin 5 del PIC y la energía en el 14 el LED puede estar en cualquier otro pin ya que así lo programamos. El circuito queda de la siguiente forma


Un video del circuito funcionando



Fuentes:
Blog de mi compañero de clase Emmanuel Garcia que me resolvio muchas dudas y me ayudo a poder hacer funcionar el circuito.
http://synnick.blogspot.mx/search/label/Lab%20Computo%20Integrado

PIC16F628A

El PIC16F84A se considera uno de los más famosos de todos los tiempos, pero actualmente ya es considerado como obsoleto, su remplazo en la actualidad viene siendo el PIC16F628A, este mismo es el que se utiliza en la mayoría de los ejemplos y proyectos que encontramos y es el PIC que yo probablemente utilizare para mi proyecto de Computo Integrado. Primero que nada hablemos un poco de las características de este PIC, el PIC16f628A es un microcontrolador de 8 bits, cuenta con una arquitectura RISC avanzada así como un juego reducido de 35 instrucciones, ya que este PIC es el remplazo del 16f84A como ya lo hemos dicho, sus pines son compatibles con su antepasado haciéndonos posible actualizar algún proyecto antiguo donde hayamos usado el 16F84A.


Diagrama de pines del PICF628A

En el diagrama de pines podemos ver que los pines 1, 2, 3, 4, 15, 16, 17 y 18 tienen el nombre de RAx. Esos pines conforman el puerto A, “PORTA”, los pines 6 al 13 pertenecen al puerto B “PORTB”. El pin 5 correspone al negavito(-) o tierra y el pin 14 va conectado a la fuente de alimentación de 5V.

Características del PIC16F628A:

CPU De alto rendimiento RISC:
• Velocidades de operación de DC - 20 MHz
• Capacidad de interrupción
• Pila de 8 niveles
• Modos de direccionamiento directos, indirectos y relativo
• 35 simples instrucciones de palabra:
• Todas las instrucciones de ciclo único, excepto las de salto

TIPOS DE MEMORIA DEL PIC16F628A

Memoria flash: esta memoria es de tipo no volátil en esta memoria ira nuestro programa que realicemos.

El pic16f628a tiene una capacidad de 2048 words seto se podría traducir a 2048 líneas de código que podemos escribir en lenguaje assembler para este microcontrolador.
Memoria RAM: esta memoria sirve para guardar datos y variables, esta memoria es de tipo volátil, es decir perderá la información cuando desaparezca la alimentación.

La memoria ram que posee el microcontrolador pic16f628a es de 224 bytes
Memoria eeprom: en una memoria de tipo no volátil de poca capacidad sirve para guardar datos, aun cuando deje de recibir alimentación la información no se perderá.

La memoria eeprom que posee el pic16f628a es de 128 bytes.

Mapa de Memoria del PIC16F628A



Fuentes:
https://sites.google.com/site/proyectospic2010/PIC18F452/introduccion-pic16f628a-1
http://www.ucontrol.com.ar/wiki/index.php/Programaci%C3%B3n_de_microcontroladores_PIC

martes, 3 de abril de 2012

Microcontrolador PIC

¿Que es un PIC?

Un PIC, es un microcontrolador programable, fabricado por MicroChip Technology Inc originalmente derivados del PIC1650. El nombre completo es PICmicro, aunque generalmente se utiliza como Peripheral Interface Controller(controlador de interfaz periférico). Los PIC que suelen usarse son de 8, 16 y 32 bits. Estos microcontroladores según el modelo disponen de diferentes sistemas de comunicación con el exterior como puertos UART, USB y conversores de analógico a digital.


Arquitectura interna del PIC

Hay dos arquitecturas conocidas; la clásica de von Neumann, y la arquitectura Harvard.

Arquitectura Von Neumann: Dispone de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control).

Arquitectura Harvard: Dispone de dos memorias independientes, una que contiene sólo instrucciones, y otra que contiene sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias, ésta es la estructura para los PIC's.


Programación PIC

El lenguaje nativo de estos microcontroladores es el ASM, y en el caso de la familia “16F” solo posee 35 instrucciones. Pero el ASM es un lenguaje que está mucho más cerca del hardware que del programador, y gracias a la miniaturización que permite incorporar cada vez más memoria dentro de un microcontrolador sin aumentar prácticamente su costo, han surgido compiladores de lenguajes de alto nivel. Entre ellos se encuentran varios dialectos BASIC y C. El BASIC resulta bastante más simple de aprender.
Un microcontrolador es como un ordenador en pequeño: dispone de una memoria donde se guardan los programas, una memoria para almacenar datos, dispone de puertos de entrada y salida, etc. A menudo se incluyen puertos seriales (RS-232), conversores analógico/digital, generadores de pulsos PWM para el control de motores, bus I2C, y muchas cosas más. Por supuesto, no tienen ni teclado ni monitor, aunque podemos ver el estado de teclas individuales o utilizar pantallas LCD o LEDs para mostrar información.
En general, por cada cuatro ciclos de reloj del microcontrolador se ejecuta una instrucción ASM (una instrucción BASIC consta generalmente de más de una instrucción ASM). Esto significa que un PIC funcionando a 20MHz puede ejecutar 5 millones de instrucciones por segundo.
Los pines del PIC se dedican casi en su totalidad a los puertos que mencionábamos anteriormente. El resto (2 o más) son los encargados de proporcionar la alimentación al chip, y a veces, un sistema de RESET. Desde BASIC es posible saber si un pin esta en “estado alto” (conectado a 5V o a un “1” lógico) o en “estado bajo” (puesto a 0V o a un “0” lógico”). También se puede poner un pin de un puerto a “1” o “0”. De esta manera, y mediante un rele, por ejemplo, se puede encender o apagar una luz, motor, maquina, etc.

Para transferir el código de un ordenador al PIC normalmente se usa un dispositivo llamado programador. Existen muchos programadores de PICs, desde los más simples que dejan al software los detalles de comunicaciones, a los más complejos, que pueden verificar el dispositivo a diversas tensiones de alimentación e implementan en hardware casi todas las funcionalidades. Muchos de estos programadores complejos incluyen ellos mismos PICs pre-programados como interfaz para enviar las órdenes al PIC que se desea programar.


Fuentes:
http://perso.wanadoo.es/luis_ju/pic/pic03.html
http://electronica-teoriaypractica.com/2012/01/que-es-un-pic.html
http://es.wikipedia.org/wiki/Microcontrolador_PIC
http://foro.elhacker.net/electronica/que_es_pic-t264274.0.html
http://electronica-pic.blogspot.mx/
http://www.terra.es/personal/fremiro/arquitectura.htm
http://www.ucontrol.com.ar/wiki/index.php/Programaci%C3%B3n_de_microcontroladores_PIC

Fritzing



Fritzing es un programa que encontre que me parecio util para la clase ya que se pueden crear protipos con diferentes tipos de Arduino,pics y demas componentes.

¿Que es Fritzing?

Fritzing es un programa de codigo abierto con la iniciativa de poder convertir prototipos de circuitos por ejemplo de una placa de prueba a productos finales. Fritzing fue creado bajo los principios de Processing y Arduino, y permite a los diseñadores, artistas, investigadores y aficionados documentar sus prototipos basados en Arduino y crear esquemas de circuitos impresos para su posterior fabricación.

Instalación

Lo primero que tenemos que hacer es entrar a http://fritzing.org/, vamos a la sección de descargas y lo descargamos para el sistema operativo que utilicemos, esta disponible para Linux,Mac y Windows. En este caso lo descargaremos para Linux 64bits.



Lo siguiente es extraer los archivos de fritzing-0.7.1b.linux.AMD64 y ejecutamos el script Fritzing lo cual nos abrirá el programa.


Como podemos ver el programa cuenta con una gran cantidad de componentes que podemos utilizar para crear cualquier prototipo que queramos incluso cuenta con los diferentes tipos de Arduinos actuales y pics.





Ya para terminar les dejo la imagen de un pequeño ejemplo que hice, muy simple es solo un led en un protoboard usando el Arduino UNO como fuente de energia y también para manipular el led.


Fuentes:
http://fritzing.org/