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