Vous êtes sur la page 1sur 83

Universidad de las Fuerzas Armadas ESPE

Sede Latacunga

Programacin de tarjetas
Arduino

Marzo de 2017
ndice de contenido
Fundamentos de electrnica.................................................................................................................3
Ley de Ohm.................................................................................................................................3
Circuitos resistivos......................................................................................................................4
Resistencias en serie y divisores de tensin......................................................................4
Resistencias en paralelo y divisores de intensidad............................................................5
Resumen............................................................................................................................6
Diodos.........................................................................................................................................6
Diodo de propsito general................................................................................................6
Diodo Zener.......................................................................................................................8
Diodo LED........................................................................................................................9
Transistores...............................................................................................................................10
Seal digital...............................................................................................................................12
Niveles lgicos.................................................................................................................12
Seal analgica.........................................................................................................................13
Seal PWM...............................................................................................................................13
Estructura............................................................................................................................................15
Estructura mnima.....................................................................................................................15
Elementos de sintaxis................................................................................................................15
Operadores matemticos...........................................................................................................16
Operadores de comparacin......................................................................................................16
Operadores booleanos...............................................................................................................16
Operadores de punteros.............................................................................................................16
Operadores bit a bit...................................................................................................................17
Operadores compuestos............................................................................................................17
Estructuras de control................................................................................................................18
Variables.............................................................................................................................................19
Tipos de datos............................................................................................................................19
Constantes.................................................................................................................................20
Calificadores.............................................................................................................................21
Funciones............................................................................................................................................21
Entradas y salidas analgicas....................................................................................................23
Entradas y salidas avanzadas....................................................................................................25
Tiempo......................................................................................................................................26
Matemtica................................................................................................................................27
Trigonometra............................................................................................................................30
Caracteres..................................................................................................................................31
Nmeros aleatorios...................................................................................................................35
Bits y Bytes...............................................................................................................................36
Interrupciones externas.............................................................................................................39
Interrupciones............................................................................................................................40
Comunicacin...........................................................................................................................41
Librera Serial..................................................................................................................41
Seales digitales y analgicas............................................................................................................50
Objetivos...................................................................................................................................50
Marco terico............................................................................................................................50
Control de motores DC.......................................................................................................................51
Uso de libreras especializadas...........................................................................................................52
Programacin en Python para Arduino...............................................................................................53
Preliminares
Fundamentos de electrnica

Ley de Ohm
La ley de Omh viene dada por la siguiente relacin:
V =IR
Donde:
V es el voltaje [V]
I es la intensidad [A]
R es la resistencia []
Cuando se trabaja con corriente alterna, la ley se expresa de la siguiente manera:
V =IZ
Donde:
V es el fasor voltaje [V]
I es el fasor intensidad [A]
Z es la impedancia []

La potencia entregada a un elemento resistivo est dada por la siguiente ecuacin:

P=V I

Donde:

P es la potencia entregada [W]

V es el voltaje [V]

I es la intensidad [A]

La Figura 1 muestra las diferentes relaciones que existen entre las variables que intervienen en la
ley de Ohm y la potencia entregada a un elemento resistivo.
Figura 1. Ley de Ohm.
Circuitos resistivos

Resistencias en serie y divisores de tensin

La Figura 2 muestra un circuito con resistencias en serie y su resistencia equivalente; el clculo de


esta ltima se realiza con la Ecuacin 1.

Figura 2. Resistencia equivalente de resistencias en serie

Req =R1 + R2 +...+ Rn


Ecuacin 1

El voltaje presente en cada resistencia puede calcularse con la Ecuacin 2.

Rn
vn = v
R eq s
Ecuacin 2
Resistencias en paralelo y divisores de intensidad

La Figura 3 muestra un circuito con resistencias en paralelo; el clculo de la resistencia equivalente


se realiza con la Ecuacin 3.

Figura 3. Circuito con resistencias en paralelo.

1 1 1 1
= + +...+
R eq R 1 R2 Rn
Ecuacin 3

La intensidad presente en cada resistencia puede calcularse utilizando la ley de Ohm con la
Ecuacin 4.

Vs
I n=
Rn
Ecuacin 4

Resumen

El resumen de frmulas de este apartado se muestra en la Figura 4.


Figura 4. Resumen de frmulas.

Diodos

Diodo de propsito general

Un diodo es un dispositivo que permite el flujo de corriente en un solo sentido, el smbolo


representativo del diodo en esquemas electrnicos se muestra en la Figura 5.

Figura 5. Smbolo electrnico del diodo.

Cuando se le aplica un voltaje directo, permite el paso de corriente (Figura 6 a); si el voltaje
aplicado es inverso, impide el flujo de corriente (Figura 6 b).
Figura 6. Modo de operacin del diodo.

La Figura 7 muestra la relacin corriente voltaje en un diodo; se distinguen la regin de


polarizacin directa y la regin de polarizacin inversa.

En la regin de polarizacin directa el flujo de corriente en muy bajo antes del voltaje de umbral
(0.3 para diodos de germanio, 0.7 para diodos de silicio), despus del voltaje de umbral el flujo de
corriente aumenta significativamente y el diodo acta como un interruptor cerrado.

En la regin de polarizacin inversa, el diodo acta como un interruptor abierto hasta llegar a la
zona de ruptura donde se avera y pasa a ser un interruptor cerrado.
Figura 7. Relacin corriente voltaje en un diodo.
Diodo Zener

El diodo Zener, directamente polarizado se comporta como un diodo normal.


Cuando se polariza en forma inversa, mantiene un voltaje constante entre sus terminales para un
amplio rango de valores de corriente.
La utilizacin ms comn de estos dispositivos se da en circuitos reguladores de voltaje como el de
la Figura 8.

Figura 8. Circuito Regulador de


voltaje con diodo Zener.
El valor de la resistencia limitadora de corriente puede ser calculado con la Ecuacin 5; este valor
debe ser seleccionado para que siempre exista flujo de corriente a travs del diodo Zener.

(V 1V 2)
R=
(I z + I L )
Ecuacin 5
Donde:

IZ es la corriente Zener.

IL es la corriente de la carga.

Diodo LED

La Figura 9 muestra el smbolo electrnico de un diodo emisor de luz.

Figura 9. Diodo emisor de


luz.

Un LED debe tener una resistencia conectada en serie para limitar la corriente a travs de l, el
valor de la resistencia puede calcularse con la Ecuacin 6.

(V SV L )
R=
I
Ecuacin 6
Donde:
R es la resistencia del LED
VS es el voltaje de la fuente
VL es el voltaje del LED
I es la corriente a travs del LED

La Figura 10 muestra las caractersticas de varios LEDs comerciales.


Figura 10. Caractersticas de varios LEDs comerciales.

Los LED RGB son dispositivos que combinan un LED rojo, uno verde y uno azul; tienen dos
configuraciones: nodo comn y ctodo comn, que se muestran en la Figura 11.

Figura 11. Configuraciones de un LED RGB.

Transistores
Un transistor es un dispositivo utilizado para amplificar seales electrnicas.

Posee tres terminales: base, colector y emisor.

Existen dos configuraciones de transistores que se muestran en la Figura 12.


Figura 12. Configuraciones de un transistor.

En circuitos que utilizan microcontroladores, los transistores permiten manejar dispositivos que se
alimentan con corrientes mayores a las que las salidas del microcontrolador pueden entregar. La
Figura 13 muestra el diseo de un controlador de rel, pero puede utilizarse para cualquier carga.

Figura 13. Controlador de un rel basado


en un transistor NPN.

El procedimiento para seleccionar los componentes del controlador es el siguiente:

Determinar la corriente requerida por la carga.

Seleccionar un transistor que pueda manejar la corriente requerida, esta corresponde a la


corriente de colector IC.

Determinar la corriente de base IB con la Ecuacin 7.


I
I B= C
Ecuacin 7

Donde:

