Saltar la navegación

Detecta 4 zonas y activa leds y buzzer

Detecta 4 zonas y activa leds y buzzer

Programa en BLOCKS. Ultrasonido con zona de activación dividida en 4 tramos visualizado con LEDs

//sensor ultrasonidos detecta 4 zonas configurables con variables it1, it2, it3 y it4 en cm

//visualiza cada zona con un conjunto de leds y sonidos

//funciones creadas: leer distancia, una para cada tramo y una que apaga todo

//se usa la función nativa tone en la que se puede configurar el tono y la duración

int trigPin = 12; // Trigger

int echoPin = 11; // Echo

long duration, cm;

int led1=2;

int led2=3;

int led3=4;

int led4=5;

//definición de los tramos

int it1=40; //inicio tramo 1

int it2=30; //inicio tramo 2 y fin tramo 1

int it3=20; //inicio tramo 3 y fin tramo 2

int it4=10;//inicio tramo 4 y fin tramo 3

int pinsonido=9; //pin a positivo buzzer

void setup() {

Serial.begin (9600); //Serial Port begin

//Define inputs and outputs

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(led1, OUTPUT);

pinMode(led2, OUTPUT);

pinMode(led3, OUTPUT);

pinMode(led4, OUTPUT);

pinMode(pinsonido, OUTPUT);

}

void loop() {

leer_distancia();

if (cm<=it1 && cm>it2){

primertramo();

tone(pinsonido,423,100);

}

if (cm<=it2 && cm>it3){

segundotramo();

tone(pinsonido,523,100);

}

if (cm<=it3 && cm>it4){

tercertramo();

tone(pinsonido,623,100);

}

if (cm<=it4 && cm>0){

cuartotramo();

tone(pinsonido,823,100);

}

else{

apagartodo();

noTone(9);

}

}

void leer_distancia(){ //función que lee distancia al sensor

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.

// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

digitalWrite(trigPin, LOW);

delayMicroseconds(10);

digitalWrite(trigPin, HIGH);

digitalWrite(trigPin, LOW);

// Read the signal from the sensor: a HIGH pulse whose

// duration is the time (in microseconds) from the sending

// of the ping to the reception of its echo off of an object.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// Convert the time into a distance

cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343

//inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135

//Serial.print(inches);

//Serial.print("in, ");

Serial.print(cm);// valor en cm

Serial.print("cm");

Serial.println();

//delay(10);

}

void primertramo(){//función que se pone en marcha si estamos situados en el primer tramo

digitalWrite(led1,HIGH);

digitalWrite(led2,LOW);

digitalWrite(led3,LOW);

digitalWrite(led4,LOW);

delay(100);

}

void segundotramo(){//función que se pone en marcha si estamos situados en el segundo tramo

digitalWrite(led1,HIGH);

digitalWrite(led2,HIGH);

digitalWrite(led3,LOW);

digitalWrite(led4,LOW);

delay(100);

}

void tercertramo(){//función que se pone en marcha si estamos situados en el tercer tramo

digitalWrite(led1,HIGH);

digitalWrite(led2,HIGH);

digitalWrite(led3,HIGH);

digitalWrite(led4,LOW);

delay(100);

}

void cuartotramo(){//función que se pone en marcha si estamos situados en el cuarto tramo

digitalWrite(led1,HIGH);

digitalWrite(led2,HIGH);

digitalWrite(led3,HIGH);

digitalWrite(led4,HIGH);

delay(100);

}

void apagartodo (){ //función que se pone en marcha si estamos situados fuera de rango

digitalWrite(led1,LOW);

digitalWrite(led2,LOW);

digitalWrite(led3,LOW);

digitalWrite(led4,LOW);

delay(100);

}

Versiones en Blocks 

Programa en BLOCKS. Ultrasonido con zona de activación dividida en 4 tramos visualizado con LEDs
Ejemplos encontrados en TinkerCad

Programa en BLOCKS. Ultrasonido con zona de activación dividida en 4 tramos visualizado con LEDs y sonidos