miércoles, 16 de mayo de 2012

Sistema operativo Integrado


Un sistema integrado posee hardware de computador junto con software inegrado como uno de sus componentes más importantes. Es un sistema computacional dedicado para aplicaciones o productos. Puede ser un sistema independiente o parte de un sistema mayor, y dado que usualmente su software está embebido en ROM (Read Only Memory) no necesita memoria secundaria como un computador. 



Un sistema embebido tiene tres componentes principales:


1. Hardware.
2. Un software primario o aplicación principal. Este software o aplicación lleva a cabo una tarea en particular, o en algunas ocasiones una serie de tareas.
3. Un sistema operativo que permite supervisar la(s) aplicación(es), además de proveer los mecanismos para la ejecución de procesos. En muchos sistemas embebidos es requerido que el sistema operativo posea características de tiempo real.







En que consiste
Este es un sistema operativo que se ejecuta sobre un sistema integrado, los cuales han sido descritos previamente. Los sistemas operativos integrados generalmente se ejecutan sobre dispositivos que difieren de un computador común, como televisores, hornos microondas, y teléfonos móviles. Usualmente tienen algunas características de sistemas de tiempo real, pero a la vez tienen restricciones de tamaño, memoria y energía que los hacen especiales. 



Este tipo de sistemas se centra en chips microcontroladores. Estos chips funcionan como una pequeña computadora, tomando información, procesandola y entonces produciendo una salida de información. A diferencia de una computadora normal, un típico microcontrolador solo puede hacer una sola cosa. 



Algunos Sistemas Operativos Integrados:
En particular, se estudiarán los sistemas QNX, Linux Embebido y Windows CE.



QNX:
    Es un sistema operativo embebido desarrollado por QNX Software Systems Ltd, para aplicaciones de dispositivos electrónicos, telecomunicaciones, sistemas automotrices, etc.; que necesitan una gran confiabilidad, desempeño, funcionalidades específicas, y una escalabilidad masiva.
Linux embebido:
     Es un sistema Linux típico del cual se han removido programas de utilidad, herramientas, y otros servicios del sistema que no son necesarios en un ambiente embebido.-Linux embebido toma el kernel de Linux y extrae los módulos que no son necesarios. Dentro de la capa del kernel, Linux embebido está compuesto de cinco grandes subsistemas: el planificador de procesos, el manejador de memoria, el sistema de archivos virtual, la interfaz de red, y la comunicación entre procesos.
  • Windows CE:
  •  Fue introducido en un conjunto de productos de PC de mano en el año 1996, pero posteriormente se transformo en un sistema operativo embebido altamente configurable. Entre sus ventajas se encuentran que incluye un subconjunto del API Win32 enfocado a los servicios que comúnmente se necesitan, así como una optimización en el consumo de energía.
  • Sobre ellos está el subsistema de gráficos, ventanas y eventos, el kernel y la pila de comunicaciones. 
  • Sobre el kernel se ubica el sistema de archivos. Las aplicaciones se ejecutan en su propio espacio de direcciones e interactúan con el resto de Windows CE vía llamadas al API de Win32.
VxWorks
VxWorks es un sistema operativo de tiempo real que puede ser usado en sistemas integrados. VxWorks puede ser personalizado fácilmente y puede correr en la mayorá de los procesadores diseñados para la computación distribuida.

VxWorks es usada para control de redes y dispositivos de comunicación, pruebas y equipo de medición, periféricos de computadora, sistemas automotivos, aviónicos, equipo y productos de consumo diverso. El sistema operativo incluye un kernel para multitasking preventivo, respuesta a interruptores, comunicación de interprocesos y sistema afiliado.

Soporte de red

Otra punto es el soporte de red es importante en sistemas embebidos ya que les facilita comunicarse con el mundo exterior, así como su actualización. QNX contiene comunicación de red de bajo nivel en su microkernel; Windows CE posee varias pilas de comunicación a nivel de kernel (IP, PPP, IrDA, etc.).
Linux embebido por su parte posee un soporte de red heredado de los ambientes cliente/servidor soportados por Linux, ofreciendo pilas de red y protocolos de Internet.



Arquitectura

Los sistemas operativos embebidos usan una arquitectura de microkernel o una arquitectura
modular, esto los hace fácilmente adaptables para ajustarse a diferentes requerimientos de 
aplicaciones.






