003 Guia LABORATORIO DE AUTOTRÓNICA
003 Guia LABORATORIO DE AUTOTRÓNICA
003 Guia LABORATORIO DE AUTOTRÓNICA
MICROPROCESADORES Y MICROCONTROLADORES.
1. Qué es el Microprocesador:
Se denomina microprocesador al circuito electrónico que procesa la energía necesaria para que
el dispositivo electrónico en que se encuentra funcione, ejecutando los comandos y los programas
adecuadamente. La Unidad Central de Procesos (CPU) de una computadora es un ejemplo de un
microprocesador.
Este componente electrónico forma parte de la tarjeta madre de una computadora y se caracteriza
por ser un circuito integrado con miles y, a veces, hasta con millones de transistores.
Se denomina micro por su significado inglés que indica “pequeño”, en relación a la importancia de
su función en un dispositivo, comparado a veces con el cerebro y con el corazón de los seres
humanos.
1.2 Función de un microprocesador
Este componente electrónico es el encargado de procesar y ejecutar las instrucciones codificadas
en números binarios.
El microprocesador es comúnmente conocido como la Unidad Central de Procesos (CPU) de los
diferentes dispositivos electrónicos, pero también contienen procesadores otros dispositivos como
los discos duros.
2. ¿Qué es un microcontrolador?
Un microcontrolador es una computadora en pequeña escala. Eso quiere decir que en su interior
contiene un CPU, unidades de memoria, puertos de entrada y salida, periféricos, osciladores,
módulos de comunicación, DAC, ADC, entre otros.
Un microcontrolador (MCU) utiliza técnicas de microelectrónica para reducir varios componentes
como la CPU (Unidad de Procesamiento
Central) y la memoria a un pequeño
paquete (o package). Tiene varios pines de
entrada y salida, a través de los cuales se
puede interactuar con el mundo exterior.
Obviamente, el microcontrolador como se ha
realizado no hace nada, es necesario
programarlo mediante un conjunto de
instrucciones que representan el firmware
del sistema instalado en la memoria del
dispositivo.
Uno de los fabricantes que más conocidos es Microchip que además es dueña de Atmel, otro
fabricante popular.
Microchip ha destacado por su familia de microcontroladores PIC. Al ser tan popular puedes
encontrar muchos proyectos en internet que te sirvan de ayuda. El problema es que al momento
de cargar un programa se necesitan voltajes mayores a 5 V por lo que se suele necesitar un
circuito externo que regule la energía.
Atmel presenta su familia AVR. Es más fácil subir un programa a estos microprocesadores ya que
necesitan pocos pines conectados para realizar la conexión a la PC.
Las placas de Arduino suelen usar los AVR de Atmel por lo que su popularidad se ha
incrementado.
2.1 DIFERENCIAS ENTRE MICROCONTROLADORES Y MICROPROCESADORES
Los microcontroladores y los microprocesadores utilizan los mismos componentes, pero con
distintas características, las cuales es necesario conocer para poderlos distinguir entre sí.
CARACTERÍSTICAS
MICROPROCESADORES MICROCONTROLADORES
El microcontrolador incluye
Normalmente el microprocesador opera
prácticamente todos los elementos
en conjunto
necesarios para operar en un sólo
con una memoria RAM, una memoria
circuito integrado por
ROM y un decodifi de direcciones
lo que en muchos casos únicamente
dentro de lo que se conoce
es necesario energizarlos para
como un microordenador.
funcionar.
Debido a que su arquitectura es mucho Debido a que su arquitectura es de
más compleja su costo un bajo set de instrucciones
es elevado y al requerir elementos y requiere de pocos elementos
adicionales para funcionar aumenta aún adicionales para operar,
más. su costo es bajo.
3. Arduino
Arduino es una plataforma para prototipado de electrónica basada en hardware y
software libre y fácil de utilizar. Podemos construir circuitos electrónicos y programarlos
para iniciarnos en el mundo de la electrónica y robótica, construir componentes
electrónicos a nuestro antojo e incluso crear un modelo de negocio.
Arduino se apoya en 2 pilares fundamentales; Hardware (placa de Arduino) y Software
(entorno de programación).
3.1 Hardware de Arduino
Arduino dispone de un regulador de voltaje interno que actúa para que la tensión de
alimentación no supere los 12V, ya que en caso contrario podemos dañar el regulador
y con ello la placa de Arduino. Por otro lado, para tensiones inferiores a 7V en la
alimentación, es probable que la placa no llegue a encenderse. La mayoría de los
componentes electrónicos de Arduino utilizan una tensión operativa de 5V (ya regulada
por el regulador de voltaje de la propia placa de Arduino)
Tanto las entradas como las salidas dotan al sistema de información y realizan
diferentes actuaciones. Arduino contiene la siguiente distribución de pines:
LEDs TX RX (9):
TX es la abreviatura de transmisión de datos y RX es la abreviatura de recepción de
datos. Estas marcas comunes aparecen con regularidad en la electrónica para indicar
los pines responsables de la comunicación serie. Así mismo, Estos LEDs se activan
visualmente cuando la placa esta recibiendo o transmitiendo datos.
Para programar una tarjeta de Arduino, podemos descargar de su página web su propio
software o podemos utilizar diferentes lenguajes y entornos de programación. En este
caso vamos a introducir la programación y electrónica con Arduino utilizando los
lenguajes de programación por bloques y lenguajes de programación en modo texto.
o Ardublock
o Tintercard
o Scratch 4 Arduino
o Snap 4 Arduino
o mBlock
o Blocklyduino
o Visualino
PRACTICA 001 MICROPROCESADORES Y MICROCONTROLADORES
3. ¿QUÉ ES UN MICROCONTROLADOR?
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
4. ¿QUE ES ARDUINO?
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
VELOCIDAD DE OPERACIÓN
ELEMENTOS NECESARIOS
PARA SU
FUNCIONAMIENTO
COSTOS
SUSCEPTIBILIDAD AL
RUIDO
ELECTROMAGNÉTICO
3.4 PLACAS OFICIALES ARDUINO
De entre las placas oficiales puedes encontrar multitud de modelos. Todos especialmente
pensados para un fin, compatibles con los shields y módulos oficiales, así como con
Arduino IDE. Vamos a intentar detallar sus principales
características para poder diferenciarlos entre sí:
Arduino UNO
Se basa en un microcontrolador Atmel ATmega320 de
8 bits a 16Mhz que funciona a 5v. 32KB son
correspondientes a la memoria flash (0,5KB
reservados para el bootloader), 2KB de SRAM y 1KB
de EEPROM. En cuanto a memoria es una de las
placas más limitadas, pero no por ello resulta
insuficiente para casi todos los proyectos que rondan
la red.
Arduino TRE
Arduino Mega
Su nombre proviene del microcontrolador que lo maneja, un ATmega2560. Este chip
trabaja a 16Mhz y con un voltaje de 5v. Sus capacidades son superiores al ATmega320
del Arduino UNO, aunque no tan superiores como las soluciones basadas en ARM. Este
microcontrolador de 8 bits trabaja conjuntamente con una SRAM de 8KB, 4KB de
EEPROM y 256KB de flash (8KB
para el bootloader). Como puedes
apreciar, las facultades de esta placa
se asemejan al Due, pero basadas
en arquitectura AVR en vez de ARM.
En cuanto a características
electrónicas es bastante similar a los
anteriores, sobre todo al UNO. Pero
como se puede apreciar a simple
vista, el número de pines es parecido
al Arduino Due: 54 pines digitales
(15 de ellos PWM) y 16 pines
analógicos. Esta placa es idónea para quien necesita más pines y potencia de la que
aporta UNO, pero el rendimiento necesario no hace necesario acudir a los ARM-based
Arduino Fio
Es una placa Arduino reducida a la mínima
expresión. Por su tamaño es especialmente
considerado para proyectos móviles
inalámbricas o para ser insertados en
espacios reducidos. Funciona con un
microcontrolador ATmega328P, una versión
similar a la del Ethernet pero que trabaja a
una frecuencia inferior, 8Mhz. Al ser tan
reducida carece de ciertas comodidades,
Arduino Nano
Empezaron incorporando un ATMega328 como el de otras placas vistas
anteriormente, pero tras la revisión 2.x se sustituyó por un ATmega168 a
16Mhz. Sus dimensiones son aun más reducidas que las de Fio, de tan solo
18,5×43.2mm. Su reducido tamaño no le quitan la posibilidad de ser una
placa completa, pero si que necesita de un cable mini-USB y no posee
conector de alimentación externa. Esta versión fue diseñada y producida
por la compañía Gravitech, especialmente pensado para aplicaciones de
reducido costo y donde el tamaño importe.
3.5 Descarga e interface del Software
El software para
la programación de la plataforma
Arduino
https://www.arduino.cc/en/software
se puede descargar en forma
gratuita de la pagina en su version
en ingles encontraran el Arduino
1.01 que es la versión mas
reciente, allí se escoje el sistema
operativo y se inicia la descarga, en
particular yo trabajare en
windows. Una vez descargado el
archivo, se descomprime y se
ejecuta directamente el ejecutable arduino.exe presente en la carpeta.
Tinkercad es un software gratuito online creado por la empresa Autodesk, una de las
empresas punteras en el software de diseño 3D. Tinkercad: https://www.tinkercad.com/
Tinkercad ofrece:
Una vez que conocemos el entorno de TINKERCAD es recomendable comenzar a instalar un circuito sencillo
con Arduino, hoy conoceremos la programación en bloques y con el lenguaje de programación de Arduino.
Lo primero que hay que hacer es declarar el tipo de la función (es decir, el tipo de la variable que la función
va a devolver con la instrucción “return” (void si no devuelve ningún valor, o cualquiera de los demás tipos
en caso contrario)
Si estás escribiendo una función dale un nombre significativo (es decir, que te recuerde claramente que hace
esa función, que valor devuelve)
Los datos que se transfieren desde el programa a la función se llaman parámetros, pueden ser uno, varios o
ninguno, y de diferentes tipos (con la excepción de las funciones como setup() y loop() que no utilizan
parámetros).
1. La función pinMode()
Descripción:
Esta función configura el pin especificado para actuar como entrada o salida digital (ver la descripción de los
pins digitales del Arduino para más información sobre la funcionalidad de estos pins). A partir de la version
1.0.1 del Arduino es posible activar las resistencias internas “pullup” del Arduino con el modo
INPUT_PULLUP. Por otra parte, el modo INPUT desactiva explícitamente las resistencias internas “pullup”.
Sintaxis:
pinMode(pin, modo)
Parámetros:
pin: el número de pin que queremos activar como entrada o salida.
modo: INPUT, OUTPUT, or INPUT_PULLUP (ver la descripción de los pins digitales del Arduino para más
información sobre la funcionalidad de estos pins).
Devuelve:
Nada (esta función simplemente activa un pin sin devolver ningún valor de retorno)
Ejemplo:
void loop()
{
digitalWrite(ledPin, HIGH); // activa el LED (encendido)
delay(1000); //temporizador (espera un segundo)
digitalWrite(ledPin, LOW); // desactiva el LED (apagado)
delay(1000); // temporizador (espera un segundo)
}
Nota: Los pins de entrada analógica pueden ser también usados como pins digitales si nos referimos a ellos
como A0, A1, etc.
2. La función digitalWrite()
Descripción:
Activa (HIGH) o desactiva (LOW) un pin digital.
Si el pin ha sido configurado como OUTPUT (salida) con la función pinMode(), su voltaje será activado a 5V
(o 3.3V en las tarjetas que funcionen a 3.3V) si se activa (HIGH) o a 0V (tierra) si se desactiva (LOW).
Si el pin ha sido configurado como INPUT (entrada), digitalWrite() activará (si la usamos el parámetro HIGH)
o desactivará (con LOW) la resistencia “pullup” del pin de entrada especificado. Se recomienda activar la
resistencia interna “pullup” del pin con la función pinMode(pin, INPUT_PULLUP). Ver la descripción de los
pins digitales del Arduino para más información sobre la funcionalidad de estos pins).
Nota:
Si no configuras el pin como salida (OUTPUT) con la función pinMode() y conectas el pin a un LED, cuando
uses la función digitalWrite(HIGH), el LED no se encenderá. En efecto, si no configuras explícitamente el pin
como salida con pinMode(), digitalWrite() activa la resistencia interna “pullup” que actúa como un potente
limitador de corriente.
Sintáxis:
digitalWrite(pin, valor)
Parámetros:
pin: el número de pin
valor: HIGH or LOW
Devuelve:
nada
Ejemplo:
void loop()
{
digitalWrite(ledPin, HIGH); // enciende el LED
delay(1000); // temporizador: espera un Segundo
digitalWrite(ledPin, LOW); //apaga el LED
delay(1000); // temporizador: un segundo
}
Este sketch active el pin 13 (HIGH) espera un Segundo y lo desactiva.
Nota:
Los pins de entrada analógica pueden ser también usados como pins digitales si nos referimos a ellos como
A0, A1, etc.
3. La function digitalRead()
Descripción:
Lee el valor (HIGH o LOW) del pin digital especificado.
Sintaxis:
digitalRead(pin)
Parámetros:
pin: el número de pin digital que quieres leer (tipo int)
Devuelve:
HIGH (alta) o LOW (baja/tierra)
Ejemplo:
Activa el pin 13 al mismo valor que el leído en el pin 7 (configurado como entrada)
void setup()
{
pinMode(ledPin, OUTPUT); // configura el pin digital 13 como salida
pinMode(inPin, INPUT); // configura el pin digital 7 como entrada
}
void loop()
{
val = digitalRead(inPin); // lee valor en pin de entrada
digitalWrite(ledPin, val); // active el LED con el valor leído en el pulsador
}
Nota:
Si el pin no está conectado a nada, digitalRead() puede devolver indistintamente HIGH o LOW (y esto puedo
cambiar de manera aleatoria).
Los pins de entrada analógica pueden ser también usados como pins digitales si nos referimos a ellos como
A0, A1, etc.
4. La función analogReference()
Descripción:
Esta función configura el voltaje de referencia usado como entrada analógica (es decir, el valor que queremos
definir como voltaje máximo de entrada). Las siguientes opciones son válidas:
-DEFAULT: el valor de referencia por defecto es 5 voltios (en las tarjetas Arduino que funcionan a 5V) o 3.3
voltios (en las Arduino que van a 3.3V)
-INTERNAL: un valor de referencia interno fijado en 1.1 volts en el ATmega168 o ATmega328 y 2.56 volts
en el ATmega8 (no disponible en el Arduino Mega)
-INTERNAL1V1: un valor de referencia interno fijado en 1.1V (Solamente en el Arduino Mega)
-INTERNAL2V56: un valor de referencia interno fijado en 2.56V (Solamente en el Arduino Mega)
-EXTERNAL: el voltaje aplicado al pin AREF pin (de 0 a 5V sólamente) es usado como referencia máxima.
Sintáxis:
analogReference(tipo)
Parámetros:
tipo: El tipo de referencia usado (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, or EXTERNAL).
Devuelve:
Nada.
Nota:
Las lecturas efectuadas con analogRead() inmediatamente tras cambiar la referencia analógica pueden no
ser fiables.
Advertencia:
¡No uses menos de 0V o más de 5V como voltaje de referencia externa en el pin AREF! SI estás usando
una referencia externa en el pin AREF debes configurar la referencia como EXTERNAL antes de usar la
función analogRead(). Si no lo haces así cortocircuitarás el voltaje de referencia activo (generado
internamente) y el pin AREF y, muy probablemente dañarás el micro controlador del Arduino.
Por otra parte, puedes conectar el voltaje de referencia externa al pin AREF a través de una resistencia de
5K, lo cual te permitirá pasar de voltajes de referencia internos a externos. Advierte que la resistencia
cambiará el voltaje que es usado como referencia ya que el pin AREF está conectado internamente a una
resistencia de 32K. La combinación de estas dos resistencias (interna y externa) actúa como un divisor de
voltaje. Por ejemplo, 2.5V aplicados a través de la resistencia darán 2.5 * 32 / (32 + 5) = ~2.2V en el pin
AREF.
5. La función analogRead()
Description:
Esta función lee el valor presente en el pin analógico especificado. El Arduino lleva un convertidor
analógico/digital de 10 bits con 6 canales (8 canales en el Mini y Nano y 16 en el Mega). Esto significa que
se pueden convertir voltajes que varíen entre 0 y 5 voltios en valores enteros entre 0 y 1023. Esto equivale
a una resolución de 5V/1024 unidades, o lo que es lo mismo 0.0049 Volts (4.9 mV) por unidad. El rango de
entrada y la resolución pueden ser cambiados usando analogReference().
La frecuencia máxima de lectura es de 10,000 veces por segundo (cada lectura dura unos 100
microsegundos).
Sintaxis:
analogRead(pin)
Parámetros:
pin: el número de pin analógico del que se quiere leer la entrada (0 a 5 en la mayor parte de las placas, 0 a
7 en el Mini y Nano, 0 a15 en el Mega)
Devuelve:
int (de 0 a 1023)
Nota:Si el pin de entrada analógico no está conectado a nada, el valor devuelto por la
función analogRead() fluctuará dependiendo de una serie de factores (por ejemplo, los valores de otras
entradas analógicas, la proximidad de tu mano a la placa, etc.)
Ejemplo:
void setup()
{
Serial.begin(9600); // inicialización puerto serie a 9600 bps
}
void loop()
{
val = analogRead(analogPin); //leer entrada analógica
Serial.println(val); // mostrar valor leido
}
6. La función analogWrite()
Descripción:
Esta función escribe en el pin indicado un valor analógico (mediante un pulso o tren de ondas cuya duración
determina el valor analógico transmitido, también llamado PWM –“Pulse Width Modulation”). Este valor
puede ser utilizado para iluminar un LED con una intensidad variable o hacer rotar el eje de un motor eléctrico
a velocidades variables. Cuando usamos esta función el pin generará una onda cuadrada constante de la
duración especificada hasta la siguiente utilización de la función sobre el mismo pin (o una utilización
de digitalRead() o digitalWrite() sobre el mismo pin). La frecuencia de la la señal PWM en la mayor parte de
los pins es aproximadamente 490 Hz. En el Uno y otras placas similares, los pins 5 y 6 tienen una frecuencia
de aproximadamente 980 Hz. Los pins 3 y 4 del Leonardo también funcionan a 980 Hz.
En la mayor parte de las placas Arduino (las que van equipadas con el procesador ATmega 168 o ATmega
328), esta función puede ser usada con los pins 3, 5, 6, 9, 10 y 11. En el Arduino Mega, funciona con los
pins del 2 al 13 y del 44 al 46. Modelos más antiguos de Arduino con el procesador ATmega8 sólo pueden
ejecutar analogWrite() en los pins 9, 10 y 11.
El Arduino Due puede ejecutar analogWrite() sobre los pins del 2 al 13 más los pins DAC0 y DAC1.
Contrariamente a los pins PWM, los pins DAC0 y DAC1 son convertidores Digital -> Analógico y actúan
como verdaderas salidas analógicas (es decir, producen una salida equivalente en voltaje sin codificación
PWM)
No es necesario ejecutar la función de inicialización pinMode() para configurar el pin como salida antes de
ejecutar analogWrite().
La función analogWrite() no tiene nada que ver con los pins analógicos o con la función analogRead.
Sintaxis:
analogWrite(pin, valor)
Parámetros:
pin: el número de pin en el que queremos escribir.
valor: la duración del pulso: entre 0 (OFF continuo) y 255 (ON continuo)
Devuelve:
Nada.
Notas:
Las salidas PWM generadas en los pins 5 y 6 tienen una duración mayor que la esperada. Esto es debido a
interacciones con las funciones millis()y delay() que usan el mismo temporizador interno usado para generar
las salidas PWN. Este efecto puede ser apreciado principalmente con duraciones cortas (típicamente de 0 a
10) y puede resultar en valores de 0 que no pongan totalmente a 0 los pines 5 y 6.
Ejemplo:
Enciende el LED con una intensidad proporcional al valor leído en la entrada conectada con el potenciómetro.
void setup()
{
pinMode(ledPin, OUTPUT); // configura el the pin 9 como salida
}
void loop()
{
val = analogRead(analogPin); // lee entrada potenciómetro
analogWrite(ledPin, val / 4); // analogRead oscila de 0 a 1023, analogWrite entre 0 y 255
}
Salida digital
void setup()
{
pinMode(ledPin, OUTPUT); // El p1n 13 será una salida digital
}
void loop(){
digitalWrite(ledPin, HIGH); // Enciende el LED
delay(1000); // Pausa de 1 segundo
digitalWrite(ledPin, LOW); // Apaga el LED
delay(1000); // Pausa de 1 segundo
}
ACTIVIDAD PRACTICA 002
Es hora de poner en prueba lo que has aprendido.
DRIVER CH340
Podemos también abrir el Administrador de Dispositivos, para comprobar que el driver fue instalado
correctamente, en este caso nuestro ordenador lo detectó como ''USB-SERIAL CH340 (COM9)''.
Para finalizar, te proporcionamos los enlaces de descarga del Driver CH340 para los diferentes sistemas
operativos.
void setup()
{
pinMode (1,OUTPUT);
pinMode (2,OUTPUT);
pinMode (3,OUTPUT);
pinMode (4,OUTPUT);
pinMode (5,OUTPUT);
pinMode (6,OUTPUT);
pinMode (7,OUTPUT);
pinMode (8,OUTPUT);
pinMode (9,OUTPUT);
pinMode (10,OUTPUT);
}
void loop()
{
digitalWrite(1,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(1,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(2,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(2,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(3,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(3,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(4,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(4,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(5,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(5,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(6,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(6,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(7,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(7,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(8,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(8,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(9,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(9,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(10,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(10,LOW);
delay(500);//Wait for 500 milisegundos
}
2. Elabora el código necesario para el funcionamiento de la secuencia de led RGB
void setup()
{
pinMode (2,OUTPUT);
pinMode (3,OUTPUT);
pinMode (4,OUTPUT);
}
void loop()
{
digitalWrite(2,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(2,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(3,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(3,LOW);
delay(500);//Wait for 500 milisegundos
digitalWrite(4,HIGH);
delay(500);//Wait for 500 milisegundos
digitalWrite(4,LOW);
delay(500);//Wait for 500 milisegundos
}