martes, 13 de febrero de 2018

PROYECTO DE UN CENTRO LOGÍSTICO INTELIGENTE CON ARDUINO

Figura 1: Vista del acceso al centro

OBJETIVO

Queremos diseñar un centro de almacenamiento controlado por arduino. El proyecto consta de una barrera de acceso al centro que se abre y se cierra de manera automática ante la presencia de un vehículo, y de tres silos de almacenamiento de mercancía en los que un led se enciende o se apaga de forma automática cuando en dichos silos hay almacenada una carga.

Se trata de un proyecto adecuado para realizar con alumnos de 4º de E.S.O.

AUTORES

José Miguel Morales Alonso.
César Sánchez García.
Julián Alaejos Casado.

Dentro de la asignatura Innovación Docente en la especialidad de Tecnología perteneciente al Máster de Profesorado de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas. Curso 2017/2018.

COMPONENTES ELECTRÓNICOS

Figura 2: Soldador de estaño

Figura 3: Protoboard

Figura 4: Leds

Figura 5: Placa de arduino

Figura 6: Cables de conexión

Figura 7: Resistencias

Figura 8: Sensor de luz

Figura 9: Servo motor

COMPONENTES Y HERRAMIENTAS PARA REALIZAR LA MAQUETA

Figura 10: Palos de helado

Figura 11: Cartulinas

Figura 12: Celo

Figura 13: Cutter

Figura 14: Poliestireno expandido (porexpan)


Figura 15: Pegamento

Figura 16: Palillos de madera

Figura 17: Papel de aluminio

Figura 18: Cartón pluma

PROCESO DE EJECUCIÓN DE LA MAQUETA

Figura 19

Figura 20

Figura 21

Figura 22

Figura 23

Figura 24

Figura 25

Figura 26

Figura 27

ESQUEMA CON FRITZING

Figura 28: Esquema de conexionado de sensores capacitivos

Figura 29: Esquema de conexionado del servo

CÓDIGO

Sensores Capacitivos.

// Se incluye la librería necesaria para el uso del sensor capacitivo.

#include <CapacitiveSensor.h>

// Se establece que en los sensores capacitivos, los pines 2, 4 y 6 manden una señal eléctrica y los pines 3, 5 y 7 perciban variaciones en la capacidad.

CapacitiveSensor capSensor1 = CapacitiveSensor(2, 3);
CapacitiveSensor capSensor2 = CapacitiveSensor(4, 5);
CapacitiveSensor capSensor3 = CapacitiveSensor(6, 7);

// Se establecen los umbrales para activar los sensores capacitivos.

int threshold = 25;
int threshold2 = 200;

// Definimos las salidas digitales que se corresponderán con las luces LED que se encenderán o apagarán en función de lo que detecte el sensor capacitivo.

const int ledPin1 = 10;
const int ledPin2 = 11;
const int ledPin3 = 12;

// Comenzamos el programa. Con la función SETUP() establecemos las condiciones de partida, es
decir, configuramos Arduino. Se invoca una sola vez al iniciar el programa.

void setup() {

// Encendemos el puerto Serie a 9600 baudios para ver por pantalla los valores que nos puedan
resultar ser interesantes.

Serial.begin(9600);

// Definimos los pines digitales 1, 2 y 3 como salidas.

  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);

  pinMode(ledPin3, OUTPUT);

// Escribimos aquí el código de instalación para ejecutarlo una vez.