QNX
Contiene un microkernel muy pequeño rodeado por un conjunto de procesos cooperantes, que proveen servicios de alto nivel. El microkernel de QNX implementa cuatro servicios:
1) Comunicación entre procesos.
2) Comunicación de red a bajo nivel.
3) Planificación de procesos.
4) Manejo de interrupciones.
Los procesos de servicio de sistema operativo son opcionales, y el usuario puede elegir cuales son necesarios para sus aplicaciones.
Windows CE
La arquitectura de Windows CE es jerárquica. En el fondo se encuentran los drivers del dispositivo.
Linux embebido
Linux embebido posee una estructura en capas complementada con módulos. Estas capas generalmente son el kernel de Linux, el sistema de archivos, los drivers de dispositivos y los protocolos de red.


Referencia:
Sistemas Operativos Embebidos






Ambientes inteligentes

En la actualidad los dispositivos perifericos se pueden encontrar en diferentes situaciones como lo son los ambientes inteligentes. 


Las tecnologías en el hogar es permitir que las facilidades que ofrece se integren en la existencia cotidiana y la hagan mas cómoda. 
El concepto de ambiente inteligente esta asociado a la computación ubicua esto es un conjunto de elementos facilitadores  del ambiente inteligente. 
Existen  áreas básicas que permiten la realización del ambiente inteligente
  • Los sistemas distribuidos 
  • La movilidad


Los elementos habilitadores que puede incluir el ambiente inteligente pueden ser algunos de estos:
  • Micro-servidores: Cualquier dispositivo del entorno se constituirá tanto en un cliente de otros servidores como un micro-servidor que almacene un proceso/aplicación de ser usado por cualquier otro para hacer tareas especificas. 
  • Terminales y sensores. Se deben mejorar los sensores que existen en el hogar. Algunos de estos podrian ser sensores de posición de las personas, de temperatura, de humedad, de intensidad luminosa, de sonido. Para mejoramiento podrían ser los relacionados con aspectos tecnicos de la vivienda como son de presión, envejecimiento de tuberias, etc. 
  • Biometría: Esto es un elemento fundamental ya que con un reconocimiento de quien se encuentra en el hogar se identificaría a las personas. Para esto se utilizan técnicas de identificación basados en características biométricas o en patrones de comportamiento individuales. 
  • Personalización de los servicios: Estos significa que los servicios estarán disponibles para los usuarios en cualquier momento, en cualquier lugar, con la apariencia deseada. Añadiendo elementos dependientes del contexto y la circunstancia.
La domótica también forma parte de estos ambientes inteligentes. Este término se refiere a la integración de una serie de elementos como informática, electricidad, electrónica y robótica. Esto con el objeto de brindar confort, seguridad, entretenimiento, comunicación y control a los usuarios que son capaces de automatizar un hogar.

Por Domótica entendemos la incorporación en viviendas y edificios de una serie de elementos tecnológicos que permitan gestionar de forma eficiente, segura y confortable para el usuario los distintos aparatos e instalaciones domésticas tradicionales que conforman una vivienda como la iluminación, electrodomésticos, calefacción y zonas de entretenimiento digital como el estéreo, las televisiones y otros aparatos. 


Una sencilla lista de algunos de los elementos y beneficios que la domótica puede aportar son:
  • Ahorro Energético
  • Apagado de Luces y Lámparas
  • Regulación de Iluminación según el nivel de Luminosidad Ambiente
  • Gestión Multimedia y de Electrónicos de Entretenimiento
  • Acceso a Cámaras de Seguridad o Sensores de Movimiento
  • Cerramiento de Persianas
  • Tele-Asistencia doméstica
  • Control de Funciones remoto vía Internet
  • Transmisión de Alarmas
Los sensores son los elementos electrónicos que utiliza la domótica para conocer el estado de ciertos parámetros  como la temperatura ambiente, la existencia de un escape de agua, la intensidad de luz, etc. Dichos sensores están comunicados hacia el centro de gestión, desde el cual podemos controlar nuestro hogar.


Las instalaciones de domótica usualmente incluían un panel central con pantalla táctil (como la ilustración debajo) desde donde el usuario controlaba las funciones automatizadas.




Arquitectura
Desde el punto de vista de donde reside la inteligencia del sistema domótico, hay varias arquitecturas diferentes

