S E G U N D A P R A C T I C A S E M E S T R E 2 0 1 4 -I -I I N G E N IE IE R I A B A S I C A
1. Se desea controlar vía bluetooth el encendido y apagado de las lámparas de tres habitaciones de una vivienda, empleando la tarjeta ARDUINO UNO. a) Determine las entradas y salidas de la tarjeta ARDUINO UNO. b) Escribir el programa de App inventor. c) Dibujar el circuito de conexión conexión y escribir el programa en ARDUINO.
2. Se trata de construir un robot seguidor de línea utilizando la tarjeta ARDUINO UNO. a) Determinar las entradas y salidas de la tarjeta ARDUINO UNO. b) Dibujar el circuito de conexión y escribir el programa.
Sol.Entradas: Pulsador Entrada, Sensor derecho e izquierdo Salidas: motores A, B, C y D PROGRAMA: Byte i; Void setup () {
// variable global
// Declaración de pines de entrada y salida pinMode(12, INPUT); pinMode(2, INPUT); pinMode(4, INPUT); pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(9, OUTPUT); digitalWrite(12, HIGH);
// Pulsador entrada // Sensor Derecho // Sensor izquierdo // Motor A atrás // Motor A adelante // Motor B adelante // Motor B Atrás // Pull up para pulsador
} void loop() { Inicio:
// etiqueta de inicio del programa por uso de saltos
analogWrite(5, 0); analogWrite(6, 0); analogWrite(3, 0); analogWrite(9, 0);
// Velocidad 0 // Velocidad 0 // Velocidad 0 // Velocidad 0
// Pulsador para inicio de ejecucion, el programa solo iniciara cuando se pulse while (digitalRead(12)==0); // una vez sea pulsado se espera a que se deje de presionar para iniciar delay(100); // retardo de 100ms se evitan rebotes while (digitalRead(12)==1);
For (;;) {
// Lectura de las señales digitales y ejecución cuando los dos sensores están en blanco // Movimiento adelante { analogWrite(5, 80); if (digitalRead(4) && digitalRead(2))
analogWrite(6, 80); analogWrite(3, 0); analogWrite(9, 0); } else if (!digitalRead(2) && digitalRead(4))
// Lectura de las señales digitales y ejecucion cuando el sensor izquierdo entra a la línea negra { analogWrite(5, 23); analogWrite(6, 0); analogWrite(3, 0); analogWrite(9, 23); } else if (digitalRead(2) && !digitalRead(4))
// Lectura de las señales digitales y ejecucion cuando el sensor derecho entra a la línea negra { analogWrite(5, 0); analogWrite(6, 23); analogWrite(3, 23); analogWrite(9, 0); } else
// Lectura de las señales digitales y ejecución cuando los dos sensores están en línea negra { analogWrite(5, 0); analogWrite(6, 0); analogWrite(3, 0); analogWrite(9, 0); } if (digitalRead(12)==0)
// Lectura del pulsador de
arranque y parada { while (digitalRead(12)==0);
// Si fue pulsado espera
a que se deje de presionar y para delay(100);
// retardo de 100ms se evitan
rebotes goto inicio;}
pulso para arranque } }
// Vuelve a inicio a esperar
3. Se trata de construir un indicador de nivel (vúmetro con diodos leds) que sea capaz de medir el valor de una señal de entrada por un potenciómetro desde una entrada analógica. Se establecerán 3 diodos leds conectados a las salidas PIN3, PIN4 Y PIN5. La entrada la conectaremos en la entrada analógica PIN2 (analog IN2). a) Determinar las entradas y salidas de la tarjeta arduino uno. b) Dibujar el circuito de conexión y escribir el programa. Sol.Entradas: inPIN Salidas: ledPIN1, ledPIN2, ledPIN Programa: int ledPin1 = 5; // Selección de PIN para cada LED int ledPin2 = 4; int ledPin3 = 3; int inPin= 2; // selecciona la entrada analógica 2 (potenciómetro) void turn_off() { //Apaga los 3 LEDS digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); digitalWrite(ledPin3, LOW); } void setup() { pinMode(ledPin1, OUTPUT); // declara LEDs como salidas pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT);
turn_off(); } void loop(){ int val; val= analogRead(inPin); // lee el valor de la señal analógica turn_off(); // apaga los tres LED // Si el valor de la señal medida es > 256 enciendeLED del PIN5 if (val>= 256) digitalWrite(ledPin1, HIGH); // Si el valor de la señal medida es > 512 enciendeLED del PIN4 if (val>= 512) digitalWrite(ledPin2, HIGH); // Si el valor de la señal medida es > 758 enciendeLED del PIN3 if (val>= 768) digitalWrite(ledPin3, HIGH); }
4. Se dispone de un semáforo, el cual en condiciones normales se encuentra del modo siguiente: Verde Vehículos Rojo peatones
En el mismo instante que en peatón accione sobre el pulsador situado en el semáforo, este pasara a amarillo para vehículos, estado que durara durante 3”. Finalizado este, pasara a estado rojo para vehículos y verde para peatones. El tiempo de duración fijado para rojo vehículos: 6”. Finalizado el
proceso, el semáforo regresara al estado normal. Durante el tiempo de duración del ciclo, deberá evitarse que cualquier nueva activación sobre el pulsador verde, rearme el ciclo.
Sol.Entradas: El botón Salidas: la luces del semáforo y del peatón Programa: int carRojo = 12; // se asignan los colores para los autos int carAmarillo = 11; int carVerde = 10; int pedRojo = 9; // se asignan las luces para las personas int pedVerde = 8; int button = 2; // button pin int crossTime = 6000; // Tiempo para cruzar Unsigned long changeTime; // Tiempo desde que el botón es presionado void setup() { pinMode(carRojo, OUTPUT); pinMode(carAmarillo, OUTPUT); pinMode(carVerde, OUTPUT); pinMode(pedRojo, OUTPUT); pinMode(pedVerde, OUTPUT); pinMode(button, INPUT); // button on pin 2
// turn on the green light digitalWrite(carVerde, HIGH); digitalWrite(pedRojo, HIGH); } void loop() { int state = digitalRead(button);
/* check if button is pressed and it is over 6 seconds since last button press */ if (state == HIGH && (millis() - changeTime) > 6000) {
// Call the function to change the lights change Lights(); } } void changeLights() { digitalWrite(carVerde, LOW); // green off digitalWrite(carAmarillo, HIGH); // yellow on delay(3000); // espera 3 segundos digitalWrite(carAmarillo, LOW); // yellow off
digitalWrite(carRojo, HIGH); // red on delay(1000); // wait 1 second till its safe digitalWrite(pedRojo, LOW); // ped red off digitalWrite(pedVerde, HIGH); // ped green on delay(crossTime); // wait for preset time period
// flash the ped green digitalWrite(pedVerde, LOW); // ped red off for (int x=0; x<10; x++) { digitalWrite(pedRojo, HIGH); delay(500); digitalWrite(pedRojo, LOW); delay(500); }
// turn ped red on digitalWrite(pedRojo, HIGH); delay(500); digitalWrite(carAmarillo, HIGH); // yellow on digitalWrite(carRojo, LOW); // red off delay(1000); digitalWrite(carVerde, HIGH); digitalWrite(carAmarillo, LOW); // yellow off
// record the time since last change of lights changeTime = millis();
// then return to the main program loop }