top of page

/////////PROGRAMA DEL PROYECTO LLAMADO BRACINTONIC CREADO POR HÉCTOR VICARIO ALUMNO DE CIFP SANTA CATALINA
//Librerias del infrarrojo, servos y lcd
#include <infrarrojo.h>
#include <Servo.h>
#include <LiquidCrystal.h>
//Definicion las variables del display de 7 segmentos
#define h 22
#define i 23
#define j 24 
#define k 25
#define l 26
#define m 27
#define n 28
//Definicion los pines de la lcd
const int rs = 37, en = 36, d4 = 41, d5 = 40, d6 = 39, d7 = 38;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//Definicion de los 4 servomotores del robot
Servo servo_base;
Servo servo_rosa;
Servo servo_blanco;
Servo servo_pinza;
//Definición pin infrarrojo
infrarrojo estado(5);
//Definición variable que recibe el dato del infrarrojo
int VALOR;
//Variable del cambio de estado infrarrojo
int led_estado;
//Variable del contador para el display de 7 segmentos
int lee;
int contador=0;
int s=1;
//Variable para pasar de 4 piezas a 0
int c=0;
const int pin = 4;
//Definición pin RGB
int led_verde_G = 12;
int led_rojo_R = 13;
//Variable para colocar en un pallet o en otro
int b=0;
//Variables para el motor nema
const int dirPin = 10;
const int stepPin = 11;
volatile int a=0;
const int steps = 200;
int stepDelay=1000;
//Variables para evitar rebotes
const int timeThreshold = 150;
long timeCounter = 0;
 