B es la ganancia del transistor

Calcular la resistencia de base RB con la Ecuacin 8.

V entrada
RB =
IB
Ecuacin 8

La terminal nombrada INPUT debe ir conectada a un pin digital de la tarjeta Arduino.

Optoacopladores
Un optoacoplador es un dispositivo de emisin y recepcin que funciona como un interruptor
activado mediante la luz emitida por un diodo LED que satura un componente optoelectrnico,
normalmente en forma de fototransistor o fototriac. Se combinan en un solo dispositivo
semiconductor, un fotoemisor y un fotorreceptor cuya conexin entre ambos es ptica. Estos
elementos se encuentran dentro de un encapsulado que por lo general es del tipo DIP. Se suelen
utilizar para aislar elctricamente a dispositivos muy sensibles. El smbolo electrnico de un
optoacoplador se muestra en la Figura 14. Un circuito tpico que utiliza un optoacoplador se
muestra en la Figura 15.

Figura 14. Smbolo electrnico del


optoacoplador.
Figura 15. Circuito electrnico con optoacoplador.

Seales digitales
Una seale digital puede presentar dos estados: HIGH o LOW. La Tabla 1 muestra las diferentes
equivalencias de los estados.

Tabla 1: Equivalencias de los estados de una seal digital


Nivel Valor de voltaje Valor lgico Valor cognitivo Cdigo de
mquina
HIGH 5V TRUE ON 1
LOW 0V FALSE OFF 0

Niveles lgicos

Los valores HIGH y LOW en las tarjetas Arduino no corresponden a 5 y 0V exactamente. Existen
voltajes de umbral desde los cuales una seal puede considerarse alta o baja; estos voltajes se
muestran en la Figura 16.
Figura 16. Valores
lgicos de las tarjetas
Arduino.

Seales analgicas
Una seal analgica puede tomar cualquier valor entre dos lmites. Para medir el valor de una seal
analgica, la tarjeta Arduino tiene un conversor A/D incorporado que transforma valores analgicos
de 0 a 5V en valores digitales de 0 a 1023.

Las tarjetas Arduino no poseen conversor D/A para entregar valores analgicos, pero los simula
gracias a una seal PWM; los valores analgicos de 0 a 5V se transforman en valores de 0 a 255
que representan 0 y 100% del ciclo PWM.

Seal PWM
Una seal PWM es un tren de pulsos de frecuencia constante, cuyo tiempo en alto puede variarse
desde 0 a 100% de su periodo tal como puede apreciarse en la Figura 17. Los valores
correspondientes a 0 y 100% son 0 y 255 en tarjetas Arduino. La frecuencia PWM en casi todos los
pines de las tarjetas es aproximadamente 490Hz.
Figura 17. Modulacin de ancho de pulso.
Descripcin de Arduino
El hardware de Arduino es una placa electrnica que permite el completo funcionamiento de un
microcontrolador AVR; posee los componentes necesarios para su funcionamiento, fuente de
alimentacin, terminales que facilitan la conexin con dispositivos externos y un mdulo de
comunicacin para PC.

El software de Arduino consiste en una IDE de fcil utilizacin con compilador integrado, basada
en los lenguajes C y C++, disponible para una gran variedad de plataformas y arquitecturas.

Arduino est diseado para ayudar a artistas, diseadores y creativos a desarrollar prototipos de
sistemas electrnicos.

Ventajas
Cdigo abierto (hardware y software)

Fcil de programar y utilizar

Amplia documentacin

Varios modelos

Gran cantidad de libreras

Shields y perifricos

La tarjeta trae el programador incorporado

Listo para utilizar

Fcil adquisicin
Caractersticas
Las caractersticas de tres modelos de tarjeta Arduino se muestran en la Tabla 2.

Tabla 2. Caractersticas de tres modelos de tarjeta Arduino.


Parmetro Nano UNO Mega 2560
Microcontrolador Atmel ATmega168 o ATmega328 ATmega328P ATmega2560
Voltaje de operacin 5V 5V 5V
Voltaje de entrada (recomendado) 7-12 V 7-12V 7-12V
Voltaje de entrada (lmites) 6-20 V 6-20V 6-20V
Entradas/salidas digitales 14 (6 proveen salidas PWM) 14 (6 proveen salidas PWM) 54 (15 proveen salidas PWM)
Entradas analgicas 8 6 16
Mxima corriente de terminal 40 mA 20 mA 20 mA
Mxima corriente de la fuente de 3.3V 50 mA 50 mA
16 KB (ATmega168) or 32 KB
32 KB (ATmega328P) 256 KB of which 8 KB used by
Memoria Flash (ATmega328) of which 2 KB used by
of which 0.5 KB used by bootloader bootloader
bootloader
1 KB (ATmega168) or 2 KB
Memoria RAM fija (SRAM) 2 KB (ATmega328P) 8 KB
(ATmega328)
512 bytes (ATmega168) or 1 KB
Memoria EEPROM 1 KB (ATmega328P) 4 KB
(ATmega328)
Velocidad de reloj 16 MHz 16 MHz 16 MHz
LED incorporado 13 13
Dimensiones 45x18 mm 68.6x53.4 mm 101.52x53.3 mm
Peso 5g 25 g 37 g
Distribucin de pines de Arduino UNO R3
La Figura 18 muestra la distribucin de pines de la tarjeta Arduino UNO R3.

Figura 18. Distribucin de pines de la tarjeta Arduino UNO R3.


Fundamentos de programacin
Estructura

Estructura mnima
Todo sketch debe contener las funciones setup y loop.

void setup()

Cdigo que se ejecuta una vez;

void loop()

Cdigo que se ejecuta cclicamente;

Elementos de sintaxis

Elemento Uso
; El punto y coma se coloca al final de cada instruccin

{
Las llaves son los lmites de un bloque de instrucciones.
}
// Marca el inicio de un comentario simple.

/*
Son los lmites de un bloque de comentario.
*/
Sustituye todas las apariciones del identificador por un valor determinado.

#define
Sintaxis:
#define identificador valor
#include Incluye el contenido de un archivo especificado en el programa actual.
Sintaxis:
#include <nombre_archivo>

Operadores matemticos

Operador Descripcin
= Operador de asignacin

+ Suma

- Resta

* Multiplicacin

/ Divisin. El resultado de esta operacin depende del tipo de datos que se utilicen.

% Mdulo. Calcula el residuo de la divisin.

Operadores de comparacin

Operador Descripcin
== Igual a

!= Diferente

< Menor a

> Mayor a

<= Menor o igual a

>= Mayor o igual a

Operadores booleanos

Operador Descripcin
&& AND

|| OR

! NOT

Operadores de punteros

Operador Descripcin
* Operador de indireccin: Devuelve el valor almacenado en la memoria a la que apunta.

& Operador de direccin: devuelve la direccin de almacenamiento de un objeto.


Operadores bit a bit

Operador Descripcin
& AND

| OR

^ XOR

~ NOT

<< Desplazamiento a la izquierda

>> Desplazamiento a la derecha

Operadores compuestos

Operador Descripcin
Incremento
Sintaxis:
++
x++ aumenta x en 1 y retorna el valor anterior de x
++x aumenta x en 1 y retorna el nuevo valor de x
Decremento
Sintaxis:
--
x-- decrementa x en 1 y retorna el valor anterior de x
--x decrementa x en 1 y retorna el nuevo valor de x
Adicin compuesta
+=
x += y es equivalente a x = x + y
Resta compuesta
-=
x -= y es equivalente a x = x - y
Multiplicacin compuesta
*=
x *= y es equivalente a x = x * y
Divisin compuesta
/=
x /= y es equivalente a x = x / y
Operacin mdulo compuesta
%
x %= y es equivalente a x = x % y
AND compuesta
&=
x &= y es equivalente a x = x & y
OR compuesta
|=
x |= y es equivalente a x = x | y
Estructuras de control

