HCSR04-Tablas de verdad
La practica consistio llamada HCSR04-Tablas de verdad, la paractica se divide en dos el sircuito y la programación. Segun pepperl-fuchs los sensores ultrasónicos controlan partes específicas de las carretillas elevadoras para garantizar su precisión y fiabilidad. Con los sensores ultrasónicos, es posible determinar si la horquilla cuenta con un palé y hasta qué punto está insertada en él.
La programación:
const int pinecho = 9;
const int pintrigger = 12;
const int pinecho2 = 3;
const int pintrigger2 = 8;
const int pinecho3 = 5;
const int pintrigger3 = 2;
void setup() {
Serial.begin(9600);
pinMode(pintrigger, OUTPUT);
pinMode(pinecho, INPUT);
pinMode(pintrigger2, OUTPUT);
pinMode(pinecho2, INPUT);
pinMode(pintrigger3, OUTPUT);
pinMode(pinecho3, INPUT);
}
void loop() {
int cm = ping(pintrigger, pinecho);
Serial.print("Distancia1: ");
Serial.println(cm);
delay(100);
int cm2 = ping(pintrigger2, pinecho2);
Serial.print("Distancia2: ");
Serial.println(cm2);
delay(100);
int cm3 = ping(pintrigger3, pinecho3);
Serial.print("Distancia3: ");
Serial.println(cm3);
delay(100);
if((cm <=10)&&(cm2<=10)&&(cm3<=10))
{
// Retroceder
//atrás
digitalWrite (E2,HIGH); digitalWrite (E1,LOW);
digitalWrite (E4,HIGH); digitalWrite (E3,LOW);
analogWrite(EN1,255);
analogWrite(EN2,255);
}
if((cm >=10)&&(cm2<=10)&&(cm3<=10))
{
// adelante
digitalWrite (E1,HIGH); digitalWrite (E2,LOW);
digitalWrite (E3,HIGH); digitalWrite (E4,LOW);
analogWrite(EN1,255);
analogWrite(EN2,255);
}
}
int ping(int pintrigger, int pinecho) {
long duration, distanceCm;
digitalWrite(pintrigger, LOW); //para generar un pulso limpio ponemos a LOW 4us
delayMicroseconds(4);
digitalWrite(pintrigger, HIGH); //generamos Trigger (disparo) de 10us
delayMicroseconds(10);
digitalWrite(pintrigger, LOW);
duration = pulseIn(pinecho, HIGH); //medimos el tiempo entre pulsos, en microsegundos
distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm
return distanceCm;
}
SIN LIBRERÍAS
Para activar el sensor necesitamos generar un pulso eléctrico en el pin Trigger (disparador) de al menos 10us. Previamente, pondremos el pin a Low durante 4us para asegurar un disparo limpio.
Posteriormente usamos la función "pulseIn" para obtener el tiempo requerido por el pulso para volver al sensor. Finalmente, convertiremos el tiempo en distancia mediante la ecuación correspondiente.
Observar que intentamos emplear siempre aritmética de enteros, evitando usar números en coma flotante. Esto es debido a que las operaciones en coma flotante ralentizan mucho el procesador, y suponen cargar un gran número de librerías en memoria.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | const int EchoPin = 5; const int TriggerPin = 6; void setup() { Serial.begin(9600); pinMode(TriggerPin, OUTPUT); pinMode(EchoPin, INPUT); } void loop() { int cm = ping(TriggerPin, EchoPin); Serial.print("Distancia: "); Serial.println(cm); delay(1000); } int ping(int TriggerPin, int EchoPin) { long duration, distanceCm; digitalWrite(TriggerPin, LOW); //para generar un pulso limpio ponemos a LOW 4us delayMicroseconds(4); digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 10us delayMicroseconds(10); digitalWrite(TriggerPin, LOW); duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm return distanceCm; } |
Comentarios
Publicar un comentario