Professional Documents
Culture Documents
PROGRAMACIÓN II
ARDUINO ♥ C++
Instructor: Gadiel Ortez
QUE ES ARDUINO ?
• 14 pines e/s
digital
• 6 pines PWM
• 6 e/s
analógicas
• Oscilador de
16 Mhz
• Conexión
USB
• Fuente
alimentación
• Micro
controlador
CARACTERISTICAS
ATMEL : MICROCONTROLADOR ATMEGA 168/328
IDE de programación
Opensource.
Lenguajes de programación
-Processing/Wiring.
-JAVA
-C++
OTROS PLACAS Y MICRO-
CONTROLADORES
Raspberry Pi
ARM
Easy-PIC
Microchip
IDEAS DE PROYECTO!
ESTRUCTURA DE ARDUINO
Un sketch es el nombre
que usa Arduino
para un programa.
Rectificador
LED
Fuente de Voltaje : Suministra voltaje de alimentacion para
dispositivos.
Pulsador
PROTOBOARD
MEDICIONES CON MULTIMETRO
Voltaje: se mide
en paralelo al elemento.
Corriente: se mide
en serie con el elemento.
REPRESENTACIÓN NUMÉRICA
• Decimal • Binaria
Sistema de numeración que Sistema de numeración en
utiliza diez símbolos, 0- 9 el que los números se
para representar representan utilizando
determinada cantidad. solamente los símbolos
• Base :10 cero y uno (0 y 1).
• Símbolos: • Base: 2
0,1,2,3,4,5,6,7,8,9 • Símbolos: 0 , 1
CONVERSIONES ENTRE SISTEMAS
Decimal a Binario
100 ->?
250 ->?
Binario a Decimal
10101 ->?
10010101 ->?
TTL (TRANSISTOR-TRANSISTOR LOGIC)
Estandarización de valores lógicos
Es una familia lógica o lo que es lo mismo, una tecnología de
construcción de circuitos electrónicos digitales.
La tensión nominal de alimentación de los circuitos TTL son 5 V
DC.
Niveles de voltaje
establecidos:
LOGICA DIGITAL
AND OR
NOT
A B Salida
0 0 0
0 1 0
1 0 0
1 1 1
-IDE
-INSTALACIÓN DE
DRIVERS
-HOLA MUNDO
HOLA MUNDO !
Led Parpadeante: Conectar un led al pin 13, haciendo se encienda durante
500 ms y se apague durante 100 ms, cíclicamente.
Objetivos:
Reconocer partes de la placa.
Familiarizarse con el entorno de programación.
Conocer ordenes como: pinMode,digitalWrite y delay.
SEMANA DOS
LENGUAJE C++
ESTRUCTURA DE ARDUINO
Un sketch es el nombre
que usa Arduino
para un programa.
Dos tipos :
- tipo nombre(parametros){
//..bloque de codigo
}
Punto y coma ( ; )
Debe utilizarse al final de cada linea.
TIPOS DE DATOS
byte: valor numerico de 8 bits. (0-255)
int :almacena numeros sin puntos decimales. (16 bits)
long : almacena numeros grandes sin puntos
decimales. (32 bits)
Char: es un tipo de dato que ocupa un byte de memoria y
almacena un valor de carácter.
float : almacena numeros con punto flotante. (32 bits)
String : almacena cadenas de texto.
Arreglos :Coleccion de valores que son accedidos con un indice
numerico. Necesita ser declarado y asignarle valores antes de
ser utilizado.
OPERADORES DE COMPARACIÓNY
ARITMÉTICOS
== , Igualdad
!=, Distinto
< , Menor
>, Mayor
<= , Menor o igual
>= , Mayor o igual
= , Asignación
OPERADORES LÓGICOS
AND : &&
OR : ||
NOT: !
//inicializacion
while(condicion){
//codigo
//incremento
}
CONSTANTES
true/false: constantes booleanas que definen niveles lógicos. ( True:1
:: False:0 )
Matematicas
• min(x,y): calcula el minimo de dos numeros.
• max(x,y): calcula el maximo de dos numeros.
MEMORIA
random()
genera numeros aleatorios.
Ejemplos:
random(max) // toma el valor 0 como el minimo
random(min, max)
EJEMPLO NUMEROS ALEATORIOS
void setup(){
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop() {
randNumber = random(300);
Serial.println(randNumber);
randNumber = random(10, 20);
Serial.println(randNumber);
delay(50);
}
ARREGLOS
Un arreglo es una colección de variables a las que podemos acceder
mediante un índice, el cual indica la posición dentro del arreglo.
Procesamiento
µC
Memoria
ENTRADAS/SALIDAS DIGITALES
pinMode(pin, modo): para configurar un pin especifico como
entrada o salida. INPUT/OUTPUT
void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
}
void loop() {
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);
delay(1);
}
EJEMPLO E/S DIGITAL: SECUENCIA DE LEDS
CON PULSADOR
Encender y apagar 4 leds secuencialmente al accionar un
pulsador. El pulsador debe estar conectado al pin 4 y los leds
a los pones 5,6,7 y 8.
Objetivo: Aprender a conectar una entrada digital al arduino.
DIAGRAMA
ENTRADAS/SALIDAS ANALÓGICAS
int potPin = 2;
int ledPin = 13;
int val = 0;
void setup () {
pinMode (ledPin, OUTPUT);
}
void loop () {
val = analogRead (potPin);
digitalWrite (ledPin, HIGH);
delay (val);
LIQUID CRYSTAL DISPLAY (LCD)
CONEXIÓN FÍSICA
Interfaz Paralela
4 Bits de Datos
2 Bits de Registro
Hitachi HD44780 drivers
LCD – LIBRERÍA LIQUIDCRYSTAL
DISPLAY
#include <LiquidCrystal.h>
void setup() {
lcd.begin(16, 2); // Dimensiones de la LCD
lcd.print("hello, world!");
}
void loop() {
lcd.noBlink();
delay(3000);
lcd.blink();
delay(3000);
}
SEMANA CINCO
MOTORES DC
- +
E BC
Utilizando transistor tipo NPN, conectaremos la carga (Motor) al
colector del transistor y el emisor al negativo . Así, cuando la señal
alta del pin de nuestro Arduino alcance la base, fluirá una pequeña
corriente de la base al emisor y la corriente a través del transistor
fluirá y el motor girará.
PRÁCTICA: CONTROLAR ENCEDIDO Y
APAGADO DE UN MOTOR DC
CÓDIGO
const int transistorPin = 9; //Conexión a Base del Transistor
void setup() {
pinMode(transistorPin, OUTPUT);
}
void loop() {
digitalWrite(transistorPin, HIGH);
delay(1000);
digitalWrite(transistorPin, LOW);
delay(1000);
}
PWM (MODULACIÓN POR ANCHO DE
PULSO)
Es una técnica para
simular una salida
analógica con una salida
digital.
0 𝑋
= X= 0
1023 255
512 𝑋
= X= 127
1023 255
1023 𝑋
= X= 255
1023 255
FUNCION MAP (PROPORCIONALIDAD)
MAP(VALUE, FROMLOW, FROMHIGH, TOLOW,
TOHIGH)
Parámetros
value: el número (valor) a mapear.
void setup() {
fromLow: el límite inferior del rango Serial.begin(9600);
actual del valor. }
fromHigh: el límite superior del rango void loop() {
actual del valor. int val = analogRead(0);
toLow: límite inferior del rango val = map(val, 0, 1023, 0, 255);
deseado. Serial.print(“valor :”);
toHigh: límite superior del rango Serial.print(val);
deseado. }
Devuelve
El valor mapeado.
PWM: MOTOR DC
Funcionamiento
Una señal lógica alta (5V) abre
la puerta y permite el paso de
la corriente, una señal de nivel
bajo (0V) cierra la puerta e
impide el paso de
corriente.
Esta señal que se debe
transmitir tiene la ventaja de
emplear un amperaje mínimo.
PRÁCTICA:
Utilizar un potenciometro
como entrada analogica
para controlar la salida
digital pwm de un motor
DC.
Aplicar conceptos de
entradas y salidas
digitales y analogicas y
mapeo de señales.
CODIGO
int pinMotor=9;
void setup() {
pinMode(pinMotor,OUTPUT);
Serial.begin(9600);
}
void loop() {
int valor = analogRead(0);
int velocidad = map(valor, 0, 1023, 0, 255);
analogWrite(pinMotor,velocidad);
Serial.print(“valor :”);
Serial.println(velocidad);
}
CONTROL DE MOTOR USANDO LA COMUNICACIÓN
SERIAL
int entrada = 0;
int pinMotor = 9;
void setup() {
// inicializar puerto serie
Serial.begin(9600);
// preparar salida digital
pinMode(pinMotor, OUTPUT);
}
void loop() {
// leer dato si disponible
if(Serial.available()){
entrada = Serial.read();
// escribir en el pin
analogWrite(pinMotor, entrada);
}
}
LED DIMMER
int ledPin = 9;
void setup() {
//Hace Nada
}
void loop() {
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(ledPin, fadeValue);
delay(30);
}
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
analogWrite(ledPin, fadeValue);
delay(30);
}
}
PRÁCTICO:
void setup() {
de Control de un servoMain.attach(10);
Servo Motor }
void loop() {
servoMain.write(45);
delay(1000);
servoMain.write(0);
delay(1000);
servoMain.write(90);
delay(1000);
servoMain.write(135);
delay(1000);
servoMain.write(180);
delay(1000);
servoMain.write(90);
delay(1000);
}
#include <Servo.h>
Servo myservo; // crear un objeto
// un maximo de 8 objetos pueden ser instanciados
int pos = 0; // variable que almacena la posicion del servo
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // de 0 grados a 180 grados, 1 grado a la vez
{
myservo.write(pos); // Moverse a la posicion indicada en pos
delay(15); // una espera de 15 ms
}
for(pos = 180; pos>=1; pos-=1) //de 180 grados a 0 grados
{
myservo.write(pos); // Moverse a la posicion indicada en pos
delay(15); // una espera de 15 ms
}
}
SEMANA SEIS
PING (SENSOR ULTRASÓNICO)
El Ping es un medidor de distancias por ultrasonidos. Funciona
enviando una ráfaga de ultrasonido y esperando a escuchar el eco que
se produce cuando esta rebota con el objeto y en función de ese
tiempo se obtiene la distancia.
ULTRASÓNICO ( 5 PINES)
Pin 5 Pin 1
Pin 1: tierra
Pin 2: Vcc (5v)
Pin3: Señal de ultrasonido
Emite y recibe la señal.
Se activa con un pulso de 2 o mas Microsegundos
CONEXIÓN FÍSICA
CONVERSIONES:
Características:
Voltaje de alimentación 4.5 a 5.5 VCC
Temperatura de operación -10 a 60°C
Rango mínimo de medida: 20cm
Rango máximo de medida: 150cm
Consume 33mA
EJEMPLO
int sensorPin = 0; //pin analogico 0
int varSensor = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
varSensor = analogRead(sensorPin);
Serial.print("Sensor indica: ");
Serial.print(varSensor);
delay(1000);
}
PRÁCTICO
Utilizar un sensor infrarrojo para medir la distancia entre tres rangos
distintos:
0-100 : Encender Led Rojo e imprimir “Distancia 1”
101 -250 : Encender Led Amarillo e imprimir “Distancia 2”
251 – 400: Encender Led Verde e imprimir “Distancia 3”
EEPROM:
El microcontrolador tiene una memoria EEPROM de 512 bytes, cuyos
datos son guardados cuando se apaga el microcontrolador.
Debemos importar la libreria a nuestro proyecto:
#include <EEPROM.h>
Funciones:
EEPROM.write(posicionMemoria, valor a guardar)
EEPROM.read(posicion en Memoria) // se debe asignar a una
variable
PRÁCTICO
Almacenar 10 valores en un rango de 0 – 100 en la memoria
EEPROM. Luego evaluar cada uno de esos valores y si se encuentra
en el rango de 0-50 encender un LED Rojo y en el rango de 51-
100 encender un LED Amarillo.
FIN DEL CURSO