Estructura Descripcin
Sintaxis:
if (condicin)
{
sentencias;
if...else }
else
{
sentencias;
}
Sintaxis:
for (inicializacin; condicin; incremento)
for {
sentencias;
}
switch case Sintaxis:
switch (variable)
{
case valor1:
sentencias;
break;

case valor2:
sentencias;
break;

case valorN:
sentencias;
break;

default:
sentencias;
break;
}

Para declarar variables dentro de un caso es necesario utilizar llaves.

case valor1:
{
int a = 0;
sentencias;
break;
}
Se ejecuta cuando la condicin es verdadera.

Sintaxis:
while while (condicin)
{
sentencias;
}
Similar a while. La condicin es evaluada el final del lazo.

Sintaxis:
do...while do
{
sentencias;
} while (condicin)
Utilizada para terminar la ejecucin de las estructuras do, for, while y switch,
break
omitiendo la condicin de la estructura.
continue Omite el resto de sentencias de la estructura de control y salta a la siguiente iteracin
return Termina la ejecucin de una funcin y retorna un valor
goto Transfiere el flujo de un programa a un punto marcado por una etiqueta.

Variables

Tipos de datos

Tipo Bytes Rango Descripcin


int 2 -32768 a 32768 Nmeros enteros positivos y negativos.
unsigned int 2 0 a 65535 Nmeros positivos nicamente.
long 4 -2147483648 a 2147483648 Nmeros positivos y negativos.
unsigned long 4 4294967295 Nmeros positivos nicamente.
-3.4028235E+38 a
float 4 Nmeros reales.
3.4028235E+38
double 4 Igual que float Nmeros reales.
Verdadero (1)
boolean 1 Valores booleanos.
Falso (0)
Nmeros enteros positivos o negativos
char 1 -128 a 127
(representacin ASCII).
Nmeros enteros positivos (representacin
byte 1 0 a 255
binaria).
String Cadena de caracteres.
Utilizado nicamente para declarar funciones
void
que no devuelven valor alguno.

Constantes

Constante/s Descripcin
true / false Definicin de niveles lgicos.
HIGH / LOW Definicin del estado de un pin digital.
INPUT /
Definen el comportamiento de un pin como entrada o salida. INPUT
INPUT_PULLUP /
PULLUP permite utilizar las resistencias internas del microcontrolador.
OUTPUT
Hace referencia al pin que activa el LED incorporado en las tarjetas
LED_BUILTIN
Arduino.
Base Prefijo Ejemplo Comentario
10 Ninguno 123
Solo funciona con valores de 8 bits (0 a 255), son
2 B B1111001
validos los caracteres 0 y 1.
Constantes enteras 8 0 0173 Son validos los caracteres 0 7.
16 0x 0x7B Son validos caracteres del 0 9 y A F.
U Formato unsigned.
Formato long. Al realizar operaciones con datos long, al menos uno
L
debe estar acompaado por L.
Constantes reales E / e Representacin de notacin cientfica.
Calificadores

Calificador Uso
Crea variables visibles para una sola funcin. A diferencia de las variables locales, que
static se crean y destruyen en cada vez que se llama a la funcin, las variables estticas
preservan su valor entre las llamadas.
Las variables declaradas dentro de una interrupcin deben ser declaradas como
voltiles.
volatile

Sintaxis: volatile tipo_variable variable


Sustituye todas las apariciones de la variable por un valor determinado.
const
Sintaxis: const tipo_variable variable = valor

Funciones
Funcin Descripcin
pinMode() Configura un determinado pin como entrada o salida.

Sintaxis:
pinMode(pin, modo)

Parmetros:
pin: el nmero de pin cuyo modo se desee establecer.
modo: INPUT / INPUT_PULLUP / OUTPUT.

Retorno:
Ninguno.

Nota:
Los pines configurados como INPUT presentan alta impedancia por lo que
pueden leer seales dbiles pero a la vez son sensibles al ruido. Se
recomienda utilizar una resistencia pull up o pull down para definir un
estado en ausencia de seales de entrada.
En los pines configurados como INPUT_PULLUP, una resistencia pull up
que vara entre 10 y 50k es activada.
Los pines configurados como OUTPUT presentan baja impedancia y
pueden proveer una corriente mxima de 40 mA. Es recomendable conectar
estos pines a travs de una resistencia de 470 o 1k.
Escribe HIGH o LOW en un pin digital.

Sintaxis:
digitalWrite(pin, valor)

Parmetros:
valor: HIGH/LOW

digitalWrite()
Retorno:
Ninguno.

Nota:
Si el pin est configurado como entrada, digitalWrite() activar (HIGH) o
desactivar (LOW) la resistencia interna del pin.
Cuando el pin este configurado como salida, su voltaje ser de 5V (HIGH) o 0V
(LOW).
Lee el valor de un pin digital: HIGH o LOW

Sintaxis:
digitalRead(pin)

Parmetros:
pin: el nmero del pin digital que se desee leer (int).
digitalRead()

Retorno:
HIGH o LOW.

Nota:
Si el pin no est conectado, digitalRead() puede retornar HIGH o LOW
aleatoriamente.
Entradas y salidas analgicas

Funcin Descripcin
analogReference() Configura el valor de referencia de las entradas analgicas.

Sintaxis:
analogReference(opcin)

Parmetros:
Las opciones disponibles son:
DEFAULT: referencia analgica por defecto 5V en las placas de 5V y
3.3V en las placas de 3.3V.
INTERNAL: referencia incorporada de 1.1V en los microcontroladores
ATmega168, ATmega328 y 2.56V en el ATmega8 (no disponible en el
Arduino Mega).
INTERNAL1V1: referencia incorporada de 1.1V (Arduino Mega
nicamente).
INTERNAL2V56: referencia incorporada de 2.56V (Arduino Mega
nicamente).
EXTERNAL: la referencia corresponde al valor aplicado al pin AREF
(0 a 5V nicamente).

Retorno:
Ninguno.

Nota:
Despus de cambiar la referencia analgica, las primeras lecturas de
AnalogRead() podran no ser precisas.

Advertencia:
No aplicar menos de 0V o ms de 5V al pin AREF. Es necesario declarar la
referencia externa antes de llamar a analogRead()

Alternativamente, es posible conectar el voltaje de referencia externa al pin


AREF a travs de una resistencia de 5k, permitiendo alternar entre los
voltajes de referencia interna y externa. Ntese que el uso de esta resistencia
altera el valor del voltaje de referencia ya que el pin AREF est conectado a
una resistencia de 32k formndose un divisor de tensin.
Lee el valor de un pin analgico.

Sintaxis:
analogRead(pin)

Parmetros:
pin: el nmero de la entrada analgica a ser leda: 0 5 para la mayora de
tarjetas, 0 7 para Mini y Nano y 0 15 para Mega.

Retorno:
valor entre 0 y 1023 (int).
analogRead()

Nota:
Cada pin analgico est formado por un conversor A/D de 10 bits, por
lo que es posible convertir valores de voltaje entre 0 y 5 a valores
enteros entre 0 y 1023; sin embargo, es posible cambiar la escala de
conversin utilizando analogReference().
Toma alrededor de 100 microsegundos leer una entrada analgica por
lo que es posible realizar hasta 10000 lecturas por segundo.
Si el pin no est conectado, el valor retornado por analogRead()
fluctuar en base a una serie de factores tales como los valores de otras
entradas analgicas y cargas elctricas cercanas.
analogWrite() Escribe un valor PWM en un pin. Despus de la llamada a analogWrite(), el
pin generar una seal PWM con el ciclo de trabajo especificado.

Sintaxis:
analogWrite(pin, valor)

Parmetros:
pin: nmero de pin en el que se va a escribir.
valor: ciclo de trabajo de la seal PWM (0 225)
Retorno:
Ninguno.

