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



No hay comentarios:

Publicar un comentario