Instituto Tecnológico de Acapulco Ingeniería en Sistemas Computacionales Arquitectura de Computadoras Docente: Cadena Mendoza Eloy
Reporte Práctica #6 Alumno García Cisneros Gladys del Roció. Méndez ilario !esus Eduardo. "o#cin ern$ndez %erónica. Sa&ino Gallardo Sulideysi. %illanue'a Carmona %íctor Manuel. (omínguez (omínguez !ulio César
Instituto )ecnológico de Acapulco
Aula: *+,
Arquitectura de Computadoras
Horario: -/-- 0 -1/--
Fecha de entrega: miércoles -* de diciem&re del 2-,3 Ciclo escolar/ Agosto 0 (iciem&re del 2-,3
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Introducción La aplicación a resolver consta de un sistema “cisterna-bomba-tinaco”. En la cisterna se deposita el agua que surte la empresa que distribuye el agua en el municipio. La cisterna está enterrada bajo el nivel del piso y una condición para que encienda la “bomba de agua” (que subirá al agua al tinaco) es que la cisterna tenga agua. !i la cisterna está vac"a la bomba no debe arrancar.
El tinaco deberá tener dos niveles. El nivel alto indica que el tinaco está lleno y #sta es una condición para que la bomba apague. El nivel bajo indica que el tinaco está semivac"o y es el nivel que da la condición para arrancar la bomba. El lenguaje del $rduino está basado en el m"tico lenguaje %. !i ya &as trabajado en % este tutorial te parecerá un paseo. !i no te basta con saber que % es el lenguaje en el que se &a desarrollado los sistemas operativos '* Linu+ y cientos de sistemas programas y aplicaciones de ordenador. El lenguaje del $rduino es una versión reducida y muc&o más sencilla de manejar que el lenguaje %. El objetivo de este lenguaje es que puedas programar de una manera intuitiva concentrándote en lo que quieres &acer más que en la manera de &acerlo. $rduino ,ue desarrollado originalmente en el nteractive esign nstitute en vrea (talia) donde los estudiantes estaban ,amiliariados con un lenguaje llamado /rocessing. Este lenguaje estaba orientado a estudiantes de arte y dise0o y utiliaba un entorno de desarrollo visual e intuitivo en el cual se basó el entorno de desarrollo del $rduino y su lenguaje de programación. 1rabajar con un $rduino consiste ,undamentalmente en interactuar con los di,erentes puertos de entrada y salida del $rduino. $ ,in de evitar al programador el engorro y la complejidad de programar estos puertos (ya sean analógicos digitales o de cualquier otro tipo) el lenguaje de $rduino usa una serie de librer"as (de las que no te tienes que preocupar ya que ,orman parte del lenguaje ya las iremos viendo con detenimiento más adelante). Estas librer"as te permiten programar los pins digitales como puertos de entrada o salida leer entradas analógicas controlar servos o encender y apagar motores de continua. La mayor parte de estas librer"as de base (“core libraries”) ,orman parte de una macro librer"a llamada 2iring desarrollada por 3ernando 4arragán.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
%ada ve que un nuevo puerto de entrada o salida es a0adido al $rduino un nuevo conjunto de librer"as especialiadas en ese puerto es suministrada y mantenida por los desarrolladores del nuevo puerto. Las placas $rduino están disponibles de dos ,ormas5 ensambladas o en ,orma de 6its 73alo t8 mismo7 (por sus siglas en ingl#s 797). Los esquemas de dise0o del 3ard:are están disponibles bajo licencia Libre con lo que se permite que cualquier persona pueda crear su propia placa $rduino sin necesidad de comprar una pre,abricada. $da,ruit ndustries estimó a mediados del a0o ;<== que alrededor de ><<<<< placas $rduino &ab"an sido producidas comercialmente y en el a0o ;<=> estimó que alrededor de ?<<.<<< placas o,iciales de la empresa $rduino estaban en manos de los usuarios. $rduino se puede utiliar para desarrollar objetos interactivos autónomos o puede ser conectado a so,t:are tal como Adobe Flash Processing Max/MSP Pure Data etc. 'na tendencia tecnológica es utiliar $rduino como tarjeta de adquisición de datos desarrollando inter,aces en so,t:are como @$A$ Aisual 4asic y LabAE2. Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente. El proyecto $rduino recibió una mención &onor",ica en la categor"a de %omunidades igitales en el Prix Ars Electrónica de ;<
Historia
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Marco )eórico El lenguaje de $rduino maneja los siguientes tipos de variables5
TIPO
DESCRIPCIÓN
EJEMPLO
void
Ceservado para la declaración de ,unciones sin valor de retorno.
void setup()void loop()
byte
'n n8mero entero del < al ;DD codi,icado en un octeto o byte ( bits)
byte testVariable = 129;
int
(Int egerFentero). 'n n8mero entero entre >;?B? int testVariable = 28927; y ->;?B codi,icado en dos octetos (=B b its)
long
'n entero comprendido entre ;=G?G>BG? y H ;=G?G>BG y codi,icado en >; bits (equivalente a G bytesIoctetos).
long testVariable = 67876;
float
'n n8mero real (con decimales) almacenado en G bytes (es decir >; bits) y comprendido entre >.G<;>;DEJ> y ->.G<;>;DEJ>
float testVariable = 3!6;
'n n8mero natural (entero positivo) almacenado unsigned en =B bits (; bytes) y comprendido entre < y int BDDGD
unsigned int testVariable = 389"8;
'n n8mero natural (entero positivo) almacenado unsigned en >; bits (G bytes) y comprendido entre < y long G;KGKB?;KB
unsigned long testVariable = 6!7"!6;
#ord
Lo mismo que unsigned int
#ord testVariable = !1$$$;
boolean
'na variable booleana que puede tener solamente dos valores5 true (verdadero) o false
boolean testVariable = true;
%&ar
'n carácter $!% almacenado en bits (un byte). Esto permite almacenar caracteres como valores num#ricos(su código $!% asociado). El %&ar testVariable = 'a; código $!% para el carácter aM es K? si le %&ar testvariable = 97; a0adimos > obtendr"amos el código $!% del carácter dM
unsigned Este tipo de datos es id#ntico al %&ar tipo byte e+plicado arriba. !e utilia para codi,icar n8meros de < &asta ;DD. Ncupa = byte
unsigned %&ar testn*& = 36;
Instituto )ecnológico de Acapulco
TIPO
DESCRIPCIÓN
Arquitectura de Computadoras
EJEMPLO
de memoria.
En el lenguaje de $rduino cuando queremos utiliar una variable primero &ay que declarar el tipo de variable de la que se trata (por ejemplo intM y luego el nombre que le queremos dar a esa variable (testAariableM en los ejemplos de la tabla anterior). /odemos dejar la variable sin inicialiar (es decir sin asignarle un valor de partida)5 int comienzo;
o si nos interesa asignarle un valor inicial5 int comienzo = 0;
Ns aconsejamos inicialiar siempre vuestras variables en el momento de declararlas. Esto os puede ayudar a depurar vuestros s6etc&es y al mismo tiempo a&orra código. $simismo al declarar una nueva variable tratad de anticipar el uso que el s6etc& va a darle a esa variable y el rango de valores que va a tomar durante la ejecución (por ejemplo si va a sobrepasar el valor >;<<< interesa &acerla long en ve de int o si va a tomar valores decimales entonces necesitaremos una ,loat). e no &acerlo as" podr"amos encontrarnos con situaciones inesperadas durante la ejecución del s6etc&. Ejemplo de uso de variables en un s6etc&5 Aeamos el t"pico s6etc& que &ace parpadear un LE activado a trav#s de un pin5 int LEDpin = 6;
//la variable LEDpin se inicializa a 6,es decir vamos a activar el
pin 6
void setup(){
pinMode(LEDpin,OUTPUT); }
void oop(){
di!it"#$ite(LEDpin,%&'%); de" (000);
di!it"#$ite(pinLED,LO#); de" (000); }
El uso de variables nos permite reutiliar este código para otro pin con tan sólo cambiar la asignación inicial de la variable LEpin.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
o te asustes si no entiendes todo en este código. e momento basta con que comprendas el uso de las variables. 1odo lo demás lo iremos viendo en detalle más adelante. ota que cada instrucción debe de terminarse con un punto y coma (O) de lo contrario el compilador no entender"a que la instrucción &a acabado y nos dar"a un error. +un%iones b,si%a
EI! digital •
pinPode(pin modo).
•
digital2rite(pin valor).
•
int digitalCead(pin).
EI! analógica •
analogCe,erence(tipo)
•
int analogCead(pin)
•
analog2rite(pin valor)
EI! avanada •
s&i,tNut(data/in cloc6/in bitNrder valor)
•
unsigned long pulsen(pin valor)
1iempo •
unsigned long millis()
•
unsigned long micros()
•
delay(ms)
•
delayPicroseconds(microsegundos)
Patemáticas •
min(+ y) ma+(+ y) abs(+) constrain(+ a b) map(valor ,romLo: ,rom3ig& toLo: to3ig&) po:(base e+ponente) sqrt(+)
1rigonometr"a •
sin(rad) cos(rad) tan(rad)
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
8meros aleatorios •
random!eed(semilla) long random(má+) long random(m"n má+)
4its y 4ytes •
lo:4yte() &ig&4yte() bitCead() bit2rite() bit!et() bit%lear() bit()
nterrupciones e+ternas •
attac&nterrupt(interrupción ,unción modo)
•
detac&nterrupt(interrupción)
nterrupciones •
interrupts() nonterrupts()
%omunicación por puerto serie Las ,unciones de manejo del puerto serie deben ir precedidas de la palabra 7!erial7 aunque no necesitan ninguna declaración en la cabecera del programa. /or esto se consideran ,unciones base del lenguaje. Estas son las ,unciones para transmisión serial5 •
begin() available() read() ,lus&() print() println() :rite()
-anipula%i.n de puertos
Los registros de puertos permiten la manipulación a más bajo nivel y de ,orma más rápida de los contactos de entradaIsalida del microcontrolador de las placas $rduino. Los contactos el#ctricos de las placas $rduino están repartidos entre los registros 4(<-?) % (analógicos) y (-=>). Pediante estas variables ser observado y modi,icado su estado5 •
•
•
C Q4I%IR5 ata irection Cegister (o dirección del registro de datos) del puerto 4 % ó . Es una variable de LecturaIEscritura que sirve para especi,icar cuáles contactos serán usados como entrada y salida. /NC1 Q4I%IR5 ata Cegister (o registro de datos) del puerto 4 % o . Es una variable de LecturaIEscritura. / Q4I%IR5 nput /ins Cegister (o registro de pines de entrada) del puerto 4 % o . Aariable de sólo lectura.
/or ejemplo para especi,icar los contactos K a => como salidas y el como entrada (puesto que el puerto usa los pines de la placa $rduino al => digitales) bastar"a utiliar la siguiente asignación5
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
C F 4=======
%omo se &a podido comprobar el conocimiento del lenguaje % permite la programación en $rduino debido a la similitud entre este y el lenguaje nativo del proyecto lo que implica el aprendiaje de algunas ,unciones espec",icas de que dispone el lenguaje del proyecto para manejar los di,erentes parámetros. !e pueden construir aplicaciones de cierta complejidad sin necesidad de muc&os conceptos previos. $AC Libc Los programas compilados con $rduino (salvo en las placas con %orte* P>) se enlaan contra $AC Libc por lo que tienen acceso a algunas de sus ,unciones. $AC Libc es un proyecto de so,t:are libre con el objetivo de proporcionar una biblioteca % de alta calidad para utiliarse con el compilador S%% sobre microcontroladores $tmel $AC. !e compone de > partes5 •
avr-binutils
•
avr-gcc
•
avr-libc
La mayor"a del lenguaje de programación $rduino está escrita con constantes y ,unciones de $AC y ciertas ,uncionalidades sólo se pueden obtener &aciendo uso de $AC. Interrup%iones
Las se0ales de interrupción son las siguientes5 •
cli()5 desactiva las interrupciones globales
•
sei()5 activa las interrupciones
Esto a,ectará al temporiador y a la comunicación serial. La delayPicroseconds() desactiva las interrupciones cuando se ejecuta.
,unción
/e0poriadores
La ,unción delayPicroseconds() crea el menor retardo posible del lenguaje $rduino que ronda los ;Ts. /ara retardos más peque0os se debe utiliar la llamada de
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
ensamblador UnopU (no operación). %ada sentencia UnopU se ejecutará en un ciclo de máquina (=B P3) de apro+imadamente B;Dns. -anipula%i.n de puertos
La manipulación de puertos con código $AC es más rápida que utiliar la ,unción digital2rite() de $rduino. stable%er its en variables
cbi y sbi son mecanismos estándar ($AC) para establecer o limpiar bits en /NC1 y otras variables. i,erencias con /rocessing La sinta+is del lenguaje de programación $rduino es una versión simpli,icada de %I%JJ y tiene algunas di,erencias respecto de /rocessing ebido a que $rduino está basado en %I%JJ mientras que /rocessing se basa en @ava e+isten varias di,erencias en cuanto a la sinta+is de ambos lenguajes y el modo en que se programa5
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
'n arrayM es una colección inde+ada (como un diccionario) de variables del mismo tipo. En el caso de un array el "ndice no es una palabra como en el diccionario sino simplemente un n8mero (que corresponde al n8mero de orden de la variable concreta dentro del array). /uedes declarar un array de la siguiente manera5 int miList"*6+;
!i deseas inicialiarlo al mismo tiempo puedes &acerlo de la siguiente manera5 int miList"*6+ ={,,-,.,/,6} ;
•
•
ota importante =5 ten en cuenta que el primer "ndice de un arra y es siempre < (no =). ota importante ;5 ten especial cuidado de no tratar de acceder datos ,uera del array (por ejemplo en en caso anterior 0i4ista 57 ya que esto nos devolver"a datos sin sentido de la memoria.) Ejemplos de operaciones con arrays5 int minuev"List"*.+ ={,,-,.} ; nuev""$i"1e = minuev"List"*+; minuev"List"*0+ = 236; nuev""$i"1e = minuev"List"*0+;
La primera instrucción crea e inicialia el array con G valores. La segunda crea una nueva variable y le asigna el valor de la tercera variable del array que &ab"amos acabado de crear (el int >). La tercera asigna a la primera variable del array el valor entero (int) KB. /or 8ltimo la cuarta instrucción asigna a la variable que &ab"amos creado en la segunda l"nea el valor almacenado en la primera variable del array (KB).
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
V de,ine LEW/ => void setup () X %tivado del %onta%to 13 para salida digital pinPode (LEW/ N'1/'1)O Y u%le infinito void loop () X n%endido del diodo 4 enviando una se:al alta digital2rite (LEW/ 3S3)O /ie0po de espera de 1 segundo (1$$$ 0s) delay (=<<<)O pagado del diodo 4 enviando una se:al baa digital2rite (LEW/ LN2)O /ie0po de espera de 1 segundo delay (=<<<)O Y
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
(esarrollo En primer lugar conectamos nuestra placa $rduino mediante un cable '!4 $-4 , del tipo que se emplean &abitualmente para conectar impresoras. e momento no &ace ,alta la cone+ión de alimentación o cable adicional para realiar la programación es su,iciente 8nicamente con el '!4.
$ continuación abrimos el entorno E de $rduino.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
!eleccionamos el modelo de placa que estemos empleando.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
!eleccionamos el puerto de comunicación al que está conectado.
Instituto )ecnológico de Acapulco
•
En 2indo:s será algo tipo %NP= %NP>Z
•
En Linu+ será del estilo IdevItty$%P<
Arquitectura de Computadoras
9a tenemos la cone+ión con,igurada y lista para realiar la carga de nuestro primer programa.
Estructura básica de prograa En el E de $rduino estandard los programas tienen siempre la siguiente estructura
onde cada parte tiene la siguiente ,unción5 •
!o"a dec#aracio"es$ En esta parte se declaran variables ,unciones objetos y estructuras.
•
%u"cio" setup$ Esta ,unción se ejecuta cada ve que se enciende la placa de $rduino o se pulsa la tecla Ceset. Cealia ,unciones de inicialiación de peri,#ricos comunicaciones variables etc.
•
%u"cio" #oop$ Esta ,unción se ejecuta cont"nuamente. Cealia el grueso de tareas del autómata.
Esta con,iguración (una ,unción de setup y un bucle que se ejecuta continuamente) es &abitual en la programación de automatismos siendo la 8nica que permite el E estandard de $rduino. Ntras con,iguraciones son posibles mediante el empleo de otros E.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
[inalmente pulsamos en el botón remarcado para compilar y enviar la programación a nuestra placa $rduino. 1ras unos segundos el E compilará el programa y la pantalla deber"a ser similar a la siguiente.
1ras unos parpadeos la placa empeará a ejecutar el programa encendiendo y apagando el LE.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
ie"taci'" e(ter"a 'na ve &emos programado nuestra placa es momento de quitar el cable '!4 y realiar una alimentación e+terna. $rduino 'N y PES$ pueden ser alimentados mediante dos medios. El origen de la alimentación se selecciona automáticamente. •
•
$limentación regulada a DA mediante el puerto '!4 ) /odemos conectar un trans,ormador una bater"a e+terior de DA o cualquier otra ,uente DA mediante un conector '!4. Esta entrada debe estar regulada en alimentación es decir debe ser estable constante y ,ija a DA ya que $rduino no realia la supervisión del voltaje introducido a trav#s de esta entrada. $limentación mediante el conector Ain con un voltaje de entre B a ;< voltios aunque lo ideal es entre ? a =; voltios. /or ejemplo podemos conectar un trans,ormador una o varias bater"a una pila de KA o una agrupación de G o B pilas de =.DA para alimentar nuestros proyectos.
Evitar voltajes superiores a =; voltios durante un tiempo prolongado. /ueden sobrecalentar los reguladores de voltaje y da0ar la placa. !i conectamos nuestra alimentación e+terna a nuestra placa $rduino veremos que ejecutan la programación que &emos realiado por supuesto sin la necesidad de un ordenador conectado )
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Se *uiere desarro##ar e# siguie"te prob#ea$
(iagrama/ 4a
4
Cister )inac 5om& 4i'el de
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Algoritmo El algoritmo es el siguiente/ si la cisterna est$ llena6 el led amarillo no estar$ prendido. "ara poder iniciar se de&e consultar si el led est$ o no encendido.
Inicio
;El +ed amarillo esta prendido<
N
i
Cisterna %acía
;El tinaco est$ 'acío<
i N Enciende &om&a por
+leno 74o se 8ace nada9
"rende led 'erde Haceos #a siguie"te a"a#og+a$
Se apaga la &om&a
Motor \ 4omba Led rojo \ 1inaco vac"o Led verde \ 1inaco Lleno Led amarillo \ %isterna vac"a
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Código "ara resol'er el pro&lema usamos el siguiente código/
int cisterna = ,> int motor = :> int )'acia = ?> int )+leno = *> int llenado= -> 'oid setup@ B put your setup code 8ere6 to run once/ pinMode @cisterna6D)")> pinMode @motor6D)")> pinMode @)'acia6D)")> pinMode @)+leno6D)")> F 'oid accion@ B or @llenado=->llenadoH=:>llenado B digitalJrite @)'acia6 IG> delay @2--> digitalJrite @motor6 IG>
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
digitalJrite @)'acia6 IG> delay @,----> digitalJrite @)+leno6 IG> digitalJrite @motor6 +DJ> digitalJrite @)'acia6 +DJ> delay @,----> digitalJrite @)+leno6 +DJ> delay@,--> F F 'oid loop@ B put your main code 8ere6 to run repeatedly/ i @llenadoH= : B accion@> F else B digitalJrite @cisterna6 IG> F F
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Resultados %omo resultado se obtuvo el análisis del problema resulto en esta práctica en donde se trabajó con el entorno de $rduino y su modo de programación el cual permite que muc&as personas que son novatas escojan $rduino como &erramienta de aprendiaje dado que es ,ácil trabajar con #l. $demás contiene un editor de te+to para escribir el código un área de mensaje una consola de te+to barra de &erramientas etc. Los programas escritos usando $rduino son llamados en ingl#s “s6etc&es”. %uando cargas un s6etc& (proyecto) estas usando el bootloader de $rduino el cual es un peque0o programa que &a sido precargado al microcontrolador de tu tarjeta. Esto te permite cargar un código sin usar ning8n &ard:are adicional. El bootloader es activado durante unos pocos segundos cuando se reinicia el microcontroladorO despu#s de eso inicia el programa que le &ayas cargado.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
Conclusión espu#s de &aber realiado la práctica y &aber utiliado $rduino se concluyó que está basado en dos sistemas totalmente abiertos (2iring y /rocessing) por lo que nos da la total libertad de entender el &ard:are y so,t:are abri#ndonos las posibilidades de desarrollo de sistemas electrónicos. /osee todo su circuito base ya ensamblado as" que solo es de armar el nuestro y programar a&orrándonos espacio en el protoboard as" como poseer su programador interno y no es necesario comprar una programadora e+tra. El bootloader es un programa que se ejecuta solamente una ve durante el arranque del microcontrolador y se apaga a los pocos segundos si no recibe datos por medio de la comunicación serial de la /%. !u ,irm:are (bootloader) que lo &ace tan potente a mi modo de ver tambi#n le da una desventaja ya que el P%' empiea a trabajar al segundo de ser alimentado y en dise0os donde se necesita monitorear constantemente una se0al le da una desventaja ya que si sucede alg8n ,allo o suceso que pase en ese periodo podr"a ser perjudicial al equipo (si se tiene un dise0o de protección) o un sistema de alarma etc. $s" como conocimos una arquitectura di,erente a la de ntel denti,icamos los elementos del sistema de desarrollo del circuito $C'N ejecutamos programas en el sistema m"nimo basado $C'N reconocer partes de la placa aprendimos a manipular diodos leds con la tarjeta de $rduino nos ,amiliariamos con el entorno de programación y conocer las instrucciones. $demás no se invierte demasiado dinero en la compra de estos aparatos sino más bien se optar"a por utiliar uno elaborado por uno mismo y se contribuye al desarrollo de nuevos sistemas en la sociedad con la realiación de nuestro proyecto que ayudara a evitar posibles accidentes.
Instituto )ecnológico de Acapulco
Arquitectura de Computadoras
5i&liograía 4rey 4arry (;<<=). Los Picroprocesadores ntel. Editorial /rentice 3all. P#+ico Sod,rey @. [erry (=KK=). Lenguaje Ensamblador para Picrocomputadoras 4P. Editorial /rentice 3all. P#+ico
Aalvano @onat&an (;<
&ttps5IIes.:i6ipedia.orgI:i6iI$rduino
&ttp5II:::.cortoc.comI;<==I=;Iintroduccion-arduino.&tml