Nesse teste utilizamos o osciloscópio para verificar a modificação da onda que é enviada pelo acelerômetro.
Sistema de Navegação Usando Acelerômetros e Giroscópios para Manutenção de Plantas Industriais
segunda-feira, 27 de setembro de 2010
Terceiro TESTE
Com esse teste iniciamos a utlização do lcd.
//#include "main.h"
#include <16f877a.h>
#device adc=10
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
//#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=10)
#define LCD_DATA_PORT getenv("SFR:PORTB")
//#define LCD_ENABLE_PIN PIN_D0
//#define LCD_RS_PIN PIN_D1
//#define LCD_RW_PIN PIN_D2
//#define LCD_D4 PIN_D4
//#define LCD_D5 PIN_D5
//#define LCD_D6 PIN_D6
//#define LCD_D7 PIN_D7
#define LCD_TYPE 2
#include <lcd.c>
void main()
{
lcd_init();
setup_adc_ports( AN0_AN1_AN4_VREF_VREF );
setup_adc(ADC_CLOCK_INTERNAL );
//setup_adc_ports(NO_ANALOGS);
//setup_adc(ADC_OFF);
//setup_psp(PSP_DISABLED);
//setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
//setup_timer_1(T1_DISABLED);
//setup_timer_2(T2_DISABLED,0,1);
//setup_comparator(NC_NC_NC_NC);
//setup_vref(FALSE);
// TODO: USER CODE!!
while(true){
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc,("| Teste do lcd |"));
delay_ms(1000);
lcd_init();
lcd_gotoxy(3,2);
printf(lcd_putc,("| Teste do lcd |"));
delay_ms(1000);
}
}
//#include "main.h"
#include <16f877a.h>
#device adc=10
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
//#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=10)
#define LCD_DATA_PORT getenv("SFR:PORTB")
//#define LCD_ENABLE_PIN PIN_D0
//#define LCD_RS_PIN PIN_D1
//#define LCD_RW_PIN PIN_D2
//#define LCD_D4 PIN_D4
//#define LCD_D5 PIN_D5
//#define LCD_D6 PIN_D6
//#define LCD_D7 PIN_D7
#define LCD_TYPE 2
#include <lcd.c>
void main()
{
lcd_init();
setup_adc_ports( AN0_AN1_AN4_VREF_VREF );
setup_adc(ADC_CLOCK_INTERNAL );
//setup_adc_ports(NO_ANALOGS);
//setup_adc(ADC_OFF);
//setup_psp(PSP_DISABLED);
//setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
//setup_timer_1(T1_DISABLED);
//setup_timer_2(T2_DISABLED,0,1);
//setup_comparator(NC_NC_NC_NC);
//setup_vref(FALSE);
// TODO: USER CODE!!
while(true){
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc,("| Teste do lcd |"));
delay_ms(1000);
lcd_init();
lcd_gotoxy(3,2);
printf(lcd_putc,("| Teste do lcd |"));
delay_ms(1000);
}
}
Segundo TESTE
Nesse teste continuamos com os leds só que implementamos um modulo bluetooth que converte a entrada serial em cmunicação bluetooth. Com isso é possivel o envio das infromações para um computador.
#include "main.h"
//#device <16F877a.h>
//#device ADC=10
#include <math.h>
#include <string.h>
#include <stdio.h>
//#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
//#use delay(clock=4000000)
#int_AD
void AD_isr(void)
{
}
//#include"C:\Documents and Settings\Euclerio\Meus documentos\teste\main.h"
void main()
{
float vx;
float vy;
float vz;
long int x;
long int y;
long int z;
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);//Setando as portas analógicas do MCU.
setup_adc_ports(ANALOG_RA3_REF); //Setando as portas analógicas do MCU.
//setup_adc_ports( AN0_AN1_AN4_VREF_VREF );//Setando as portas analógicas do MCU.
setup_adc(ADC_CLOCK_DIV_32 );
//setup_adc(ADC_CLOCK_INTERNAL ); //Setando clock interno para uso com o ADC
delay_ms(1000); //Pausa de 1 segundo
//indica que está ligado
output_bit(PIN_B3, 1);
//ao iniciar
output_bit(PIN_D3, 1);
delay_ms(500);
output_bit(PIN_D2, 1);
delay_ms(500);
output_bit(PIN_C5, 1);
delay_ms(500);
output_bit(PIN_C4, 1);
delay_ms(500);
output_bit(PIN_D4, 1);
delay_ms(500);
output_bit(PIN_C7, 1);
delay_ms(500);
output_bit(PIN_D3, 0);
delay_ms(500);
output_bit(PIN_D2, 0);
delay_ms(500);
output_bit(PIN_C5, 0);
delay_ms(500);
output_bit(PIN_C4, 0);
delay_ms(500);
output_bit(PIN_D4, 0);
delay_ms(500);
output_bit(PIN_C7, 0);
delay_ms(500);
//fim
//mandar valor alto para sleep
output_bit(PIN_D5, 1);
//selecionar sensibilidade
output_bit(PIN_D7, 0);
output_bit(PIN_D6, 0);
/*
channel 0 EIXO x +g D3 -g D2
channel 1 EIXO y +g C5 -g C4
channel 4 EIXO z +g D4 -g C7
sleep D5
select1 D7
select2 D6
*/
while(true){
//LENDO EIXO X
x=0;
set_adc_channel(0);
delay_ms(1);
x=read_adc();
if(x>=745){
output_bit(PIN_D3, 1);
delay_ms(2000);
output_bit(PIN_D3, 0);
}
if(x<=292){
output_bit(PIN_D2, 1);
delay_ms(2000);
output_bit(PIN_D2, 0);
}
delay_ms(1);
//LENDO EIXO Y
y=0;
set_adc_channel(1);
delay_ms(1);
y=read_adc();
if(y>=745){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
if(y<=292){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
//LENDO EIXO Z
delay_ms(1);
z=0;
set_adc_channel(2);
delay_ms(1);
z=read_adc();
if(z>=745){
output_bit(PIN_D4, 1);
delay_ms(2000);
output_bit(PIN_D4, 0);
}
if(z<=292){
output_bit(PIN_C7, 1);
delay_ms(2000);
output_bit(PIN_C7, 0);
}
delay_ms(1);
//Converte o valor lido em voltz
vx=((((x)*3.36)/1023)-0.06);
vy=(((y)*3.36)/1023);
vz=(((z)*3.36)/1023);
//Enviar via Bluetooth
//valor
//printf ("\n X = %ld \t", x );
//printf ("\t Y = %ld \t", y );
// printf ("\t Z = %ld \n", z );
//volt
printf ("\n X = %f V | Y = %f V | Z = %f V \n", vx,vy,vz );
printf("\n");
printf("\t");
printf("\n");
//printf ("\t Y = %f V \t", vy );
//printf ("\t Z = %f V ", vz );
}//fecha o while
}
#include "main.h"
//#device <16F877a.h>
//#device ADC=10
#include <math.h>
#include <string.h>
#include <stdio.h>
//#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
//#use delay(clock=4000000)
#int_AD
void AD_isr(void)
{
}
//#include"C:\Documents and Settings\Euclerio\Meus documentos\teste\main.h"
void main()
{
float vx;
float vy;
float vz;
long int x;
long int y;
long int z;
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);//Setando as portas analógicas do MCU.
setup_adc_ports(ANALOG_RA3_REF); //Setando as portas analógicas do MCU.
//setup_adc_ports( AN0_AN1_AN4_VREF_VREF );//Setando as portas analógicas do MCU.
setup_adc(ADC_CLOCK_DIV_32 );
//setup_adc(ADC_CLOCK_INTERNAL ); //Setando clock interno para uso com o ADC
delay_ms(1000); //Pausa de 1 segundo
//indica que está ligado
output_bit(PIN_B3, 1);
//ao iniciar
output_bit(PIN_D3, 1);
delay_ms(500);
output_bit(PIN_D2, 1);
delay_ms(500);
output_bit(PIN_C5, 1);
delay_ms(500);
output_bit(PIN_C4, 1);
delay_ms(500);
output_bit(PIN_D4, 1);
delay_ms(500);
output_bit(PIN_C7, 1);
delay_ms(500);
output_bit(PIN_D3, 0);
delay_ms(500);
output_bit(PIN_D2, 0);
delay_ms(500);
output_bit(PIN_C5, 0);
delay_ms(500);
output_bit(PIN_C4, 0);
delay_ms(500);
output_bit(PIN_D4, 0);
delay_ms(500);
output_bit(PIN_C7, 0);
delay_ms(500);
//fim
//mandar valor alto para sleep
output_bit(PIN_D5, 1);
//selecionar sensibilidade
output_bit(PIN_D7, 0);
output_bit(PIN_D6, 0);
/*
channel 0 EIXO x +g D3 -g D2
channel 1 EIXO y +g C5 -g C4
channel 4 EIXO z +g D4 -g C7
sleep D5
select1 D7
select2 D6
*/
while(true){
//LENDO EIXO X
x=0;
set_adc_channel(0);
delay_ms(1);
x=read_adc();
if(x>=745){
output_bit(PIN_D3, 1);
delay_ms(2000);
output_bit(PIN_D3, 0);
}
if(x<=292){
output_bit(PIN_D2, 1);
delay_ms(2000);
output_bit(PIN_D2, 0);
}
delay_ms(1);
//LENDO EIXO Y
y=0;
set_adc_channel(1);
delay_ms(1);
y=read_adc();
if(y>=745){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
if(y<=292){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
//LENDO EIXO Z
delay_ms(1);
z=0;
set_adc_channel(2);
delay_ms(1);
z=read_adc();
if(z>=745){
output_bit(PIN_D4, 1);
delay_ms(2000);
output_bit(PIN_D4, 0);
}
if(z<=292){
output_bit(PIN_C7, 1);
delay_ms(2000);
output_bit(PIN_C7, 0);
}
delay_ms(1);
//Converte o valor lido em voltz
vx=((((x)*3.36)/1023)-0.06);
vy=(((y)*3.36)/1023);
vz=(((z)*3.36)/1023);
//Enviar via Bluetooth
//valor
//printf ("\n X = %ld \t", x );
//printf ("\t Y = %ld \t", y );
// printf ("\t Z = %ld \n", z );
//volt
printf ("\n X = %f V | Y = %f V | Z = %f V \n", vx,vy,vz );
printf("\n");
printf("\t");
printf("\n");
//printf ("\t Y = %f V \t", vy );
//printf ("\t Z = %f V ", vz );
}//fecha o while
}
Primeiro TESTE
Nesse teste utilizamos leds para sinalizar quando a aceleração em um eixo é maior ou igual a 1g e quando ela é menor ou igual a menos 1g.
//#include "main.h"
#device <16F877a.h>
#device ADC=10
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#int_AD
#include <math.h> //Incluindo bibliotéca matemática
void AD_isr(void)
{
}
void main()
{
long int x;
long int y;
long int z;
/*
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
//setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);
*/
// TODO: USER CODE!!
setup_adc_ports( AN0_AN1_AN4_VREF_VREF );//Setando as portas analógicas do MCU.
setup_adc(ADC_CLOCK_INTERNAL ); //Setando clock interno para uso com o ADC
delay_ms(1000); //Pausa de 1 segundo
//indica que está ligado
output_bit(PIN_B3, 1);
//ao iniciar
output_bit(PIN_D3, 1);
delay_ms(500);
output_bit(PIN_D2, 1);
delay_ms(500);
output_bit(PIN_C5, 1);
delay_ms(500);
output_bit(PIN_C4, 1);
delay_ms(500);
output_bit(PIN_D4, 1);
delay_ms(500);
output_bit(PIN_C7, 1);
delay_ms(500);
output_bit(PIN_D3, 0);
delay_ms(500);
output_bit(PIN_D2, 0);
delay_ms(500);
output_bit(PIN_C5, 0);
delay_ms(500);
output_bit(PIN_C4, 0);
delay_ms(500);
output_bit(PIN_D4, 0);
delay_ms(500);
output_bit(PIN_C7, 0);
delay_ms(500);
//fim
//mandar valor alto para sleep
output_bit(PIN_D5, 1);
//selecionar sensibilidade
output_bit(PIN_D7, 0);
output_bit(PIN_D6, 0);
/*
channel 0 EIXO x +g D3 -g D2
channel 1 EIXO y +g C5 -g C4
channel 4 EIXO z +g D4 -g C7
sleep D5
select1 D7
select2 D6
*/
while(true){
//LENDO EIXO X
x=0;
set_adc_channel(0);
delay_ms(1);
x=read_adc();
if(x>=745){
output_bit(PIN_D3, 1);
delay_ms(2000);
output_bit(PIN_D3, 0);
}
if(x<=292){
output_bit(PIN_D2, 1);
delay_ms(2000);
output_bit(PIN_D2, 0);
}
delay_ms(1);
//LENDO EIXO Y
y=0;
set_adc_channel(1);
delay_ms(1);
y=read_adc();
if(y>=745){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
if(y<=292){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
//LENDO EIXO Z
delay_ms(1);
z=0;
set_adc_channel(4);
delay_ms(1);
z=read_adc();
if(z>=745){
output_bit(PIN_D4, 1);
delay_ms(2000);
output_bit(PIN_D4, 0);
}
if(z<=292){
output_bit(PIN_C7, 1);
delay_ms(2000);
output_bit(PIN_C7, 0);
}
delay_ms(1);
}
}
//#include "main.h"
#device <16F877a.h>
#device ADC=10
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#int_AD
#include <math.h> //Incluindo bibliotéca matemática
void AD_isr(void)
{
}
void main()
{
long int x;
long int y;
long int z;
/*
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
//setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);
*/
// TODO: USER CODE!!
setup_adc_ports( AN0_AN1_AN4_VREF_VREF );//Setando as portas analógicas do MCU.
setup_adc(ADC_CLOCK_INTERNAL ); //Setando clock interno para uso com o ADC
delay_ms(1000); //Pausa de 1 segundo
//indica que está ligado
output_bit(PIN_B3, 1);
//ao iniciar
output_bit(PIN_D3, 1);
delay_ms(500);
output_bit(PIN_D2, 1);
delay_ms(500);
output_bit(PIN_C5, 1);
delay_ms(500);
output_bit(PIN_C4, 1);
delay_ms(500);
output_bit(PIN_D4, 1);
delay_ms(500);
output_bit(PIN_C7, 1);
delay_ms(500);
output_bit(PIN_D3, 0);
delay_ms(500);
output_bit(PIN_D2, 0);
delay_ms(500);
output_bit(PIN_C5, 0);
delay_ms(500);
output_bit(PIN_C4, 0);
delay_ms(500);
output_bit(PIN_D4, 0);
delay_ms(500);
output_bit(PIN_C7, 0);
delay_ms(500);
//fim
//mandar valor alto para sleep
output_bit(PIN_D5, 1);
//selecionar sensibilidade
output_bit(PIN_D7, 0);
output_bit(PIN_D6, 0);
/*
channel 0 EIXO x +g D3 -g D2
channel 1 EIXO y +g C5 -g C4
channel 4 EIXO z +g D4 -g C7
sleep D5
select1 D7
select2 D6
*/
while(true){
//LENDO EIXO X
x=0;
set_adc_channel(0);
delay_ms(1);
x=read_adc();
if(x>=745){
output_bit(PIN_D3, 1);
delay_ms(2000);
output_bit(PIN_D3, 0);
}
if(x<=292){
output_bit(PIN_D2, 1);
delay_ms(2000);
output_bit(PIN_D2, 0);
}
delay_ms(1);
//LENDO EIXO Y
y=0;
set_adc_channel(1);
delay_ms(1);
y=read_adc();
if(y>=745){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
if(y<=292){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
//LENDO EIXO Z
delay_ms(1);
z=0;
set_adc_channel(4);
delay_ms(1);
z=read_adc();
if(z>=745){
output_bit(PIN_D4, 1);
delay_ms(2000);
output_bit(PIN_D4, 0);
}
if(z<=292){
output_bit(PIN_C7, 1);
delay_ms(2000);
output_bit(PIN_C7, 0);
}
delay_ms(1);
}
}
Projeto de Iniciação Cientifica Bolsa da FAPESB
Titulo: Sistema de Navegação em Ambientes Internos Baseado em Acelerômetros para Manutenção de Plantas Industriais
Bolsista: Sérgio Holtz Farias de Sant’ Anna Professor
Orientador: Doutor Jorge Alberto Prado de Campos
Co-Orientador: Professor Euclério B. Ornellas Filho
Áreas de Conhecimento
1.00.00.00-3 Ciências Exatas e da Terra
1.03.04.00-2 Sistemas de Computação
3.00.00.00-9 Engenharias
3.04.02.05-0 Sistemas Eletrônicos de Medida e de Controle
Resumo do trabalho:
Este trabalho propõe o desenvolvimento de um sistema de navegação e posicionamento para dispositivos móveis em ambientes fechados. No contexto deste trabalho, consideramos dispositivos móveis Smartphones ou Personal Digital Assistant (PDAs) dotados de câmera digital, acelerômetros e acesso a redes sem fio.
A localização inicial do dispositivo será obtida a partir de marcos de referência, posicionados em pontos estratégicos dentro do ambiente. Os marcos de referência serão capturados pela câmera do dispositivo e, através do processamento digital da imagem, será identificada a posição e orientação inicial do equipamento. Uma vez posicionado o dispositivo, o sistema será capaz de capturar qualquer movimentação do usuário através do processamento das informações obtidas dos acelerômetros.
Com as informações da posição e orientação do dispositivo, será possível desenvolver um sistema de navegação que mostre em tempo real a localização do usuário no ambiente e informações do objeto que ele estiver apontando com o dispositivo. As informações do objeto serão obtidas através da consulta em um banco de dados acessados remotamente via rede sem fio.
O sistema a ser desenvolvido neste projeto pode ser utilizado para as mais diversas aplicações em ambientes fechados e em que a localização do usuário é indispensável. Neste trabalho, pretendemos utilizar a tecnologia supra mencionada no desenvolvimento de uma aplicação para manutenção de equipamentos industriais no chão de fábrica. A aplicação irá identificar o equipamento apontado pelo técnico e apresentar informações sobre as atividades de manutenção e especificações do equipamento.
Introdução:
A evolução da computação móvel e dos mecanismos de localização têm tornado os chamados Serviços Baseados na Localização (SBL) um segmento bastante atrativo na área de desenvolvimento de sistemas computacionais. SBL é qualquer tipo de aplicação rodando em um dispositivo móvel, preferencialmente conectado em rede e que utilize a localização do usuário como informação determinante no processamento e nas funcionalidades ofertadas.
Na esteira da evolução dos equipamentos para a computação móvel vieram aplicações computacionais com complexidade cada vez mais elevada. Os dispositivos móveis atualmente possuem poder de processamento equivalente aos computadores de mesa de alguns anos atrás. Além do razoável pode de processamento, os dispositivos móveis possuem periféricos que possibilitam a comunicação em redes, a captura de imagens, o posicionamento através de satélites e telas sensíveis ao toque.
Com relação posicionamento dos dispositivos para os SBLs, as aplicações móveis têm se valido quase que exclusivamente de sistemas de localização baseados na triangulação de sinais de rádio. Dentre estes sistemas destacam-se os sistemas de localização por satélites (GPS) e os sistemas de localização por triangulação dos sinais das antenas das operadoras de telefonia celular. O sistema GPS possui como vantagem uma boa precisão (de 5 a 10 metros) e não possui do de utilização. Como principal desvantagem tem-se a incapacidade de utilização do GPS em ambientes fechados. Já o mecanismo de localização por triangulação de rádio-base pode ser utilizado em ambientes fechados, mas possuem pouca precisão na localização do dispositivo, podendo chegar a alguns quilômetros em regiões com poucas antenas. Além disso, os sistemas de triangulação de rádio-base são serviços ofertados pela operadora e geralmente tem um custo para sua utilização.
No contexto da atividade de manutenção de máquinas e equipamentos em um ambiente industrial, acreditamos que esta atividade apresenta um grande potencial para a computação móvel, em geral, e para os SBLs, em particular. Desta forma, este trabalho propõe o desenvolvimento de uma aplicação móvel baseada na localização para auxiliar o técnico de manutenção na identificação dos diversos equipamentos encontrados no chão de fábrica. Além da identificação do equipamento, a aplicação é capaz de fornecer ao técnico as especificações do equipamento e a atividades de manutenção que precisam ser executadas.
Como se trata de um SBL, a aplicação precisa conhecer a posição e direção do dispositivo móvel. Neste trabalho, iremos explorar as informações obtidas dos acelerômetros para calcular o deslocamento do dispositivo a partir de uma posição conhecida.
O restante deste documento está estruturado da seguinte forma: a próxima seção detalha a aplicação a ser desenvolvida e discute algumas tecnologias necessárias ao desenvolvimento do trabalho. Em seguida são apresentados os objetivos do trabalho, a metodologia a ser utilizada, as atividades a serem desenvolvidas, o cronograma de execução e equipamentos necessários ao desenvolvimento do projeto. Finalmente, apresenta-se os resultados esperados.
Assinar:
Postagens (Atom)
