Академический Документы
Профессиональный Документы
Культура Документы
Es necesario aadir un sensor de distancia de su proyecto integrado? Construir este buscador sencilla gama de ultrasonidos! Esta rpida y sucia PIC telmetro ultrasnico encontrar un lugar en numerosos proyectos: detector de presencia, la robtica, el aparcamiento, la medicin de distancia ... Con unos pocos componentes baratos y menos de 200 bytes de cdigo, este sensor funcionar de 30 a 200 cm, alrededor de 1 cm de precisin, con el desbordamiento y la indicacin de desbordamiento.
4 mV sin necesidad de hardware adicional. Haga clic en esquema para agrandar C1 es un condensador de desacoplamient o El pulso PWM del pasador RC2 del PIC impulsa la base del transistor T1 a travs de la resistencia R1 Un inductor de 330 uH se aade en paralelo al transceptor piezzo ultrasnica, para formar una resonnator LC, el diodo D1 protege T1 de tensin inversa. El receptor ultrasnico est directamente conectado al pin RA1 del PIC (ADC nmero de canal 1), con R3 en paralelo como adaptator impedancia.
La junta protot ipo <Comp onente del lado del Soldad ura lado > Tenga cuidad o de alinear lo mejor que possib e el trans misor con el recept or
EL CDIGO FUENTE
Aqu est el cdigo fuente de mikroC: /* * Archivo: sonar.c
* * * * * * * * * * * * * * * * * * * * * * *
Proyecto: Finder Simple Ultrasonidos Autor: Bruno Gavand Compilador: mikroC V6.2 Fecha: 30 de septiembre 2006 Descripcin: Este es un buscador de base amplia ultrasnico, de 30 a 200 centmetros Dispositivo de destino: PIC16F877A con el cristal de 8 Mhz O cualquier CFP con al menos un canal ADC y PWM Los bits de configuracin: HS reloj No hay vigilancia No hay ningn temporizador el poder No se agote LVP deshabilitado Los datos de EE proteger a discapacitados CIE discapacitados Ver ms detalles y esquemticas sobre http://www.micro-examples.com/ /
/ ******************** * MACRO DEFINICIONES ******************** / /* * Ultrasnico longitud del pulso en microsegundos */ # Define PULSELEN 300 /* * El tamao de bfer circular para las muestras de un promedio de */ # Define BUFSIZE 10 /* * LCD PUERTO * EasyPic2, EasyPic3: PORTB * EaspyPic4: PORTD */ # Define LCDPORT PORTD # Define LCDTRIS TRISD / ******************* * Las variables globales ******************* / outofrange unsigned char / / fuera del alcance de la bandera: establece cuando se detecta ningn eco buf unsigned int [BUFSIZE] / / buffer de muestras unsigned char idx = 0; / / ndice de la muestra actual en el buffer / ***************************************** * Rutina de interrupcin
* Esta ISR se encarga de desbordamiento slo TIMER1 ***************************************** / sin efecto la interrupcin (void) { if (PIR1.TMR1IF) / / timer1 desborde? { outofrange = 1; / / establecer fuera del alcance de la bandera PIR1.TMR1IF = 0; / / bandera de interrupcin clara } } / ************ * Bucle principal ************ / void main () { ADCON1 = 0; / / permite a ADC TRISA = 0xFF; / / PORTA como entradas PORTA = 0; TRISC = 0; / / PORTC como salidas PORTC = 0; / / TIMER1 ajustes T1CON = 0b00001100; / / prescaler 1:1, osc. no habilitado, de sincronizacin, en la residencia CLK, se detuvo # Ifdef LCDPORT / / Init LCD Lcd_init (y LCDPORT); / / usa la configuracin de EP2/3/4 Lcd_Cmd (lcd_clear); pantalla / / claro Lcd_Cmd (Lcd_CURSOR_OFF); / / cursor fuera Lcd_Out (1, 1, "UltraSonicRanger"); Lcd_Out (2, 5, "cm"); # Endif / / Init PWM canales: 40 kHz, 50% ciclo de trabajo PWM1_Init (40000); PWM1_Change_Duty (128); INTCON.GIE = 1 / / habilitar las interrupciones globales INTCON.PEIE = 1 / / habilitar las interrupciones perifricas PIE1.TMR1IE = 0; / / desactivar el temporizador de una interrupcin PIR1.TMR1IF = 0; / / Tiempo borrar una bandera de interrupcin / / Por siempre para (; ;) { unsigned char i; byte de propsito / / general cm de largo sin firmar; / / distancia en centmetros str unsigned char [4]; / / cadena de pantalla amplia / / Preparar el temporizador
T1CON.TMR1ON = 0; temporizador / / parada outofrange = 0; / / reposicin de bandera de rango TMR1H = 0; / / claro timer1 TMR1L = 0; T1CON.TMR1ON = 1 / / inicio del temporizador 1 PIE1.TMR1IE = 1; / / activar el temporizador de 1 interrumpe en caso de desbordamiento / / Enviar el pulso PWM1_Start (); / / habilitar la salida de PWM: transductor es pulsado a una frecuencia ultrasnica Delay_us (PULSELEN); / / durante microsegundos PULSELEN PWM1_Stop (); / / parada PWM Delay_us (PULSELEN * 2) / / hacer nada por el doble de la duracin de la duracin del impulso para evitar salida en falso mientras que (Adc_Read (1) <1) / / mientras no se detect pulso (no hay seal en el canal ADC 1) { if (outofrange) break; / / a la tarde, fuera de rango } T1CON.TMR1ON = 0; / / parada del cronmetro 1 PIE1.TMR1IE = 0; / / desactivar el temporizador de 1 interrumpe en caso de desbordamiento # Ifdef LCDPORT if (outofrange) / / se condtion sobre rango detectado? { Lcd_Out (2, 8, "rango"); / / mostrar mensaje fuera de rango } else if (TMR1H <((PULSELEN * 6 * Clock_kHz ()) / (1000 * 4 * 256))) / / es la condicin por debajo del rango detectado? { Lcd_Out (2, 8, "UnderRnge"); / / mostrar mensaje debajo del rango } lectura else / / buena { buf [idx] = TMR1H; / / crear un valor de 16 bits de timer1 buf [idx] << = 8; / / MSB buf [idx] + = TMR1L; / / LSB / / Buffer circular idx + +; / / siguiente ubicacin if (idx == BUFSIZE) / / se llega al final? { idx = 0; / / Volver a la } cm = 0; / / preparar un promedio de un centmetro for (i = 0; i <BUFSIZE; i + +) / / para todas las muestras en tampn { cm + = buf [i]; / / aadir a la suma }
cm / = BUFSIZE; / / muestras promedio /* Cm * contiene ahora el nmero de ciclos de reloj * Desde el inicio de la transmisin de ultrasonidos * Para la deteccin de eco primera * La duracin en segundos es s = cm / (Clock_Khz () * 1000/4) * Si se admite que la velocidad del sonido en el aire es 340 m / s * La distancia en centmetros (ida y vuelta) es d = s * 340 * 100/2 * O d = 340 * 100/2 * cm / Clock_khz () / 1000 * 4 * D = 34 * 2 / Clock_Khz () */ cm * = 34 * 2; / / ahora se convierte en centmetros cm / = Clock_Khz (); ByteToStr (cm, str); / / convertir a la cadena Lcd_Out (2, 1, str); / / cadena de impresin Lcd_Out (2, 8, ""); / / mensaje de error claro } # Endif Delay_ms (10); / / 10 milisegundos de retardo antes de la siguiente muestra } } INSTRUCCIONES DE USO Lo he comprobado con una placa de desarrollo EasyPic4:
Por supuesto, esto guarda es muy bsico y tiene algunas desventajas: Un choque poco a la clula receptor piezzo podra conducir a una medicin errnea, Desde pulso ultrasnico no est codificado, cualquier otra fuente de ultrasonidos a poner el desorden: = Condiciones underflow> no deseado o desbordamient o puede ocurrir Este es el precio del diseo es muy sencillo de los guardaparques. Esto es lo que usted debe ver en su mbito de aplicacin, si la sonda a los pines del receptor de ultrasonidos:
Horizontal: 1 ms / div Vertical: 5 mV / div El eco mecnico se elimina por un retardo de software. La onda reflejada es de alrededor de 40 mV pico a pico, se trata de alrededor de 9,5 ms despus del estallido de ultrasonidos, si decimos que la velocidad del sonido es de 340 m / s, esto significa que la distancia del objeto fue de alrededor de 0,0095 / 2 * 340 = 1.615 metros. En realidad, fue el techo, que fue de 172 cm por encima del circuito, la pantalla LCD, escribi 170 cm. Espero que este proyecto de base har un buen comienzo para el tuyo! Por favor, informe de errores y comentarios en mis foros