CÓDIGO FUENTE C_ARDUINO

Documentos relacionados
PROYECTO DE ELECTRÓNICA

LED INTERMITENTE CIRCUITO ELÉCTRICO MATERIALES PROGRAMA LED DOS CONECTORES CABLE USB ROBÓTICA. Puerto 8 ( salida al led rojo ) ARDUINO UNO 220 W GND

1. Escribir un dato digital del WinCC al Arduino

CONTROL DE UN SERVOMOTOR

Empieza con // y termina con la siguiente línea de código. Son ignorados por el programa y no ocupan espacio en memoria.

Clase 2: Programación

Trabajo Final: Sistema de Riego Arduino

Programa del curso de Arduino

Tema: Manejo de pantallas y teclados

Taller Introducción a la Ingeniería Eléctrica Robot y comunicaciones basados en Microcontrolador Arduino

Introducción a Arduino

Domótica con Arduino, WiFi y Android

PRÁCTICAS DE ARDUINO / VISUALINO

Bach. Pablo Sanabria Campos. Programa de Tecnologías Educativas Avanzadas

PRACTICAS CON ARDUINO

PRÁCTICA NÚMERO 5: COMUNICACIÓN ENTRE DOS ARDUINOS CON RF

CONCEPTOS BÁSICOS DE MICRO CONTROLADORES: CONOCIENDO A ARDUINO

Conviértete en un Joven Inventor PENTA UC TAV Humano-Máquina

CURSO: ROBÓTICA. CONECTANDO CON EL MUNDO FÍSICO

Conceptos básicos de Arduino:

ANEXO N 1. CÓDIGO PARA CONFIGURACIÓN DE MÓDULO BLUETOOTH POR MEDIO DE MICROCONTROLADOR ATMEGA328P

Display LCD y memorias

Taller de Hardware Libre con Arduino

Encender un LED utilizando un pulsador (Ref libro 1 pg 82 pero como y pg 132 como 1.2.3)

ARDUINO El proyecto Arduino: Recordando - Pines de entrada - Pines de salida - Microcontrolador - Conexión USB - IDE de arduino

La plataforma Arduino

ICP-CP516. Guía del usuario Teclados ICP-CP516

EJERCICIOS CON ARDUINO LED ENCENDIDO. Se conecta el Led al pin 52 y a alimentación. Compilar Se enciende el LED.

Arduino. Teclado matricial. Col1 Col2 Col3 Col4

ICP-CP508. Guía del usuario Teclados ICP-CP508

Tema: Manejo de pantallas LCD, botones y teclados

PROYECTO EN ARDUINO: SISTEMA DE SEGURIDAD CON SENSORES MAGNETICOS Y CONTRASEÑA

2. Programación en Arduino

PROYECTO ARDUINO AFINADOR DE GUITARRA. Jose Luis Ruiz López I.E.S Universidad Laboral

Control de LCD y sensor de temperatura

CALENTADOR DE AGUA SOLAR

Control por Computador. Manual de arduino. Jorge Pomares Baeza. Grupo de Innovación Educativa en Automática 2009 GITE IEA

El protocolo de los controles remotos: Philips RC-5

Módulo Radio frecuencia FSK y Arduino

ACTIVIDADES PROGRAMACIÓN CON ARDUINO

5.- ENTRADAS/SALIDAS DIGITALES

CONSTRUCCION DE TIMER PARA VUELO CIRCULAR CON MOTOR ELECTRICO

Arduino + módulo GSM/GPRS: monitorización, automatización y gestión remota en un viñedo.

APRENDE ARDUINO FACILMENTE CON MIRPAS.COM.

DISEÑO DE APLICACIONES ELECTRÓNICAS EN ARDUINO. Luis David Goyes Garcés Día 2

PROPUESTA ARDUINO por José Manuel Aranga Salazar

Alarma GSM. 1. Componentes

ICP-CP500. Guía del usuario. Teclados ICP-CP500

LUZ DE FRENO Con ARDUINO NANO y ACELEROMETRO ADXL345

Programación de Arduino

MARCADOR AUTOMÁTICO. Modelo AD-02. Instalación del marcador automático. Manual del Usuario

EL MICROCONTROLADOR ARDUINO

Movimiento de servos de rotación continua (Ref libro 1 pg 105)

Traductor Morse búcles, strings y arrays

DIMMER PARA TIRAS DE LEDS (RF203)

Crear una app con MIT inventor

Indicaciones para el correcto funcionamiento del sensor

Clase 4: Motores. Conviértete en un Joven Inventor PENTA UC

Programación de dispositivos Arduino Asignatura Sistemas Digitales!

JOHNNY 5. Competencia de robótica ~2015~ Categoría: Laberinto. Nombre robot: Zim. Institución: Club de Robótica FIUBA