Arquitectura Centralizada: un controlador centralizado recibe información de múltiples sensores y, una vez procesada, genera las órdenes oportunas para los actuadores.
Arquitectura Distribuida: toda la inteligencia del sistema está distribuida por todos los módulos sean sensores o actuadore. Suele ser típico de los sistemas de cableado en bus o redes inalámbricas.n bus, o redes inalámbricas.
Arquitectura mixta: sistemas con arquitectura descentralizada en cuanto a que disponen de varios pequeños dispositivos capaces de adquirir y procesar la información de múltiples sensores y transmitirlos al resto de dispositivos distribuidos por la vivienda, p.ej. aquellos sistemas basados en Zigbee y totalmente inalámbricos.




Referencias
Entornos inteligentes
Ambientes Inteligentes
Futuro: Ambientes Inteligentes

lunes, 14 de mayo de 2012

Dispositivos periféricos

Los dispositivos periféricos se dividen en los dispositivos de E/S y los que almacenan los datos fuera de la memoria principal del sistema(backing store o medios de al almacenamiento masivo). Una tarea del SO es identificar un dato en términos de su dirección en la memoria principal (dirección física). 
Existen periféricos inteligentes que permiten que el SO les interrogue para conseguir informacion(dirección lógica). Así los dispositivos perifericos aparecen al SO como una serie de registros(mapeado en memoria o en puertos) y una posible fuente de IRQ no viéndose afectado por la tranferencia de datos entre periférico y memoria (DMA) excepto para ver el estado.
Como antes vimos los sistemas embebidos que estos se componen de al menos un CPU, memoria y dispositivos periféricos (algunos "internos" y otros que implementan interfaces de E/S), todos interconectados con buses)




El CPU realiza E/S mediante:
  • Puertos de E/S(direcciones asociadas a dispositivos)
  • lineas de interrupcion(IRQs) e ISRs("opcionales")
Conectados a los puertos, el sistema cuenta con dispositivos periféricos:
  • Puertos (GPIO) para interfacear dispositivos simples.
  • Dispositivos integrados al microcontrolador (por ej. timers, etc).
  • Dispositivos que implementan interfaces externas (estándar o para facilitar la interacción con otros dispositivos).

Interfacing vía GPIO -> Interfaces y puertos externos

Los puertos externos permiten adquirir y controlar señales. Dichas señales pueden ser:
Digitales:

  • Son controladas de manera directa
  • Puede incluirse circuitería adicional de protección, etc.
Analógicas:

  • Requieren una conversión a valores lógicos digitales
  • Normalmente mediante el uso de conversores A/D y/o D/A
Dispositivos perifericos integrados

Dispositivos Periféricos Internos: 
Estos son algunos dispositivos periféricos 
que típica mente se encuentran integrados en 
microcontroladores.