void loop() {

// Primero almacenamos los valores leídos por los sensores capacitivos en una variable "sensorValue".

  long sensorValue1 = capSensor1.capacitiveSensor(300);
  long sensorValue2 = capSensor2.capacitiveSensor(300);
  long sensorValue3 = capSensor3.capacitiveSensor(300);

// Imprimimos en el puerto serie los valores leídos por los sensores capacitivos para poder percibir
posibles irregularidades.

  Serial.print("sensor Value1: ");
  Serial.println(sensorValue1);
  Serial.print("sensor Value2: ");
  Serial.println(sensorValue2);
  Serial.print("sensor Value3: ");
  Serial.println(sensorValue3);

// Si el valor del sensor 1 es superior al umbral.

if (sensorValue1 > threshold) {

// Se enciende el LED 1.

digitalWrite(ledPin1, HIGH);
  }

// Y si el valor del sensor 1 es inferior al umbral.

else {

// El LED 1 se apaga.

digitalWrite(ledPin1, LOW);
}

// Si el valor del sensor 2 es superior al umbral.

if (sensorValue2 > threshold) {

// Se enciende el LED 2.

digitalWrite(ledPin2, HIGH);
  }

// Y si el valor del sensor 2 es inferior al umbral.

else {

// El LED 2 se apaga.

digitalWrite(ledPin2, LOW);
}

// Si el valor del sensor 3 es superior al umbral.

if (sensorValue3> threshold) {

// Se enciende el LED 3.

digitalWrite(ledPin3, HIGH);
  }

// Y si el valor del sensor 3 es inferior al umbral.
else {

// El LED 3 se apaga.

digitalWrite(ledPin3, LOW);
}

// Se mantiene a la espera medio segundo.

  delay(500);
}

Motor Servo.

//Incluimos librería y variables del servo.

#include <Servo.h>

// Creamos un objeto servo.

Servo myServo;

//Definimos las variables para los sensores de luz 1 y 2.

int sensorValue1;
int sensorValue2;

// Variables para calibrar los valores  bajos.

int sensorLow1 = 1023;
int sensorLow2 = 1023;

// Variables para calibrar los valores  altos.

int sensorHigh1 = 0;
int sensorHigh2 = 0;

// Variable para definir el estado (carretilla fuera).

int dentro = 0;

// Variable para definir el estado (carretilla dentro).

int dentro = 1;

//  Para iniciar las variables, establecer el estado de los pins, etc, utilizamos la función setup() que se establece cuando se inicia un programa -sketch. Esta función se ejecutará una única vez después de que se conecte la placa Arduino a la fuente de alimentación, o cuando se pulse el botón de reinicio de la placa.

void setup() {

// conecta el servo en el pin 8.

myServo.attach(8);

// Iniciamos el modo monitor serie para ver los valores que recogemos con los sensores.

Serial.begin(9600);

// Realizamos la calibración de los sensore de luz que se llevara a cabo durante los 5 primeros segundos (5000 milisegundos) desde que arranca el programa. Leerá de A1 y A2 (entradas analógicas) los datos procedentes del exterior y asignara el valor más alto de luz a sensorHigh y el valor más bajo a sensorLow.

while (millis() < 5000) {
    sensorValue1 = analogRead(A1);
    sensorValue2 = analogRead(A2);
    if (sensorValue1 > sensorHigh1) {
      sensorHigh1 = sensorValue1;
    }
    if (sensorValue1 < sensorLow1) {
      sensorLow1 = sensorValue1;
    }
    if (sensorValue2 > sensorHigh2) {
      sensorHigh2 = sensorValue2;
    }
    if (sensorValue2 < sensorLow2) {
      sensorLow2 = sensorValue2;
    }
  }
  }

// La función loop se corresponde con un bucle infinito.

