RESOLUCION DE LA SEGUNDA PRÁCTICA INGENIERIA BASICA DOCENTE: DR. ING. CORDOVA ZAPATA, ELMER. ALUMNO: Guillen Huamani Y. Diego
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. b) Escribir el programa en app inventor c) Dibujar el circuito de conexión y escribir el programa en arduino.
String readString; void setup() { Serial.begin(9600); //Salidas digitales pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); } void loop() { while (Serial.available()) {
delay(10); if (Serial.available() >0) { char c = Serial.read(); readString += c; } } if (readString.length() >0) { if(readString == "2on") { Serial.print("Encender pin 2"); digitalWrite(2, HIGH); } if(readString == "2off") { Serial.print("Apagar pin 2"); digitalWrite(2, LOW); } if(readString == "3on") { Serial.print("Encender pin 3"); digitalWrite(3, HIGH); } if(readString == "3off") { Serial.print("Apagar pin 3");
digitalWrite(3, LOW); } if(readString == "4on") { Serial.print("Encender pin 4"); digitalWrite(4, HIGH); } if(readString == "4off") { Serial.print("Apagar pin 4"); digitalWrite(4, LOW); } readString=""; } }
En este caso es un arduino mini pero en arduino uno la parte de entrada y salida es similar
2) Se trata de construir un robot seguidor de línea utilizando la tarjeta ARDUINO UNO. a) Determine las entradas y salidas de la tarjeta arduino. b) Dibujar el circuito de conexión y escribir el programa.
#define M1A 19 //Motor 1A #define M1B 18 //Motor 1B #define M2A 17 //Motor 2A #define M2B 16 //Motor 2B #define PIN_PWM 11 //Modulación por ancho de pulso - Emular salida analógica con salida digital
#define VEL
100 //Velocidad
#define S1 0 //IZQ #define S2 1 //DER #define _UMBRAL_ 200 //Umbral de los sensores unsigned long timeserial;
void setup (){
Serial.begin(9600); timeserial = millis(); pinMode(M1A, OUTPUT); pinMode(M1B, OUTPUT); pinMode(M2A, OUTPUT); pinMode(M2B, OUTPUT); STOP(10000); analogWrite(PIN_PWM, VEL); }
void loop() { byte SDER = (analogRead(S1)> _UMBRAL_ )?0:1; byte SIZQ = (analogRead(S2)> _UMBRAL_ )?0:1; if(SDER && SIZQ) STOP(0); else if (!SDER && SIZQ) DER(0); else if (SDER && !SIZQ)
IZQ(0); else ADE(0); if(millis() - timeserial > 500){ timeserial = millis();
Serial.print("Sensor1: "); //Serial.print(SDER);
Serial.print(analogRead(S1)); Serial.print(" Sensor2: "); //Serial.println(SIZQ);
Serial.println(analogRead(S2)); } }
void ATR(uint16_t time){ digitalWrite(M1A, HIGH); digitalWrite(M1B, LOW); digitalWrite(M2A, HIGH); digitalWrite(M2B, LOW); delay(time); }
void ADE(uint16_t time){ digitalWrite(M1A, LOW); digitalWrite(M1B, HIGH); digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH); delay(time); }
void DER(uint16_t time){ //Llanta Izquierda digitalWrite(M1A, HIGH); digitalWrite(M1B, LOW);
//llanta Derecha digitalWrite(M2A, LOW); digitalWrite(M2B, HIGH); delay(time); }
void IZQ(uint16_t time){ //Llanta Izquierda digitalWrite(M1A, LOW); digitalWrite(M1B, HIGH);
//Llanta Derecha digitalWrite(M2A, HIGH); digitalWrite(M2B, LOW); delay(time); }
void STOP(uint16_t time){ digitalWrite(M1A, LOW); digitalWrite(M1B, LOW); digitalWrite(M2A, LOW); digitalWrite(M2B, LOW); delay(time); }
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 generada por un potenciómetro desde una entrada analógica. Se establece 3 diodos leds conectados a las salidas pin3, pin4, pin5. La entrada la conectaremos en la entrada analógica pin2 (analogIN2) a) Determinar las entradas t salidas de la tarjeta arduino uno. b) Dibujar el circuito de conexión y escribir el programa. Se trata de construir u indicador de nivel que sea capaz de medir el valor de una señal de entrada generada por un potenciómetro desde una entrada analógica. Se establecerán 3 diodos Led conectados a las salidas PIN6, PIN7 y PIN8. La entrada la
int ledPin1 = 5; // Selección de PIN para cada LED int ledPin2 = 4; int ledPin3 = 3; int inPin= 2; // selecciona la entrada analógica 1 (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 me dida es > 256 enciende LED del PIN5 if (val>= 256) digitalWrite(ledPin1, HIGH); // Si el valor de la señal m edida es > 512 enciende LED del PIN4 if (val>= 512) digitalWrite(ledPin2, HIGH); // Si el valor de la señal me dida es > 758 enciende LED 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 un peatón accione sobre el pulsador situado en el semáforo, este pasara a amarillo para vehículos estado que durara 3 segundos. Finalizado ese, pasara a estado rojo para vehículos y verde para peatones. El tiempo de duración fijado para rojo vehículo 6 segundos. Finalizado el proceso, el semáforo regresará 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.
// Declaramos la variable para el pin del boton const int button = 8; void setup() { // Con un ciclo activamos los pines del 2 al 7 como salidas for (int pin = 2; pin <= 7; pin++) { pinMode(pin, OUTPUT); } // El pin del boton lo po nemos como entrada pinMode(button, INPUT); } // Funcion para el primer semaforo y sus cambios de estado void semaphoreOne() { digitalWrite(2, HIGH); int count = 0; while (count < 30) { // El ciclo esta en espera m ientras el boton no es presionado if (digitalRead(button) == true) { break; } count++; delay(300); } digitalWrite(2, LOW); delay(500); digitalWrite(2, HIGH);
delay(500); digitalWrite(2, LOW); delay(500); digitalWrite(2, HIGH); delay(500); digitalWrite(2, LOW); delay(500); digitalWrite(2, HIGH); delay(500); digitalWrite(2, LOW); delay(500); digitalWrite(2, HIGH); delay(500); digitalWrite(2, LOW); digitalWrite(3, HIGH); delay(3000); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(7, LOW); // Mandamos a llamar al o tro semaforo semaphoreTwo(); } // Funcion para el segundo semaforo y sus cambios de estado void semaphoreTwo() { digitalWrite(5, HIGH); int count = 0; while (count < 30) { if (digitalRead(button) == true) { break; } count++; delay(200); } digitalWrite(5, LOW); delay(500); digitalWrite(5, HIGH); delay(500); digitalWrite(5, LOW); delay(500); digitalWrite(5, HIGH); delay(500); digitalWrite(5, LOW); delay(500);
digitalWrite(5, HIGH); delay(500); digitalWrite(5, LOW); delay(500); digitalWrite(5, HIGH); delay(500); digitalWrite(5, LOW); digitalWrite(6, HIGH); delay(6000); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(4, LOW); // Mandamos a llamar al o tro semaforo semaphoreOne(); } // Iniciamos nuestro semaforo void loop() { // Cambiamos el estado de todos los leds para // que esten apagados todos al inicio for (int pin = 2; pin <= 7; pin++) { digitalWrite(pin, LOW); } // Prendemos el verde de un semaf oro y el // rojo del otro semafor o digitalWrite(2, HIGH); digitalWrite(7, HIGH); // Iniciamos el primer se maforo semaphoreOne(); }
5)