Arduino transcrita Qu son las seales digitales y las seales
analgicas?Podemos clasificar las seales elctricas (ya sean voltajes
o intensidades) de varias maneras segn sus caractersticas fsicas.
Unas de las clasificaciones posibles es distinguir entre seales
digitales y seales analgicas.Las seales digitales son aquellas que
solo tiene un numero finito de valores posibles (lo que se suele
llamar tener valores discretos) y las seales analgicas son aquellas
que tienen infinitos valores posibles dentro de un rango
determinado (lo que se suele llamar, tener valores continuos). La
mayora de las magnitudes fsicas (temperatura, sonido, luz) son
analgicas, as como tambin las seales elctricas (voltaje, corriente,
potencia) porque todas ellas, de forma natural, pueden sufrir
variaciones continuas sin saltos.
Qu son las seales peridicas y las seales aperidicas?Llamamos a
seales peridicas a aquellas que se repite tras un cierto periodo de
tiempo (T) y seal aperidica es aquella que no se repite. En el caso
de las primeras (las ms interesantes con diferencias) dependiendo
de cmo vari la seal a lo largo del tiempo, esta puede tener una
forma concreta (senoidal-es decir, que sigue el dibujo de la funcin
seno-, cuadrada, triangular).
Qu es un sistema electrnico?Un sistema electrnico es un conjunto
de: sensores, circuitera de procesamiento y control, actuadores y
fuente de alimentacin. Los sensores obtienen informacin del mundo
fsico externo y la transforman en una seal elctrica que puede ser
manipulada por la circuitera interna de control. Existen sensores
de todo tipo, de temperatura, de humedad, de movimiento, de sonido
(micrfonos), etc.Los circuitos internos de un sistema electrnico
procesan la seal elctrica convenientemente. La manipulan
dependiendo tanto del diseo de los diferentes componentes hardware
del sistema, como del conjunto lgico de instrucciones. Los
actuadores transforman la seal elctrica acabada de procesar por la
circuitera interna en energa que acta directamente sobre el mundo
fsico externo, un ejemplo de actuadores es un motor (energa
mecnica)
Qu es un microcontrolador?Un microcontrolador es un dispositivo
electrnico que integra en un solo encapsulado un gran nmero de
componentes que tienen las caractersticas de ser programables. Es
decir, que es capaz de ejecutar de forma autnoma una serie de
instrucciones previamente definidas. El diagrama anterior,
representativo de un sistema electrnico, el microcontrolador sera
el componente principal de la circuitera de procesamiento y control
CPU (unidad central de proceso): es la parte encargada de ejecutar
cada instruccin y de controlar que dicha ejecucin se realice
correctamente. Normalmente, estas instrucciones hacen uso de datos
disponibles previamente (los datos de entrada), y generan como
resultado otros datos diferentes (los datos de salida), que podrn
ser utilizados o no por la siguiente instruccin.Memorias Diferentes
tipos de memorias: son en general las encargadas de alojar tanto
las instrucciones como los diferentes datos que estas necesitan. De
esta manera posibilitan que toda esta informacin (instrucciones y
datos) est, siempre disponible para que la CPU pueda acceder y
trabajar con ella en cualquier momento. Generalmente encontramos
dos tipos de memorias, las que su contenido se almacena de forma
permanente incluso tras cortes de alimentacin elctrica (llamadas
persistentes), y las que su contenido se pierde al dejar de recibir
alimentacin (llamadas voltiles).Segn las caractersticas de la
informacin a guardar, esta se grabara en un tipo u otro de memoria
de forma automtica, habitualmente Diferentes pastillas de E/S
(entrada/salidas): son las encargadas de comunicar el
microcontrolador con el exterior. En las pastillas de entrada del
microcontrolador podremos conectar sensores para que este pueda
recibir datos provenientes de su entorno, y en sus pastillas de
salidas podremos conectar actuadores para que el microcontrolador
pueda enviarles rdenes y as interactuar con el medio fsico. De
todas formas, muchas pastillas de la mayora de microcontroladores
no son exclusivamente de entrada o de salida, sino que pueden ser
utilizados indistintamente para ambos propsitos (de ah el nombre de
E/S)Qu es Arduino?Una placa hardware libre que incorpora un
microcontrolador reprogramable y una serie de pines hembra(los
cuales estn unidos internamente a las pastillas de E/S del
microcontrolador) que permite conectar all de forma muy sencilla y
cmoda diferente sensores actuadores Cuando hablamos de placa
hardware nos estamos refiriendo en concreto a una PCB (del ingls
printed circuit board, o sea, placa de circuito impreso). Las PCBs
son superficies fabricadas de un material no conductor (normalmente
resinas de fibra de vidrio reforzada, cermica o plstica) sobre las
cuales aparecen pegadas pistas de material conductor (normalmente
cobre). Las PCBs se utilizan para conectar elctricamente, a travs
de los caminos conductores, diferentes componente electrnicos
soldados a ella. Una PCB es la forma ms compacta y estable de
construir un circuito electrnico (en contraposicin a una breadboard
perfboard o similar) pero, al contrario que estas, una vez
fabricada, su diseo es bastante difcil de modificar. As pues, la
placa Arduino no es ms que una PCB que implementa un determinado
diseo de circuitera interna. No obstante, cuando hablamos de placa
Arduino, deberemos especificar el modelo concreto, ya que existen
varias placas Arduino oficiales, cada una con diferente
caracterstica. Conviene conocer esta caracterstica. Conviene
conocer estas caractersticas para identificar qu placa Arduino es
la que nos convendr ms en cada proyecto.La plataforma Arduino
cuenta con un software que debemos instalar en nuestro ordenador y
que nos permite escribir, verificar y guardar (cargar) en la
memoria del microcontrolador de la placa Arduino el conjunto de
instrucciones que deseamos que este empiece a ejecutar.Los
proyectos Arduino pueden ser autnomo o no. Cuando los proyectos son
autnomos la placa no necesita estar conectada a ningn computador y
puede funcionar autnomamente si dispone de alguna fuente de
alimentacin. En el caso de no ser autnomo la placa debe estar
conectada de alguna forma permanente a un computador ejecutando
algn tipo de software especfico que permite la comunicacin y el
intercambio de datos entre el software y la placa. Este software
especfico lo debemos programar generalmente nosotros mismo mediante
algn lenguaje de programacin estndar como Python, C, Java, Php, y
este lenguaje ser independiente completamente del entorno de
desarrollo Arduino, una vez que la placa ha sido programada y est
en funcionamiento. Pero hay que aclarar que lenguaje Arduino se
basa internamente en cdigo C/C+ +.Que quiere decir que Arduino sea
un software libreSegn la Free Software foundation organizacin
encargada de fomentar el uso y desarrollo del software libre a
nivel mundial, un software para ser considerado libre ha de ofrecer
a cualquier persona u organizacin cuatro libertades bsicas e
imprescindibles:Libertad 0: La libertad de usar el programa con
cualquier propsito y en cualquier sistema informtico.Libertad 1: La
libertad de estudiar cmo funciona internamente el programa, y
adaptarlo a las necesidades particulares. El acceso al cdigo fuente
es un requisito previo para esto.Libertad 2: La libertad de
distribuir copias Libertad 3: La libertad de mejorar el programa y
hacer pblica las mejoras a los dems, de modo que toda la comunidad
se beneficie.El modelo del microcontrolador El microcontrolador que
lleva la placa Arduino uno es el modelo ATmega328P de la marca
Atmel. La Pdel final significa que este chip incorpora la tecnologa
Picopawer (propietaria de Atmel), la cual permite un consumo
elctrico sensiblemente menor comparndolo con el modelo equivalente
sin Picopawer. De todas formas, aunque el Atmega328P pueda trabajar
a un voltaje menor y consumir menos corriente que el Atmega328
(especialmente en los modos de hibernacin), ambos modelos son
funcionalmente idnticos.Para conocer bien la estructura del
microcontrolador es necesario conocer la disposicin concreta de las
pastillas (llamadas tambin pines) de entrada/salida del
microcontrolador, ya que, aunque hemos dicho anteriormente que en
general todos los pines de E/S sirven para comunicar el
microcontrolador con el mundo exterior, es cierto que cada pin
suele tener una determinada funcin especfica. Como cada modelo de
microcontrolador tiene un nmero y ubicacin de pines diferente, en
nuestro caso concreto debemos tener a mano la disposicin de pines
del Atmega328P. La figura siguiente muestra esta disposicin en el
encapsulado de tipo DIP.
Las memorias del microcontrolador Otra cosa que hay que saber de
los microcontroladores son los tipos y cantidades de memoria que
alojan en su interior. En el caso del ATmega328P tenemos:Memoria
flash: memoria persistente donde se almacena permanentemente el
programa que ejecuta el microcontrolador (hasta una nueva
reescritura si se da el caso). En el caso de ATmega328P tiene una
capacidad de 32KB.Memoria SRAM: memoria voltil donde se alojan los
datos que en ese instante el programa necesita crear o manipular
para su correcto funcionamiento. Estos datos suelen tener un
contenido variable a lo largo del tiempo de ejecucin del programa y
cada uno es de un tipo concreto(es decir, un dato puede contener un
valor numrico entero, otro un nmero decimal, otro un valor tipo
carcter tambin pueden ser cadenas de textos fijas u otros tipos de
datos ms especiales). Independientemente del tipo de dato, si valor
siempre ser eliminado cuando se deje de alimentar elctricamente al
microcontrolador. En el caso del ATmega328P esta memoria tiene una
capacidad de 2KBMemoria EEPROM : memoria persistente donde se
almacenan datos que se desea que permanezcan grabados una vez
apagado el microcontrolador para poderlos usar posteriormente en
siguientes reinicios. En el caso del ATmega328P esta memoria tiene
una capacidad de 1KB, por lo que se puede entender como una tabla
de 1024 posiciones de un byte cada una.Registros del
microcontroladorLos registros son espacios de memoria existentes
dentro de la propia CPU de un microcontrolador. Son muy importantes
porque tienen varias funciones imprescindibles:Sirven para albergar
los datos (cargados previamente desde la memoria SRAM o EEPROM)
necesario para la ejecucin de las instrucciones previstas
prximamente (y as tenerlos perfectamente disponibles en el momento
adecuado); sirven tambin para almacenar temporalmente los
resultados de las instrucciones recientemente ejecutadas (por si se
necesitan algn instante posterior) y sirven adems para alojar las
propias instrucciones que en ese mismo momento estn ejecutndose.Su
tamao es muy reducido: tan solo tienen capacidad para almacenar
unos pocos bits cada uno. Pero este factor es una de las
caractersticas ms importantes de cualquier microcontrolador, ya que
cuanto mayor sea el nmero de bits que quepan en sus registros,
mayores sern sus prestaciones, en cuanto al poder de cmputo y
velocidad de ejecucin. En efecto, es fcil ver (simplificado mucho)
que un microcontrolador con registro el doble de grandes que otro
podr procesar el doble de cantidad de datos y por tanto, trabaja el
doble de rpido aun funcionando los dos al mismo ritmo. De hecho, es
tan importante esta caracterstica que cuando escuchamos que un
controlador es de 8 bits o de 32 bits, nos estamos refiriendo
precisamente a este dato: al tamao de sus registros.El chip
ATmega238P es de 8 bits. De hecho, todos los microcontroladores que
incorporan las diferentes placas Arduino son de 8 bits.Los
protocolos de comunicacin I2C/TWI y SPICuando se desea transmitir
un conjunto de datos desde un componente electrnico a otro, se
puede hacer de mltiples formas. Unas de ellas es estableciendo una
comunicacin serie; en este tipo de comunicacin la informacin es
transmitida bit a bit (uno tras otro) por un nico canal, enviando
por tanto un solo bit en cada momento. Otra manera de transferir
datos es mediante la llamada comunicacin paralela, en la cual se
envan varios bits simultneamente, cada uno por un canal separado y
sincronizado con el resto I2C (Inter- Integrated Circuit, tambin
conocido con el nombre de TWI- de TWo-wlre (dos cables): es un
sistema muy utilizado en la industria principalmente para comunicar
circuitos integrados entre s. Su principal caracterstica es que
utiliza dos lneas para transmitir la informacin: una (llamada lnea
SDA) sirve para transferir los datos entre los (0s y los 1s) y la
otra lnea llamada lnea SCL esta sirve para enviar seal de reloj. En
realidad tambin se necesitaran dos lneas ms, una para alimentacin y
otra para la tierra comn, pero estas ya se presuponen existentes en
el circuito.Que es la seal de reloj La seal de reloj se entiende
una seal binaria de una frecuencia peridica muy precisa que sirve
para coordinar y sincronizar los elementos integrados de una
comunicacin (es decir, los emisores y receptores) de forma que
todos sepan cuando empiezan, cunto dura, cuando acaba la
transferencia de informacin. En hojas tcnicas y diagramas, a la
seal de reloj se puede encontrar como CLK (del ingls clock). Cada
dispositivo conectado al bus I2C tiene una direccin nica que lo
identifica respecto el resto de dispositivos, y puede estar
configurado como maestro o como esclavo. Un dispositivo maestro es
aquel que inicia la transmisin de datos y adems genera la seal de
reloj, pero no es necesario que el maestro sea siempre el mismo
dispositivo: esta caracterstica se la pueden ir intercambiando
ordenadamente los dispositivos que tengan esa capacidad.SPI (Serial
Peripheral Interface): al igual que el sistema I2C, el sistema de
comunicacin SPI es un estndar que permite controlar (a cortas
distancias) casi cualquier dispositivo electrnico digital que
acepte un flujo de bits serie sincronizado(es decir, regulado por
un reloj). Igualmente, un dispositivo conectado al bus SPI puede
ser maestro o esclavo, donde el primero es el que inicia la
transmisin de datos y genera la seal de reloj y el segundo se
limita a responder.Gestor de arranque del microcontrolador Ya hemos
comentado que adentro de la memoria Flash del microcontrolador
incluido en las placas del Arduino viene pregrabado de fbrica un
pequeo programa llamado bootlader o gestor de arranque, que resulta
imprescindible para un cmodo y fcil manejo de la placa en cuestin.
Este software (tambin llamado firmware, porque es un tipo de
software que raramente se modifica) ocupa, en la placa Arduino UNO,
512 bytes de espacio en un apartado especial de memoria Flash, el
llamado bootloader block pero en otros modelos de placas Arduino
puede ocupar ms.La funcin de este firmware es gestionar de forma
automtica el proceso de grabacin en la memoria Flash del programa,
que queremos que el microcontrolador ejecute. Lgicamente, el
bootloader realizar esta grabacin ms all del bootloader block para
no sobrescribirse as mismo. El bootloader se encarga de recibir
nuestro programa desde el entorno desarrollado por el Arduino
(normalmente mediante una transmisin realizada a travs de una
conexin USB desde el computador donde se est ejecutando dicho
entorno, hasta la placa) para proceder seguidamente a su correcto
almacenamiento en la memoria Flash, todo ello de forma automtica y
sin que nos tengamos que preocupar de las interioridades
electrnicas del proceso. Una vez realizado el proceso de grabacin.
El boorloader termina su ejecucin y el microcontrolador se dispone
a procesar de inmediato y de forma permanente las instrucciones
recientemente grabadas. En la placa Arduino UNO, el bootliader
siempre se ejecuta durante el primer segundo de cada reinicio.
Durante esos instantes, el gestor de arranque se espera a recibir
una serie de instrucciones concretas de parte del entorno de
desarrollo para interpretarlas y realizar la correspondiente carga
de un posible programa. Si esas instrucciones no llegan pasando ese
tiempo, el bootliader termina su ejecucin e igualmente se empieza a
procesar lo que haya en ese momento en la memoria Flash.La
alimentacin El voltaje de funcionamiento de la placa Arduino
(incluyendo el microcontrolador y el resto de los componentes) es
de 5V. Podemos obtener esta alimentacin elctrica de varias
maneras:Conectando la placa Arduino a una fuente externa: tal como
una adaptador AC/DC o una pila, para el primer caso la placa
dispones de un zcalo donde se puede enchufar una clavija de 2,1
milmetros de tipo Jack y Para el segundo caso los cables saliente
de los bornes de la pila se pueden conectar a los pines-hembras
marcados como Vin y Gnd (positivo y negativo) en la zona de la
placa marcada con la etiqueta POWER. En ambos casos, la placa est
preparada en teora para recibir una alimentacin de 6 a 20 voltios,
aunque, realmente, el rango recomendado de voltaje de entrada
(teniendo en cuenta el deseo de obtener una cierta estabilidad y
seguridad elctricas en los circuitos) es menor: de 7 y 12 voltios.
En cualquier caso, este voltaje de entrada ofrecido por la fuente
externa siempre es rebajado a los 5V de trabajo mediante un
circuito regulador de tensin que ya viene incorporado dentro de la
placa.Conexin de la placa Arduino a un computador mediante un cable
USB.para la conexin la placa Arduino dispones de un conector USB
hembra de tipo B. la alimentacin recibida de esta manera est
regulada permanentemente a los 5V de trabajo y ofrece un mximo de
hasta 500 mA de corriente ( por lo tanto, la potencia consumida por
la placa es en ese caso unos 2.5W). Si en algn momento por el
conector USB pasa ms intensidad de la deseable, la placa Arduino
est protegida mediante un poli fusible reseteable que
automticamente rompe la conexin hasta que la condiciones elctricas
vuelvan a la normalidad. Una consecuencia de esta proteccin contra
posibles picos de corrientes es que la intensidad de corriente
recibida a travs de USB puede no ser suficiente para proyectos que
contengan componentes tales como motores, solenoides o matrices de
LEDs, los cuales consumen mucha potencia.Si llegamos a utilizar un
adaptador AC/DC, se recomienda el uso de uno con las siguientes
caractersticas: El voltaje de salida ofrecido tiene que ser de 9 a
12 V DC. En realidad, el circuito regulador que lleva incorporado
la placa Arduino es capaz de manejar voltajes de salida ( de
entrada para la placa) de hasta 20 V , as que en teora se podran
utilizar adaptadores AC/DC que generen una salida de 20 V DC. No
obstante, esta no es una buena idea porque se pierde la mayora del
voltaje en forma de calor (lo cual es muy ineficiente) y adems
puede provocar el sobrecalentamiento del regulador y como
consecuencia daar la placa La intensidad de corriente ofrecida debe
ser de 250mA o ms. Si conectamos a nuestra placa Arduino muchos o
unos pocos pero consumidores componentes, el adaptador debera
suministrar al menos 500mA o incluso 1A. De esta manera nos
aseguraremos de que tenemos suficiente corriente para que cada
componente pueda funcionar de forma fiable.El adaptador debe de ser
de polaridad con el positivo en el centro. Esto quiere decir que la
parte externa del cilindro metlico que forma la clavija de 5,5/2,1
mm del adaptador tiene que ser del borne negativo y el hueco
interior del cilindro ha de ser el borne positivo.Adems dentro de
la zona etiquetado como POWER en la placa Arduino existen una serie
de pines-hembras relacionados con la alimentacin elctrica como
son:GND: pines-hembra conectados a tierra, estos pines son muy
importantes que todos los componentes compartan una tierra en comn
como referencia. Estos pines-hembra son diseados para cumplir esta
funcin.Vin: este pin-hembra se puede utilizar para dos cosas
diferentes: la primera es que si la placa est conectada mediante la
clavija de 2,1 mm a alguna fuente externa que aporte un voltaje
dentro de los mrgenes de seguridad, podemos conectar a este pin
hembra cualquier componente electrnico para alimentarlo
directamente con el nivel de voltaje que est aportando la fuente en
ese momento. Si la placa est alimentada mediante USB, entonces ese
pin hembra aportar 5V regulados. En cualquier caso, la intensidad
de corriente mxima aportada es de 40 mA (esto hay que tener en
cuenta cuando se conecten diferentes dispositivo que consuman mucha
corriente) tambin podemos usar el pin hembra Vin para alimentar la
propia placa directamente desde alguna fuente de alimentacin
externa sin utilizar ni la clavija ni el cable USB. Esto se hace
conectndole un borne positivo de la fuente y conectando el borne
negativo al pin tierra. Si se usa este montaje, el regulador de
tensin que incorpora la placa, reducir el voltaje recibido de la
pila al voltaje de trabajo de la placa.5V : este pin hembra se
puede utilizar para dos cosas diferentes tanto si la placa est
alimentada mediante el cable USB como si est alimentada por una
fuente externa que aporte un voltaje dentro de los mrgenes de
seguridad, podemos conectar a este pin hembra cualquier componente
para que pueda recibir 5V regulados. En cualquier caso, la
intensidad de corriente mxima generada ser de 40 mA. Pero tambin
podemos usar este pin hembra para alimentar la propia placa desde
una fuente de alimentacin externa previamente regulada a 5V sin
utilizar el cable USB ni la clavija de 2,1 mm.3,3 V: este pin
hembra ofrece un voltaje de 3,3 voltios. Este voltaje se obtiene a
partir del recibido indistintamente a travs del cable USB o de la
clavija de 2.1 mm, y est regulado (con un margen de error de 1%)
por un circuito especifico incorporado en la placa, en este caso
particular la corriente mxima generada es de 50 mA. Al igual que
con los pines anteriores, podremos usar este pin para alimentar
componentes de nuestro circuitos que requieran dicho voltaje, pero
en cambio no podremos conectar ninguna fuente externa aqu porque el
voltaje es demasiado limitado para poder alimentar la placa.Chip
Atmega16U2 La conexin USB de la placa Arduino, adems de servir como
alimentacin elctrica, sobre todo es un medio para poder transmitir
datos entre nuestro computador y la placa, y viceversa. Este trfico
de informacin que se realiza entre ambos aparatos se logra gracias
al uso del protocolo USB, un protocolo de tipo serie que tanto
nuestro computador como la placa Arduino son capaces de entender y
manejar. No obstante, el protocolo USB internamente es demasiado
complejo para que el microcontrolador Atmega328P pueda comprenderlo
por s mismo sin ayuda, ya que el tan solo puede comunicarse con el
exterior mediante protocolos muchos ms sencillos tcnicamente como
son el I2C o el SPI. Por lo tanto es necesario que la placa
disponga de un elemento traductor, que facilite al Atmega328P la
manipulacin de la informacin transferida por USB sin que este tenga
que conocer los entresijos de dicho protocolo.Las entradas y
salidas digitales La placa Arduino dispone de 14 pines hembras de
entradas o salidas digitales (segn lo que convenga), numeradas
desde la 0 hasta la 13. Es aqu donde se pueden conectar sensores
para que la placa pueda recibir datos del entorno, y donde tambin
se pueden conectar actuadores para que la placa pueda enviarles las
ordenes pertinentes, adems de poder conectar cualquier otro
componente que necesite comunicarse con la placa de alguna manera.
A veces a estos pines hembra digitales de propsito general se les
llama pines GPIO (General Purpose Input/Output). Todos estos pines
hembra digitales funcionan a 5V, pueden proveer o recibir un mximo
de 40 mA y disponer de una resistencia pull up interna de entre 20
k y 50k que inicialmente est desconectada. Hay que tener en cuenta,
que aunque cada pin individual pueda proporcionar hasta 40 mA como
mximo, en realidad la placa agrupa los pines digitales de tal forma
que tan solo pueden aportar 100 mA a la vez al conjunto de los
pines n 0, 1, 2,3 y 4 y 100 mA al resto de los pines (del 5 al 13).
Esto quiere decir que como mucho podramos tener 10 pines ofreciendo
20 mA a la vez.Las entradas analgicas La placa Arduino dispone de 6
entrada analgicas (en forma de pines hembra etiquetados como A0, A1
hasta A5) que pueden recibir voltajes dentro de un rango de valores
continuos de entre 0 y 5 V. No obstante, la electrnica de la placa
solo puede trabajar con valores digitales, por lo que es necesaria
una conversin previa del valor analgico recibido a un valor digital
lo ms aproximado posible. Esta se realiza mediante un circuito
conversor analgico/digital incorporado en la propia placa. El
circuito conversor es de 6 canales (uno por cada entrada) y cada
canal dispone de 10 bits (los llamados bits de resolucin) para
guardar el valor del voltaje convertido digitalmente.Los pines
hembra de entrada analgicos tienen tambin toda la funcionalidad de
los pines de entrada-salida digitales. Es decir, que si en algn
momento necesitamos ms pines hembra digitales ms all de los 14 que
la placa Arduino ofrece(del 0al 13), los 6 pines hembra analgicos
pueden ser usados como unos pines hembra digitales (numerndose
entonces del 14 al 19) sin ninguna distincin.Las salidas analgicas
(PWM)En los proyectos a menudo necesitamos enviar al entorno seales
analgicas, por ejemplo, para variar progresivamente la velocidad de
un motor, la frecuencia de un sonido emitido por un zumbador o la
intensidad con la que luce un LED. No basta con simples seales
digitales, tenemos que generar seales que varen continuamente. La
placa Arduino no dispones de pines hembra de salida analgica
(porque su sistema electrnico interno no es capaz de manejar este
tipo de seales), sino que utiliza algunos pines hembras de salida
digitales concretos para simular un comportamiento analgico. Los
pines hembra digitales que son capaces de trabajar en este modo no
son todos, solo son los marcados con la etiqueta PWM. En concreto
para el modelo Arduino UNO son los pines nmeros 3, 5, 6, 9 ,10 y
11.Las siglas PWM vienen de Pulse Width Modulation lo que significa
modulacin de ancho de pulso. Lo que hace este tipo de seal es
emitir, en lugar de una seal continua, una seal cuadrada formada
por pulsos de frecuencia constante (aproximadamente de 490 HZ). La
gracia est en que al variar la duracin de estos pulsos, estaremos
variando proporcionalmente la tensin promedio resultante. Es decir
cuanto ms corto sean los pulsos y ms distante entre s en el tiempo,
menor ser la tensin promedio de salida, y cuantos ms largos sean
los pulsos y ms juntos en el tiempo estn, mayor ser dicha tensin.
El caso extremo lo tendramos cuando la duracin del pulso
coincidiera con el periodo de la seal, momento en el cual de hecho
no habra distancie entre pulso y pulso (sera una seal de un valor
constante) y la tensin promedio de salida sera la mxima posible,
que son 5 V. la duracin del pulso la podemos cambiar en cualquier
momento mientras la seal se est emitiendo, por lo que como
consecuencia la tensin promedio puede ir variando a lo largo del
tiempo de forma continua. Las siguientes figuras ilustran de mejor
manera lo que se acaba de explicar
Otros usos de los pines hembra de la placa Existen determinados
pines hembra de entrada/salida digitales, que adems de su funcin
estndar, tienen otras funciones especializadas y son los
siguientes.Pin 0(RX) y pin 1(TX): permite que el microcontrolador
ATmega328P pueda recibir directamente datos en serie (por el pin
RX) o transmitirlos (por el pin TX) sin pasar por la conversin
USB-Serie que realiza el chip ATmega16U2. Es decir, estos pines
posibilitan la comunicacin sin intermediarios de dispositivos
externos con la receptor/transmisor serie (de tipo TTL-UART) que
incorpora el propio ATmega328P. De todas maneras, estos pines estn
internamente conectados (mediante resistencias de 1K) al chipe
ATmega16U2, por lo que los datos disponibles en el USB tambin lo
estarn en estos pines. Hay que aclarar que en la placa estn
incrustados un par de LEDs etiquetados como RX y TX, pero que, a
pesar de su nombre, no se encienden cuando se reciben o transmiten
datos provenientes de la conexin USB a travs del chip
ATmega16U2.Pines 2 y 3: se pueden usar, con la ayuda de programacin
del software, para gestionar interrupciones.Pines 10(SS), 11(MOSI),
12(MISO) y 13(SCK): se puede usar para conectar algn dispositivo
con el que se quiera llevar a cabo comunicaciones mediante el
protocolo SPI. Pin 13: este pin est conectado directamente a un LED
incrustado en la placa (identificado con la letra L) de forma que
si el valor de voltaje recibido por el pin es ALTO (HIGH), el LED
encender, si dicho valor es BAJO (LOW), el LED se apagar. Es una
manera sencilla, y rpida de detectar seales de entradas externas
sin necesidad de disponer de ningn componente extra.Pines A4 (SDA)
y A4 (SCL): se pueden usar para conectar algn dispositivo con el
que se quiera llevar a cabo comunicaciones mediante el protocolo
I2C/TWI. La placa Arduino ofrece (por una simple cuestin de
comodidad y ergonoma) una duplicacin de estos dos pines hembra, los
cuales estn sin etiquetar porque no hay ms espacio fsico.Pin AREF:
ofrece un voltaje de referencia externo para poder aumentar la
precisin de las entradas analgicas.Pin RESET: si el voltaje de este
pin se estable a valor BAJO (LOW), el microcontrolador se reiniciar
y se pondr en marcha el bootloader. Para realizar esta misma
funcin, la placa Arduino ya dispones de un botn, pero este pin
ofrece la posibilidad de aadir otro botn de reinicio a placas
supletorias(es decir ampliarla y complementarla), las cuales por su
colocacin puedan ocultar o bloquear el botn de la placa Arduino.Pin
IOREF: en realidad este pin es una duplicacin regulada del pin Vin.
Su funcin es indicar a las placas supletorias conectadas a nuestra
placa Arduino el voltaje al que trabajan los pines de
entrada/salidas de esta, para que las placas supletorias se adapten
automticamente a ese voltaje de trabajo Pin sin utilizar: justo el
pin de a continuacin de IOREF, ese pin no se usa para nada pero se
reserva para un posible uso futuro. El conector ICSP Las siglas
ICSP (cuyo significado es In Circuit Serial Programming) se
refieren a un mtodo para programar directamente microcontroladores
de tipo AVR, PIC y Parallax Propeller que no tienen el boorloader
preinstalado. Ya sabemos que la funcin de un bootloader es permitir
cargar nuestros programas al microcontrolador conectando a la placa
a un computador mediante un cable USB estndar, pero si el micro
controlador no tiene grabado ningn bootloader, la escritura de su
memoria no se puede realizar de esta forma tan sencilla y debemos
utilizar otros mtodos, como el ICSP.El botn de Reset La placa
Arduino UNO dispone de un botn de reinicio (Reset) que permite una
vez pulsado, enviar una seal LOW al pin RESET de la placa para
detener y volver a arrancar el microcontrolador, siempre se activa
la ejecucin del bootloader. El botn de reinicio se suele utilizar
para permitir la carga de un nuevo programa en la memoria Flash del
microcontrolador eliminando el que estuviera grabado anteriormente
y su posterior puesta en marcha. En la placa UNO no es necesario
prcticamente nunca pulsar el botn Reset antes de cada carga, ya que
la placa UNO est diseada de tal manera que permite la activacin del
bootloader directamente desde el entorno de desarrollo instalado en
nuestro computador.Software Arduino Qu es un IDE?Un programa es un
conjunto concreto de instrucciones que pretenden obtener un
resultado determinado, mediante instrucciones, ordenadas y
agrupadas de forma adecuada y sin ambigedades.Un microcontrolador
es programable, ya que permite grabar en su memoria interna de
forma repetitiva, hasta que regrabemos el programa de nuevo si es
necesario. Si no le introducimos ningn programa en la memoria del
microcontrolador, este no sabr que hacer.Las siglas IDE vienen de
Entorno de Desarrollo Integrado. Esto es simplemente una forma de
llamar al conjunto de herramienta que permite a los programadores
poder desarrollar sus propios programas con comodidad. En el caso
de la placa Arduino, necesitamos un IDE que nos permita escribir y
editar nuestro programa, que lo llamaremos sketch. IDE nos permite
comprobar que no hayamos cometido ningn error en la programacin,
estando seguro que el sketch este correcto, el IDE graba en la
memoria del microcontrolador de la placa Arduino el programa
desarrollado. Para desarrollar los sketches debemos instalar en
nuestro computador el IDE que nos proporciona el proyecto Arduino.
Para ello seguiremos algunos pasos que indicaremos a
continuacinInstalacin del IDE Arduino.Para instalar el IDE de
Arduino, debemos ir a la pgina web oficial de descarga de Arduino y
descargar el archivo comprimido, una vez ejecutado el instalador
debemos incorporar los driver necesario para poder reconocer la
placa Arduino en el momento que se conecte al computador va USB.MS
ALL DEL LENGUAJE ARDUINO: EL LENGUAJE C/C++En prrafos anteriores
hemos hablado de la palabra compilacin, pero no hemos explicado su
significado. Compilar en este caso significa convertir un cdigo
escrito en IDE a un cdigo ejecutable por el microcontrolador, que
no es ms que un inmenso conjunto de bits (1s y 0s) conocido como
cdigo binario o cdigo mquina. Este cdigo mquina no es ms que un
conjunto de impulsos elctricos (1s pasa corriente y 0s no pasa
corriente), esto es lo nico que realmente saben procesar el
circuito electrnico. Un cdigo binario, resultante de la compilacin
de un sketch Arduino podra ser similar a 1001011101010101101Es
evidente que es imposible escribir un programa directamente en
cdigo mquina, por eso existen los compiladores. Hay que saber que
el cdigo mquina vlido para un microcontrolador no ser el mismo para
otro microcontrolador, debido a su diferente construccin electrnica
interna. Por lo tanto, un mismo programa se tendr que codificar en
diferentes cdigos mquinas para diferentes modelos de
microcontroladores.La placa Arduino incorpora microcontroladores de
arquitectura AVR, es lgico pensar que el compilador incluido en el
entorno del programa de Arduino, es uno especfico para generar
cdigo binario compatible con este tipo de chips. Sin embargo dicha
herramienta llamada (GCC-ARV) no compila cdigo escrito en lenguaje
Arduino a cdigo binario AVR, si no que compila cdigo escrito en
lenguaje C/C++ a cdigo binario AVR. Porque realmente, el lenguaje
Arduino no es un lenguaje estricto, es simplemente un conjunto de
instrucciones C y C++ camuflada, diseada para simplificar el
desarrollo de programa para microcontroladores AVR.El lenguaje C y
C++ son dos de los lenguajes ms importantes y extendidos del mundo
por varias razones: porque son lenguajes muy potentes y a la vez
ligeros y flexibles, porque poseen un ecosistema amplsimo de
libreras que los dotan de funcionalidad que otros lenguajes no
ofrecen, porque los programas escritos y compilados en estos
lenguajes son tremendamente eficiente y rpido, y porque existen
compiladores para prcticamente cualquier tipo de hardware.Tal vez
para una persona que se inicia en el mundo de la programacin, los
lenguajes C/C++ no son muy amigables. Por eso existen el lenguaje
Arduino, para que una persona sin conocimientos de desarrollo de
aplicaciones pueda escribir rpidamente un sketch Arduino, sin tener
que aprender todo un lenguaje de programacin completo como lo es
C/C++.Estructura general de un sketch Un programa diseado para que
se ejecute sobre la plataforma Arduino (un sketch) siempre se
compone de tres secciones:Declaraciones de variables globales:
ubicada directamente al principio del sketch. La seccin llamada
void setup (): delimitada por llaves de apertura y cierre.La seccin
llamada void loop (): delimitada por llaves de apertura y cierre.
La primera seccin del sketch est reservada para escribir, tal como
su nombre lo indica, las diferentes declaraciones de variables que
necesitemos.En el interior (dentro de sus dos llaves) de las otras
dos secciones debemos escribir las instrucciones que deseamos
ejecutar en nuestra placa, teniendo en cuenta lo siguiente:Las
instrucciones escrita dentro de las seccin void setup () se
ejecutan una nica vez, en el momento de encender o resetear la
placa Arduino.Las instrucciones escrita dentro de la seccin void
loop () se ejecutan (despus de las de seccin anterior) infinitas
veces hasta que la placa se apague o se resetee. Es decir se
ejecuta desde la primera instruccin hasta la ltima, para
seguidamente ejecutar desde la primera hasta la ltima instruccin,
as una y otra vez. Por lo tanto las instrucciones escrita en la
seccin void setup () normalmente sirve para realizar ciertas pre
configuraciones iniciales y las instrucciones del interior de void
loop () son, el programas en s que est funcionando
continuamente.Sobre las maysculas, tabulaciones y punto y
comasConviene aclarar pequeos detalles que deberemos tener en
cuenta a la hora de escribir nuestros sketches es necesario que el
lenguaje Arduino es muy sensible, ya que es totalmente diferente
escribir una letra mayscula que una minscula. Adems las
tabulaciones de las instrucciones contenidas dentro de las
secciones void setup () y void loop () del sketch. No son en
absoluto necesarias para que la compilacin del sketch se produzca
con xito. Otro detalle de las instrucciones que todas acaban con un
punto y coma. Es indispensable aadir signos para no tener errores
de compilacin, ya que el compilador necesita localizarlos para
poder detectar el final de cada instruccin escrita Comentarios Es
un texto escrito intercalado con el cdigo del sketch que se utiliza
para informar sobre cmo funciona ese cdigo a la persona que en algn
momento lo est leyendo. Los comentarios son textos de ayuda para
los seres humanos que explica el cdigo asociado y ayudan a
entenderlo y recordar su funcin, pero estos comentarios son
completamente ignorados y desechados por el compilador.Variables
Una variable es un elemento de nuestro sketch que guarda un
determinado contenido, este contenido es el valor de la variable,
este valor de la variable se podr modificar en cualquier momento de
la ejecucin del sketch, de ah proviene el nombre de variable. Las
variables son muy importantes, ya que todos los sketches hacen uso
de ellas para alojar los valores que necesitan para funcionar. El
valor de una variable puede obtenerse de diversas maneras, puede
ser asignado literalmente pero tambin puede ser un dato de algn
sensor o resultado de algn clculo. Declaracin e inicializacin de
una variable.Antes de poder empezar a utilizar cualquier variable
en nuestro sketch, primero debemos crearla, al crear una variable
se le suele llamar declaracin de una variable. En el lenguaje
Arduino, cuando se declara una variable es imprescindible
especificar su tipo, este tipo de variable la elegiremos segn el
tipo de datos que queramos almacenar en nuestra variable (nmeros
enteros, nmeros decimales, cadenas de caracteres). Cada variable
puede guardar solamente valores de un determinado tipo, por lo que
debemos decidir en su declaracin que tipo de variable es la que nos
interesa, segn el tipo de datos que queremos almacenar.
Opcionalmente, a la vez que se declara la variable, se puede
establecer un valor inicial a esto se le llama inicializar una
variable. Inicializar una variable, cuando se declara no es
obligatorio, pero muy recomendable.Por otro lado, a la hora de
declarar las variables, se recomienda nombrar las variables con
nombres descriptivos, para hacer el cdigo de nuestro sketch ms
legible. Por ejemplo, nombres como sensorDistancia o botnEncendido
ayudarn a entender mejor lo que esas variables representan. Para
nombrar una variable se puede utilizar cualquier palabra, siempre
que esta no sea una palabra reservada del lenguaje Arduino y que no
empiece por un dgito.Asignacin de valores a una variable.Las
asignaciones de valores a una variable pueden ser muy variadas. Un
caso bastante habitual es asignar a una variable un valor que
dependa de otra variable. Por ejemplo, si tenemos una variable
llamada Y y otraX, podramos escribir . La clave aqu est en entender
que el smbolo = no es el de la igualdad matemtica sino el de la
asignacin. mbito de una variable Otro concepto importante en
relacin con las variables es el de mbito de una variable. Una
variable puede ser global o local, que sea de un mbito o de otro
depender en qu lugar de nuestro sketch se declare la
variable.Variable global: se ha de declarar al principio de nuestro
sketch, (antes y fuera) de las secciones void setup y void loop.
Una variable global es aquella que puede ser utilizada y manipulada
desde cualquier punto de sketch.Variable local: se ha de declarar
en el interior de alguna de las secciones de nuestro sketch. Una
variable local es aquella que solo puede ser utilizada y manipulada
por las instrucciones escrita dentro de las secciones donde se ha
declarado. Este tipo de variable es til en sketches largo y
complejos para asegurar de que solo una seccin tiene acceso a sus
propias variables.Tipos posibles de una variable Los tipos de
variables que el lenguaje Arduino admite son:Boolean: se utilizan
para almacenar un estado con dos posibles casos, y as hacer que el
sketch reaccione segn detecte uno u otro. Las variables de este
tipo solo pueden tener dos valores posibles, verdaderos o
falsos.Char: el valor que pueda tener una variable de este tipo es
siempre un solo carcter (una letra, un digito, un signo de
puntuacin). Para asignar un determinado valor explcitamente a una
variable de tipo char, debemos tener la precaucin de escribir ese
carcter entre comillas simples. Para saber a qu nmero interno
corresponde un determinado carcter, y viceversa la placa Arduino
utiliza la llamada tabla ASCII, la cual es una simple lista de
equivalencias que asocia cada carcter con un nmero determinado. El
hecho, para que los caracteres sean reconocidos como numero permite
realizar operaciones aritmticas. Ejemplo, si realizamos la operacin
A+1 obtendramos el valor 66, ya que la tabla ASCII el valor numrico
del carcter A es 65.Byte: el valor que puede tener una variable de
este tipo es siempre un nmero entero entre 0 y 255. Estas variables
utilizan 8 bits para almacenar su valor, por lo tanto tiene el
mismo nmero de combinaciones numricas posibles diferente (256),
pero los valores de una variable byte no pueden ser valores
negativos.Int: el valor que puede tener una variable de este tipo
es un nmero entero entre -32768 y 32767, gracias a que utilizan dos
bytes (16bits) de memoria para almacenar.Word: el valor que puede
tener este tipo de variables es el mismo que en de tipo Int, pero
con la diferencia que los valores no pueden ser negativos.Long: el
valor que puede tener una variable de este tipo es un nmero entero
entre -2.147.483.648 y 2.147.483.647 esto es posible ya que
utilizan 4 bytes (32 bits) de memoria para almacenar.Unsigned long:
el valor que puede tener una variable de este tipo son nmeros
entero entre 0 y 4.294.967.295. Al igual de los tipos Word estos
tipos no pueden tener valores negativos.Float: el valor que puede
tener una variable de este tipo es un numero decimal. Los valores
float posibles pueden ir desde el nmero hasta debido a su grandsimo
rango de valores posibles, los numero decimales son usados
frecuentemente para aproximar valores analgicos continuos. No
obstante estos valores solo tiene 6 o 7 dgitos en total de precisin
y por lo tanto no son exactos y pueden producir resultados
inesperados.Double: es muy parecido al de tipo float con la
diferencia que este tipo entrega el doble de precisin en comparacin
a los de tipo float. Array: un array es una coleccin de variables
de un tipo concreto que tienen todo el mismo y un nico nombre, pero
que pueden distinguirse entre s por un nmero a modo de ndice. Es
decir, en vez de tener diferentes variables
(cvarCHAR1,varCHAR2,varCHAR3) podemos tener un nico array que las
agrupe todas bajo un mismo nombre (varCHAR) , y que permita que
cada variable pueda manipularse por separado gracias a que dentro
del array cada una est identificada mediante un numero ndice
numrico escrito entre corchetes (varCHAR[0],
varCHAR[1],varCHAR[2]). Los array sirven para ganar claridad y
simplicidad en el cdigo y adems facilitan la programacin.Podemos
declarar un array de las siguientes maneras:Int varInt [6];declarar
un array de 6 elementos (es decir, variables individuales) sin
inicializar ninguno Int varInt [ ] = {2, 5, 6,7}; declara un array
sin especificar el nmero de elementos. No obstante se asignan los
valores directamente a los elementos individuales, por lo que el
compilador es capaz de deducir el nmero de elementos total del
array.Int varInt [8] = {2, 5, 6, 7}; declara un array de 8
elementos e inicializa algunos de ellos, dejando el resto sin
inicializar. Lgicamente, si se inicializan ms elementos que lo
permite el tamao del array.Cambios de tipo de datos (numricos) No
se puede modificar el tipo de una variable, si esta se declar,
seguir siendo de ese tipo a lo largo de todo el sketch. Pero lo que
s se puede hacer es cambiar en un momento concreto el tipo del
valor que contiene. Esto se llama casting, y puede ser til cuando
se quiere utilizar ese valor en clculos que requieran un tipo
diferente del original.Constantes Es posible declarar una variable
de tal forma que consigamos que su valor permanezca siempre
inalterado. A este tipo de variables ya no se les llama as por
motivos obvios, si no se les llamara contantes. Las contantes se
pueden utilizar como cualquier variable de su mismo tipo, pero si
se intenta cambiar su valor, el compilador lanzar un
error.Parmetros de una instruccin Antes de empezar a aprender y a
utilizar las diferentes instrucciones que ofrece el lenguaje
Arduino, debemos tener claro un concepto fundamental, los parmetros
de una instruccin. En el sketch al final del nombre de cada
instruccin utilizada siempre aparecen unos parntesis, estos
parntesis pueden estar vacos pero tambin pueden incluir en su
interior un numero /letra o palabra, cada uno de estos valores es
lo que se le denomina parmetro. Los parmetros sirven para modificar
el comportamiento de la instruccin en algn aspecto
determinado.Valor de retorno de una instruccin Otro concepto
fundamental relacionado con las instrucciones del lenguaje Arduino
es el de valor de retorno. Las instrucciones, adems de recibir
parmetros de entrada, y aparte de hacer la tarea que tienen que
hacer, normalmente tambin devuelven un valor de salida. Un valor de
salida es un dato que podemos obtener en nuestro sketch como
resulta de la ejecucin de la instruccin. La comunicacin serie con
la placa Arduino Ya hemos explicado anteriormente que el
microcontrolador ATmega328P dispone de un receptor/transmisor serie
de tipo TTL-UART que permite comunicar la placa Arduino UNO con
otros dispositivos, para as poder transferir datos entre ambos. El
canal fsico de comunicacin en estos casos suele ser el cable USB,
pero tambin puede ser los pines digitales 0 (RX) y 1(TX) de la
placa. Si se usan estos dos pines para comunicar la placa Arduino
con un dispositivo externo, tendremos que conectar el pin TX de la
placa con el pin RX del dispositivo, el RX de la placa con el TX
del dispositivo y compartir la tierra de la placa con la tierra del
dispositivo.Dentro de nuestros sketches podemos hacer uso de este
recepto/transmisor TTL-UART para enviar datos al microcontrolador
(o recibirlos de l) gracias al elemento del lenguaje Arduino
llamado serial. En realidad serial es lo que llamamos un objeto del
lenguaje. El concepto de objeto es algo abstracto, pero para
entenderlo mejor, simplemente supondremos que son contenedores que
agrupan diferentes instrucciones con alguna relacin entre ellas.
Por ejemplo, el objeto serial representa por s mismo una
comunicacin serie establecida con la placa, y en nuestro sketch
podremos hacer uso de un conjunto de instrucciones disponible
dentro de l que sirven para manipular dicha comunicacin serie.Las
instrucciones existentes dentro de un objeto (no todas las
instrucciones del lenguaje Arduino pertenecen a un objeto) se
escribe siguiendo la sintaxis nombreObjeto.nombreInstruccion (), a
continuacin, explicaremos la sintaxis, funcionamiento y utilidad de
las instrucciones incluidas en el objeto serial.Serial.begin ():
abre el canal serie para que pueda empezar la comunicacin por l.
Por tanto, su ejecucin es imprescindible antes de realizar
cualquier transmisin por dicho canal. Por eso normalmente se suele
escribir dentro de la seccin void setup. Adems mediante su nico
parmetro, especifica la velocidad en bits/s a la que se producir la
transferencia serie de los datos. Lo que es importante es que el
valor escrito como parmetro coincida con el que se especifica en el
desplegable que aparece en el serial monito del IDE de Arduino, o
si no la comunicacin no estar bien sincronizada y se mostrarn
smbolo sin sentido. Esta instruccin no tiene valor de
retorno.Tambin existe la instruccin Serial.end (), la cual no tiene
ningn argumento ni devuelve nada, y que se encarga de cerrar el
canal serie. De esta manera, la comunicacin serie se deshabilita y
los pines RX y TX vuelven a estar disponible para entrada y salidas
general.Instrucciones para enviar datos desde la placa al exterior
Serial.print (): enviar a travs del canal serie un dato
(especificado como parmetro) desde el microcontrolador hacia el
exterior. Ese dato puede ser de cualquier tipo. Si el dato se
especifica explcitamente (en vez de a travs de una variable), hay
que recordar que los caracteres se han de escribir entre comillas
simples y las cadenas entre comillas dobles.La transmisin de los
datos realizada por serial.print () es asncrona. Eso significa que
nuestro sketch pasar a la siguiente instruccin y seguir ejecutndose
son esperar a que empiece a realizarse l envi de
datos.Serial.println (): hace exactamente lo mismo que serial.print
(), pero adems aade automticamente al final de los datos enviados
dos caracteres extra, el retorno de carro (cdigo ASCII n 13) y el
de la nueva lnea (cdigo ASCII n 10).Serial.write (): enva a travs
del canal serie un dato (especificado como parmetro) desde el
microcontrolador hacia el exterior. Pero a diferencia de
Serial.print (), el dato a enviar solo puede ocupar un byte. Por lo
tanto, ha de ser bsicamente de tipo char o byte.Instrucciones para
recibir datos del exterior Como ya hemos visto, enviar datos a la
placa es muy sencillo no hay ms que escribir lo que queramos en la
caja de texto y pulsar el botn send. No obstante, si el sketch que
se est ejecutando en la placa no est preparado para recibir y
procesar estos datos, esa transmisin no llegara a ningn sitio. Por
tanto, necesitamos recibir convenientemente en nuestro sketches los
datos que lleguen a la placa va comunicacin serie. Para ello,
disponemos de dos instrucciones bsicas.Serial.available ():
devuelve el nmero de bytes (caracteres) disponibles para ser ledo
que proviene del exterior a travs del canal serie (va USB). Estos
bytes ya han llegado al microcontrolador y permanecen almacenados
temporalmente en una pequea memoria de 64 bytes que tiene el chip
TTL-UART llamada (buffer) hasta que sean procesados mediante la
instruccin serial.read (). Si no hay bytes para leer tampoco tendr
parmetros y esta instruccin devolver a cero.Serial.read ():
devuelve el primer byte an no ledo de los que estn almacenados en
el buffer de entrada del chip TTL-UART. Al hacerlo, lo elimina de
ese buffer. Para volver a leer el siguiente byte, se ha de volver a
ejecutar el serial.read (). Y hacer as hasta que se hayan ledo
todos.Serial.findUntil (): lee datos del buffer de entrada hasta
que se encuentre la cadena de caracteres (o un carcter individual)
especificada como primer parmetro, o bien se llegue a una marca de
final de bsqueda (la cual es la cadena o carcter especificada como
segundo parmetro).la instruccin devuelve a true si se encuentra la
cadena a buscar antes que la marca de final de bsqueda o false si
no.Serial.readBytes (): lee del buffer de entrada (eliminndolos de
all) la cantidad de bytes especificada como segundo parmetro (o
bien si no llegan suficiente bytes, hasta que se hayan superado el
tiempo especificado por serial.setTimeout (). En cualquier caso,
los bytes ledos se almacenan en un array de tipo char especificando
como primer parmetro.Serial.readBytesUntil (): lee del buffer de
entrada (eliminndolos de all) la cantidad de bytes especificada
como tercer parmetro, o bien, si se encuentra antes una cadena de
caracteres o carcter individual especificada como primer parmetro
que hace de marca de final, o bien si no llegan suficientes bytes
ni se encuentra la marca de final, hasta que superado el tiempo
especificado por Serial.setTimeout (). En cualquier caso, los bytes
ledos se almacenaran en un array de tipo char especificado como
segundo parmetro. Esta instruccin devuelve el nmero de bytes ledos
del buffer (por lo que un valor 0 significa que no se encontraron
datos validos).Serial.setTimeout (): tiene un parmetro (de tipo
long) que sirve para establecer el nmero de milisegundos mximos que
las instrucciones Serial.readBytesUntil () y Serial.readBytes ()
esperarn a la llegada de datos al bfer de entrada serie. Si alguna
de estas dos instrucciones no recibe ningn dato y se supera ese
tiempo, el sketch continuar su ejecucin en la lnea siguiente. El
tiempo de espera por defecto es de 1000 milisegundos. Esta
instruccin se suele escribir en void setup (). No tiene valor de
retorno.Serie.parseFloat (): lee del buffer de entrada
(eliminndolos de all) todos los datos hasta que se encuentre con un
nmero decimal. Su valor de retorno de tipo long ser entonces ese
nmero decimal encontrado. Cuando detecte el primer carcter
posterior no vlido, dejar, a de leer (y por tanto, no seguir
eliminando datos del buffer). Esta instruccin no tiene
parmetros.Serial.parselnt (): lee del buffer de entrada
(eliminndolos de all) todos los datos hasta que se encuentre con un
nmero entero. Su valor de retorno de tipo long ser entonces ese
nmero entero encontrado. Cuando detecte el primer carcter posterior
no vlido, dejar de leer (y por tanto, no seguir eliminando datos
buffer). Esta instruccin no tiene parmetros.Instrucciones de gestin
del tiempo Millis (): devuelve el nmero de milisegundos (ms) desde
que la placa Arduino empez a ejecutar el sketch actual. Este nmero
se resetear aproximadamente despus de 50 das.Micros (): devuelve el
nmero de microsegundos (s) desde que la placa Arduino empez a
ejecutar el sketch actual. Este nmero de tipo unsigned long se
resetear, aproximadamente despus de 70 minutos Delay (): pausa el
sketch durante la cantidad de milisegundos especificados como
parmetro de tipo unisigned long. No tiene valor de retorno
Delaymicroseconds (): pausa el sketch durante la cantidad de
microsegundos especificados como parmetro de tipo unsigned long.
Actualmente el mximo valor que se puede utilizar con precisin es de
16383. Para esperas mayores que esta, se recomienda usar la
instruccin delay (). El mnimo valor que se puede utilizar con
precisin es de 3 (s). No tiene valor de retorno.Instrucciones
matemticas, trigonomtricas y de pseudoaleatoriedad.El lenguaje
Arduino dispone de una serie de instrucciones matemticas y de
pseudoaleatoriedad que nos pueden venir bien en nuestros
proyectos.Abs (): devuelve el valor absoluto de un nmero pasado por
parmetros (el cual puede ser tanto entero como decimal). Si el
nmero es positivo o cero, lo devuelve sin alterar su valor; si es
negativo, lo devuelve pero convertido en positivo.Min (): devuelve
el mnimo de dos nmero pasados por parmetros (los cuales pueden ser
tanto enteros como decimales).Max (): devuelve el mximo de dos
nmeros pasados por parmetros (los cuales pueden ser tanto enteros
como decimales).Constrain () : recalcula el valor pasado como
primer parmetro (llammosle x) dependiendo de si est dentro o fuera
del rango delimitado por los valores pasados como segundo y tercer
parmetro (llammoslos a y b respectivamente, donde a siempre ha de
ser menor que b).los parmetros pueden ser tanto enteros como
decimales. Ejemplo. Si x est entre a y b, constrain () devolver x
sin modificar.Si x es menor que a, constrain () devolver aSi x es
mayor que b, constrain () devolver bUna instruccin algo ms compleja
que las anteriores es la instruccin map (). Esta instruccin es
utilizada en multitudes de proyectos para adecuar las seales de
entradas obtenidas por diferentes sensores a un rango numrico ptimo
para trabajar.Pow (): devuelve el valor resultante de elevar el
nmero pasado como primer parmetro (la base) al nmero pasado como
segundo parmetro (el exponente, el cual puede ser incluso una
fraccin). Un ejemplo simple si vemos un resultado= (2,5); la
variable resultado valdr 32 (). Ambos parmetros son de tipo float,
y el valor devuelto es de tipo doublSqrt (): devuelve la raz
cuadrada del nmero pasado como parmetro (que puede ser entero o
decimal). El valor devuelto es de tipo doublInstrucciones
trigonomtricas.Sin (): devuelve el seno de un ngulo especificado
como parmetro en radianes. Este parmetro es de tipo float. Su
retorno puede ser un valor entre -1 y 1 y es de tipo double.Cos ():
devuelve el coseno de un ngulo especificado como parmetro en
radianes. Este parmetro es de tipo float. Su retorno puede ser un
valor entre -1 y 1 es de tipo doubleTan (): devuelve la tangente de
un ngulo especificado como parmetro en radianes. Este parmetro es
de tipo float. Su retorno puede ser un valor entre - y y es de tipo
doubleTambin podemos utilizar nmeros pseudoaleatorios en nuestro
sketches Arduino. Un nmero pseudoaleatorio no es estrictamente un
nmero aleatorio segn la definicin matemtica rigurosa.Randomseed ():
inicializa el generador de nmero pseudoaleatorio.se suele ejecutar
en la seccin setup (). Esta instruccin tiene un parmetro de tipo
int o long llamado semilla que indica el valor a partir del cual
empezara la secuencia de nmeros. Semillas iguales generan
secuencias iguales, as que interesara en mltiples ejecuciones de
randomSeed (), utiliza valores diferente de semillas para aumentar
la aleatoriedad. Tambin nos puede interesar a veces lo contrario,
fijar la semilla para que la secuencia de nmeros aleatorios se
repita exactamente. No tiene ningn valor de retorno.Random (): una
vez iniciado el generador de nmeros pseudoaleatorio con randomseed
(), esta instruccin retorna un nmero pseudoaleatorio de tipo long
comprendido entre un valor mnimo (especificado como primer
parmetro) y un valor mximo (especificado como segundo parmetro)
menos uno. Si no se especifica el primer parmetro, el valor mnimo
por defecto es 0. El tipo de ambos parmetros puede ser cualquiera
mientras sea entero. Operadores aritmticos (+) Operador suma, (-)
operador resta, (*) operador multiplicacin, (/) operador divisin,
(%) operador modulo.Creacin de instrucciones (funciones) propias.Al
crear nuestras propias funciones, escribimos cdigo mucho ms legible
y fcil de mantener. Segmentar el cdigo en diferentes funciones
permite al programador crear piezas modulares de cdigo que realizan
una tarea definida. Al crear nuestras propias funciones, esto tiene
diversas ventajas como por ejemplo, que las funciones ayudan al
programador a ser organizado, codifican una accin en un lugar de
manera que una funcin solo ha de ser pensada y escrita una vez y
hacen ms fcil la reutilizacin de cdigo en otro programas
(provocando que esto sean ms pequeos, modulares y legibles)Tipo
retorno: es un tipo ya conocidos (byte, int, float) e indican el
tipo de valor que la funcin devolver al sketch principal una vez
ejecutada. Este valor devuelto se podr guardar en una variable para
ser usada en el sketch principal, o simplemente puede ser
ignorado.Tipo param1, tipo param2: son las declaraciones de los
parmetros de la funcin, que no son ms que variables internas cuta
existencia solo perdura mientras el cdigo de esta se est
ejecutando. El valor inicial de estos parmetros se asigna
explcitamente en la llamada a la funcin (esto es cuando es invocada
dentro de sketch principal), pero este valor puede variar dentro de
un cdigo interno. Al finalizar la ejecucin de la funcin, todos los
parmetros son destruidos de la memoria del microcontrolador.Bloques
condicionalesLos bloques if y if/elseUn bloque if sirve para
comprobar si una condicin determinada es cierta (true, 1) o falsa
(false, 0). Si la condicin es cierta, se ejecutara las
instrucciones escrita en su interior (es decir, dentro de las
llaves de apertura y cierre). Si no se cumple puede no pasar nada o
bien, si existe tras bloque if un bloque else, se ejecutara las
instrucciones escritas en el interior de ese bloque else. Si solo
escribimos el bloque if, el sketch tendr respuesta solamente para
cuando si se cumple la condicin, pero si adems escribimos un bloque
else, el sketch tendr respuesta par cuando s se cumple la condicin
y para cuando no se cumple tambin.Ahora que ya sabemos las
diferentes sintaxis del bloque if, veamos qu tipo de condiciones
podemos definir entre los parntesis del if. Lo primero que debemos
saber es que para escribir correctamente en nuestro sketch estas
condiciones necesitamos utilizar los llamados operadores de
comparacin. Operadores de comparacin (==) Comparacin de igualdad
(!=) Comparacin de diferencia (>) Comparacin de mayor que
(>=) Comparacin de mayor o igual que (