void loop() {

//Escribimos en el puerto serial los valores leídos.

  Serial.print("sensor1: ");
  Serial.println(sensorValue1);
  Serial.print("sensor2: ");
  Serial.println(sensorValue2);
  Serial.print("dentro: ");
  Serial.println(dentro);

// Si la carretilla está fuera asignamos a las variables sensorValue1 y sensorValue2 los valores de las entradas A1 y A2.

  if(dentro==0){
  sensorValue1 = analogRead(A1);
  sensorValue2 = analogRead(A2);

// Si el valor del sensor 1 es menor a 500 la posición del servo será 2 grados (barrera abierta).

  if (sensorValue1 < 500) {
  myServo.write(2);

// Se mantiene a la espera 5 segundos.

delay(5000);

// Si el valor del sensor 2 es menor a 500 la posición del servo será 90 (barrera cerrada) grados y se establece el estado “dentro=1” (carretilla dentro).

if (sensorValue2 < 500) {
  myServo.write(90);
 dentro = 1;

// Se mantiene a la espera 5 segundos.

delay(5000);

//Escribimos en el puerto serial los valores leídos.

Serial.print("dentro: ");
 Serial.println(dentro);
 }
 }

// Si la carretilla está dentro asignamos a las variables sensorValue1 y sensorValue2 los valores de las entradas A1 y A2.

if (dentro==1){
 sensorValue1 = analogRead(A1);
 sensorValue2 = analogRead(A2);

// Si el valor del sensor 2 es menor a 500 la posición del servo será 2 grados (barrera abierta).

if (sensorValue2 < 500) {
  myServo.write(2);

// Se mantiene a la espera 5 segundos.

delay(5000);

// Si el valor del sensor 1 es menor a 500 la posición del servo será 90 grados (barrera cerrada) y se establece el estado “dentro=0” (carretilla fuera).

if (sensorValue1 < 500){
  myServo.write(90);
  dentro = 0;

// Se mantiene a la espera 5 segundos.

delay(5000);

//Escribimos en el puerto serial los valores leídos.

Serial.print("dentro: ");
  Serial.println(dentro); 
 }
 }

// Se mantiene a la espera 100 milisegundos.

delay(100);
}

VÍDEO DEMOSTRATIVO DEL FUNCIONAMIENTO



lunes, 12 de febrero de 2018

PROYECTO ARDU-RADAR: RADAR CONTROLADO POR ARDUINO

DESCRIPCIÓN

El proyecto consiste en un radar controlado por Arduino Uno R3, movido por un servomotor y con detección de objetos a través de un sensor de ultrasonidos HC-SR04. Cuenta además con un display LCD 1602, un led RGB para señalizar los distintos modos de funcionamiento activos (amarillo: modo manual; verde: modo auto; rojo:deteccion de intruso), relé y módulo láser, un sensor de temperatura LM35 que nos dará una lectura de la temperatura ambiente, un joystick y un pulsador.

Por su complejidad tanto de programación como de montaje, se trata de un proyecto posiblemente más orientado a Bachillerato o a determinados Ciclos de Formación Profesional.



REALIZADO POR

Alberto Regalado López
Abraham Sánchez Roldán

Como proyecto 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 2017-2018.


COMPONENTES








ESQUEMA CON FRITZING




CÓDIGO

Enlace Arduradar_FinalVersion.ino




FUNCIONAMIENTO

El radar dispone de dos modos de funcionamiento:

Manual: se activa al alimentar Arduino. Permite mover con el joystick el servo y con el pulsador del propio joystick (presionando hacia adentro), activa el relé y el módulo láser durante 2,5 segundos. En la pantalla LCD se muestra el ángulo en el que se encuentra el servomotor y la distancia medida por el sensor de ultrasonidos. El led RGB se ilumina en amarillo. Este modo se utilizará como modo de mantenimiento típico en máquinas automáticas (ideal para calibrados, ajustes, pruebas, detección de averías, etc.)

Automático: se activa cuando desde el modo manual se acciona un pulsador de cambio de modo. Desde ese momento, en la pantalla LCD se muestra un mensaje indicando que el modo automático se ha activado, la temperatura y la distancia medida. El servo realiza barridos desde 15 a 165 grados (limitación dada por el mecanismo realizado con piezas de LEGO) de forma continua, comprobando que el área cubierta por el radar esté libre de objetos

En el caso de que existiera algún objeto por debajo de 20 cm, el servomotor se detiene, led RGB pasa a color rojo, y en el LCD se muestra que se ha detectado un intruso y a qué distancia. Se activan también de forma intermitente el zumbador, láser apuntando al objeto, y el relé, el cuál desactiva la iluminación general de la zona de trabajo del radar (en nuestro caso, un flexo de escritorio a 230VAC). Una vez el objeto sea retirado, el sistema vuelve al modo automático.

La detección se produce cuando el objeto se encuentra a una determinada distancia o menos del radar (20 cm, pudiendo cambiarse en programa). 



VÍDEO





GALERÍA DE IMÁGENES






domingo, 12 de febrero de 2017

PROYECTO PUENTE LEVADIZO CONTROLADO CON ARDUINO.


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.


jueves, 9 de febrero de 2017

PROYECTO ARDUINO: TIOVIVO





DATOS

Universidad de Salamanca (España).

Máster de Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas, especialidad en Tecnología.

Asignatura: Innovación docente en la especialidad de Tecnología.

Curso: 2016 / 2017


COMPONENTES

Jorge Vega
Rafael Pinto
Carlos Álvarez


INTRODUCCIÓN

El enunciado de la Actividad determinaba que, utilizando la Placa Arduino, teníamos que diseñar un proyecto en el que utilizáramos, al menos, dos componentes de entrada y dos de salida. También deberíamos programar el sistema para que, a partir de unas órdenes dadas, respondiera de forma predeterminada.

Es entonces cuando nos decantamos por construir un Tiovivo, ya que deberíamos utilizar un motor como componente principal. Al principio queríamos añadir luces al mismo Tiovivo, pero enseguida nos dimos cuenta que la rotación de éste podría suponer un problema. Ahí es cuando decidimos colocar esta especie de "entrada" al parque temático.

Cuando ya tuvimos claro cuales serían los componentes de salida, nos centramos en los de entrada, y, después de unos minutos de análisis, decidimos colocar dos switches (uno para on/off y el otro para cambiar sentido de rotación) y un sensor lumínico.


VÍDEO DEL PROYECTO




FUNCIONAMIENTO DEL PROYECTO

El sistema es sencillo y lógico:

Por un lado el Tiovivo, hecho de palos de helado sujetos por varillas de madera, con un motor en la base. Hemos pegado en la parte inferior del Tiovivo un trozo de madera circular con un hueco en el centro, de forma estrellada, que combina perfectamente con la forma estrellada que tiene el motor.
El dispositivo se acciona y se para mediante un interruptor o switch, que podéis ver como está conectado tanto con la placa Arduino como con el motor en el apartado "esquema del circuito". También hemos añadido otro switch para cambiar el sentido de rotación del motor.

Para conseguir que el motor modere su velocidad sin utilizar a un reductor mecánico, hemos insertado dos "delay" en la programación. (Podréis ver la programación entera en el apartado "código empleado").


if (motorEnabled == 1) {

    analogWrite(enablePin, motorSpeed); 

    delay(35);

    analogWrite(enablePin, 0);

    delay(100);

    analogWrite(enablePin, motorSpeed);

  } else { 

    analogWrite(enablePin, 0);

  }



Por el otro lado, la puerta de entrada al parque temático, que la hemos construido con los mismos palos de helado empleados en el Tiovivo. Hay gran cantidad de cables debido a que los 5v que genera la placa Arduino solo alimenta 2 led dispuestos en serie como máximo por cada puerto: después de hacer varias pruebas vimos que 3 y más de 3 le costaba bastante. Estas luces led se encienden cuando el sensor lumínico detecta poca cantidad de luz; para ello debemos baremarlo durante los 5 primeros segundo tapando, por un lado, el receptor y enfocando, por otro lado, con la linterna del móvil (el objetivo de esto es que reciba el dato de luz mínima y máxima que va a recibir).




CÓDIGO EMPLEADO



ESQUEMA DEL CIRCUITO