Sencillo proyecto consistente en un LED que parpadea continuamente. Para ello debemos conectar un LED al pin 13 de la tarjeta controladora.

ARDUINO Y PHP Manejando entradas y salidas de Arduino como cliente web desde Php.

INTRODUCCIÓN DESCRIPCIÓN... 4 Características Hardware... 4

JUAN JOSÉ LÓPEZ ALMENDROS

PROCESAMIENTO DIGITAL DE SEÑALES PRÁCTICAS DE LABORATORIO CON ARDUINO DUE

Las 7 claves de Arduino UNO

ACTIVIDADES PROGRAMACIÓN CON ARDUINO. Todas las actividades siguientes se harán con el entrenador.

Arduino Uno con EtherShield y display LCD 44780

Control programado con ARDUINO TECNOLOGÍA

El Microcontrolador Arduino

Diseño Electrónico e Instrumentación Industrial. Sistema empotrado como núcleo de un Diseño Electrónico. El MSP430 Launchpad y Energía

VISUALINO Apuntes y Proyectos V

Primera práctica (blink): Hace parpadear un leda intervalos definidos.

Instalación y entorno de programación

Módulo Transceptor Inalámbrico NRF24L01 Número de Parte: MD0040

4 Dispositivos de E/S

Hardware Hacking en Ruby: Arduino y RAD. Esti Álvarez y Svet Ivantchev Conferencia Rails 2008

MIDIENDO DISTANCIAS CON UN SENSOR DE ULTRASONIDOS

Sensor de presencia PIR

MANUAL DE USUARIO DE LA CENTRAL JUNO-NET

+5V 8K2 1K5. Arduino. Display LCD

Qué es y por qué usarlo

Tutorial 18: Módulo Sensor Receptor Infrarrojo KY-005 Encender un Led con tu Control remoto.

Control por cable táctil KCT-02.1 SR KCT-02.1 SR

INGENIERÍA INDUSTRIAL RAFAEL LARROSA ESPEJO DISEÑO DE LA ADAPTACIÓN DE UN JUEGO DE AJEDREZ PARA PERSONAS CON MOVILIDAD REDUCIDA DAVID GONZÁLEZ DIEZ

Manual usuario alarmas zoom AZ021

CURSO: MICROCONTROLADORES UNIDAD 4: COMUNICACIÓN SERIE- ARDUINO PROFESOR: JORGE ANTONIO POLANÍA

INTERRUPTOR CREPUSCULAR CON LDR Y ARDUINO OBJETIVOS MATERIAL NECESARIO

Instituto Tecnológico de Colima

Práctica 6: Diseño de un control PI

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Control por cable táctil KJR-29B

Computación Física: Introducción al Arduino. Programando Arduino / Processing

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Tema 2. El lenguaje JAVA

Transcripción:

CÓDIGO FUENTE C_ARDUINO #include <EEPROM.h> // Libreria EEPROM incluida. #include <LiquidCrystal.h> // Libreria LiquidCrystal incluida. LiquidCrystal lcd(5, 4, 3, 2, A5, A4); // Asignación de pines de arduino para LiquidCrystal. #include <Keypad.h> // Libreria Keypad incluida char* secretcode = "1234"; // Variable que contiene el número PIN. char* secretcode2 = "12345678"; // Variable que contiene el número PUK. int position = 0; // Posición de inicio de la memoria EEPROM donde están guardados los números secretos. const byte rows = 4; // Número de filas del teclado. const byte cols = 3; // Número de columnas del teclado. char keys[rows][cols] = // Array de filas y columnas del teclado. '1','2','3', '4','5','6', '7','8','9', '*','0','#' ; byte rowpins[rows] = 12, 11, 10, 9; // Asignación de pines de arduino para las filas del teclado. byte colpins[cols] = 8, 7, 6; // Asignación de pines de arduino para las columnas del teclado. Keypad keypad = Keypad(makeKeymap(keys), rowpins, colpins, rows, cols); byte switchs = A0; // Pin de entrada para interruptores de puerta. byte pir = A3; // Pin de entrada para sensor de presencia. byte leds = A1; // Pin de salida para los leds de estado de la alarma. byte sirena = A2; // Pin de salida para el relé que activa la sirena. byte altavoz = 13; // Pin de salida para el altavoz. byte estado = 0; // Variable donde se almacena el estado de la alarma. byte cntpul = 0; // Contador de pulsaciones de botón del teclado. byte cntint = 0; // Contador de intentos para el código PIN y PUK. char recibirdato; // Variable para almacenar el dato recibido por el puerto serie. long tiempo; // Variable para guardar tiempo. char key; // Variable de lectura de teclado. boolean clavebien = false; // Variable para verificar si la clave es correcta. boolean clavemal = false; // Variable para verificar si la clave es errónea.