Nota:
La frecuencia PWM en casi todos los pines es aproximadamente 490Hz. En el
Arduino UNO y similares, los pines 5 y 6 tienen una frecuencia aproximada de
980Hz.

Entradas y salidas avanzadas

Funcin Descripcin
pulseIn() Retorna el tiempo en microsegundos que ha durado un pulso aplicado a un pin o 0 si el
pulso no se ha completado dentro del tiempo de espera (timeout).

Sintaxis:
pulseIn(pin, valor)
pulseIn(pin, valor, timeout)

Parmetros:
pin: nmero de pin en el que se va a realizar la lectura del pulso (int).
valor: este parmetro tiene dos opciones:
HIGH
Espera a que el pin pase a alto.
Empieza a contar.
Espera a que el pin pase a bajo.
Termina de contar.
LOW
Espera a que el pin pase a bajo.
Empieza a contar.
Espera a que el pin pase a alto.
Termina de contar.
timeout: parmetro opcional que establece el tiempo de espera en microsegundos; el
valor por defecto es 1 segundo (unsigned long).

Retorno:
La duracin del pulso en microsegundos o 0 si no se ha completado el pulso durante el
tiempo de espera (unsigned long).

Tiempo

Funcin Descripcin
Retorna el nmero de milisegundos desde que la tarjeta Arduino empez a
ejecutar el programa. Este valor se reinicia despus de 50 das
aproximadamente.

Sintaxis:
millis()
millis()
Parmetros:
Ninguno

Retorno:
Nmero de milisegundos que desde que el programa empez a ejecutarse
(unsigned long).
Retorna el nmero de microsegundos desde que la tarjeta Arduino empez a
ejecutar el programa. Este nmero se reinicia despus de 70 minutos
aproximadamente.

Sintaxis:
micros()
micros()
Parmetros:
Ninguno

Retorno:
Nmero de microsegundos que desde que el programa empez a ejecutarse
(unsigned long).
delay() Pausa la ejecucin del programa por una cantidad de milisegundos dada.

Sintaxis:
delay(milisegundos)
Parmetros:
Milisegundos (formato unsigned long)

Retorno:
Ninguno
Pausa la ejecucin del programa por una cantidad de microsegundos dada.

Sintaxis:
delayMicroseconds(microsegundos)

Parmetros:
delayMicroseconds() Microsegundos (formato unsigned int)

Retorno:
Ninguno

Nota:
El valor ms grande que producir una pausa precisa es 16383.

Matemtica

Funcin Descripcin
min() Calcula el menor de dos nmeros dados.

Sintaxis:
min(valor_1, valor_2)

Parmetros:
valor_1: nmero de cualquier tipo
valor_2: nmero de cualquier tipo

Retorno:
El menor de dos nmeros dados.

Nota:
Evtese utilizar funciones dentro de los parntesis de esta funcin.
Calcula el mayor de dos nmeros dados.

Sintaxis:
max(valor_1, valor_2)

Parmetros:
valor_1: nmero de cualquier tipo
max()
valor_2: nmero de cualquier tipo

Retorno:
El mayor de dos nmeros dados.

Nota:
Evtese utilizar funciones dentro de los parntesis de esta funcin.
Calcula el valor absoluto un nmero dado.

Sintaxis:
abs(valor)

Parmetros:
abs() valor: nmero de cualquier tipo

Retorno:
El valor absoluto de un nmero dado.

Nota:
Evtese utilizar funciones dentro de los parntesis de esta funcin.
constrain() Restringe un nmero dentro de un rango.

Sintaxis:
constrain(valor, lmite_inferior, lmite_superior)

Parmetros:
valor: nmero de cualquier tipo.
lmite_inferior: lmite inferior del rango.
lmite_superior: lmite superior del rango.

Retorno:
El mismo nmero si se encuentra dentro del rango.
El lmite superior si el nmero es mayor al lmite superior.
El lmite inferior si el nmero es menor al lmite inferior.
Transforma linealmente un nmero desde una escala hacia otra.

Sintaxis:
map(valor, xL, yH, xL, yH)

map()

Parmetros:
valor: nmero a transformar.
xL: lmite inferior inicial.
xH: lmite superior inicial.
yL: lmite inferior final.
yH: lmite superior final.

Retorno:
El nmero transformado.
Calcula el valor de un nmero elevado a una potencia

Sintaxis:
pow(base, exponente)

pow() Parmetros:
base: nmero tipo float
exponente: nmero tipo float

Retorno:
Resultado de la exponenciacin (float)
Calcula la raz cuadrada de un nmero dado.

Sintaxis:
pow(valor)

sqrt()
Parmetros:
valor: nmero de cualquier tipo

Retorno:
Raz cuadrada del nmero dado (double)

Trigonometra

Funcin Descripcin
Calcula el seno de un ngulo dado en radianes.

Sintaxis:
sin(ngulo)

sin()
Parmetros:
ngulo: valor en radianes (float)

Retorno:
El seno del ngulo (double)
cos() Calcula el coseno de un ngulo dado en radianes.
Sintaxis:
cos(ngulo)

Parmetros:
ngulo: valor en radianes (float)

Retorno:
El coseno del ngulo (double)
Calcula la tangente de un ngulo dado en radianes.

Sintaxis:
tan(ngulo)

tan()
Parmetros:
ngulo: valor en radianes (float)

Retorno:
La tangente del ngulo (double)

Caracteres

Funcin Descripcin
Analiza si una variable almacena un carcter alfanumrico.

Sintaxis:
isAlphaNumeric(char)

isAlphaNumeric()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
isAlpha() Analiza si una variable almacena un carcter alfabtico.

Sintaxis:
isAlpha(char)

Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
Analiza si una variable almacena un carcter ASCII.

Sintaxis:
isAscii(char)

isAscii()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
Analiza si el carcter contenido en una variable es un espacio en blanco.

Sintaxis:
isAscii(char)

isWhitespace()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
isControl() Analiza si una variable contiene un carcter de control

Sintaxis:
isAscii(char)

Parmetros:
char: variable tipo char.
Retorno:
Verdadero o falso.
Analiza si una variable contiene un dgito.

Sintaxis:
isDigit(char)

isDigit()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
Analiza si una variable contiene un carcter imprimible.

Sintaxis:
isDigit(char)

isGraph()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
Analiza si una variable contiene una minscula.

Sintaxis:
isDigit(char)

isLowerCase()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
isPrintable() Analiza si una variable contiene un carcter imprimible.

Sintaxis:
isDigit(char)

Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
Analiza si una variable contiene un signo de puntuacin.

Sintaxis:
isDigit(char)

isPunct()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
Analiza si el contenido en una variable es un espacio.

Sintaxis:
isAscii(char)

isSpace()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.
isUpperCase() Analiza si una variable contiene una mayscula.

Sintaxis:
isDigit(char)

Parmetros:
char: variable tipo char.
Retorno:
Verdadero o falso.
Analiza si una variable contiene un nmero hexadecimal.

Sintaxis:
isDigit(char)

isHexdecimalDigit()
Parmetros:
char: variable tipo char.

Retorno:
Verdadero o falso.

Nmeros aleatorios

Funcin Descripcin
random() Genera nmeros seudo-aleatorios.

Sintaxis:
random(max)
random(min, max)

Parmetros:
min: lmite inferior (inclusivo)
max: lmite superior (exclusivo)

Retorno:
Nmero aleatorio entre los lmites inferior y superior.

Nota:
Esta funcin devuelve la misma lista de nmero aleatorios cada vez que el
microcontrolador se reinicia.
Causa que el generador de nmeros aleatorios se inicialice en una posicin
arbitraria de su secuencia. Esta funcin debe ser declarada antes de random().

Sintaxis:
randomSeed(semilla)

Parmetros:
semilla: nmero para inicializar el generador (int long).
randomSeed()
Retorno:
Ninguno

