Envío Gratis en compras mínimas de $1200 mxn Enviamos a toda la Republica Mexicana
Buscar

Librería sensor ultrasónico HC-SR04 – MPLAB X

El sensor HC-SR04 es un sensor de distancia de bajo costo, su uso es muy frecuente en la robótica, utiliza transductores de ultrasonido para detectar objetos. La siguiente librería a desarrollar es para el uso con microcontroladores PIC del sensor ultrasónico HCSR04. Su funcionamiento consiste en emitir un sonido ultrasónico por uno de sus transductores, y esperar que el sonido rebote de algún objeto presente, el eco es captador por el segundo transductor. La distancia es proporcional al tiempo que demora en llegar el eco.

 


Declaración De Pines

El sensor ultrasónico cuenta con 4 pines, 2 de los cuales son para la alimentación del dispositivo.

Por defecto, en la librería se encuentran los pines declarados de la siguiente manera, el pin ECHO se conecta a una entrada digital mientras que el TRIGGER a una salida.

//Declaracion de pines de la librería --- Cambiar al gusto si es necesario
#define ECHO        PORTBbits.RB7
#define TRIGGER     LATBbits.LB6

Nota: En el programa principal deben configurarse los pines del puerto B o el utilizado como salidas o entradas digitales según el caso de cada bit. ES MUY IMPORTANTE REALIZARLO PARA QUE EL SENSOR PUEDA INICIAR A MEDIR LA DISTANCIA.

 


Funciones

Esta librería cuenta con 4 funciones principales, las cuales se centran en medir la distancia, y son las siguientes:

  • DIST_cm(); Medir distancia en centímetros
  • DIST_m(); Medir distancia en metros
  • DIST_in(); Medir distancia en pulgadas
  • DIST_ft(); Medir distancia en pies

Es recomendable utilizar un display LCD para poder conocer el dato de distancia que arroja la librería. En este caso, la separación de dígitos es algo que se le deja al usuario.

Para utilizar alguna función basta con declarar una variable de tipo float en el programa principal y asignarle el valor de la función. Por ejemplo:

x = DIST_cm();

En el código de la librería se menciona en donde debe colocarse el punto decimal para mostrarla en una LCD.

 


Conexiones (Miuva 18 / PIC 18F46k22)

Las conexiones mencionadas en la librería pueden observarse en la siguiente ilustración, pero pueden cambiarse según lo requiera el usuario.

 


Código de ejemplo (Miuva 18 / PIC 18F46k22)

//Pines de la LCD
#define RS LATDbits.LATD5
#define EN LATDbits.LATD4
#define D4 LATDbits.LATD0
#define D5 LATDbits.LATD1
#define D6 LATDbits.LATD2
#define D7 LATDbits.LATD3

//Declarar frecuencia del oscilador
#define _XTAL_FREQ 48000000

//Incluir librerias
#include <xc.h>
#include "Ultrasonico.h"
#include "lcd.h"

//Configuración de los fusibles
#pragma config PLLDIV = 2, CPUDIV = OSC1_PLL2, USBDIV = 2
#pragma config FOSC = HSPLL_HS, FCMEN = OFF, IESO = OFF
#pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF
#pragma config WDT = OFF
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF
#pragma config STVREN = ON, LVP = OFF, ICPRT = OFF, XINST = OFF

//Prototipo de funcion
void EnviarNumero(int numero);

//Variables globales
int u = 0, d = 0, c = 0; 
int um = 0;
int x1 = 0;
float x = 0.0;

//Funcion principal
void main(void) {
    TRISD = 0x00; //Los pines del puerto D son salidas digitales para la LCD
    ULTRA_Init();
    ADCON1 = 0b00001111; //Todos los puertos son digitales
    TRISB = 0b10000000; //Configuración de pines del puerto B
    Lcd_Init();
    Lcd_Clear();
    __delay_ms(50);
    while(1){
        x = DIST_cm(); //Medir distancia en centimetros
        //x = DIST_m(); //Medir distancia en metros
        //x = DIST_in(); //Medir distancia en pulgadas
        //x = DIST_ft(); //Medir distancia en pies
        __delay_ms(100);
        Lcd_Set_Cursor(1,1);
        um = distancia / 1000.0;
        x1 = distancia % 1000;
        c = x1 / 100.0;
        x1 = x1 % 100;
        d = x1 / 10.0;
        u = x1 % 10;
        EnviarNumero(um);
        //Lcd_Write_Char('.'); //El punto decimal para el caso de la distancia en metros
        EnviarNumero(c);
        //Lcd_Write_Char('.'); //El punto decimal para el caso de la distancia en pies
        EnviarNumero(d);
        Lcd_Write_Char('.'); //El punto decimal para el caso de la distancia en centimetros y en pulgadas
        EnviarNumero(u);
        Lcd_Write_String(" cm"); //Para la distancia en centimetros
        //Lcd_Write_String(" m"); //Para la distancia en metros
        //Lcd_Write_String(" in"); //Para la distancia en pulgadas
        //Lcd_Write_String(" ft"); //Para la distancia en pies
        Lcd_Set_Cursor(2,1);
        Lcd_Write_String("INTESC");
    }
    return;
}

void EnviarNumero(int numero){
    numero += 48;
    Lcd_Write_Char(numero);
}

 


Descarga de archivos

Descarga de librería