Controladores de memoria y DMA
Toda memoria que no sea ROM ni SRAM (las que pueden controlarse directamente de la CPU requiere de un controlador que se encargue de:
  • Coordinar los accesos del CPU y de la información almacenada(en DRAM). 
  • Coordinar el temporizador de las lecturas y escrituras, asi como el mapeo de direcciones(en memoria EEPROM y Flash. 
Estos controladores son expuestos al sistema a través de registro de datos y control, suelen tener asociados un conjunto de interrupciones destinadas a notificar de los eventos ocurridos. 



Escribiendo en una memoria EEPROM/flash:

  • El controlador expone varios registros para las operaciones.
  • La escritura requiere un temporizado adecuado. Se escriben varias palabras a la vez.
  • Existen mecanismos de protección de bloques de memoria (para escrituras internas, y para acceso desde el exterior vía programadores y debuggers.
  • Protección de propiedad intelectual).



Se tienen interrupciones especiales para controlar el proceso:



Esquema 1: El dispositivo espera el DMAACK para actuar sobre el bus.




Esquema 2: El controlador de DMA copia el dato del dispositivo a un buffer para luego transferirlo a memoria (menos hardware en el dispositivo).
Contadores y Timers
Una tarea habitual en Sistemas Embebidos es el conteo de eventos ocurridos (por ej, la cantidad de pulsos recibidos por una línea).


  • También, la medición de intervalos de tiempo es una tarea esencial.
  • Un derivado de esto consiste en la generación de eventos en un plazo determinado, eventos periódicos, etc.
  • Para ello contamos con los contadores y los timers. El mismo circuito se utiliza para construir timers y como divisor de clock. 
Aplicaciones

  • Medición del tiempo entre eventos.
  • Medición de la duración de un pulso.
  • Conteo de objetos o eventos
  • Delays generados por hardware (sin ocupación del CPU).
  • Generación de eventos a cierto tiempo o periódicos (vía comparadores)
  • Mayor precisión si se usan interrupciones para el procesamiento de los eventos.





WDT

Un watchdog timer (WDT) es un timer utilizado para recuperar al sistema ante un fallo. 
El WDT continuamente se incrementa periódicamente, el software del sistema, resetea el WDTsi por alguna falla, el sistema deja de responder, en cuyo caso el WDT alcanza el overflow.

  • Ante un overflow del WDT, el sistema se resetea.
  • Ante un fallo en sistemas de escritorio, es el usuario quien decide matar un proceso, reiniciar la computadora, etc.
  • En un sistema embebido, no siempre se cuenta con la interfaz necesaria para notar esta condición de error.


Capture/Compare/PWM
A partir de contadores y timers, es común que se implementen dispositivos derivados:
Capture register: captura el tiempo en el cual ocurrió un evento. Se copia allí el valor del timer (el timer no se detiene).

Compare device: para disparar un evento cuando el timer alcanza determinado valor (como al generar eventos periódicos). De compara continuamente el valor del timer con el del registro. Cuando coinciden, se produce un evento.

PWM generator: genera una señal de ancho de pulso modulado. Este tipo de señales tienen muchas aplicaciones para actuar sobre diversos dispositivos. Consiste en una técnica que permite modular una señal analógica en función del duty cycle de un tren de pulsos digitales periódico.

Aplicaciones:
  • Controlar un motor
  • Controlar el brillo de un led
  • Controlar el tono de un parlante



Generador en Hardware:

Generador en Software:

System reset, subsistemas de inicialización y consumo:

Inicialización del sistema
El reseteo del sistema puede originarse en diversas causas:
– Se conectó el sistema o se reseteó el mismo modificando el nivel lógico de la señal correspondiente (Power-on reset - POR).
– El watchdog timer finalizó sin ser reinicializado.
– Se detectó una caída en el voltaje de alimentación (Brown Out Reset – BOR).

Ejemplo: System reset (ATmega328P)

Ahorro de energía:
Esencial en ciertas aplicaciones (ej: alimentación por baterías)
Ej: tecnología Nanowatt (Microchip)
Se logra:
  • Reduciendo el voltaje de alimentación
  • Reduciendo la frecuencia de reloj: múltiples modos de ejecución con varios relojes a distintas frecuencias.
  • Desactivando módulos que no se estén utilizando o incluso el mismo CPU.
Sleep – suspendiendo el microcontrolador
El modo sleep permite apagar el CPU para ahorrar energía. Mediante una instrucción a tal fin se suspende el sistema hasta la ocurrencia de un nuevo evento.
  • Power-on reset
  • WDT wake up (en sleep el WDT puede despertar al sistema)
  • una interrupción externa (ciertas interrupciones internas no pueden producirse a causa del modo sleep, x ej. timers).

Detección de voltaje bajo
  • Útil para detectar la ausencia de carga suficiente en las baterías que alimentan el sistema o para detectar cortes en el suministro eléctrico.
  • Muchos IC reguladores de voltaje, permiten interrumpir al CPU ante esta situación (usualmente NMI). Otras veces, este tipo de detectores vienen integrados en los microcontroladores.
  • El CPU puede correr una rutina crítica antes de perder la energía por completo (capacitores con cargas
  • residuales pueden proveer la energía necesaria para esto durante un período breve de tiempo).

Referencias:
Simon, D. An Embedded Software Primer. Addison-Wesley 
Professional. 1999. ISBN: 978-0201615692. Capítulo 3.

viernes, 11 de mayo de 2012

Secuencia de luces

Aqui mostrare el funcionamiento de una secuencia de luces con arduino,  se utilizo un ciclo for en este caso se encenderan las luces en un recorrido ascendente y descendente.
Los 6 leds estan conectados a los PIN 2 a 7 del arduino.




Material. 
  • 6 LED-s.  
  • 6 resistencias de 330 Ohmios.  
  • Una placa protoboard.  
  • Cables para realizar las conexiones
Diagrama: 




Codigo 


jueves, 10 de mayo de 2012

Secuencia Básica de 3 leds

Esta práctica se trata de encender y apagar 3 leds colocados en las salidas 6,7 y 8(PIN 6, PIN 7 Y 8) con tiempo de 200ms. Las variables asignadas a cada led son ledPin1, ledPin2, ledPin3.


Material: 

- Arduino Uno
- 3 leds
- 3 resistencias de 330 Ohms
- Cable de conexión
- Protoboard


Codigo:
Diagrama:

Demo:

 

Proyecto Integrador. PIC

Para este proyecto decidí hacer un contador binario el cual nos muestra la salidas mediante leds esto funciona como un sumador binario, al ir mostrando una suma binaria el resultado lo veremos a través de 8 leds conectados en el puerto B del microcontrolador. 






MATERIAL: 
-Microcontrolador PIC16F628A



-8 LEDS de 5mm.


-8 resistencias de 330 Ω a ½ vatio, naranja-naranja-café

-1 resistencia de 4,7 KΩ a ½ vatio, amarillo-violeta-rojo


-1 pulsador normalmente abierto de dos patitas.

-un regulador de voltaje 7805


-1 protoboard


Diagrama de conexiones y el pulsador:


CÓDIGO
Aquí mostrare el código el cual fue realizado en Basic, algunas funciones que utilice para su funcionamiento son las siguientes:




LAS VARIABLES BIT, BYTE Y WORD.
Estas son creadas para guardar datos en la memoriaRAM (Random Access Memory) o memoria de acceso casual, esta memoria trabaja únicamentemientras esté alimentado el PIC, una vez que el PIC es desconectado, los datos de la memoriaRAM se borran.


LA DECLARACIÓN IF... THEN.
Esta sirve de condicionante, si es verdadera ejecuta la operación que sigue al THEN , y si es falsa salta a la siguiente línea después del  THEN.

Herramientas
Microcode Studio: 
Es un Entorno de desarrollo Integrado (IDE), diseñado exclusivamente para facilitar la programación de los microcontroladores PIC.

PICBasic este para generar el archivo .hex.


Funcionando: 
Se muestra que mediante un ciclo va contando en binario, al terminar el ciclo vuelve a iniciar el contador. 











miércoles, 2 de mayo de 2012

Manejo de memoria

En esta entrada mostrare el manejo de memoria que podría tenerse en un arduino y como podemos ampliar las posibilidades de almacenamiento en el. 



En los microcontroladores la memoria de instrucciones y datos está integrada en el propio chip. 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.

Tipos de memoria en Arduino: Flash, SRAM y EEPROM
Existen tres tipos de memoria en los microcontroladores utilizados por las placas Arduino(ATmega168, ATmega328, ATmega1280, etc.): Memoria Flash, memoria SRAM y memoria EEPROM. 
Aqui les indicare las diferencias de cada una de ellas y el uso que Arduino pude darles.


Memoria Flash (espacio del programa) en Arduino
La memoria Flash (espacio del programa) es donde Arduino almacena el sketch. Un sketch es el nombre que usa Arduino para un programa. Es la unidad de código que se sube y ejecuta en la placa Arduino. 
  • Esta memoria es no volátil, si Arduino deja de ser alimentado eléctricamente los datos que haya en esta memoria permanecerán.
  • El tamaño de la memoria Flash de Arduino puede variar dependiendo del microcontrolador, aunque no es muy grande. Por ejemplo, para el chip ATmega168 el tamaño de la memoria Flash es de 16 kilobytes, de los cuales 2 kilobytes son utilizados por el bootloader. 
  • Para el caso del microcontrolador ATmega328 (como el que incorpora Arduino UNO) el tamaño de la memoria Flash es de 32KB, de los cuales el bootloader usa 0,5KB. Por lo que debemos desarrollar los programas de forma muy optimizada, usando los tipos de variables que menos memoria requieran, en la medida de lo posible. 
  • También debemos optimizar el código fuente de la aplicación para no repetir líneas de código.

Memoria SRAM (Static Random Access Memory ó memoria estática de acceso aleatorio) en Arduino
La memoria SRAM (Static Random Access Memory ó memoria estática de acceso aleatorio) es de tipo volátil, es el espacio donde los sketches (programas) almacenan y manipulan variables al ejecutarse. 
La información guardada en esta memoria será eliminada cuando Arduino pierda la alimentación. 
  • Esta memoria es de uso exclusivo para el programa en ejecución.
  • La memoria SRAM de Arduino es muy pequeña, por lo que debemos optimizar nuestros programas al máximo y no abusar de variables de tipo char muy grandes. Hay que tener en cuenta que cada carácter de una variable char utiliza un byte. En el microcontrolador ATmega 168 el tamaño de la memoria SRAM es de 1024 bytes, para el caso de un chip ATmega328 (como el que incorpora Arduino UNO) el tamaño es de 2KB (2048 bytes).
  • Si la SRAM se queda sin espacio, el programa de Arduino fallará de forma imprevista, aunque se compile y se suba a Arduino correctamente la aplicación no se ejecutará o se ejecutara de manera extraña.
  • A continuación muestro algunos consejos para optimizar los programas y evitar que consuman toda la memoria SRAM disponible:
  • Si el programa se comunica con una aplicación ejecutándose en un ordenador, se puede intentar trasladar los datos o cálculos al ordenador, reduciendo la carga en el Arduino.
  • Si el programa usa tablas de referencia u otros arreglos de gran tamaño, es recomendable utilizar el tipo de datos más pequeño que se pueda para almacenar estos datos; por ejemplo, un "int" utliza 2 bytes, mientras que un "byte" utiliza solo 1 byte (pero puede almacenar un rango menor de datos).
  • Si no se necesita modificar las cadenas o datos mientras el programa se ejecuta, se pueden almacenar en la memoria Flah (de programa) en vez de la SRAM; para esto, hay que utilizar el keyword PROGMEM.

Memoria EEPROM en Arduino
EEPROM es un espacio de memoria que puede ser utilizado por los programadores para almacenar información a largo plazo. Este tipo de memoria es no volátil, por lo que los datos guardados en ella permanecerán aunque Arduino pierda la alimentación. 
  • Esta memoria puede ser usada para guardar valores si es necesario. 
  • El tamaño de la EEPROM para un chip ATmega128 es de 512 bytes, para un chip ATmega328 es de 1KB (1024 bytes). 
  • Hay que tener en cuenta que el tamaño de la memoria EEPROM interna de Arduino es "pequeño" pero Arduino admite añadir módulos de memoria EEPROM externa de mayor tamaño.

Cómo ampliar las posibilidades de almacenamiento de Arduino

Cómo se ha indicado, las diferentes memorias de los chips de Arduino (Flash, SRAM y EEPROM) son demasiado limitadas para determinadas funcionalidades. Por ejemplo, si conectamos una cámara de fotos o de vídeo a Arduino y queremos guardar capturas de fotos o vídeos no nos servirán estas memorias.
Para esto existen memorias externas que pueden ayudar a solucionar los problemas y tener un mejo manejo de memoria para que no ocurra ningún error. 


Ampliar con memoria EEPROM externa
Una posibilidad para ampliar la capacidad de memoria de Arduino es usar memoria EEPROM externa, adquiriendo este tipo de memoria (que no es muy cara) podremos disponer de más memoria EEPROM para nuestro programa.
Pero este tipo de memorias EEPROM no tienen un gran tamaño, por ello, no serán útiles para proyectos con grandes requerimientos de espacio. Por supuesto existen librerías para trabajar con estas tarjetas en Arduino.


Ampliar memoria con SD Card       
Si vamos a desarrollar un proyecto hardware con Arduino que tenga grandes requerimientos de espacio (Megas, Gigas), por ejemplo si queremos trabajar con audio, vídeo, fotos, almacenamiento de datos, etc., la mejor opción es utilizar algún tipo de medio de almacenamiento removible. 
La mayoría de los microcontroladores tienen una capacidad de memoria interna extremadamente limitada.
Para conseguir este almacenamiento extra utilizaremos las tarjetas flash (SD, microSD). Estás tarjetas permiten almacenar varios GBytes de datos en un espacio muy reducido.

Este es un módulo SD Card para Arduino, acoplable directamente:


Aquí una SD Card para Arduino que tenemos que conectar manualmente, como se muestra en la imagen:


  • Flash 16k bytes (de los que 2k son utilizados por el bootloader)
  • SRAM 1024 bytes
  • EEPROM 512 bytes

Como escribir en la memoria EEPROM de Arduino
La comunicación entre Arduino y la EEPROM se realiza mediante el bus I2C , que se trata de un bus de comunicaciones serie formado por dos lineas: una para los datos y otra para el reloj.
La librería Wire  permite manejar un bus I2C desde nuestro Arduino, y encontramos 4 funciones que usando la librería anterior implementan la lectura/escritura en la EEPROM.
  • El parámetro deviceaddress al que hacen referencia estas funciones en el caso de esta memoria se trata del 0×50.
  • No debemos olvidarnos de inicializar la conexión antes de usar estas funciones
  • En cuanto a las conexiones de los pines: el pin 5 de la EEPROM (SDA) lo conectamos a la entrada analógica 4 de nuestro Arduino, el pin 6 (SCL) a la entrada analógica 5 (observar en la foto que los cables de color naranja se cruzan), el pin 8 a 5V y todos los demás a tierra.

  • Los pines analógicos 4 y 5 de Arduino son los que usa la librería Wire.



Arduino

Esta entrada consiste en el microcontrolador que estaremos usando para nuestro proyecto final, describiendo mas a fondo como esta conformado y consideraciones que debemos tomar en cuenta. 
Arduino es una plataforma de codigo abierto basada en un microcontrolador sencillo y un entorno de desarrollo para escribir software para la placa.
Puede ser usado para desarrollar objetos interactivos, teniendo entradas de una variedad de interruptores o sensores y controlar una variedad de luces, motores y otras salidas fisicas.

¿Para que sirve arduino?

En la robótica, podemos usar Arduino de 2 formas:

  • Arduino usarse como "cerebro" de nuestro robot, ejerciendo de controlador y coordinador del resto de partes del robot.
  • Si queremos usar un ordenador más potente (o un portátil) como cerebro, Arduino puede servir como interfaz de control entre el ordenador y el resto de partes del robot.

Tipos de tarjetas
Existen varios modelos de tarjetas arduino, cada una tiene un tipo de interconexión con nuestro ordenador:

  • Tarjeta serie
  • Tarjeta USB
  • Tarjeta Bluetooth

La más habitual y sencilla de usar es la tarjeta USB.
Hardware 
Dentro del hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Los microcontroladores más usados son los aquí mencionados esto es por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. 

  • Atmega168
  • Atmega328
  • Atmega1280
  • ATmega8
Software
Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque(boot loader) que corre en la placa.

Entradas y salidas
  • Consta de 14 entradas digitales configurables entrada i/o salidas que operan a 5 voltios. Cada pin puede proporcionar o recibir como máximo 40 mA. 
  • Los pines 3, 5, 6, 8, 10 y 11 pueden proporcionar una salida PWM (Pulse Width Modulation). Si se conecta cualquier cosa a los pines 0 y 1, eso interferirá con la comunicación USB. 
  • Diecimila también tiene 6 entradas analógicas que proporcionan una resolución de 10 bits. Por defecto miden de 0 voltios (masa) hasta 5 voltios, aunque es posible cambiar el nivel más alto, utilizando el pin Aref y algún código de bajo nivel.

Descripción general de Arduinos


Arduino Mega
El Arduino Mega es una placa microcontrolador basada ATmeg1280.
Tiene 54 entradas/salidas digitales (de las cuales 14 proporcionan salida PWM), 16 entradas digitales, 4 UARTS (puertos serie por hardware), un cristal oscilador de 16MHz, conexión USB, entrada de corriente, conector ICSP y botón de reset. 
El Mega es compatible con la mayoría de shields diseñados para el Arduino Duemilanove o Diecimila.
Especificaciones

MicrocontroladorATmega1280
Voltaje de funcionamiento5V
Voltaje de entrada (recomendado)7-12V
Voltaje de entrada (limite)6-20V
Pines E/S digitales54 (14 proporcionan salida PWM)
Pines de entrada analógica16
Intensidad por pin40 mA
Intensidad en pin 3.3V50 mA
Memoria Flash128 KB de las cuales 4 KB las usa el gestor de arranque(bootloader)
SRAM8 KB
EEPROM4 KB
Velocidad de reloj16 MHz



Arduino BT

Es una placa electronica originalmente se basó en la ATMega168 , pero ahora se suministra con el 328 y el Bluegiga WT11 módulo bluetooth. 
Es compatible con la comunicación inalámbrica a través de bluetooth de serie 
Cuenta con 14 entradas / salidas digitales pines (de los cuales 6 pueden ser utilizados como salidas PWM y se puede utilizar para restablecer el WT11 módulo), 6 entradas analógicas, una de 16 MHz oscilador de cristal, terminales de tornillo para poder, una cabecera de ICSP, y un botón de reinicio. 
Especificaciones
MicrocontroladoresATmega328
Voltaje de funcionamiento5V
Voltaje de Entrada1,2-5,5 V
Digital pines I / O14 (6 de las cuales proporcionan una salida PWM)
Pines de entrada analógica6
Corriente de I / S de CC Pin40 mA
De corriente continua de 3,3 V Pin50 mA
Memoria Flash32 KB (de los cuales 2 KB utilizadas por gestor de arranque)
SRAM2 KB
EEPROM1 KB



Arduino Pro

Placa electronica basada en el ATMega168 o ATmega328
Cuenta con 14 entradas / salidas digitales pines (de los cuales 6 pueden ser utilizados como salidas PWM), 6 entradas analógicas, un conector de alimentación de la batería, un interruptor de encendido, un botón de reinicio, y los agujeros para el montaje de un conector de alimentación, una cabecera de ICSP, y pin headers.
La tarjeta viene sin cabeceras de pre-montados, permitiendo el uso de varios tipos de conectores o soldadura directa de los cables. La distribución de los pines es compatible con Arduino Shield.
Especificaciones

MicrocontroladoresATmega168 o ATmega328
Voltaje de funcionamiento3,3 V o 5 V
Voltaje de Entrada3.35 -12 V (3,3 V versiones) o 5 - 12 V (versiones 5V)
Digital pines I / O14 (6 de las cuales proporcionan una salida PWM)
Pines de entrada analógica6
Corriente de I / S de CC Pin40 mA
Memoria Flash16 KB ( ATmega168 ) o 32 KB ( ATmega328 ) de los cuales 2 KB utilizado por gestor de arranque
SRAM1 KB ( ATmega168 ) o 2 KB ( ATmega328 )
EEPROM512 bytes ( ATmega168 ) o de 1 KB ( ATmega328 )
Velocidad de relojMHz (3.3V versiones) o de 16 MHz (versiones 5V)




Arduino Uno
Es una placa electronica basada en el ATmega328Cuenta con 14 entradas / salidas digitales pines (de los cuales 6 pueden ser utilizados como salidas PWM), 6 entradas analógicas, una de 16 MHz del oscilador de cristal, una conexión USB, un conector de alimentación, una cabecera de ICSP, y un botón de reinicio.

Especificaciones
MicrocontroladoresATmega328
Voltaje de funcionamiento5V
Voltaje de Entrada (recomendado)7-12V
Voltaje de entrada (los límites)6-20V
Digital pines I / O14 (6 de las cuales proporcionan una salida PWM)
Pines de entrada analógica6
Corriente de I / S de CC Pin40 mA
De corriente continua de 3,3 V Pin50 mA
Memoria Flash32 KB ( ATmega328 ) de los cuales 0,5 KB utilizado por gestor de arranque
SRAM2 KB ( ATmega328 )
EEPROM1 KB ( ATmega328 )
Velocidad de reloj16 MHz


Arduino mini
Es una placa de pequeño microcontrolador basado originalmente en el ATMega168 , pero ahora se suministra con el 328, destinado a circular por paneras y cuando el espacio es una prima. Cuenta con 14 entradas / salidas digitales pines (de los cuales 6 pueden ser utilizados como salidas PWM), 8 entradas analógicas, y una de 16 MHz del oscilador de cristal. 
Especificaciones

MicrocontroladoresATmega328
Voltaje de funcionamiento5V
Voltaje de Entrada09.07 V
Digital pines I / O14 (6 de las cuales proporcionan una salida PWM)
Pines de entrada analógica8 (4 de las cuales se desglosan en los pasadores)
Corriente de I / S de CC Pin40 mA
Memoria Flash32 KB (de los cuales 2 KB utilizadas por gestor de arranque)
SRAM2 KB
EEPROM1 KB
Velocidad de reloj16 MHz


Arduino Nano
Es una pequeña tabla, completa y protoboard de usar basado en el ATmega328 (Arduino Nano 3.0) o ATmega168 (Arduino Nano 2.x). Tiene más o menos la misma funcionalidad de la Arduino Duemilanove, pero en un paquete diferente. Le falta sólo una alimentación de CC, y funciona con un cable Mini-B USB en lugar de una normal.
Especificaciones

MicrocontroladoresAtmel ATmega168 o ATmega328
Voltaje de funcionamiento (nivel lógico)5 V
Voltaje de Entrada (recomendado)7.12 V
Voltaje de entrada (los límites)6.20 V
Digital pines I / O14 (6 de las cuales proporcionan una salida PWM)
Pines de entrada analógica8
Corriente de I / S de CC Pin40 mA
Memoria Flash16 KB ( ATmega168 ) o 32 KB ( ATmega328 ) de los cuales 2 KB utilizado por gestor de arranque
SRAM1 KB ( ATmega168 ) o 2 KB ( ATmega328 )
EEPROM512 bytes ( ATmega168 ) o de 1 KB ( ATmega328 )
Velocidad de reloj16 MHz
Dimensiones0,73 "x 1,70"


Esto es todo espero sea de utilidad (:

Referencias: 
Introducción Arduino
http://arduino.cc/en/Main/Hardware
http://es.wikipedia.org/wiki/Arduino