void setup() Serial.begin(19200); // Se establece la velocidad de transmisión en 19200 Bauds. lcd.begin(16, 2); // Se inicializa la pantalla del LCD con 16 columnas y 2 filas. pinmode(pir, INPUT); // pir es una entrada. pinmode(switchs, INPUT); // switchs es una entrada. pinmode(leds, OUTPUT); // leds es una salida. pinmode(sirena, OUTPUT); // sirena es una salida. pinmode(altavoz, OUTPUT); // altavoz es una salida. Serial.print("0"); // Inicializo imprimiendo "0" en el puerto serie. void loop() //// En el siguiente estado (estado '0') la alarma está apagada y necesita una clave para poderse activar //// El programa comienza su ejecución en este estado y realizará de forma secuencial las siguientes - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoserie()). - Poner a nivel bajo las salidas leds, sirena y altavoz. - Indicar en la pantalla LCD qué la alarma está inactiva. - Comprobar si se ha marcado algún número (a través de la subrutina clavepin()). - Verificar si el número marcado es el correcto (clavebien o clavemal). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. while(estado == 0) puertoserie(); digitalwrite(leds, LOW); digitalwrite(sirena, LOW); lcd.print("alarm OFF, press");

lcd.print("key to activate "); clavepin(); if(clavebien) estado = 1; Serial.print("1"); clavebien = false; else if(clavemal) estado = 5; Serial.print("5"); clavemal = false; //// En el siguiente estado (estado '1'), la alarma acaba de activarse, pero no estará operativa hasta que pasen 20 segundos //// En este estado, el programa realizará de forma secuencial las siguientes - Poner a nivel alto el indicador de alarma activa (led verde). - Indicar en la pantalla LCD qué la alarma se conectará pasados 20 segundos. - El programa espera 20 segundos. - Posteriormente, el programa pasa a estado '2'. - Notifica el cambio a través del puerto serie. while(estado == 1) digitalwrite(leds, HIGH); digitalwrite(sirena, LOW); lcd.print("alarm ON, 20 sc "); lcd.print("to activate "); delay(20000); estado = 2; Serial.print("2");

//// En el siguiente estado (estado '2') la alarma está operativa e inspecciona si un intruso ha entrado en casa //// En este estado, el programa realizará de forma secuencial las siguientes - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoserie()). - Poner a nivel alto solo el indicador de alarma activa (led verde). - Indicar en la pantalla LCD qué la alarma está operativa. - Verificar si el sensor pir o los interruptores de puerta han detectado algún intruso. En el caso de detectar a algún intruso, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. while(estado == 2) puertoserie(); digitalwrite(leds, HIGH); digitalwrite(sirena, LOW); lcd.print("on, press key "); lcd.print("to desactivate "); if(digitalread (switchs) == HIGH digitalread (pir) == HIGH) estado = 3; Serial.print("3"); delay(1000); //// En el siguiente estado (estado '3') la alarma acaba de detectar un intruso y pondrá en funcionamiento la sirena si en 20 segundos no se introduce el código PIN //// En este estado y durante 20 segundos, el programa realizará de forma secuencial las siguientes - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoserie()). - Poner a nivel alto solo el indicador de alarma activa (led verde).

- Indicar en la pantalla LCD qué la alarma debe desactivarse en menos de 20 segundos. - Comprobar si se ha marcado algún número (a través de la subrutina clavepin()). - Verificar si el número marcado es el correcto (clavebien o clavemal). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. while(estado == 3) tiempo = millis() + 20000; do digitalwrite(leds, HIGH); digitalwrite(sirena, LOW); lcd.print("desactivate in "); lcd.print("20 seconds "); clavepin(); if(clavebien clavemal (Serial.available()>0)) break; while(tiempo > millis()); puertoserie(); if(clavebien) estado = 0; Serial.print("0"); clavebien = false; else if(clavemal) estado = 6; Serial.print("6"); clavemal = false; else if (estado!= 0) estado = 4;

Serial.print("4"); //// En el siguiente estado (estado '4') la sirena de la alarma está en funcionamiento y se necesita el código PIN para detener la alarma //// En este estado, el programa realizará de forma secuencial las siguientes - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoserie()). - Poner a nivel alto el indicador de alarma activa (led verde). - Poner a nivel alto el relé que activa la sirena. - Indicar en la pantalla LCD qué la alarma qué la alarma está en funcionamiento y necesita clave para desactivarse. - Comprobar si se ha marcado algún número (a través de la subrutina clavepin()). - Verificar si el número marcado es el correcto (clavebien o clavemal). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. while(estado == 4) puertoserie(); digitalwrite(leds, HIGH); digitalwrite(sirena, HIGH); lcd.print("on, press key "); lcd.print("to desactivate "); clavepin(); if(clavebien) estado = 0; Serial.print("0"); clavebien = false; else if(clavemal) estado = 6;