void setup() {
  //Función cero que nos muestra un 0 en el display nada mas empezar
  cero();
  //Definir pin como salida buzzer
  pinMode(pin, OUTPUT);  
  //Definir pin como salida led RGB
  pinMode(led_verde_G, OUTPUT);  
  pinMode(led_rojo_R, OUTPUT); 
  //Definir pin como salida Display 7 segmentos
  pinMode(22, OUTPUT); 
  pinMode(23, OUTPUT); 
  pinMode(24, OUTPUT); 
  pinMode(25, OUTPUT); 
  pinMode(26, OUTPUT); 
  pinMode(27, OUTPUT); 
  pinMode(28, OUTPUT); 
  //Definir pin como salida driver nema
  pinMode(dirPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  //Definir pines de entrada para los pulsadores de marcha y paro 
  pinMode(2,INPUT_PULLUP);  //paro del motor
  pinMode(3,INPUT_PULLUP); //puesta en marcha del motor
  //Mostramos en la lcd un mensaje de bienvenida  
  lcd.begin(16, 2);
  lcd.setCursor(3,0);
  lcd.print("BRACINTONIC");
  lcd.setCursor(3,1);
  lcd.print("SE PRESENTA");
  //Definir pines de entrada para los servos del robot
  servo_base.attach(9);
  servo_rosa.attach(8);
  servo_blanco.attach(7);
  servo_pinza.attach(6);
   //Realizamos unos movimientos al robot de presentación
  servo_base.write(155);
    delay(1000);
  servo_base.write(45);
    delay(1000);
  servo_base.write(155);
    delay(1000);
  servo_blanco.write(20);
    delay(1000);
  servo_rosa.write(15);
     delay(1000);
  //Mostramos en la lcd un mensaje para colocar la primera pieza    
  lcd.setCursor(1,0);
  lcd.print("Coloca la pieza");
  lcd.setCursor(2,1);
  lcd.print("Pulsa  verde");
  //DEFINIMOS LAS INTERUPCIONES DE MARCHA Y PARO QUE ES DE LO MAS IMPORTANTE DEL PROGRAMA
  attachInterrupt(digitalPinToInterrupt(3), marcha, CHANGE);
  attachInterrupt(digitalPinToInterrupt(2), paro, CHANGE); 
  //Establecemos una condicion de marcha
  while(digitalRead(3)==1){}  
  // Limpiamos pantalla
  lcd.clear();    
}
 
void loop() {
  //Recoge el estado del sensor infrarrojo
  led_estado = estado.lectura(VALOR);
  //Etapa de compraciónpara activar el movimiento de la cinta,la cinta se mueve hasta que el sensor detecta la pieza
  if(led_estado == 1) {
     digitalWrite(dirPin, LOW);
     digitalWrite(stepPin, HIGH);
     delayMicroseconds(stepDelay);  
     digitalWrite(stepPin, LOW);
     delayMicroseconds(stepDelay);
  }  
  else{
  //Se realiza el contado de las piezas y dependiendo de la función se muestra un numero
     contador = contador + s;   
     if (contador == 0) { cero();}
     if (contador == 1) { uno();}
     if (contador == 2) { dos();} 
     if (contador == 3) { tres();} 
     if (contador == 4) { 
      cuatro();
      contador=0;
      c=1;
  }     
   digitalWrite(dirPin, LOW);
   stepDelay = 1000;
   //Mostramos mensaje en la lcd
   lcd.setCursor(0,0);
   lcd.print("OBJETO DETECTADO");
   //Una vez detectada la pieza la cinta avanza otro poco para que el robot pueda cogerla
   for (int x = 0; x < 365; x++) {
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(stepDelay);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(stepDelay);
   }
   delay(1000);
   //Mostramos mensaje en la lcd
   lcd.setCursor(0,0);
   lcd.print("ROBOT COGE PIEZA");
   //Realiza los movimientos el robot para coger la pieza
   servo_base.write(155);  
     delay(1000);
   servo_pinza.write(160);
     delay(1000);
   servo_blanco.write(47);
     delay(1000);
   servo_pinza.write(20); 
     delay(1000);
   //Mostramos mensaje en la lcd 
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("ROBOT DEJA PIEZA");
   //Etapa en la que con una condicion establecemos el posicionamiento de la pieza en un pallet o en otro.
   if(b==0){
     servo_base.write(70);
       delay(1000);
     servo_blanco.write(80);
       delay(1500);
     b=1;
    }
   else{  
     servo_base.write(30);
       delay(1000);
     servo_blanco.write(80);
       delay(1500);
      b=0;
    }
   //Movimientos de posicionamiento del robot una vez dejada la pieza 
   servo_pinza.write(160);
    delay(1000);
   servo_blanco.write(20);
    delay(1000);
   servo_rosa.write(15);
   //Condicion una vez el contador este en 4, vuelva a 0 y haya que pulsar marchar para seguir  
   if (contador == 0) { cero();}
   if(c==1){   
     //Mostramos mensaje en la lcd 
     lcd.clear();
     lcd.setCursor(2,1);
     lcd.print("Pulsa  verde");
     //Hacemos sonar el buzzer para avisar de que hemos llegado a 4 piezas
     analogWrite(pin, 150);   
      delay(200);               
     analogWrite(pin,0);
      delay(100);
     analogWrite(pin, 150);  
      delay(200);               
     analogWrite(pin,0);
      delay(100);
     analogWrite(pin, 150);   
      delay(200);               
     analogWrite(pin,0);
      delay(100);
   //Condicion de pulsar marcha para seguir
   while(digitalRead(3)==1){ };
   // Iniciamos la variable del contador a 0
   c=0;
   }
   //Mostramos mensaje en la lcd 
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("TIENES 5 SEGUNDOS");
   lcd.setCursor(0,1);
   lcd.print("COLOCA LA PIEZA DE NUEVO");
  // Esperamos 5 segundo
  delay(5000);
  //Limpiamos la pantalla lcd
  lcd.clear();
  }

}
//FUNCION MARCHA
void marcha(){
   //Ponemos el led RGB en verde y apagamos el rojo
   digitalWrite(led_rojo_R, LOW);
    delay(100);
   digitalWrite(led_verde_G, HIGH); 
   //Evitamos rebotes   
   if (millis() > timeCounter + timeThreshold) {
     timeCounter = millis();
   }
}
//FUNCION PARO
void paro(){
   //Ponemos el led RGB en rojo y apagamos el verde
   digitalWrite(led_verde_G, LOW);
    delay(100);
   digitalWrite(led_rojo_R, HIGH);
   //Evitamos rebotes
   if (millis() > timeCounter + timeThreshold){  
      //Condicion de  pulsar la marcha para seguir
      while(digitalRead(3)==1){}  
   timeCounter = millis();
   }
}
//FUNCION BORRADO PARA EL DISPLAY DE 7 SEGMENTOS
void borrado(){
   digitalWrite(h,HIGH);
   digitalWrite(i,HIGH);
   digitalWrite(j,HIGH);
   digitalWrite(k,HIGH);
   digitalWrite(l,HIGH);
   digitalWrite(m,HIGH);
   digitalWrite(n,HIGH);
}
//FUNCION UNO,ACTIVAMOS LOS BIT 
void uno(){
   borrado();
   digitalWrite(h,LOW);
   digitalWrite(k,LOW);
   digitalWrite(l,LOW);
   digitalWrite(m,LOW);
   digitalWrite(n,LOW);
}
//FUNCION DOS,ACTIVAMOS LOS BIT 
void dos(){
   borrado();  
   digitalWrite(j,LOW);
   digitalWrite(m,LOW);
}
//FUNCION TRES,ACTIVAMOS LOS BIT 
void tres(){
   borrado();
   digitalWrite(l,LOW);
   digitalWrite(m,LOW);
}
//FUNCION CUATRO,ACTIVAMOS LOS BIT 
void cuatro(){
   borrado();
   digitalWrite(h,LOW);
   digitalWrite(k,LOW);
   digitalWrite(l,LOW);
}
//FUNCION CERO,ACTIVAMOS LOS BIT 
void cero(){
   borrado();
   digitalWrite(n,LOW);
}

bottom of page