|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
T Búsqueda en este sitio:


.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

25B.- Ultrasonido.

1.- Contador de personas.

- En un tutorial anterio vimos cómo podemos construir un contador de personas que entran y salen de un local, mediante pulsadores y LDR.

- Ahora vamos a ver un contador de personas con sensores de ultrasonido.

- En estos códigos no vamos a utilizar librería para el sensor de ultrasonido.

_____________________
- Conexiones.

Vcc .......... 5 V
GND ........ GND
Trig .......... Pin 11
Echo ......... Pin 10

_______________
- Código.

ultrasonido_cuenta.ino


int LED13 = 13;
int Trigger_izq = 11;
int Echo_izq = 10;

int izquierdo = 0;
int izquierdo_cuenta = 0;
int izquierdo_anterior = 0;
int izquierdo_ahora = 0;

int izquierdo_duracion,izquierdo_distancia;


void setup() {
  pinMode(LED13, OUTPUT);
  pinMode(Trigger_izq, OUTPUT);
  pinMode(Echo_der, INPUT);
  Serial.begin(9600);
}

void loop(){
delay(100);
    
    digitalWrite (Trigger_izq, HIGH);
    delayMicroseconds (10);
    digitalWrite (Trigger_izq, LOW);
    izquierdo_duracion = pulseIn (Echo_izq, HIGH);
    izquierdo_distancia = (izquierdo_duracion/2) / 29.1;

  if (izquierdo_distancia < 20) { // Se esta a menos de 20 activa izquierdo.
      izquierdo = HIGH;
      digitalWrite (LED13, HIGH);
    }
 else {
      izquierdo = LOW;
      digitalWrite (LED13, LOW);
    }  
 
//izquierdo = digitalRead(LED13);

if (izquierdo ==  HIGH) { // Comprueba activado izquierdo.
izquierdo_ahora = 1;
}
else {
izquierdo_ahora = 0;
}


if(izquierdo_ahora != izquierdo_anterior){
if(izquierdo_ahora == 1){
izquierdo_cuenta = izquierdo_cuenta + 1;
//Serial.print("izquierdo_cuenta: "); 
//Serial.println(izquierdo_cuenta);
}
}
izquierdo_anterior = izquierdo_ahora;

}

_______________________
- Comentarios.

- Observa que el código no tiene librería para el sensor de ultrasonido.

- En este caso se envía mediante el Trigger unos pulsos, rebotan en el objeto y el rebote lo recibe el Echo.

- Dependiendo del tiempo de ida y venida del sonido, así será la distancia recorrida. Recuerda que es un sonido, así que la señal va a la velocidad del sonido,
esto es 340 m/s aproximadamente. En realidad es un ultrasonido, por eso no lo podemos oir, nuestros oídos oyen hasta unos 18 kHz y esta señal tiene una frecuencia de 40 kHz.

- Este contador no distingue si el usuario entra o sale.

- Se puede poner mayor o menor distancia en el comparador de distancia <

- Observa que el LED13 está encendido mientras el usuario está en la zona de ultrasonido.

_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
2.- Contador de entradas y salidas.

- En el tutorial: 3C.- Contador de personas. vimos un contador de entradas y salidas de personas realizado con pulsadores y con LDR.

- En este caso cuenta las personas que entran y resta las personas que salen.

- NOTA: debido a

- Vamos a adaptar ese tutorial a ultrasonidos.

- Observa que:

a) se activa el pulsador izquierdo: "entrando".
b) se activan los dos pulsadores: "entrando_mitad".
c) se desactiva uno y se activa el otro: "casi_entró".
d) se desactivan los dos pulsadores: cuenta.

- Observa que en el paso b), están activados los dos sensores a la vez.

ENTRAR:

SALIR:

_____________________
- Conexiones.

- Puedes poner un LED en el terminal 12 y otro en el 13, pero no son necesarios.

ultrasonido_cuenta_entra_sale.ino

int LED12 = 12;
int LED13 = 13;
int Trigger_der = 3;
int Echo_der = 2;
int Trigger_izq = 11;
int Echo_izq = 10;

int derecho = 0;
int derecho_cuenta = 0;
int derecho_ahora = 0;
int derecho_anterior = 0;

int izquierdo = 0;
int izquierdo_cuenta = 0;
int izquierdo_anterior = 0;
int izquierdo_ahora = 0;

int izquierdo_duracion,izquierdo_distancia;
int derecho_duracion, derecho_distancia;

int cuenta = 0;
String pulsadores = "";

