FINALIDAD:
Consiste en diseñar y montar un puente levadizo, controlado con Arduino. El proyecto consta de modo automático y modo manual. En el primer caso el puente se elevará automáticamente cuando detecte al barco, y descenderá cuando haya pasado. En el segundo caso el puente será manejado a través de dos interruptores.
Este proyecto es adecuado para realizarlo con alumnos de 3º o 4º de la E.S.O. dentro de la asignatura de Tecnología.
REALIZADO POR:
Daniel Gil Fuentes.Raquel Sastre Velasco.
Dentro de la asignatura: Innovación docente en la especialidad de tecnología. Incluida en el Máster de Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanzas de Idiomas. Curso 2016-17.
¿QUÉ NECESITAMOS?
Materiales electrónicos:
Materiales para realizar la maqueta:
MONTANDO EL CIRCUITO EN LA PROTOBOARD:
Empezaremos montando todos los componentes electrónicos en la protoboard según se muestra en la imagen siguiente realizada con fritzing.
Puente levadizo.
Conecta el servo motor, el cable rojo a 5V, el cable negro a tierra y el cable amarillo al pin 9. Debes conectar también el condensador en paralelo al servo motor.
Modo automático.
Conecta los fotosensores a 5V y a los pin A1 y A2 respectivamente. Y conecta según la imagen las resistencias de 10 kiloohmnios.
Semáforo.
Conecta el positivo de los led a los pin 2,3 y 4, (teniendo en cuenta que el positivo es el conector más largo), y en el negativo conecta la resistencia de 220 ohmnios.Modo manual.
Por último conecta los interruptores a los pin 10 y 11 respectivamente. Y conecta según la imagen las resistencias de 10 kiloohmnios.
ESQUEMA ELÉCTRICO:
CÓDIGO:
El siguiente código debes subirlo a la placa de Arduino a través de la IDE de Arduino:int switchstate1 = 0;
int switchstate2 = 0;
//sensores de luz.
// variable to hold sensor value
int sensorValue1;
int sensorValue2;
// variable to calibrate low value
int sensorLow = 1023;
// variable to calibrate high value
int sensorHigh = 0;
// LED pin
//servomotor
// include the servo library
#include <Servo.h>
//servomotor
Servo myServo; // create a servo object
void setup() {
// put your setup code here, to run once:
// declare the LED pins as outputs
pinMode(2, OUTPUT); //Verde
pinMode(3, OUTPUT); //Rojo
pinMode(4, OUTPUT); //Amarillo
pinMode(10, INPUT);
pinMode(11, INPUT);
//Sensores luz
// Make the LED pin an output and turn it on
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
myServo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600); // open a serial connection to your computer
// calibrate for the first five seconds after program runs
while (millis() < 5000) {
// record the maximum sensor value
sensorValue1 = analogRead(A1);
sensorValue2 = analogRead(A2);
if (sensorValue1 > sensorHigh) {
sensorHigh = sensorValue1;
}
if (sensorValue2 > sensorHigh) {
sensorHigh = sensorValue2;
}
// record the minimum sensor value
if (sensorValue1 < sensorLow) {
sensorLow = sensorValue1;
}
if (sensorValue2 < sensorLow) {
sensorLow = sensorValue2;
}
Serial.print("sensorHigh: ");
Serial.println(sensorHigh);
Serial.print("sensorLow: ");
Serial.println(sensorLow);
}
// turn the LED off, signaling the end of the calibration period
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
{
//Sensores.
//read the input from A0 and store it in a variable
sensorValue1 = analogRead(A1);
//read the input from A0 and store it in a variable
sensorValue2 = analogRead(A2);
}
switchstate1 = digitalRead(11);
switchstate2 = digitalRead(10);
if (switchstate1==LOW) {
if (sensorValue1<700) {
// set the servo position
digitalWrite(4, HIGH); // turn the yellow LED on pin 4 on
digitalWrite(2, LOW); // turn the green LED on pin 2 off
delay(3000);
myServo.write(60);
digitalWrite(3, HIGH); // turn the red LED on pin 3 on
}
if (sensorValue2<700) {
// set the servo position
delay(3000);
myServo.write(0);
digitalWrite(4, HIGH); // turn the yellow LED on pin 4 on
digitalWrite(3, LOW); // turn the red LED on pin 3 off
delay(3000);
digitalWrite(4, LOW); // turn the yellow LED on pin 4 off
digitalWrite(2, HIGH); // turn the green LED on pin 2 on
delay(15);
}
}
else {
if (switchstate2==HIGH){
myServo.write(60);
digitalWrite(3, HIGH); // turn the red LED on pin 3 on
digitalWrite(2, LOW); // turn the green LED on pin 2 off
delay(15);
}
else {
myServo.write(0);
digitalWrite(4, HIGH); // turn the yellow LED on pin 4 on
digitalWrite(3, LOW); // turn the red LED on pin 3 off
delay(3000);
digitalWrite(4, LOW); // turn the yellow LED on pin 4 off
digitalWrite(2, HIGH); // turn the green LED on pin 2 on
delay(15);
}
}
}
FUNCIONAMIENTO:
El siguiente vídeo muestra como funciona el puente en modo automático y en modo manual.
Modo automático:
Cuando el arduino detecta al barco a través del foto sensor 1, envía una señal al semáforo y este cambia primero a ámbar y después a rojo. A continuación se eleva el puente. Porteriormente el barco atraviesa el canal y sólo cuando el barco llega al foto sensor 2, se envía la orden al semáforo y este cambia primero a ámbar y después a verde. A continuación el puente desciende para que puedan circular los vehículos.
Modo manual:
En este modo el puente se eleva mediante dos interruptores; al pulsar el primero se acciona el modo manual, y el segundo levanta y baja el puente.