Serial.print("6"); clavemal = false; //// En el siguiente estado (estado '5') el código PIN está bloqueado y se necesita el código PUK para activar la alarma //// En este estado, el programa realizará de forma secuencial las siguientes - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoserie()). - Poner a nivel bajo las salidas leds, sirena y altavoz. - Indicar en la pantalla LCD qué el código PIN está bloqueado y se necesita introducir el código PUK para activar la alarma. - Comprobar si se ha marcado algún número (a través de la subrutina clavepuk()). - Verificar si el número marcado es el correcto (clavebien). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. while(estado == 5) puertoserie(); digitalwrite(leds, LOW); digitalwrite(sirena, LOW); lcd.print("pin locked "); lcd.print("enter PUK code "); clavepuk(); if(clavebien) estado = 1; Serial.print("1"); clavebien = false;

//// En el siguiente estado (estado '6') el código PIN está bloqueado y se necesita el código PUK para desactivar la alarma //// En este estado, el programa realizará de forma secuencial las siguientes - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoserie()). - Poner a nivel alto el indicador de alarma activa (led verde). - Poner a nivel alto el relé que activa la sirena. - Indicar en la pantalla LCD qué el código PIN está bloqueado y se necesita introducir el código PUK para desactivar la alarma. - Comprobar si se ha marcado algún número (a través de la subrutina clavepuk()). - Verificar si el número marcado es el correcto (clavebien). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. while(estado == 6) puertoserie(); digitalwrite(leds, HIGH); digitalwrite(sirena, HIGH); lcd.print("on, enter PUK "); lcd.print("to desactivate "); clavepuk(); if(clavebien) estado = 0; Serial.print("0"); clavebien = false; //// Subrutina puertoserie() ////

En esta subrutina el programa realizará de forma secuencial las siguientes - Comprobar si el puerto serie está disponible. - En el caso de que esté disponible, verificar que dato se ha recibido. - Si el dato recibido es 1 el programa irá al estado 1. - En cambio, si es 0 el programa irá al estado 0. - En cualquier caso, se notificará del cambio efectuado a la aplicación c# vía puerto serie. void puertoserie() if(serial.available()>0) recibirdato = Serial.read(); if(recibirdato == '1') estado = 1; Serial.print("1"); else if (recibirdato == '0') estado = 0; Serial.print("0"); //// Subrutina clavepin() //// En esta subrutina el programa realizará de forma secuencial las siguientes - Detectar qué teclas han sido pulsadas. - Comprobar si el número pulsado coincide con el número secreto de la clave:

Si esto es así, la variable booleana clavebien será verdadera, el LCD pondrá clave correcta y el altavoz emitirá un bip corto. - Si por el contrario, el número no coincide con la clave secreta y se ha intentado introducirlo más de tres veces: La variable booleana clavemal será verdadera, el LCD pondrá Pin bloqueado y el altavoz emitirá un bip largo. - Las teclas * y # se usarán para borrar las teclas presionadas y poder pulsar el código de nuevo. void clavepin() key = keypad.getkey(); if (key == '*' key == '#') position = 0; cntpul = 0; delay(100); if (key == secretcode[position]) position ++; delay(100); if (key >= '0') cntpul ++; delay(100); if (cntpul == 4) if (position == 4) clavebien = true; cntpul = 0; cntint = 0; position = 0; lcd.clear(); lcd.print("correct key ");

else cntpul = 0; cntint ++; position = 0; lcd.clear(); lcd.print("wrong key "); delay(2000); if (cntint == 3) cntint = 0; clavemal = true; lcd.clear(); lcd.print("pin locked "); lcd.print("enter PUK code "); delay(2000); //// Subrutina clavepuk() //// En esta subrutina el programa realizará de forma secuencial las siguientes - Detectar qué teclas han sido pulsadas. - Comprobar si el número pulsado coincide con el número secreto de la clave: Si esto es así, la variable booleana clavebien será verdadera, el LCD pondrá clave correcta y el altavoz emitirá un bip corto. - Si por el contrario, el número no coincide con la clave secreta: El LCD pondrá Clave errónea y el altavoz emitirá un bip largo. - Las teclas * y # se usarán para borrar las teclas presionadas y poder pulsar el código de nuevo. void clavepuk() key = keypad.getkey();

if (key == '*' key == '#') position = 0; cntpul = 0; delay(100); if (key == secretcode2[position]) position ++; delay(100); if (key >= '0') cntpul ++; delay(100); if (cntpul == 8) if (position == 8) clavebien = true; cntpul = 0; position = 0; lcd.clear(); lcd.print("correct key "); else cntpul = 0; position = 0; lcd.clear(); lcd.print("wrong key "); delay(2000);