Notas:
Al utilizar est funcin junto con random(), se obtendr la misma lista de nmeros
aleatorios cada vez que el microcontrolador se reinicie.
Para modificar la lista cada vez que el microcontrolador se reinicie, se recomienda
emplear la lectura de un pin analgico que no se est utilizando como semilla.

Bits y Bytes

Funcin Descripcin
lowByte Extrae el bit bajo de una variable.

Sintaxis:
lowByte(x)

Parmetros:
x: variable de cualquier tipo.

Retorno:
Byte
Extrae el bit alto de una variable tipo word o el segundo ms bajo de una variable
ms larga.

Sintaxis:
highByte(x)
highByte
Parmetros:
x: variable de cualquier tipo.

Retorno:
Byte
Lee un bit de un nmero.

Sintaxis:
bitRead(x,n)

bitRead() Parmetros:
x: nmero a leer
n: posicin del bit a leer (0 es la posicin del bit menos significativo).

Retorno:
El valor del bit.
bitWrite() Escribe el valor de un bit de una variable numrica.

Sintaxis:
bitWrite(x,n,b)

Parmetros:
x: variable numrica en la que se va a escribir.
n: posicin del bit en el que se va a escribir (0 es la posicin del bit menos
significativo).
b: valor a escribir (0 o 1)

Retorno:
Ninguno
Escribe 1 en un bit de una variable numrica.

Sintaxis:
bitSet(x,n)

Parmetros:
bitSet()
x: variable numrica en la que se va a escribir.
N: posicin del bit en el que se va a escribir (0 es la posicin del bit menos
significativo).

Retorno:
Ninguno
Escribe 0 en un bit de una variable numrica.

Sintaxis:
bitSet(x,n)

Parmetros:
bitClear()
x: variable numrica en la que se va a escribir.
n: posicin del bit en el que se va a escribir (0 es la posicin del bit menos
significativo).

Retorno:
Ninguno
bit() Calcula el valor de un bit especfico.

Sintaxis:
bit(n)
Parmetros:
n: posicin del bit cuyo valor va a calcularse (0 es la posicin del bit menos
significativo).

Retorno:
Ninguno

Interrupciones externas

Funcin Descripcin
attachInterrupt Configura una interrupcin.

Sintaxis:
attachInterrup(interrupcin, ISR, modo)

Parmetros:
interrupcin: nmero de la interrupcin.

ISR (Interrupt Service Routine): Funcin que se ejecuta cuando la


interrupcin se dispara. Est funcin no recibe parmetros y no tiene
retorno.
modo: define el evento que dispara la interrupcin, los valores aceptados
son:
LOW: dispara la interrupcin cunado el pin est en bajo.
CHANGE: dispara la interrupcin cuando el pin cambia de valor.
RISING: dispara la interrupcin cuando el pin pasa de bajo a alto.
FALLING: dispara la interrupcin cuando el pin pasa de alto a bajo.
Retorno:
Ninguno

Notas:
Dentro de la ISR, delay() no funciona y el valor retornado por millis() no
incrementa.
Datos recibidos por el puerto serial mientras la funcin se ejecuta podran
perderse.
Todas las variables que se modifiquen dentro de la ISR deben ser
declaradas como volatile.
Desconecta una interrupcin.

Sintaxis:
detachInterrupt(interrupcin)

detachInterrupt
Parmetros:
interrupcin: nmero de la interrupcin.

Retorno:
Ninguno

Interrupciones

Funcin Descripcin
Activa las interrupciones previamente deshabilitadas por noInterrupts().

Sintaxis:
interrupts()

interrupts()
Parmetros:
Ninguno

Retorno:
Ninguno
noInterrupts() Desactiva las interrupciones previamente deshabilitadas por noInterrupts().

Sintaxis:
noInterrupts()

Parmetros:
Ninguno
Retorno:
Ninguno

Comunicacin

Librera Serial

Esta librera se utiliza para comunicar la tarjeta Arduino con computadoras u otros dispositivos.
Mientras la librera se est utilizando, los pines 0 (RX) y 1 (TX) no pueden ser utilizados como
entradas o salidas.

Funcin Descripcin
Indica si un puerto serial especifico est listo para la comunicacin.

Sintaxis:
if(Serial)

if(Serial)
Parmetros:
Ninguno

Retorno:
Valor booleano: verdadero si el puerto est preparado.
Captura el nmero de bytes disponibles para leer en el puerto serial (datos
que han arribado y han sido almacenados).

Sintaxis:
Serial.available()
available()
Parmetros:
Ninguno

Retorno:
El nmero de bytes disponibles para leer.
availableForWrite() Obtiene el nmero de bytes disponibles para escribir en el buffer sin bloquear
la operacin de escritura.
Sintaxis:
Serial.availableForWrite()

Parmetros:
Ninguno

Retorno:
Nmero de bytes disponibles para escribir.
begin() Indica la velocidad de transferencia de datos en bits por segundo (baudios)
para la transmisin serial de datos.

Sintaxis:
Serial.begin(velocidad)
Serial.begin(velocidad, config)

Parmetros:
velocidad: velocidad de transferencia de datos en baudios; para la
comunicacin con computadoras debe utilizarse uno de los siguientes
valores:
300
600
1200
2400
4800
9600
14400
19200
28800
38400
57600
115200
config: parmetro opcional para configurar los bits de datos, paridad y
bits de parada; valores por defecto son: 8 bits, sin paridad y 1 bit de
parada; pueden especificarse los siguientes valores:
SERIAL_5N1
SERIAL_6N1 SERIAL_7N1 SERIAL_8N1 (valor por defecto)
SERIAL_5N2
SERIAL_6N2
SERIAL_7N2
SERIAL_8N2
SERIAL_5E1
SERIAL_6E1
SERIAL_7E1
SERIAL_8E1
SERIAL_5E2
SERIAL_6E2
SERIAL_7E2
SERIAL_8E2
SERIAL_5O1
SERIAL_6O1
SERIAL_7O1
SERIAL_8O1
SERIAL_5O2
SERIAL_6O2
SERIAL_7O2
SERIAL_8O2

Retorno:
Ninguno
end() Desactiva la comunicacin serial.

Sintaxis:
Serial.end()

Parmetros:
Ninguno
Retorno:
Ninguno
Lee los datos del buffer hasta encontrar una cadena de caracteres indicada;
retorna verdadero si la cadena se encuentra o falso si no se encuentra dentro
de un plazo establecido.

Sintaxis:
Serial.find(objetivo)
find()

Parmetros:
objetivo: cadena de caracteres a buscar (char)

Retorno:
booleano
Lee los datos del buffer hasta encontrar una cadena de caracteres indicada o
la cadena de caracteres indicada como fin.

Sintaxis:
Serial.findUntil(objetivo, fin)

findUntil()
Parmetros:
objetivo: cadena que caracteres a buscar (char)
fin: cadena de caracteres que marca el fin (char)

Retorno:
booleano
flush() Limpia el buffer una vez que todos los caracteres de salida han sido enviados.
parseFloat() Busca el primer nmero en coma flotante (float) vlido a partir de la posicin
actual. Los caracteres iniciales que no son dgitos (o el signo menos) son
ignorados. parseFloat() termina cuando se encuentra el primer carcter que no
es un nmero en coma flotante.

Sintaxis:
Serial.parseFloat()
Parmetros:
Ninguno

Retorno:
Float
Busca el primer nmero entero (int) vlido a partir de la posicin actual. Los
caracteres iniciales que no son dgitos (o el signo menos) son ignorados.
parseFloat() termina cuando se encuentra el primer carcter que no es un
dgito.

Sintaxis:
Serial.parseInt()
parseInt()
Serial.parseInt(char skipChar)

Parmetros:
skipChar: argumento opcional que indica un carcter a ser ignorado.

Retorno:
Long
Retorna el siguiente byte (carcter) de datos seriales sin removerlo del buffer
interno.

Sintaxis:
Serial.peek()
peek()
Parmetros:
Ninguno

