Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROCONTROLADORES
Tutora
SANDRA ISABEL VARGAS LOPEZ
Alumno
Código
74270650
libre Arduino, en donde se desarrollan ejercicios de aplicación que permiten conocer las
partes fundamentales del hardware y las partes de desarrollo del software mediante la
aplicación de diseños de algoritmos que dan solución a las tareas propuestas, esto se
Arduino
es de código abierto, es decir que está basada en hardware y software libre; es decir
que el hardware y diagramas son de acceso público, El software libre son los
La placa Arduino cuenta con puertos de entrada, salida y comunicación. Por lo tanto,
Pines digitales, estos pueden configurarse como entrada (para lectura de pulsadores ,
interruptores, sensores, etc.), o como salida (para los actuadores, relé, drivers, led, etc.).
Pines analógicos de entrada: estos pines usan un conversor analógico/digital y se usan para leer
sensores analógicos como sondas de temperatura, potenciómetros, sensor de presión, etc.
Pines analógicos de salida (PWM, estas salidas nos permiten modular la salida por el ancho de
pulso, por ello son bastante útiles en el momento de regular la velocidad de salida de motores,
servomotores, etc.
Puertos de comunicación: cuenta con puertos USB, serie, I2C y SPI, que permiten su
programación y comunicación con el computador y otros dispositivos.
A continuación, se muestra la imagen de una placa Arduino 1 con sus diferentes partes
Programación en Arduino
Estructura del programa
La estructura del lenguaje de programación en Arduino consta como mínimo de dos partes, que son
necesarias para que sea funcional, estas dos partes encierran bloques que contienen declaraciones o
instrucciones.
void setup() { estamentos; }
void loop() { estamentos;
En donde el void setup() es la parte que se encarga de recoger la configuración y el
La función void setup contiene la declaración de las variables, se usa para configurar o
serie y otras; es la primera función que se ejecuta en el programa, se ejecuta sólo una
void setup()
La función void (loop) siguiente contiene el código que se ejecutara continuamente (lee
entradas, activas salidas, etc.) Esta función es la más importante de todos los
siguiente:
void setup() {
Funciones
Una función es un bloque de código que con un nombre y un conjunto de códigos que
son ejecutados cuando se llama a la función. Setup() y loop() son funciones. Las
funciones de usuario se usan para realizar tareas repetitivas estas permiten reducir el
tipo entero, o si por ejemplo la función puede no devolver ningún valor (“void”), que
{ estamentos; }
{} Llaves
utilizan para los bloques de programación setup(), loop(), if., type funcion() {}, etc
Byte
Almacena un valor numérico de 8 bits sin decimales. Tienen un rango entre 0 y 255 byte
una Variable = 180; // declara ‘una Variable’ como tipo byte
Int
Variable tipo entero almacenan valores numéricos de 16 bits sin decimales comprendidos en el rango
32,767 to -32,768.
int unaVariable = 1500; // declara ‘unaVariable’ como una variable de tipo entero
Long
Es un formato de variable numérica de tipo extendido “long” se refiere a números enteros de 32 bits sin
decimales que se encuentran dentro del rango -2147483648 a 2147483647.
long unaVariable = 90000; // declara ‘unaVariable’ como tipo long
Float
Dato tipo “punto flotante” “float” se aplica a los números con decimales. Los números de punto
flotante tienen una mayor resolución que los de 32 bits con un rango comprendido 3.4028235E +38
a +38-3.4028235E.
Comparadores lógicos
Los operadores lógicos son usualmente una forma de comparar dos expresiones y devolver un
VERDADERO o FALSO dependiendo del operador. Existen tres operadores lógicos, AND, OR y
NOT,
Se usan en:
Estamentos de tipo
if
if (x > 0 && x < 5) // cierto sólo si las dos expresiones son ciertas
OR
if (x > 0 || y > 0) // cierto si una cualquiera de las expresiones es cierta
NOT
Constantes
Estas son constantes booleanas que definen los niveles HIGH (alto) y LOW (bajo) cuando los se
refieren al estado de las salidas digitales.
If (b == true){
Ejecutar acciones
}.
HIGH/LOW
Estas constantes definen la salida como altos o bajos, un alto equivale a un 1(5 voltios), mientras
que un bajo equivale a un 0 (0 voltios).
INPUT/OUTPUT
Estas constantes se usan para definir al inicio del programa el modo en que funcionaran los
pines, es decir como entrada o como salida, su escritura es la siguiente:
If (si)
Este estamento se usa para verificar si una determinada condición se cumple o no, se pueden
ejecutar una serie de declaraciones o tareas si esta condición se cumple, estas deben ir dentro de
llaves{}. Ejemplo
If (variable == VALOR)
// ejecutar instrucciones
}
Si las condiciones expresadas dentro del parentesis se cumplen, se ejecutan las instrucciones
dentro del parentesis.
If/else
Esta estructura ejecuta dos tareas, una si la condición se cumple y otra si la condición no se
cumple, ejemplo
If (inputPin1 ==HIGH)
Else
For
La declaración ‘for’ se usa para repetir un bloque de instrucciones que están dentro de {}
determinado número de veces. La condición for debe cumplir con las siguientes condiciones:
Ejecutar Instrucciones;
}
While
Instrucciones
digitalRead
Lee el valor de un pin ( digital) y da un resultado HIGH (alto) o LOW (bajo). Este pin se puede
especificar como una variable o como una constante (0-13 para Arduino 1).
valor = digitalRead(Pin); // hace que ‘valor sea igual al estado leído en ´Pin´
digitalWrite
analogRead
Lee el valor de un pin definido como entrada analógica con una resolución de 10 bits. La
instrucción sólo funciona en los pines (0-5). El rango de valor que podemos leer oscila de 0 a 1023,
estos pines no necesitan ser declarados como INPUT o UOTPUT
analogWrite
Esta instrucción sirve para escribir un valor analógico utilizando el procedimiento de modulación
PWM ( ancho de pulso) a uno de los pines del Arduino marcados como “pin PWM”.
Entrada digital
Salida digital
Entrada de potenciómetro
Entrada analógica (entrada conectada a una resistencia variable)
Para el desarrosllo de el presente trabajo se usaron os siguientes sensores a los que haremos
referencia en este apartado
Sensor PIR
Los sensores infrarrojos pasivos (PIR) son dispositivos para la detección de movimiento, Los sensores
PIR se basan en la medición de la radiación infrarroja . Todos los cuerpos (vivos o no) emiten
una cierta cantidad de energía infrarroja, mayor cuanto mayor es su temperatura. Los dispositivos PIR
disponen de un sensor piro eléctrico capaz de captar esta radiación y convertirla en una señal eléctrica.
Sensor ultrasónico
Los sensores ultrasónicos generan un sonido con una frecuencia ultrasónica (inaudible por el oído
humano) el cual al chocar con un objeto es devuelto y captado por el sensor, teniendo en cuenta la
velocidad del sonido y el tiempo que se demora en ir y volver el sonido es posible calcular la distancia a
la cual se encuentra el objeto.
Display de 7 segmentos
Desarrollo
Práctica 1:
cualquiera de sus modelos: Mega, Leonardo, Uno, De, Nano, etc. Con este dispositivo que se haya
seleccionado, se debe dar solución al siguiente
problema:
Se debe diseñar un contador utilizando 2 displays de 7 segmentos (El grupo escoge si
es de ánodo o cátodo común), para presentar el valor desde 0.0 hasta 9.9 cada
número del reloj es un display de 7 segmentos, debe tener un botón de inicio y parada.
Código en Arduino
Link video https://www.loom.com/share/9164ea3b5ab3451bb38d122e7ef192aa
Para el desarrollo de este ejercicio, se propone el desarrollo mediante el uso de la multiplexación y el
circuito integrado MAX 7219, ya que desarrollar el programa realizando arreglo para cada número, haría
el algoritmo demasiado extenso y dispendioso.
//MAX 7219
LedControl lc1 = LedControl (11,13,10,1); //crear objeto con nombre lc1 y usamos
// 11 pin data
//13 CLK MAX 7219
// 10 LOAD
conectados
void loop() {
segundos = millis ()/1000;
lc1.setDigit(0,0,segundos % 10, false); //funcion setDigit (No d dispositivo, digito, valor, valor logico) se
usa operador aritmético modulo, devuelve el consciente entre la división
lc1.setDigit(0,1,(segundos/10) % 10, false);
lc1.setDigit(0,2,(segundos/100) % 10, false);
lc1.setDigit(0,3,(segundos/1000)% 10, false);
delay (1000);
Práctica 2
Utilizando un sensor de Movimiento PIR con lente Fresnel detectar el movimiento de un objeto que se
encuentre en un espacio determinado (Pueden configurar dicho rango utilizando el Datasheet del
dispositivo), determinar con 3 leds a que distancia se encuentra del circuito, para ello van a utilizar un
sensor de ultrasonido que determina a que distancia se encuentra el objeto, para el LED verde es porque
el objeto se encuentra más lejos, para el LED amarillo el objeto se encuentra a una distancia media y
para el LED rojo es porque el objeto se encuentra muy cerca al circuito, el sensor de proximidad solo se
activa una vez el sensor PIR notifique que existe una presencia de un objeto en el espacio:
int ESTADO =0; // def de variable para almacenar valor leido estado sensor, 0,
int DISTANCIA;
void setup() {
// Inicalizar variables
pinMode(PIR, INPUT);
pinMode(LEDPIR, OUTPUT);
for(int i = 0; i > 30; i++) //Utilizamos un for para calibrar el sensor
delay(1000);
}
delay(50);
pinMode(TRIG, OUTPUT);
pinMode(ECO, INPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
Serial.begin(9600);
void loop() {
// en el sensor ultrasonido se debe enviar un pulso alto y luego uno bajo duración 1 milisegundo
ESTADO = digitalRead(PIR);
if (ESTADO == HIGH){ // si detecta movimineto el sensor PIR
digitalWrite(LEDPIR, LOW);
}
//sensor ultrasonido
do // Ciclo do while se ejecuta las lineas de codigo del sensor ultrasonico al final se verifica con while
{
digitalWrite(TRIG, HIGH); //enviar pulso (emisor)
delay(5);
digitalWrite(TRIG, LOW);
Serial.println(DISTANCIA);
delay(200);
digitalWrite(LED2, HIGH);
// delay(DISTANCIA*10);
//digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
//delay(DISTANCIA*10);
// digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
//delay(DISTANCIA*10);
// digitalWrite(LED4, LOW);
}
}
while(ESTADO==HIGH);
Practica No. 3
Para esta práctica el estudiante junto con su grupo de trabajo colaborativo utiliza el
pueden usar un driver para motores como el L293D) y conector de batería de 9vdc:
Codigo en Arduino
void loop() {
// put your main code here, to run repeatedly:
state = 0;
}
if (state == 'R'){// reversa
digitalWrite(motor1, LOW);
digitalWrite(motor2, HIGH);
digitalWrite(motor3, LOW);
digitalWrite(motor4, HIGH);
digitalWrite(motor5, LOW);
digitalWrite(motor6, HIGH);
digitalWrite(motor7, LOW);
digitalWrite(motor8, HIGH);
state = 0;
}
digitalWrite(motor1, LOW);
digitalWrite(motor2, HIGH);
digitalWrite(motor3, HIGH);
digitalWrite(motor4, LOW);
digitalWrite(motor5, LOW);
digitalWrite(motor6, HIGH);
digitalWrite(motor7, HIGH);
digitalWrite(motor8, LOW);
state = 0;
}
state = 0;
}
}
Simulación proteus
Practicas laboratorio presencial
En la práctica desarrollada en el laboratorio presencial se desarrollaron algunos ejercicios adicionales
que referencio a continuación. Link video display 7 segmentos https://youtu.be/A32bhRxim00
Display de 7 segmentos de 0 a 9
Código Arduino
int led0 =21;// led conectado a pin 13.
int led1 =20; // led conectado a pin 12.
int led2 =19; // led conectado a pin 11.
int led3 =18;// led conectado a pin 10.
int led4 =17;// led conectado a pin 9.
int led5 =16; // led conectado a pin 8.
int led6 =15;
int led7 =22;//segundo display
int led8 =23;
int led9 =24;
int led10 =25;
int led11 =26;
int led12 =27;
int led13 =28;
int pul1 =29;
//la instalacion se ejecuata al presionar reset
void setup() {
digitalWrite(21,HIGH);// 1
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,HIGH);
digitalWrite(17,HIGH);
digitalWrite(16,HIGH);
digitalWrite(15,HIGH);
delay(500);
digitalWrite(21,LOW);// 2
digitalWrite(20,LOW);
digitalWrite(19,HIGH);
digitalWrite(18,LOW);
digitalWrite(17,LOW);
digitalWrite(16,HIGH);
digitalWrite(15,LOW);
delay(500);
digitalWrite(21,LOW);///3
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,LOW);
digitalWrite(17,HIGH);
digitalWrite(16,HIGH);
digitalWrite(15,LOW);
delay(500);
digitalWrite(21,HIGH);// 4
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,HIGH);
digitalWrite(17,HIGH);
digitalWrite(16,LOW);
digitalWrite(15,LOW);
delay(500);
digitalWrite(21,LOW);//5
digitalWrite(20,HIGH);
digitalWrite(19,LOW);
digitalWrite(18,LOW);
digitalWrite(17,HIGH);
digitalWrite(16,LOW);
digitalWrite(15,LOW);
delay(500);
digitalWrite(21,LOW);//6
digitalWrite(20,HIGH);
digitalWrite(19,LOW);
digitalWrite(18,LOW);
digitalWrite(17,LOW);
digitalWrite(16,LOW);
digitalWrite(15,LOW);
delay(1000);
digitalWrite(21,LOW);//7
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,HIGH);
digitalWrite(17,HIGH);
digitalWrite(16,HIGH);
digitalWrite(15,HIGH);
delay(500);
digitalWrite(21,LOW);//8
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,LOW);
digitalWrite(17,LOW);
digitalWrite(16,LOW);
digitalWrite(15,LOW);
delay(500);
digitalWrite(21,LOW);//9
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,LOW);
digitalWrite(17,HIGH);
digitalWrite(16,LOW);
digitalWrite(15,LOW);
delay(500);
digitalWrite(21,LOW);//0
digitalWrite(20,LOW);
digitalWrite(19,LOW);
digitalWrite(18,LOW);
digitalWrite(17,LOW);
digitalWrite(16,LOW);
digitalWrite(15,HIGH);
delay(500);
digitalWrite(22,LOW);//1 DES
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(26,LOW);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
digitalWrite(22,HIGH);//2 DES
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,HIGH);
digitalWrite(26,HIGH);
digitalWrite(27,HIGH);
digitalWrite(28,HIGH);
delay(5000);
digitalWrite(22,LOW);//3 DES
digitalWrite(23,LOW);
digitalWrite(24,HIGH);
digitalWrite(25,LOW);
digitalWrite(26,HIGH);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
digitalWrite(22,HIGH);// 4 DES
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,HIGH);
digitalWrite(26,HIGH);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
digitalWrite(22,LOW);//5 DES
digitalWrite(23,HIGH);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(26, HIGH);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
digitalWrite(22,LOW);//6 DES
digitalWrite(23,HIGH);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(26,LOW);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
digitalWrite(22,LOW);//7 DES
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,HIGH);
digitalWrite(26,HIGH);
digitalWrite(27,HIGH);
digitalWrite(28,HIGH);
delay(5000);
digitalWrite(22,LOW);//8 DSE
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(26,LOW);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
digitalWrite(22,LOW);//9 DES
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(26,HIGH);
digitalWrite(27,LOW);
digitalWrite(28,LOW);
delay(5000);
}
Conclusiones
El desarrollo del presente trabajo permitio conocer el software libre Arduino, sienta las
industria, etc.
Recuperado de: https://openlibra.com/es/book/libro-basico-de-arduino-electronica-y-
programacion
de: https://dialnet.unirioja.es/servlet/articulo?codigo=5468086
de: http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?
ppg=2&docID=4569609&tm=1527546697645