Partes del arduino
LEDS en Arduino
Estructura• La estructura básica del lenguaje de programación Arduino es bastante
simple y se organiza• en al menos dos partes o funciones que encierran bloques de
declaraciones.• void setup()• {• statements;• }• void loop()• {• statements;• }• Ambas funciones son requeridas para que el programa funcione.
setup()La función setup debería contener la declaración de cualquier variable al comienzo del programa.Es la primera función a ejecutar en el programa, es ejecutada una vez y es usada para asignarpinMode o inicializar las comunicaciones serie.
loop()La función loop se ejecuta a continuación e incluye el código que se ejecuta contínuamente -leyendo entradas, activando salidas, etc. Esta función es el núcleo de todos los programas Arduinoy hace la mayor parte del trabajo.
Tipos de variablesbyteByte almacena un valor numérico de 8 bits sin puntos decimales. Tienen un rango de 0 a 255.byte someVariable = 180; //declara 'someVariable' como un tipo byte
intEnteros son los tipos de datos primarios para almacenamiento de números sin puntos decimalesy almacenan un valor de 16 bits con un rango de -32,768 a 32,767.int someVariable = 1500; //declara 'someVariable' como tipo int
longTipo de datos de tamaño extendido para enteros largos, sin puntos decimales, almacenados enun valor de 32 bits con un rango de -2,146,483,648 a 2,147,483,647.long someVariable = 90000; //declara 'someVariable' como tipo long
floatUn tipo de datos para números en punto otante, o números que tienen un punto decimal. Losnúmeros en punto otante tienen mayor resolución que los enteros y se almacenan como valor de32 bits con un rango de -3.4028235E+38 a 3.4028235E+38.float someVariable = 3.14; //declara 'someVariable' como tipo float
Operadores aritméticos
• Los operadores aritméticos incluyen suma, resta, multiplicación y división. Retornan la suma, diferencia, producto o cociente (respectivamente).
• y = y+3;• x = x-7;• i = j*6;• r = r/5;
Asignaciones compuestas
Las asignaciones compuestas combinan una operación aritmética con una asignación de variable.
x++; //lo mismo que x = x+1x--; //lo mismo que x = x-1
x += y; //lo mismo que x = x+yx -= y; //lo mismo que x = x-yx *= y; //lo mismo que x = x*yx /= y; //lo mismo que x = x/y
operadores de comparación
• x == y; //x es igual a y• x != y; //x no es igual a y• x < y; //x es menor que y• x > y; //x es mayor que y• x <= y; //x es menor o igual que y• x >= y; //x es mayor o igual que y
operadores lógicos
AND lógico:if(x>0 && x<5) //verdadero sólo si las dos expresiones son ciertas
OR lógico:if(x>0 || y>0) //verdadero si al menos una expresión es cierta
NOT lógico:if(!(x>0)) //verdadero sólo si la expresión es falsa
Entradas y Salidas
ENTORNO DE PROGRAMACIÓN
1.Seleccionar tarjeta
2.Seleccionar Puerto serial
3.Escribir el código
4. Compilar
5.Cargar el programa
LED
Secuencia de luces
LED - RGB
RGB
LDR
• Un fotorresistor o resistencia dependiente de la luz ( LDR ) o fotocélula es una resistencia cuya resistencia disminuye con el aumento de intensidad de luz incidente, para su conexión se necesita realizar un divisor de voltaje
LDR
const int led=11;const int LDR=A0;int valor;
void setup() {Serial.begin(9600pinMode(led,OUTPUT);}
void loop(){valor=analogRead(LDR);analogWrite(led,valor);
Serial.println(' '); Serial.println(valor);
delay(500);}
Relé
Servo Motor
Servo Motor
#include <Servo.h>Servo miServo;const int pulso=A0; const int motor=22;float angulo=0;
void setup(){Serial.begin(9600);miServo.attach(13,500,2500);
}
void loop(){ angulo= analogRead(pulso)/5.69; miServo.write(angulo); Serial.println(angulo); delay(500); }
Control de velocidad de un motor DC-PWM
Funciones para LCD
• millis(); //nos da como resultado el tiempo transcurrido en milisegundos.
// PINES RS,E,D4,D5,D6,D7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
• lcd.begin(16, 2); //INICIALIZA LCD 16X2 • lcd.setCursor(0, 0); //COLUMNA1,FILA1 • lcd.print("Arduino"); //Imprime en la pantalla• lcd.noDisplay(); // APAGA LCD • lcd.display(); // Enciende el LCD• lcd.clear(); //Limpia la pantalla• lcd.autoscroll(); // desplaza todo la pantalla hacia la izquierda
Pantalla LCD
Datos seriales
Diseño de caracteres// include the library code: #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte feliz[8] = { 0b00000, 0b00000, 0b01010, 0b00000, 0b00000, 0b10001, 0b01110,
0b00000 }; byte triste[8] = { 0b00000, 0b00000, 0b01010, 0b00000, 0b00000, 0b00000, 0b01110, 0b10001 };
void setup() {
lcd.createChar(1, feliz); lcd.createChar(2, triste); lcd.begin(16, 2); lcd.print("Arduino");
}
void loop() {
lcd.setCursor(4, 1); lcd.write(1); delay(2000); lcd.setCursor(4, 1); lcd.write(2); delay(2000); }
Teclado matricial
Teclado Matricial#include <Keypad.h>// usar este codigoconst byte filas = 4;const byte columnas = 4;char teclas[filas][columnas]={ {'0','1','2','3'}, {'4','5','6','7'}, {'8','9','A','B'}, {'C','D','E','F'}};byte pinFilas[filas]={30,32,34,36};byte pinColumnas[columnas]={22,24,26,28};Keypad teclado=Keypad(makeKeymap(teclas),pinFilas,pinColumnas,filas,columnas);
// usar hasta aquichar tecla;
void setup(){Serial.begin(9600);}
void loop(){tecla=teclado.getKey();if(tecla!=NO_KEY){ Serial.println(tecla); Serial.println(" "); Serial.println(tecla-48); }}
Sensor CNY70
• Azul Emisor– Señal infrarroja
• Rojo Receptor– Reflejo de superficie
CNY
70
Conexión
• El CNY70 devuelve por la pata de salida correspondiente, según el montaje, un voltaje relacionado con la cantidad de rayo reflectado por el objeto. Para el montaje A, se leerá del emisor un '1' cuando se refleje luz y un '0' cuando no se refleje. Para el montaje B los valores se leen del colector, y son los contrarios al montaje A.
Aplicaciones
• Seguidor de línea:– Con lectura digital 1 ó 0
• Identificador de colores:– Con lectura análoga 0 a 1023
Recomendación: Usar las superficies de incidencia muy cerca del sensor para mejor toma de datos.
SENSOR HC-SR04 • Características técnicas:• Los módulos incluyen transmisores ultrasónicos, el receptor y el circuito de control.• Número de pines:
– o VCC: Alimentación +5V (4.5V min – 5.5V max)– o TRIG: Trigger entrada (input) del sensor – o ECHO: Echo salida (output) del Sensor – o GND
• Corriente de reposo: < 2mA• Corriente de trabajo: 15mA• Ángulo de medición: 30º• Ángulo de medición efectivo: < 15º• Detección de 2cm a 400cm o 1" a 13 pies • (Sirve a más de 4m, pero el fabricante no garantiza una buena medición).• “Resolución” La precisión puede variar entre los 3mm o 0.3cm.
• Dimensiones: 45mm x 20mm x 15mm
• Frecuencia de trabajo: 40KHz
Funcionamiento
• Enviar un Pulso "1" de al menos de 10uS por el Pin Trigger (Disparador). El sensor enviará 8 Pulsos de 40KHz (Ultrasonido) y coloca su salida Echo a alto (seteo), se debe detectar este evento e iniciar un conteo de tiempo. La salida Echo se mantendrá en alto hasta recibir el eco reflejado por el obstáculo a lo cual el sensor pondrá su pin Echo a bajo, es decir, terminar de contar el tiempo. Se recomienda dar un tiempo de aproximadamente 50ms de espera después de terminar la cuenta. La distancia es proporcional a la duración del pulso y puedes calcularla
pulseIn()
• Sintaxis • pulseIn (pin, valor)
pulseIn (pin, valor de tiempo de espera) • Parámetros • pin: el número del pin en el que desea leer el pulso. (Int) • valor: tipo de impulso a leer: o ALTA o BAJA . (Int) • Tiempo de espera (opcional): el número de
microsegundos que esperar a que el pulso para empezar; por defecto es de un segundo (unsigned long)
Código
Conexión
MODULO BLUETOOTH HC-06
• Voltaje de alimentación: 3.3VDC – 6VDC.
• Voltaje de operación: 3.3VDC.
• Baud rate ajustable: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
• Tamaño: 1.73 in x 0.63 in x 0.28 in
(4.4 cm x 1.6 cm x 0.7 cm)
HC-06
Código
App inventor 2 - Android• http://ai2.appinventor.mit.edu/
• Cuenta de Google.• Programación de bloques.• Software libre.
Entorno App inventor 2
Barras
Matlab - Arduino
Para versiones superiores a la 2010a del MATLAB
En arduino
• Conectar la placa ARDUINO a través del cable USB.
• Verificar por cual “COM” quedo conectado. Nos dirijimos a Inicio>Equipo “Click derecho” >Administrar>Administrador de dispositivos>Puertos>Arduino Mega 2560, al lado derecho de “Arduino Mega 2560” sale el COMX, siendo X un nuevo entre 0 y 6 usualmente.
• Dentro del ARDUINO ir a Herramientas>Tarjeta y elegir la “placa ARDUINO MEGA 2560”
• Dentro del Arduino: Archivo>Abrir… Buscamos dentro de los archivos descargados en la siguiente dirección: ArduinoIO>pde>adiosrv>adiosrv.pde
• Teniendo el adiosrv abierto le damos a “cargar” y esperamos hasta que diga “Carga terminada.”
• Cerramos el “ARDUINO” para dejar de tener el puerto ocupado, así poder establecer ahora la conexión a través del MATLAB.
En matlab
• Se abre como administrador el MATLAB, MATLAB >„Click dereho‟>Ejecutar como administrador.
• El directorio “Current Folder” lo ubicamos dentro de la carpeta ArduinoIO.
• Procedemos a realizar la instalación adecuada insertando los comandos:
• Digitamos “install_arduino” (sin comillas).
• Ahora digitamos “a=arduino('COMX')” (sin comillas). Donde X es el puerto usado por el arduino
LM35 – Sensor de Temperatura
L293D – Puente H
Sentido del motor
Control de velocidad con Puente H
Códigoint pin2=9; //Entrada 2 del L293Dint pin7=10; //Entrada 7 del L293Dint pote=A0; //Potenciómetro int valorpote; //Variable que recoge el valor del
potenciómetroint pwm1; //Variable del PWM 1int pwm2; //Variable del PWM 2 void setup(){ pinMode(pin2,OUTPUT); pinMode(pin7, OUTPUT);} void loop(){ //Almacenamos el valor del potenciómetro en la variable valorpote=analogRead(pote);
//Como la entrada analógica del Arduino es de 10 bits, el rango va de 0 a 1023. //En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255. //Por esta razón tenemos que mapear el número de un rango a otro usando este código. pwm1 = map(valorpote, 0, 1023, 0, 255); pwm2 = map(valorpote, 0, 1023, 255, 0); //El PWM 2 esta invertido respecto al PWM 1 //Sacamos el PWM de las dos salidas usando analogWrite(pin,valor)
analogWrite(pin2,pwm1); analogWrite(pin7,pwm2);}
TSL235F