Retorno:
El siguiente byte o -1 si no hay bytes disponibles.
print() Imprime datos en el puerto serial en formato texto ASCII. Esta funcin puede
tomar diferentes formas. Los nmeros se imprimen usando un carcter ASCII
para cada dgito. Lo mismo sucede con los nmeros en coma flotante (que
por defecto se imprimen con dos decimales). Bytes se imprimen como
caracteres individuales. Caracteres y cadenas de caracteres se imprimen tal
como son.
El segundo parmetro de esta funcin especifica la base (formato) usado. Los
valores permitidos son: BIN (binario, o base 2), OCT (octal, o base 8), DEC
(decimal, o base 10), HEX (hexadecimal, o base 16). Para nmeros en coma
flotante, este parmetro especifica el nmero de lugares decimales que se van
a usar.

Sintaxis:
Serial.print(val, formato).

Parmetros:
val: el valor a imprimir (cualquier tipo de dato).
formato: parmetro opcional que especifica la base (para enteros) o el nmero
de decimales (para flotantes).

Retorno:
size_t (long): print() devuelve el nmero de bytes escritos, aunque leer este
nmero es opcional.
Imprime datos en el puerto serial en formato texto ASCII. La impresin
termina con un retorno de carro (carriage return). Esta funcin usa las mismas
modalidades que Serial.print().

Sintaxis:
Serial.print(val, formato).

println() Parmetros:
val: el valor a imprimir (cualquier tipo de dato).
formato: parmetro opcional que especifica la base (para enteros) o el nmero
de decimales (para flotantes).

Retorno:
size_t (long): print() devuelve el nmero de bytes escritos, aunque leer este
nmero es opcional.
read() Lee los datos de entrada presentes en el puerto serial.
Sintaxis:
Serial.print(val, formato).

Parmetros:
Ninguno

Retorno:
El primer byte de entrada disponible o -1 si no existen datos disponibles.
Lee caracteres del puerto serie y los deposita en un vector. La funcin termina
cuando el nmero de caracteres especificados han sido ledos o cuando el
tiempo de espera ha sido agotado.
Serial.readBytes() devuelve el nmero de caracteres depositados en el buffer.
Un 0 significa que no se pudieron leer datos vlidos

Sintaxis:
readBytes() Serial.readBytes(buffer, length)

Parmetros:
buffer: el vector dnde se almacenarn los bytes (char[] o byte[])
length: el nmero de byte a leer (int)

Retorno:
Byte
readBytesUntil() Lee caracteres del buffer serial y los deposita en un vector. La funcin
termina si: a) el carcter especificado ha sido encontrado (character), b) se ha
ledo el nmero de caracteres especificados (lenght) o c) el tiempo mximo
de lectura ha expirado (ver la funcin setTimeout()). readBytesUntil()
devuelve el nmero de bytes depositado en el buffer. Un 0 significa que no se
encontraron datos vlidos en la entrada.

Sintaxis:
Serial.readBytes(character, buffer, length)

Parmetros:
character: el carcter a buscar (char)
buffer: el vector dnde se almacenarn los bytes (char[] o byte[])
length: el nmero de byte a leer (int)

Retorno:
Byte
Lee caracteres desde el buffer serial y los almacena en una cadena de
caracteres (string). La funcin termina cuando el tiempo de espera se agota.

Sintaxis:
Serial.readString()
readString()
Parmetros:
Ninguno

Retorno:
Cadena leda desde el buffer serial.
Lee caracteres desde el buffer serial y los almacena en una cadena de
caracteres (string). La funcin termina cuando el carcter finalizador es
detectado o el tiempo de espera se agota.

Sintaxis:
Serial.readString(finalizador)
readStringUntil()

Parmetros:
finalizador: carcter a buscar para finalizar la funcin (char)

Retorno:
Cadena leda desde el buffer serial.
setTimeout() Establece el mximo de milisegundos a esperar por datos de entrada del
puerto serial.

Sintaxis:
Serial.setTimeout(tiempo)

Parmetros:
tiempo: tiempo de espera en milisegundos (long)

Retorno:
Ninguno
Escribe datos binarios en el puerto serial. Este dato es como un byte o series
write() de bytes. Para enviar los caracteres que representan los dgitos de un nmero
se debe utilizar la funcin print().
Esta funcin es llamada cuando existen datos disponibles en el puerto serial.
Para capturar los datos debe utilizarse Serial.read().

Sintaxis:
void serialEvent(){
instrucciones;
serialEvent() }

Parmetros:
instrucciones: cualquier instruccin vlida.

Retorno:
Ninguno
Prcticas
Puertos digitales
Puertos analgicos
Entradas y salidas avanzadas
El sensor ultrasnico HC-SR04

El sensor ultrasnico HC-SR04 utiliza un sonar para determinar su distancia a un objeto.

La operacin de este sensor no se ve afectada por la luz solar o superficies oscuras como en los
sensores infrarrojos.

Ciertos materiales que absorben ondas sonoras pueden ser difciles de detectar.

Tiene incorporado tanto el transmisor como el receptor.

Caractersticas:

Alimentacin: 5V.

Corriente de trabajo: 15 mA.

Rango de deteccin: 2 400 cm.

ngulo de medicin: 30.

Resolucin: 0.3 cm.

Ancho de pulso de disparo: 10us.

Para un mejor desempeo del sensor, las superficies deben ser de al menos 0.5 m2.

Operacin del sensor HC-SR04

Para iniciar la medicin, el pin TRIG necesita recibir un pulso en alto de al menos 10us; as el
sensor empezar a transmitir una rfaga ultrasnica de 8 ciclos a 40kHz y esperar por la rfaga
reflejada, a continuacin el pin ECHO cambiar su estado a alto y se mantendr as por un tiempo
proporcional a la distancia. Para calcular la distancia se debe utilizar el tiempo en alto del pin
ECHO:

t
d (cm)=
58

t
d (inch)=
148

Diagrama de conexin

Cdigo

int Trigger = 2; // TRIGGER del sensor

int Echo = 3; // ECHO del sensor


void setup() {

Serial.begin(9600); // inicio de la comunicacin serial

pinMode(Trigger, OUTPUT) ; // pin como salida

pinMode(Echo, INPUT); // pin como entrada

digitalWrite(Trigger, LOW); // inicializacin del pin con 0

void loop()

long t; // tiempo de vuelo

long d; // distancia en centimetros

digitalWrite(Trigger, HIGH);

delayMicroseconds(10); //envo de un pulso de 10us

digitalWrite(Trigger, LOW);

t = pulseIn(Echo, HIGH); //se obtiene el ancho del pulso

d = t/58; //clculo de la distancia en cm

Serial.print("Distancia: ");

Serial.print(d); // impresin de la distancia

Serial.print("cm");

Serial.println();

delay(100);
}
Interrupciones
Cuando un evento dispara una interrupcin, la ejecucin del programa se suspende para ejecutar
una funcin especial denominada ISR (Interrupt Service Routine). Cuando la ISR termina, el
procesador vuelve al punto donde se detuvo la ejecucin.
Rebote en interruptores mecnicos
Al activar y desactivar un interruptor mecnico, se produce el siguiente efecto en la seal su seal
de salida:

Contador sin antirebote


Diagrama de conexin

Cdigo
int s = 2;
volatile int contador = 0;

void setup(){
Serial.begin(9600);
pinMode(s, INPUT);
attachInterrupt(0, encoder, RISING);
}

void loop(){
Serial.println(contador);
}
void encoder(){
contador++;
}

Contador con antirebote (software)


Diagrama de conexin

Cdigo
int s = 2, time = 20;
volatile long t0 = 0, t1 = 0;
volatile int contador = 0;

void setup(){
Serial.begin(9600);
pinMode(s, INPUT);
attachInterrupt(0, encoder, RISING);
}
void loop(){
Serial.println(contador);
}
void encoder(){
t0 = t1;
t1 = millis();
if (t1 - t0 > 200){
contador++;
}
}