void setup() {
  pinMode(LED12, OUTPUT);
  pinMode(LED13, OUTPUT);
  pinMode(Trigger_der, OUTPUT);
  pinMode(Echo_der, INPUT);
  pinMode(Trigger_izq, OUTPUT);
  pinMode(Echo_der, INPUT);
  Serial.begin(9600);
}

void loop(){
delay(100);

    digitalWrite (Trigger_der, HIGH);
    delayMicroseconds (10);
    digitalWrite (Trigger_der, LOW);
    derecho_duracion = pulseIn (Echo_der, HIGH);
    derecho_distancia = (derecho_duracion/2) / 29.1;
    
    digitalWrite (Trigger_izq, HIGH);
    delayMicroseconds (10);
    digitalWrite (Trigger_izq, LOW);
    izquierdo_duracion = pulseIn (Echo_izq, HIGH);
    izquierdo_distancia = (izquierdo_duracion/2) / 29.1;

  if (izquierdo_distancia < 20) { // Se esta a menos de 20 activa izquierdo.
      izquierdo = HIGH;
      digitalWrite (LED13, HIGH);
    }
 else {
      izquierdo = LOW;
      digitalWrite (LED13, LOW);
    }  
 if (derecho_distancia < 20) { // Se esta a menos de 20 activa derecho.
     derecho = HIGH;
     digitalWrite (LED12, HIGH);
    }
 else {
      derecho = LOW;
      digitalWrite (LED12, LOW);
    } 

//izquierdo = digitalRead(LED13);
//derecho = digitalRead(LED12);

if (izquierdo ==  HIGH) { // Comprueba activado izquierdo.
izquierdo_ahora = 1;
}
else {
izquierdo_ahora = 0;
}
if (derecho ==  HIGH) { // Comprueba activado derecho.
derecho_ahora = 1;
}
else {
derecho_ahora = 0;
}

if(derecho_ahora != derecho_anterior){
if(derecho_ahora == 1){
derecho_cuenta = derecho_cuenta + 1;
//Serial.print("derecho_cuenta: "); 
//Serial.println(derecho_cuenta);
}
}

if(izquierdo_ahora != izquierdo_anterior){
if(izquierdo_ahora == 1){
izquierdo_cuenta = izquierdo_cuenta + 1;
//Serial.print("izquierdo_cuenta: "); 
//Serial.println(izquierdo_cuenta);
}
}

////////////////////////////////////////////////////////////////
if (izquierdo == HIGH && derecho == LOW && pulsadores == "")
{
pulsadores="entrando";
}
if (izquierdo == HIGH && derecho == HIGH && pulsadores == "entrando")
{
pulsadores="entrando_mitad";
}
if (izquierdo == LOW && derecho == HIGH && pulsadores == "entrando_mitad")
{
pulsadores="casi_entro";
}
if (izquierdo == LOW && derecho == LOW && pulsadores == "casi_entro")
{
pulsadores="";
cuenta=cuenta+1;
Serial.print("Cuenta uno mas: ");
Serial.println(cuenta); 
}

///////////////////////////////////////////////
if (izquierdo == LOW && derecho == HIGH && pulsadores == "")
{
pulsadores="saliendo";
}
if (izquierdo == HIGH && derecho == HIGH && pulsadores == "saliendo")
{
pulsadores="saliendo_mitad";
}
if (izquierdo == HIGH && derecho == LOW && pulsadores == "saliendo_mitad")
{
pulsadores="casi_salio";
}
if (izquierdo == LOW && derecho == LOW && pulsadores == "casi_salio")
{
pulsadores="";
cuenta=cuenta-1;
Serial.print("Cuenta uno menos: ");
Serial.println(cuenta); 
}
// Serial.println(pulsadores);
////////////////////////////////////////////////////////////////
izquierdo_anterior = izquierdo_ahora;
derecho_anterior = derecho_ahora;
}

_____________________
- Comentarios.

- Para el buen funcionamiento de este código el elemento de paso debe realizar el ciclo completo de entrada y salida, si intenta entrar y antes de entrar se vuelve para atrás, hay error en la cuenta.

- Recordar también que en el momento central debe estar activado los dos sensores.

- Como comenté anteriormente, este código y esta manera de contar con dos sensores de ultrasonido no es operativo ya que comete muchos errores de cuenta. Se puede arreglar un poco controlando las distancias tanto de un sensor a otro como del elemento a contar.

- El SR-04 un ángulo de apertura grande, como observamos en su diagrama de radiación, sería conveniente un sensor como el SRF235 con menor ángulo.

- https://www.robot-electronics.co.uk/htm/sonar_faq.htm

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información