Breve Explicacion Del Arduino
Breve Explicacion Del Arduino
ARDUINO
PLACA ARDUINO
La placa Arduino esta compuesta por diferentes pines que cumplen las distintas funciones.
Arduino va a necesitar una tensión externa de referencia para poder “leer” esa señal,
entonces si por ejemplo estoy trabajando con el sensor cuya tensión máxima es 1,5 V , si
toma como referencia 5 V será muy imprecisa la medición entonces AREF nos permite
establecer ese valor máximo de referencia para poder mejorar la lectura del sensor.
protoboard
ESTRUCTURA DE PROGRAMACIÓN:
● FUNCIONES: son las encargadas de realizar tareas, setup y loop son dos funciones pero no
son las unicas , las funciones tienen un nombre y un conjunto de estamentos que se ejecutan
al llamarse la función, la estructura de la funcion es la siguiente
type es la funcion con la que se trabaja, el nombre de la función es el mismo nombre con que
se la definio y los parametros son las condiciones a cumplir por ejemplo en la función void
setup lo que se hace es definir que es cada pin , por eso el type es void ( que significa vacio,
ya que no va a devolver ningun valor sino que va a ejecutarse ) el nombre de la función es
setup y el parametro al ser vacio se coloca (), por eso la función setup se escribe
3
void setup ( )
● ENTRE LLAVES {}
las llaves indican el principio y el final de una función, siempre se debe colocar al inicio de los
estamentos y al finalizarlos, siempre que se inicia una funcion se coloca llave y cuando se
termina se cierra la llave, caso contrario el programa dara error
● PUNTO Y COMA ;
Se utiliza para separar lineas de programación cada vez que se finaliza una linea se coloca ;
● BLOQUE DE COMENTARIOS: // se indica con dos barras permiten comentar cada linea de
programación para hacer aclaraciones o visibilizar para el programador referencias, al
colocar // el programa ignora lo que se escribe a continuacion de las mismas
● VARIABLES:
es una manera de nombrar y almacenar un valor numérico para su posterior uso , es por eso
que se inicia la programación declarando variables ya que nos indicara que datos se
almacenan y que pin se utiliza. La variable será global si se puede usar por cualquier función,
por eso se declara al principio del programa ya que se utlizara dentro de void setup y/o void
loop. La variable sera local si solo puede ser utilizada dentro de la función por ejemplo si
defino la variable dentro de void loop , esa variable no se puede usar en void setup.
Tipos de varibles
int: variable entero, son datos primarios que almacenan valores enteros, estos valores pueden ir
entre 32767 y – 32768, ej
int numero = 1500;
byte : almacena un valor numerico de 8 bits sin decimales, tiene un rango de entre 0 y 255 en
decimal o 00000000 hasta 11111111( Con 8 bits se pueden representar 28 caracteres, lo que en decimal equivale a 256
combinaciones posibles, desde el 0 hasta el 255.)
ej
byte numero = 180
long: se refiere anumeros enteros extendidos va desde -2147483648 hasta 2147483647 ( 2 32)
ej
long numero = 10254
CONSTANTES
Son valores predeterminados, se usan para hacer los programas mas fáciles de leer
● IF: indica si una determinada condición se ha alcanzado, por ejemplo determinar si un valor
analógico esta por encima de cierto numero
if ( a>2)
{ instrucción de que debe pasar
}
if ( a > 2 )
{ insrrucción que debe pasar
}
else
{ instrucción que pasa “sino”
}
● FOR: se usa para repetir un bloque de sentencias encerradas entre llaves un número
determinado de veces, la declaracion for tiene 3 partes , la inicialización, que indica de donde
se parte, la condición que se testea cada vez que se termina la ejecución del bucle, y la
expresión que inndica que se debe hacer
for ( inicializacion, condicion , expresion)
pinMode(pin,mode):
se usa en setup y sirve para configurar el modo de trabajo de un pin, o sea se indica si es una
entrada o una salida, pudiendo ser input u output ( entradas o salidas)
pinMode(pin, OUTPUT)
digitalRead(pin): lee el valor de un pin ( lee los valores de una entrada por ejemplo un sensor)
digitalWrite(pin, value): envia al pin determinado como salida el valor high o low , se us apor
ejemplo en un motoral que se le manda una señal
digitalWrite(pin,HIGH)
analogRead(pin): lee el valor de un pin analógico ( lee los valores de una entrada de los pines de
0 a 5 puede oscilar entre 0 a 1023)
PRÁCTICAS
6
ejemplos de programación
int led = 5;
void setup(){
pinMode(led, OUTPUT); //se define el pin como salida
}
void loop()
{
digitalWrite(led, HIGH); //indica que el led se enciende
delay(2000);
digitalWrite(led, LOW); delay(2000);
}
int led1=3;
int led2=4;
void setup()
{
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop()
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay(2000);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay(2000);
}
int led1=3;
int led2=4;
8
void setup()
{
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop()
{
digitalWrite(led1,HIGH);
delay(2000);
digitalWrite(led1,LOW);
delay(2000);
digitalWrite(led2,HIGH);
delay(2000);
digitalWrite(led2,LOW);
delay(2000);
}
9
int rojo=6; //se definen donde se conectan los leds con salidas
int amarillo=7;
int verde=8;
void setup() { //se definen las salidas
pinMode(rojo,OUTPUT); // se define al led como salida que prende
pinMode(amarillo,OUTPUT);
pinMode(verde,OUTPUT);
digitalWrite(rojo,LOW); // indica que empiezan apagados los leds
digitalWrite(amarillo,LOW);
digitalWrite(verde,LOW);
}
void loop(){ //funcionamiento
digitalWrite(rojo,HIGH);
delay(4000);
digitalWrite(rojo,LOW);
digitalWrite(amarillo,HIGH);
delay(2000);
digitalWrite(amarillo,LOW);
digitalWrite(verde,HIGH);
delay(4000);
digitalWrite(verde,LOW);
digitalWrite(amarillo,HIGH);
delay(2000);
digitalWrite(amarillo,LOW);
}
10
en este caso se usa el comando if , porque si esta apretado circula corriente entonces se enciende
el led, sino esta apretado no circula corriente y el led esta apagado, el pulsador es una salida
entonces se usa digitalRead , el led es una entrada entonces se usa digitalWrite. Como se quiere
determinar si esta o no circulando corriente se usa la condicion de comparacion entonces se indica
if(digitalRead==HIGH) para saber si esta o no circulando corriente
void setup () {
void loop () {
if ( digitalRead (pulsador) ==HIGH) // se compara a ver si hay o no en este caso el pulsador
tensión tiene dos opciones, que
usando == ( esta es la este en 0V (LOW) o que
condición este en 5V ( HIGH) si el
verdadera ) pulsador esta apretado
{ digitalWrite(led ,HIGH); // se indica que el led se debe encender circula corriente ( HIGH) y
al si no esta apretado no
pulsar (condicion verdadera) circula (LOW)
}
para que funcione se usa
else { la funcion if (si) lo que
digitalWrite(led ,LOW) ; // se indica que si no esta pulsado se hace esta función es
apaga comparar si la tensión es
} alta (HIGH) o baja ( LOW)
primero se indica la
} condicion verdadera y se
indica que debe suceder
para el caso de que sea
verdadera y luego se
coloca else (sino) para
determinar que debe
ocurrir si la condicion no
es asi
6) con un pulsador cambiar el estado actual del led ( de encendido a apagado y viceversa)
como si fuera un pulsador con retencion ( SE PULSA Y EL LED QUEDA ENCENDIDO, SE
VUELVE A PULSAR Y SE APAGA )
while : ( mientras) si la condicion establecida es verdadera ejecuta todo lo que este dentro de el si
es falso hace la otra condicion
int led = 3;
int pulsador = 2;
int ESTADO = LOW ;// se comienza con led apagado
void setup () {
pinMode (pulsador , INPUT) ; // indico que el pulsador es una entrada
pinMode (led, OUTPUT); // indico que el pulsador es una salida
12
}
void loop () {
while ( digitalRead (pulsador) ==LOW) // si el valor es bajo no hace nada
ESTADO = digitalRead (led); // verifica si el led esta encendido o apagado
digitalWrite(led,!ESTADO); // !niega la variable (not) o que hace es cambiar al opuesto
while(digitalRead(pulsador)==HIGH){ //impide el rebote del pulsador
}
}
7 ) programación variar led con potenciometro y sin potenciometro de manera que al llegar al
maximo valor de luminosidad luego comience a diminuir la misma hasta apagarse
digitalWrite : la salida digital tiene dos valores 0 y 5 V en digital son las únicas dos posibilidades 0
o 5V , si queremos hacer que varie desde un valor a otro y que pase por todos los valores debemos
usarlo en forma analógica y para ello se agrega un potenciómetro para regular el valor entre 0 y 5 V
13
cuando programamos el digitalWrite lo que hace es mandar tensión durante un determinado tiempo
y luego deja de enviar y viceversa por ejemplo quedando el grafico de arriba.
Un
potenciometro (PWM, modificación de ancho de pulso) lo que hace es modificar el ciclo de trabajo
se tiene un ciclo de trabajo del 20% o sea 1V , el segundo un 50% o sea 2,5 V y el tercero un 80% o
sea 4 V asi se cambia la tensión al valor deseado y eso hace por ejemplo que cambie la
luminosidad de un led .
En la placa arduino no todos los pines digitales se pueden conectar al potenciómetro los que
pueden conectarse estan indicados con un símbolo ~
a) con potenciometro
para el pote se usa A0
14
int led = 3 ;
int brillo;
int pote = 0; // como es una entrada analógica no necesita definirlo en void setup
void setup () {
pinMode ( led, OUTPUT);
}
void loop () {
brillo = analogRead (pote)/4; // se indica que el brillo se regula con la entrada analogica del pote
analogWrite(led,brillo); // se indica que el led cambiara su brillo con el potenciometro
}
se usa analog porque debe tomar valores analógicos ya que son los que permiten variar en toda
su extension de un intervalo y así al variar la tensión varía la luminosidad del led, el digital solo
puede ir de un extremo a otro por ej 0 o 5V en cambio el analógico va de 0 a 5V pasando por todos
los valores intermedios , el valor que puede tomar en la placa arduino es de 0 a 255 donde 0 es
0V y 255 es 5V, por ejemplo si quiero trabajar con una tensión máxima de 2,5V tomare como valor
maximo 127 ya que 2,5 es la mitad de 5 y 127 de 255, hago un proporcional para cada Voltaje
las variables analógicas trabajan con valores de 0 a 1023, pero analog write trabaja con
valores de 0 a 255 esto hace que no se puede usar ese valor entonces para poder hacerlo se
divide por 4 el valor de analogRead que es lo que lee el potenciometro asi al hacer 1023 /4 =
255,75 entonces al trabajar con enteros se toma ese valor 255 asi al divido por 4 tendre la
variable dada por analog read dentro del rango de trabajo del analogWrite
b) sin potenciometro
int led = 3 ;
int brillo;
void setup () {
pinMode ( led, OUTPUT);
}
void loop () {
for ( brillo = 0 ; brillo < 256 ;brillo ++ ) {
analogWrite (led,brillo); // el led ira aumentando el brillo de brillo 0, el siguiente 1 asi hasta 255
delay (15);
se usan dos for en este caso debido a que se quiere que aumente el brillo y despues cuando llegue
al maximo disminuya de lo contrario al llegar al maximo valor se apagaria y volveria a empezar de 0
For: permite repetir un bloque en base a una condición una determinada cantidad de veces.
Requiere de tres parametros el primero es el valor inicial de la variable por ejemplo 0 el segundo
parámetro es el valor verdadero que debe cumplir si esto se cumple entonces ejecuta la accion que
le indicamos entre llaves y el tercero nos indica en el siguiente bucle en cuento tiene que aumentar
la variable inicial por ejemplo en un led se pone
for (brillo =0 ; brillo <256; brillo ++)
el comando for empieza por el valor del primer parametro analiza si se cumple la del segundo
parametro y si se cumple continua con lo que indica el tercer parametro sino sale , en el ejemplo
empieza de 0 V despues se fija si el valor es menor a 255 (5v ) y si es verdadero al primer valor le
aumenta 1
SENSOR ULTRASÓNICO
emite una
frecuencia de 400 khz , que al rebotar y devolver la onda de sonido permite indicar la distancia, es
un sensor activo porque tiene que estar conectado para poder usarse, tiene 4 pines Vcc y GND son
las conexiones de alimentación Trg es el pin al que se le envia una señal para el pulso ultrasonico y
16
echo recibe la señal de vuelta trg ( triger ) y echo van conectados a pines digitales mientras que
Vcc va a 5V
8) encender una luz de emergencia cuando un sensor detecte la cercania con un objeto
esquema de conexionado
cuando se trabaja con un sensor ultrasónico se deben definir las variables, estas en nuestro
ejemplo serán el led, el sensor ( que tiene dos conexiones digitaes trg y echo) y dos datos que se
deben considerar distancia y duracion de la señal
void setup()
{
pinMode(TRIG, OUTPUT); // trigger como salida
pinMode(ECO, INPUT); // echo como entrada
pinMode(LED, OUTPUT); // LED como salida
Serial.begin(9600); // inicializacion de comunicacion serial a 9600 bps
17
en el void loop primero se le debe indicar al programa el tiempo en el cual el sensor debe emitir la
señal, estos tiempos varian de acuerdo al fabricante del sensor en el caso de los nuestros es 1 ms
por eso se debe indicar ese tiempo de encendido, por eso usamos digitalWrite ya que nos permite
encenderlo 1ms que emita la señal y luego apagarlo
void loop() {
digitalWrite(TRIG, HIGH); // encendemos el sensor
delay(1);
digitalWrite(TRIG, LOW); // lo apagamos
despues se debe tomar el tiempo que tarda en responder ya que de acuerdo a el sera la distancia
entonces ahi usamos la variable duración en esta se una la fcion pulseIn y trabaja con echo porque
es el pin que recibe la señal de vuelta y HIGH porque espera tensión alta, luego se determina con
ese tiempo de respuesta la distancia a la que se encuentra el objeto, para ello se usa la variable
distancia que sera el tiempo / 58.2 que es una contante del sensor ( dada por el fabricante)
para encender el led se puede usar if por ej si detecta menos de 20 cm se enciende el led
programa completo
void setup()
{
pinMode(TRIG, OUTPUT); // trigger como salida
pinMode(ECO, INPUT); // echo como entrada
pinMode(LED, OUTPUT); // LED como salida
Serial.begin(9600); // inicializacion de comunicacion serial a 9600 bps
18
void loop()
{
el servo permite un movimiento de giro de 180°, si se le envia una señal durante 20 ms y un pulso
de 1 ms indica 0° si se envia un pulso de 2 ms se le indica que gire 180° cualquier valor intermedio
da el resto de los angulos entre ellos
Cuando se trabaja con servomotores se debe alimentar en forma externa ya que la tension que
suministra el cable usb de la computadora no es suficiente para que funcione el servomotor.
para usar los servomotores arduino tiene una librería, esta librería es un conjunto de funciones que
se pueden usar en el codigo, para usarla se coloca
#include <Servo.h>
Servo servo1; // esto crea un objeto tambien puedo llamarlo por ej motor 1 entonces pongo
Servo motor1
luego ponemos el pin donde vamos a conectar el servo y el valor de pulso mínimo y máximo del
servo, estos valores si bien son 1 ms y 2 ms , no puedo ponerlo en esa unidad ya que se generaria
una redundancia con el valor del pin entonces se pone como 1000 y 2000 respectivamente ya que
se expresa en microsegundos
int pinservo = 2;
int pulsominimo = 1000; // equivale a 0 °
int pulsomaximo = 2000; // equivale a180°
para controlar el servo se usa la función attach, esta permite inicializar el servo , la funcion tiene tres
variables la primera el pin donde se conecta el servo, la segunda el valor de pulso minimo y la
tercera el valor de pulso maximo, quedando
void setup() {
servo1.attach(pinservo,pulsominimo,pulsomaximo);
}
en este caso se utiliza la función write para indicarle la posición en la que se debe ubicar el servo
void loop() {
servo1.write(0);
delay(5000);
servo1.write(180);
delay(5000);
}
20
#include <Servo.h>
Servo servo1; // esto crea un objeto tambien puedo llamarlo por ej motor 1 entonces pongo
Servo motor1
int pinservo = 2;
int pulsominimo = 1000; // equivale a 0 °
int pulsomaximo = 2000; // equivale a180°
void setup() {
servo1.attach(pinservo,pulsominimo,pulsomaximo);
}
void loop() {
servo1.write(0);
delay(5000);
servo1.write(180);
delay(5000);
}
si el angulo que se desplaza el servo no es de 180° se debe variar los valores de pulso maximo y
minimo hasta encontrar el adecuado para ese motor ( el valor es 700, 2350 )
se agregara un potenciometro que nos va a permitir mover el servo, como el pote va a ir conectada
a salida analogica no es necesario definirlo pero si se va a definir una variable para que lea al
potenciometro ( valorpot) el angulo que tiene que moverse el servo y el valor inicial del pote o sea 0
#include <Servo.h>
Servo servo1;
int pinservo = 2;
int pulsominimo = 1000; // equivale a 0 °
int pulsomaximo = 2000; // equivale a180°
int valorpote;
int angulo;
int pote = 0;
void setup() {
servo1.attach(pinservo,pulsominimo,pulsomaximo);
}
en void loop se va a definir la forma como se usa el potenciometro para que haga mover el motor
el valor del pote se debe definir como una entrada analogica por eso al valorpote se la asocia con
analogRead.
21
Para el angulo se usa una funcion llamada map, en esta se convierte la señal analogica en un
rango de angulo valor analogico que lee el potenciometro sera 0 y 1023 y este se convierte en una
rango de 0 a 180 °, este resultado se asigna a la variable angulo y se coloca un delay para darle
tiempo al servo a llegar a su posicion cuanto mas pesado sea el objeto que mueva el servomotor se
debe aumentar este tiempo
void loop() {
valorpote = analogRead(pote);
angulo = map(valorpote,0,1023,0,180)
servo1.write(angulo);
delay(20);
#include <Servo.h>
Servo servo1;
int pinservo = 2;
int pulsominimo = 1000; // equivale a 0 °
int pulsomaximo = 2000; // equivale a180°
int valorpote;
int angulo;
int pote = 0;
void setup() {
servo1.attach(pinservo,pulsominimo,pulsomaximo);
}
void loop() {
valorpote = analogRead(pote);
angulo = map(valorpote,0,1023,0,180);
servo1.write(angulo);
delay(20);
#include <Servo.h>
Servo servo1;
Servo servo2;
int pot1=A0;
int pot2=A1;
int valpot1;
int valpot2;
void setup()
{
servo1.attach(3);//pin donde se conecta el servo1
22
CONEXIONADO
en algunos sensores aparece que se debe usar resistencia pull up o pull down esto significa que se
debe conectar al positivo de tension (pull up) o a masa ( gnd, pull down)
estos sensores permiten leer temperatura y/o humedad, se debe utilizar librería pero esta no vienen
descargadas con arduino por eso se debe descargar, para ello se va a programa, incluir librería y
gestionar librería
24
alli se busca el sensor deseado que sera dht ( adafruit ) y se instala con el arduino 1.0.5 se va
sketch y alli importar librería para poder descargarla, primero se debe descargarla en la compu
desde internet y luego se la instala
una vez hecho esto en cualquiera de los dos casos se vuelve a ingresar a sketch ( para 1.0.5, o a
programa en 1.8 ) y se importa la librería que dice DHT unified sensor y se comienza a trabajar
#include <DHT.h>
#include <DHT_U.h>
luego se incluyen las variables del sensor que seran el pin donde se conectan , la temperatura y la
humedad que se quiere leer
int sensor =2 ;
int temeratura;
int humedad;
void setup(){
25
Serial.begin(9600);
djt.begin();
}
void loop() {
temperatura = dht.readTemperature(); // se le pide al sensor que lea la temperatura
humedad=dht.readHumidity(); // se le pide al sensor que lea la humedad
Serial.print(“temperatura: ”); // se pide que muestre la lectura de temperatura
Serial.print(temperatura);
Serial.print(“humedad: ”);
Serial.println(humedad); // con esto se hace un salto de linea
delay(500);
}
el codigo queda
#include <DHT.h>
#include <DHT_U.h>
void loop(){
TEMPERATURA = dht.readTemperature(); // obtencion de valor de temperatura
HUMEDAD = dht.readHumidity(); // obtencion de valor de humedad
Serial.print("Temperatura: "); // escritura en monitor serial de los valores
Serial.print(TEMPERATURA);
Serial.print(" Humedad: ");
Serial.println(HUMEDAD);
delay(500);
}
i#include <DHT.h>
#include <DHT_U.h>
26
void loop(){
TEMPERATURA = dht.readTemperature(); // obtencion de valor de temperatura
HUMEDAD = dht.readHumidity(); // obtencion de valor de humedad
float temperatura = analogRead(0);
float milivoltios = ( temperatura / 1023 ) * 5000;
temperatura = milivoltios / 10;
if (TEMPERATURA > 30 && TEMPERATURA < 40) {
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
} else {
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
Serial.print("Temperatura: "); // escritura en monitor serial de los valores
Serial.print(TEMPERATURA);
Serial.print(" Humedad: ");
Serial.println(HUMEDAD);
delay(500);
}
}
27
El relé
permite con una tensión de 5 V se puedan abrir circuitos con otras tensiones
Cuando la corriente circula por la bobina se genera un campo electromagnético que mueve el brazo
superior del relé se vincula con el terminal común, cuando no circula corriente el terminal común
esta en contacto con NC si se aplica tensión se genera un campo electromagnético se mueve el
brazo y el terminal común pasa a normal abierto este campo se genera con 5 V y al entrar en
contacto el terminal común con el normal abierto entonces se cierra el circuito.
Módulo Relé
dentro
del módulo
de relé se
tiene
un
28
octoacoplador y alli un led y un transistor, este transistor es fotosensible y funciona cuando el led se
enciende, entonces al circular corriente por el led , se enciende y hace funcionar al transistor, este
enciende el transistor NPN y hace funcionar el relé.
El octacoptador es un elemento de protección ya que como el relé es mecanico puede fallar si esto
pasa puede quemar el transistor pero nunca al led que no tiene contacto con el relé y si con la placa
arduino, entonces si se falla el relé no afecta al arduino.
Esquema de conexión
29
int LedPin = 9;
void setup() {
30
void loop() {
conexiones
código
reemplaza byte en lugar de int , byte tiene una longitud de 8 bits , la mitad de int y permite
almacenar valores entre 0 y 255 mientras que int tiene 16 bits y permite almacenar valores desde
-32768 y 32768.
const es constante y esta le dice que el valor no puede ser modificado, o sea que si le damos un
valor 4 en el programa no se puede modificar luego ( trabajo en este programa con 4 filas)
array :
el array
es un
32
conjunto de valores a los que se puede acceder mediante un índice , en este caso si tomara un
array ( llamado MIARRAY) el tamaño se establece con el número entre corchetes por ej si tiene [6]
indica que hay 6 espacios para almacenar, cada valor debe estar asociado a un número de índice,
se suele asignar como i
índice inicial el valor 0, o sea el primer valor tiene índice 0 , el segundo valor índice 1 y así
sucesivamente
esto se asigna indicando
VALOR = MIARRAY[0]// VALOR = 1
char significa carácter, esto permite ingresar un numero, una letra un asterisco etc y observarlo
se quiere hacer una clave de ingreso para ello se debe comparar la clave ingresada con una clave
maestra y si coinciden se abre la puerta, si bien la clave es de 6 digitos se le asigna 7 caracteres
porque uno será nulo
char TECLA; // almacena la tecla presionada
char CLAVE[7]; // almacena en un array 6 digitos ingresados
char CLAVE_MAESTRA[7] = "123456"; // almacena en un array la contraseña maestra
byte INDICE = 0; // indice inicial del array
void loop(){
TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable
if (TECLA) // comprueba que se haya presionado una tecla
{
CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
INDICE++; // incrementa indice en uno, indica que el segundo valor va en el segundo índice
Serial.print(TECLA); // envia a monitor serial la tecla presionada
}
con la funcion if lo que hacemos es determinar, si ya hay 6 dígitos introducidos, entonces compara
la clave introducida con la maestra ( función stream compear (strcmp) si es la misma devolvera e
valor correcta, sino incorrecta
if(INDICE == 6) // si ya se almacenaron los 6 digitos
{
if(!strcmp(CLAVE, CLAVE_MAESTRA)) // compara clave ingresada con clave maestra
Serial.println(" Correcta"); // imprime en monitor serial que es correcta la clave
else
Serial.println(" Incorrecta"); // imprime en monitor serial que es incorrecta la clave
INDICE = 0;
}
}
codigo terminado
void setup()
{
Serial.begin(9600); // inicializa comunicacion serie
}
void loop(){
TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable
if (TECLA) // comprueba que se haya presionado una tecla
{
CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
INDICE++; // incrementa indice en uno
Serial.print(TECLA); // envia a monitor serial la tecla presionada
}
INDICE = 0;
}
}
void setup()
{
Serial.begin(9600); // inicializa comunicacion serie
pinMode(pinled,OUTPUT);
}
void loop(){
TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable
if (TECLA) // comprueba que se haya presionado una tecla
{
CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
INDICE++; // incrementa indice en uno
Serial.print(TECLA); // envia a monitor serial la tecla presionada
}
if(INDICE == 6) // si ya se almacenaron los 6 digitos
{
if(!strcmp(CLAVE, CLAVE_MAESTRA)) // compara clave ingresada con clave maestra
Serial.println(" Correcta"); // imprime en monitor serial que es correcta la clave
else
Serial.println(" Incorrecta"); // imprime en monitor serial que es incorrecta la clave
36
INDICE = 0;
}
if(!strcmp(CLAVE, CLAVE_MAESTRA))
{
digitalWrite(pinled,HIGH); // Enciende luz
}
}
16) si se introduce la clave correcta se enciende un led verde sino uno rojo
#include <Keypad.h>
// importa libreria Keypad
const byte FILAS = 4;
// define numero de filas
const byte COLUMNAS = 4; // define numero de columnas
char keys[FILAS][COLUMNAS] = { // define la distribucion de teclas
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {9,8,7,6}; // pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {5,4,3,2}; // pines correspondientes a las columnas
byte pinled=10;
37
byte pinled2=11;
void setup(){
Serial.begin(9600);
pinMode(pinled,OUTPUT);
pinMode(pinled2,OUTPUT);
}
void loop(){
TECLA = teclado.getKey();
if (TECLA != NO_KEY){
Serial.println(TECLA);
CLAVE[INDICE]= TECLA;
INDICE++;
}
if (INDICE==6){
byte check =0;
for(int i=0;i<6;i++){
Serial.print(CLAVE[i]);
if (CLAVE[i]==CLAVE_MAESTRA[i]){
check++;
}
}
if (check== 6) {
digitalWrite(pinled, HIGH);
digitalWrite(pinled2, LOW);
Serial.println("GREEN");
}else{
digitalWrite(pinled2, HIGH);
digitalWrite(pinled, LOW);
Serial.println("RED");
}
INDICE=0;
}
}
MODULO LCD
38
41
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // pines RS, E, D4, D5, D6, D7 de modulo 1602A
Emite una radiación infraroja que permite detectar el movimiento, es pasivo ya que solo recibe señal
y no emite , permite detectar ojjetos a 6 m e distancia
programa:
40
primero se define el pin donde se conecta el sensor y el relé y una variable para almacenar el valor
leido de señal de sensor que la llamamos ESTADO, para indicar si su estado es encendido o
apagado, se pone 0 ya que se presume que el sensor no ha leido nada todavia
int PIR = 2; // señal de PIR a pin 2
int RELE = 3; // IN de rele a pin 3
int ESTADO = 0; // almacena estado de señal
se define entrada y salida se coloca un tiempo para estabilizar el sensr dado por el fabricante
void setup(){
pinMode(PIR, INPUT); // pin 2 como entrada
pinMode(RELE, OUTPUT); // pin 3 como salida
delay(20000); // demora para estabilizar el sensor
}
se define las ordenes para que cumpla la funcion, aca se obtiene la lectura del sensor si este esta
recibiendo señal ( HIGH) activa el relé, ( recordar que actúa en LOW), entonces hacemos que SI el
sensor detecta movimiento el relé se encienda, SINO el relé se apaga, se coloca un tiempo de 4 seg
para que no se perjudique al relé ya que es mecánico y se puede dañar
void loop(){
el programa queda
void setup(){
pinMode(PIR, INPUT); // pin 2 como entrada
pinMode(RELE, OUTPUT); // pin 3 como salida
delay(20000); // demora para estabilizar el sensor
}
void loop(){
ejemplo