Contador con antirebote (hardware)


Diagrama de conexin

Cdigo
int s = 2;
volatile int contador = 0;

void setup(){
Serial.begin(9600);
pinMode(s, INPUT);
attachInterrupt(0, encoder, RISING);
}

void loop(){
Serial.println(contador);
}
void encoder(){
contador++;
}

Encoder
Un encoder es un dispositivo capaz de medir el desplazamiento y velocidad angular de un eje. Los
ejemplares ms utilizados son los pticos. Un encoder ptico es un cortador de luz que produce
estados de alto y bajo cuando el eje al que est adaptado se mueve. Este dispositivo est compuesto
de una fuente de luz, una mscara codificadora de luz, un disco ranurado y detectores de luz. La
resolucin de un encoder se mide en pulsos por revolucin (ppr)

Seales del encoder


Control motores DC
Puente H

Arreglo de interruptores que permiten invertir el sentido de giro de un motor.

Driver L298N
Este mdulo basado en el chip L298N permite controlar dos motores de corriente continua o un
motor paso a paso bipolar de hasta 2 amperios.

El mdulo cuenta con todos los componentes necesarios para funcionar sin necesidad de elementos
adicionales, entre ellos diodos de proteccin y un regulador LM7805 que suministra 5V a la parte
lgica del integrado L298N. Cuenta con jumpers de seleccin para habilitar cada una de las salidas
del mdulo (A y B). La salida A esta conformada por OUT1 y OUT2 y la salida B por OUT3 y
OUT4. Los pines de habilitacin son ENA y ENB respectivamente.

En la parte inferior se encuentran los pines de control del mdulo, marcados como IN1, IN2, IN3 e
IN4.
Conexin de alimentacin
Este mdulo se puede alimentar de 2 maneras gracias al regulador integrado LM7805.
Cuando el jumper de seleccin de 5V se encuentra activo, el mdulo permite una alimentacin de
entre 6V a 12V DC. Como el regulador se encuentra activo, el pin marcado como +5V actuar
como fuente de voltaje de 5V DC.

Cuando el jumper de seleccin de 5V se encuentra inactivo, el mdulo permite una alimentacin de


entre 12V a 35V DC. Como el regulador no esta funcionando, es necesario conectar el pin de +5V a
una tensin de 5V para alimentar la parte lgica del L298N.

Control de un motor DC variando su velocidad


Si se requiere controlar la velocidad del motor, es necesario utilizar una seal PWM. Este PWM
ser aplicado a los pines de activacin de cada salida o pines ENA y ENB respectivamente, por
tanto los jumper de seleccin no sern usados.
Cdigo
/*
Ejemplo de control de motor DC usando modulo L298
http://electronilab.co/tienda/driver-dual-para-motores-full-bridge-l298n/

Creado 16/05/14
por Andres Cruz
ELECTRONILAB.CO
*/

int IN3 = 5; // Input3 conectada al pin 5


int IN4 = 4; // Input4 conectada al pin 4
int ENB = 3; // ENB conectada al pin 3 de Arduino
void setup()
{
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
//Preparamos la salida para que el motor gire en un sentido
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 2 seg aumenta la velocidad
analogWrite(ENB,55);
delay(2000);
analogWrite(ENB,105);
delay(2000);
analogWrite(ENB,255);
delay(2000);
// Apagamos el motor y esperamos 5 seg
analogWrite(ENB,0);
delay(5000);
}

Control del motor a pasos 28BYJ-48


Los motores paso a paso pueden ser bipolares o unipolares. En la figura se muestra la conexin de
un motor paso a paso bipolar, sin embargo este driver es capaz de controlar un motor paso a paso
unipolar si se conecta en configuracin bipolar, obviando los cables del tab central de las bobinas
del motor. El mximo consumo permitido es de 2 amperios.

El esquema de conexin muestra la conexin utilizada entre el modulo L298N y el motor paso a
paso. Cada una de las bobinas del motor esta conectada a una salida del mdulo. Para identificar las
bobinas de un motor paso a paso utilizamos un multmetro en modo de continuidad. Los cables que
dan continuidad son los extremos de cada bobina.

Para el control del motor 28BYJ-48 se utiliza la placa L298N cuyas 4 terminales de salida: OUT1,
OUT2, OUT3 y OUT4, se conectan a los cables del motor de acuerdo con el siguiente diagrama:
Las entradas de las tarjeta L298N: IN1, IN2, IN3 e IN4 deben conectarse a las terminales digitales
8, 9, 10 y 11 de la tarjeta Arduino. El voltaje de alimentacin debe regularse con ayuda de los pines
PWM
Para desarrollar el programa debe atenderse a la secuencia mostrada en la siguiente tabla:

Cable Paso
Paso 1 2 3 4
completo
Medio 1 2 3 4 5 6 7 8
paso
Rojo 5V 5V 5V 5V 5V 5V 5V 5V
Naranja 0 0 0 0 0 1 1 1
Amarillo 0 0 0 1 1 1 0 0
Rosado 0 1 1 1 0 0 0 0
Azul 1 1 0 0 0 0 0 1

Para invertir el giro del motor se debe invertir la secuencia anterior.

Cdigo:
int coil1 = 8; // pines para las bobinas
int coil2 = 9;
int coil3 = 10;
int coil4 = 11;

int ena = 2; // control de voltaje


int enb = 3;

int delay_time = 5; // periodo correspondiente a la frecuencia

