Hola a todos, me encuentro aqui escribiendo en busca de una ayuda o alguna idea, para con mi proyecto...mi "codigo" o lo que trato de hacer es un camion para lavar contenedores de basura en las calles, mi codigo hasta los momentos funciona ya que lo he probado con el camion y anda bien..., por favor les pido vean este video para que me entiendan mejor... lava contenedor carga lateral a plc - YouTube
Se tiene un sensor ultrasonico que sale con los brazos, mide la distancia del contenedor y asi se detiene, hace todo el proceso...pero mi pregunta es:
¿Como podria dejar el contenedor en el mismo sitio? , por favor si pueden ayudarme estaria agradecido, dejo aca mi codigo...(Se que no es el mejor o es perfecto, pero lo ando mejorando)
P.D : Estoy usando Arduino Mega
Saludos!
#define RELAY_ON LOW // Define la activación, ya que el modulo relay trabaja modo Active-Low, la logica es inversa
#define RELAY_OFF HIGH
//Entradas
int Embrague = 53; // Pedal de Embrague
int Bot_Toma = 52; //Boton de toma
int Bot_Play = 51; //Boton para play
int Bajar = 50; // Sensor de Bajada
int Subir = 49; // Sensor de Subida
int Brazos_Arriba = 48; //Sensor de brazos arriba
int Brazos_Abajo = 47; // Sensor Brazos Abajo
int Ultrasonido = A0; // Sensor de Ultrasonido (Cable Negro)
int Palpador_Izquierdo = 46; //Sensor palpador Izq
int Palpador_Derecho = 45; //Sensor Palpador Dere
int Final_de_Carrera = 44; //Sensor final de traslacion adentro
int Max_Rotacion = 43; // Sensor de maxima rotación
//Variables de Lectura
int Lec_Embrague;
int Lec_Toma;
int Lec_Bajar;
int Lec_Ultra;
int Lec_Play;
int Lec_Subir;
int Lec_BrazosArriba;
int Lec_BrazosAbajo;
int Lec_Palpador_Izquierdo;
int Lec_Palpador_Derecho;
int Lec_Valvula;
int Lec_Final_de_Carrera;
int Lec_Max_Rotacion;
//int Lec_Elevador;
//Salidas Electrovalvulas
int ElecValv_Toma =22;
int ElecValv_Bajar = 23;
int ElecValv_Traslacion_Afuera = 24;
int ElecValv_Subir = 25;
int ElecValv_BrazosArriba = 26;
int ElecValv_BrazosAbajo = 27;
int ElecValv_Apretar_Brazos = 28;
int ElecValv_Pinza_Cierre = 29;
int ElecValv_Pinza_Libera = 30;
int ElecValv_Abrir_Tapa = 31;
int ElecValv_Traslacion_Adentro = 32;
int ElecValv_Agua = 33;
int ElecValv_Robot = 34;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(Embrague,INPUT);
pinMode(Bot_Toma,INPUT);
pinMode(Bot_Play,INPUT);
pinMode(ElecValv_Toma,OUTPUT);
pinMode(Bajar,INPUT);
pinMode(Ultrasonido,INPUT);
pinMode(ElecValv_Traslacion_Afuera, OUTPUT);
pinMode(Subir,INPUT);
pinMode(ElecValv_Subir,OUTPUT);
pinMode(Brazos_Arriba,INPUT);
pinMode(ElecValv_BrazosArriba,OUTPUT);
pinMode(Brazos_Abajo,INPUT);
pinMode(ElecValv_Bajar,OUTPUT);
pinMode(ElecValv_Apretar_Brazos,OUTPUT);
pinMode(ElecValv_Pinza_Cierre,OUTPUT);
pinMode(ElecValv_Pinza_Libera,OUTPUT);
pinMode(ElecValv_Abrir_Tapa,OUTPUT);
pinMode(Final_de_Carrera,INPUT);
pinMode(ElecValv_Traslacion_Adentro,OUTPUT);
pinMode(Max_Rotacion, INPUT);
pinMode(ElecValv_Agua,OUTPUT);
pinMode(ElecValv_Robot,OUTPUT);
digitalWrite(ElecValv_Toma, HIGH);
digitalWrite(ElecValv_Bajar, HIGH);
digitalWrite(ElecValv_Traslacion_Afuera, HIGH);
digitalWrite(ElecValv_Subir, HIGH);
digitalWrite(ElecValv_BrazosArriba, HIGH);
digitalWrite(ElecValv_BrazosAbajo , HIGH);
digitalWrite(ElecValv_Apretar_Brazos, HIGH);
digitalWrite(ElecValv_Pinza_Cierre, HIGH);
digitalWrite(ElecValv_Pinza_Libera, HIGH);
digitalWrite(ElecValv_Abrir_Tapa, HIGH);
digitalWrite(ElecValv_Traslacion_Adentro, HIGH);
digitalWrite(ElecValv_Robot,HIGH);
digitalWrite(ElecValv_Agua,HIGH);
}
void loop()
{
Lec_Play = digitalRead(Bot_Play);
Lec_Toma = digitalRead(Bot_Toma);
Lec_Embrague= digitalRead(Embrague); //Lee el estado del embrague
if(Lec_Toma==HIGH && Lec_Embrague == HIGH) //Si el EMBRAGUE estan puestos permite leer el estado de la toma
{
delay(20);
digitalWrite(ElecValv_Toma,RELAY_ON);
}
if(Lec_Toma==LOW){
digitalWrite(ElecValv_Toma,RELAY_OFF);
}
if(Lec_Toma == HIGH && Lec_Play == HIGH)
{
while(true)
{
// ------------------- Activar toma de Fuerza-----------------//
// ------------------- Play -----------------//
//-----------------------Subir Brazos-------------------//
digitalWrite(ElecValv_BrazosArriba,RELAY_ON);
delay(1800);
digitalWrite(ElecValv_BrazosArriba,RELAY_OFF);
delay(1000);
//-----------------------Bajar Carro-------------------//
digitalWrite(ElecValv_Bajar,RELAY_ON);
delay(1500);
digitalWrite(ElecValv_Bajar,RELAY_OFF);
delay(1000);
//-----------------------Ultrasonido y Traslacion Afuera-------------------//
for(int i= 0; i<=100;i++)
{
Lec_Ultra = analogRead(Ultrasonido);
delay(50);
map(Lec_Ultra,0,1023,0,255);
delay(20);
Serial.println(Lec_Ultra);
if(Lec_Ultra >= 280)
{
digitalWrite(ElecValv_Traslacion_Afuera,RELAY_ON);
}
if(Lec_Ultra <= 400)
{
digitalWrite(ElecValv_Traslacion_Afuera,RELAY_OFF);
}
}
//-------------------Apretar Brazos---------------------//
digitalWrite(ElecValv_Apretar_Brazos,RELAY_ON);
delay(1200);
digitalWrite(ElecValv_Apretar_Brazos,RELAY_OFF);
//-----------------------Subir Brazos (2)-------------------//
digitalWrite(ElecValv_BrazosArriba,RELAY_ON);
delay(2000);
digitalWrite(ElecValv_BrazosArriba,RELAY_OFF);
//------------------------Aprieta Pinzas-----------------------//
digitalWrite(ElecValv_Pinza_Libera,RELAY_ON);
delay(1000);
digitalWrite(ElecValv_Pinza_Cierre,RELAY_OFF);
delay(1500);
digitalWrite(ElecValv_Pinza_Libera,RELAY_OFF);
delay(3000);
Lec_Palpador_Izquierdo = digitalRead(Palpador_Izquierdo);
Lec_Palpador_Derecho = digitalRead(Palpador_Derecho);
while(Lec_Palpador_Derecho == HIGH && Lec_Palpador_Derecho == HIGH)
{
delay(2000);
digitalWrite(ElecValv_Pinza_Cierre,RELAY_ON);
delay(1000);
digitalWrite(ElecValv_Abrir_Tapa,RELAY_ON);
delay(3000);
digitalWrite(ElecValv_Abrir_Tapa,RELAY_OFF);
delay(1000);
digitalWrite(ElecValv_Subir,RELAY_ON);
delay(2000);
digitalWrite(ElecValv_Subir,RELAY_OFF);
delay(1000);
digitalWrite(ElecValv_Traslacion_Adentro,RELAY_ON);
delay(2000);
digitalWrite(ElecValv_Traslacion_Adentro,RELAY_OFF);
delay(1000);
digitalWrite(ElecValv_BrazosArriba,RELAY_ON);
delay(6000);
digitalWrite(ElecValv_BrazosArriba,RELAY_OFF);
delay(1000);
digitalWrite(ElecValv_Agua,RELAY_ON);
digitalWrite(ElecValv_Robot,RELAY_ON);
delay(5000);
digitalWrite(ElecValv_Agua,RELAY_OFF);
digitalWrite(ElecValv_Robot,RELAY_OFF);
break;
}
while(Lec_Palpador_Derecho == LOW && Lec_Palpador_Derecho == LOW)
{
delay(2000);
digitalWrite(ElecValv_Pinza_Cierre,RELAY_OFF);
digitalWrite(ElecValv_Pinza_Libera,RELAY_ON);
digitalWrite(ElecValv_Abrir_Tapa,RELAY_OFF);
digitalWrite(ElecValv_Subir,RELAY_OFF);
digitalWrite(ElecValv_Traslacion_Adentro,RELAY_OFF);
digitalWrite(ElecValv_BrazosArriba,RELAY_OFF);
digitalWrite(ElecValv_Agua,RELAY_OFF);
digitalWrite(ElecValv_Robot,RELAY_OFF);
break;
}
break;
}
delay(60000);
}
else if (Lec_Toma == LOW)
{
digitalWrite(ElecValv_Toma,RELAY_OFF);
digitalWrite(ElecValv_Toma, HIGH);
digitalWrite(ElecValv_Bajar, HIGH);
digitalWrite(ElecValv_Traslacion_Afuera, HIGH);
digitalWrite(ElecValv_Subir, HIGH);
digitalWrite(ElecValv_BrazosArriba, HIGH);
digitalWrite(ElecValv_BrazosAbajo , HIGH);
digitalWrite(ElecValv_Apretar_Brazos, HIGH);
digitalWrite(ElecValv_Pinza_Cierre, HIGH);
digitalWrite(ElecValv_Pinza_Libera, HIGH);
digitalWrite(ElecValv_Abrir_Tapa, HIGH);
digitalWrite(ElecValv_Traslacion_Adentro, HIGH);
digitalWrite(ElecValv_Robot,HIGH);
digitalWrite(ElecValv_Agua,HIGH);
}
}