void setup(){
pinMode(coil1, OUTPUT);
pinMode(coil2, OUTPUT);
pinMode(coil3, OUTPUT);
pinMode(coil4, OUTPUT);
pinMode(ena, OUTPUT);
pinMode(enb, OUTPUT);

analogWrite(ena, 128);
analogWrite(enb, 128);

delay(3000);

forward(512);

reverse(1024);

void loop(){

void step1(){
digitalWrite(coil1, HIGH);
digitalWrite(coil2, LOW);
digitalWrite(coil3, LOW);
digitalWrite(coil4, LOW);
}

void step2(){
digitalWrite(coil1, HIGH);
digitalWrite(coil2, LOW);
digitalWrite(coil3, HIGH);
digitalWrite(coil4, LOW);
}

void step3(){
digitalWrite(coil1, LOW);
digitalWrite(coil2, LOW);
digitalWrite(coil3, HIGH);
digitalWrite(coil4, LOW);
}

void step4(){
digitalWrite(coil1, LOW);
digitalWrite(coil2, HIGH);
digitalWrite(coil3, HIGH);
digitalWrite(coil4, LOW);
}

void step5(){
digitalWrite(coil1, LOW);
digitalWrite(coil2, HIGH);
digitalWrite(coil3, LOW);
digitalWrite(coil4, LOW);
}

void step6(){
digitalWrite(coil1, LOW);
digitalWrite(coil2, HIGH);
digitalWrite(coil3, LOW);
digitalWrite(coil4, HIGH);
}

void step7(){
digitalWrite(coil1, LOW);
digitalWrite(coil2, LOW);
digitalWrite(coil3, LOW);
digitalWrite(coil4, HIGH);
}

void step8(){
digitalWrite(coil1, HIGH);
digitalWrite(coil2, LOW);
digitalWrite(coil3, LOW);
digitalWrite(coil4, HIGH);
}

void forward(int ppr){


for(int i = 0; i <= ppr; i++){
step1();
delay(delay_time);
step2();
delay(delay_time);
step3();
delay(delay_time);
step4();
delay(delay_time);
step5();
delay(delay_time);
step6();
delay(delay_time);
step7();
delay(delay_time);
step8();
delay(delay_time);
}
}

void reverse(int ppr){


for(int i = 0; i <= ppr; i++){
step8();
delay(delay_time);
step7();
delay(delay_time);
step6();
delay(delay_time);
step5();
delay(delay_time);
step4();
delay(delay_time);
step3();
delay(delay_time);
step2();
delay(delay_time);
step1();
delay(delay_time);
}
}
Libreras
Control de servomotores

Para posicionar un servomotor es necesario utilizar trenes de pulsos: la duracin de la seal en alto
informa al dispositivo qu posicin debe alcanzar. Para la mayora de servomotores, los valores
mostrados en la siguiente figura son ciertos.

Diagrama de conexin
a
La librera Servo
La librera Servo permite controlar de manera fcil un servomotor desde una tarjeta Arduino; posee
las siguientes funciones:

attach() Enlaza la variable Servo a una determinada terminal (pin).


servo.attach(pin).
servo es el nombre de la variable tipo Servo.
pin es el nmero de la terminal que se desee utilizar.
write() Indica la posicin en grados a la que se desea mover el eje del servomotor.
servo.write(angle).
servo es el nombre de la variable tipo Servo.
angle es el ngulo al que se desea mover el eje del servo entre 0 y 180.
writeMicroseconds() Indica el valor del tren de pulsos para el posicionamiento del eje del
servomotor.
servo.writeMicroseconds(uS)
servo es el nombre de la variable tipo Servo.
uS es el valor del tren de pulsos en microsegundos

Cdigo
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

modified on 8 Nov 2013


by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
#include <Servo.h>

Servo myservo; // creacin de un objeto tipo servo

int val; // variable para guardar el valor del potencimetro

void setup() {
myservo.attach(9); // enlaza la variable Servo al pin 9
}

void loop() {
val = analogRead(potpin); // lectura del valor del potencimetro
val = map(val, 0, 1023, 0, 180); // escalamiento de valores
myservo.write(val); // posicionamiento del servo
delay(100); // pausa
}
Pantallas de cristal lquido
Las siglas LCD significan Liquid Cristal Display o pantalla de cristal lquido. Es una pantalla
plana basada en el uso de una sustancia liquida atrapada entre dos placas de vidrio, haciendo pasar
por este una corriente elctrica a una zona especifica, para que as esta se vuelva opaca, y adems
cuenta (generalmente) con iluminacin trasera. Estos dispositivos tienen la capacidad de mostrar
cualquier carcter alfanumrico, permitiendo representar la informacin que genera cualquier
equipo electrnico de una forma fcil y econmica. El proceso de visualizacin es gobernado por un
microcontrolador incorporado a la pantalla, siendo el Hitachi 44780 el modelo de controlador ms
utilizado.

Distribucin de terminales

Terminal Nombre Descripcin


1 GND Tierra
2 VCC Voltaje de alimentacin (5V)
3 VEE Ajuste de contraste a travs de una resistencia variable
Seleccin de registro control/datos
4 RS RS = 0 seleccin de registro de control
RS = 1 seleccin de registro de datos
Seal de lectura/escritura
5 R/W R/W = 0 el mdulo LCD es escrito
R/W = 1 el mdulo LCD es ledo
6 EN Seal de activacin del mdulo LCD
EN = 0 mdulo desconectado
EN = 1 mdulo conectado
7 DB0
8 DB1
9 DB2
10 DB3 Bus de datos bidireccional. A travs de ests lneas se realiza la transferencia
11 DB4 de informacin entre el mdulo LCD y el controlador
12 DB5
13 DB6
14 DB7
15 LED+ Voltaje de alimentacin de iluminacin posterior
16 LED- Tierra de la iluminacin posterior (5V)

La librera LiquidCrystal

Esta librera permite manejar pantallas de cristal lquido de manera sencilla gracias a las siguientes
funciones:

Descripcin
Crea una variable de tipo LiquidCrystal. La pantalla puede ser controlada
utilizando 4 u 8 terminales. Si se utiliza la configuracin de 4 terminales, omitir
los pines D0 a D3. El pin RW puede conectarse a GND, en este caso se deber
excluir de los parmetros.
LiquidCrystal()
Sintaxis
Nombre_del_objeto LiquidCrystal(RS, EN, D4, D5, D6, D7)
Nombre_del_objeto LiquidCrystal(RS, RW, EN, D4, D5, D6, D7)
Nombre_del_objeto LiquidCrystal(RS, EN, D0, D1, D2, D3, D4, D5, D6, D7)
Nombre_del_objeto LiquidCrystal(RS, RW EN, D0, D1, D2, D3, D4, D5, D6,
D7)
Descripcin
Inicia la interfaz con la LCD y especifica sus dimensiones; requiere ser llamada
antes de cualquier otra instruccin de la librera.
begin()
Sintaxis
Nombre_del_objeto. begin(columnas, filas)
Descripcin
Limpia la pantalla y coloca el cursor en la esquina superior izquierda.
clear()
Sintaxis
Nombre_del_objeto. clear()
home() Descripcin
Coloca el cursor en la esquina superior izquierda.

Sintaxis
Nombre_del_objeto. home()
Descripcin
Coloca el cursor en una posicin determinada.
setCursor()
Sintaxis
Nombre_del_objeto. setCursor(columna, fila)
Descripcin
Escribe un carcter en la LCD.
write()
Sintaxis
Nombre_del_objeto. write(variable_tipo_char)
Descripcin
Escribe una cadena de caracteres en la LCD.
print()
Sintaxis
Nombre_del_objeto. print(cadena_de_caracteres)
Descripcin
Activa el desplazamiento automtico de la pantalla; esto causa que cada entrada
que se realice, saque la columna ms antigua de la pantalla.
autoscroll()
Sintaxis
Nombre_del_objeto. autoscroll()

Diagrama de conexin

Programacin en Arduino
El siguiente programa permite imprimir la frase Saludos ESPE! en la LCD.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);void setup()
{
lcd.print("Saludos ESPE!");
}
void loop() {}
Dispositivos I2C
IMU GY80
Unidad de medicin inercial. Incluye un giroscopio, acelermetro, brjula digital, y un sensor de
presin baromtrica / temperatura. Todos los sensores individuales son accesibles a travs de I2C
por lo que slo necesita 4 conexiones para acceder a todos los sensores: VCC, GND, SDA y SCL.
Giroscopio de 3 ejes: L3G4200D.

Acelermetro de 3 ejes: ADXL345.

Comps digital de e ejes: HMC5883L.

Sensor de presin baromtrica y temperatura BMP085.

Diagrama de conexin

Cdigo
ADXL345
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); // creacion del objeto

void setup(void)
{
Serial.begin(9600);
accel.begin();
accel.setRange(ADXL345_RANGE_16_G); // rango de operacin
}

void loop()
{
sensors_event_t event; // creacin del evento
accel.getEvent(&event);

Serial.print("x: "); Serial.println(event.acceleration.x);


Serial.print("y: "); Serial.println(event.acceleration.y);
Serial.print("z: "); Serial.println(event.acceleration.z);
Serial.println("");
delay(1000);
}

BMP085
#include <Wire.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

void setup() {
Serial.begin(9600);
bmp.begin();
}

void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");

// Calculate altitude assuming 'standard' barometric


// pressure of 1013.25 millibar = 101325 Pascal
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");

Serial.println();
delay(2000);
}

HMC5883
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>

Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

void setup()
{
Serial.begin(9600);
mag.begin();
}
void loop(void)
{
sensors_event_t event;
mag.getEvent(&event);

float heading = atan2(event.magnetic.y, event.magnetic.x);


float declinationAngle = 0.047; // valor para Cotopaxi
heading += declinationAngle;

// Correct for when signs are reversed.


if(heading < 0)
heading += 2*PI;
// Check for wrap due to addition of declination.
if(heading > 2*PI)
heading -= 2*PI;
// Convert radians to degrees for readability.
float headingDegrees = heading * 180/M_PI;

Serial.print("Heading (degrees): "); Serial.println(headingDegrees);

delay(500);
}

Vous aimerez peut-être aussi