Sonar SR-1 da Symphony

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Sonar SR-1 da Symphony

Mensagempor Mersin » 26 Mar 2008 15:38

Olá,

Alguém já trabalhou com o Sonar SR-1 da www.symphony.com.br via comunicação serial?

Estou lendo a saída serial dele e os bytes recebidos não estão de acordo com o que deveriam ser pelo manual do sonar!!! preciso de ajuda!

Aguardando respostas.

Valeu!
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

em basic (bascom avr)

Mensagempor silverbolt » 26 Mar 2008 16:23

'************************************************************
' Programa: sonar_sr1.bas
' Autor: Sergio Costa
' Data: 18/08/2006
'
' www.roboticafacil.com.br
'
' Compilador: BASCOM
' Interace: CPU - Robotica Facil Symphony
' Objetivo: medir distância com sonar symphony SR-1
' e mostrar no LCD Serial
'
' Observações: A comunicacao com o sonar é feita pela portb.7 da
' placa CPU
' A comunicação com LCD serial é feita pela porta serial
' da CPU (TX)
'
' valores mostrados em centimetros
'
'************************************************************
'
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

Dim Dist As Word , Strdist As String * 8 , Serdist As Byte
Wait 5

Open "comb.7:9600,8,n,1,INVERTED" For Input As #1

Do

Input #1 , Strdist
Strdist = Right(strdist , 3)
Serdist = Val(strdist)
Printbin &HFE ; &H0D;
Serdist = Serdist * 2.54
Print "Dist = " ; Serdist ; " cm";
Waitms 250
Loop
Symphony Robotica
gravador usb, icd2 PIC, AVR e ARM.
Distribuidor BASCOM no Brasil.
www.roboticafacil.com.br
Locação de robos para eventos
www.symphony.com.br
Avatar do usuário
silverbolt
Byte
 
Mensagens: 468
Registrado em: 03 Nov 2006 10:17
Localização: Vulcano - SP

em basic (bascom avr)

Mensagempor silverbolt » 26 Mar 2008 16:24

'************************************************************
' Programa: sonar_sr1.bas
' Autor: Sergio Costa
' Data: 18/08/2006
'
' www.roboticafacil.com.br
'
' Compilador: BASCOM
' Interace: CPU - Robotica Facil Symphony
' Objetivo: medir distância com sonar symphony SR-1
' e mostrar no LCD Serial
'
' Observações: A comunicacao com o sonar é feita pela portb.7 da
' placa CPU
' A comunicação com LCD serial é feita pela porta serial
' da CPU (TX)
'
' valores mostrados em centimetros
'
'************************************************************
'
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

Dim Dist As Word , Strdist As String * 8 , Serdist As Byte
Wait 5

Open "comb.7:9600,8,n,1,INVERTED" For Input As #1

Do

Input #1 , Strdist
Strdist = Right(strdist , 3)
Serdist = Val(strdist)
Printbin &HFE ; &H0D;
Serdist = Serdist * 2.54
Print "Dist = " ; Serdist ; " cm";
Waitms 250
Loop
Symphony Robotica
gravador usb, icd2 PIC, AVR e ARM.
Distribuidor BASCOM no Brasil.
www.roboticafacil.com.br
Locação de robos para eventos
www.symphony.com.br
Avatar do usuário
silverbolt
Byte
 
Mensagens: 468
Registrado em: 03 Nov 2006 10:17
Localização: Vulcano - SP

Mensagempor phophollety » 26 Mar 2008 18:44

hehehe é bom ter suporte do pai da criança.. hehehe
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

veja se isso te ajuda, achei na net

Mensagempor silverbolt » 28 Mar 2008 19:55

#include <16F877>
#device adc=8
#include <stdlib.h>
#include <math.h>

#define LED PIN_C0

#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_B0, stream=sonar1, INVERT) // SONAR #1
#use rs232(baud=9600, xmit=PIN_E1, rcv=PIN_E2, stream=PC) // TO PC


main()
{
// IR
unsigned int ir_raw1=0;

// SONAR
int i=0;
char c;
char sonarData[4];
unsigned int sonar_raw1=0, sonar_raw2=0, sonar_raw3=0;


// setup to do A/D conversion
setup_adc_ports(RA0_RA1_RA3_ANALOG);
setup_adc(ADC_CLOCK_DIV_8);


output_high(LED);
delay_ms(1500);
output_low(LED);

while(1)
{
// read in value on AN0
set_adc_channel(0);
delay_us(50);
ir_raw1 = read_adc();

// SENSOR #1
c = 'a';
while(c != 'R') {c = fgetc(sonar1);} // sonar outputs data as "Rxyz"
i=0;
for(i=0; i<=2; i++) // get next 3 bytes
{
sonarData[i] = fgetc(sonar1);
}
if(isdigit(sonarData[0]) && isdigit(sonarData[1]) && isdigit(sonarData[2]))
{
sonarData[3] = '\0';
sonar_raw1 = atoi(sonarData);
}

fprintf(PC, "%u, ", ir_raw1);
fprintf(PC, "%u\r\n", sonar_raw1);

}

} // end of main
Symphony Robotica
gravador usb, icd2 PIC, AVR e ARM.
Distribuidor BASCOM no Brasil.
www.roboticafacil.com.br
Locação de robos para eventos
www.symphony.com.br
Avatar do usuário
silverbolt
Byte
 
Mensagens: 468
Registrado em: 03 Nov 2006 10:17
Localização: Vulcano - SP

Mensagempor Mersin » 12 Abr 2008 10:24

Olá silverbolt,

Primeiramente muito obrigado pela ajuda e como havia dito a você o projeto cresceu um pouquinho e agora preciso ler 6 sensores e toda informação transmitir via RF, então eu decidi ler o sinal de saída PWM dos mesmos em 6 pinos distintos e deichei o RX/TX reservado para a transmissão RF.

Mas ao medir o sensor, notei que está medindo direito, porém, algumas leituras são completamente erradas, depois volta a medir bom denovo.

Estas frequentes variações são normais? terei que desenvolver um algorítmo mais sofisticado utilizando Estatística para desprezar as medidas fora do desvio padrão?
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Mensagempor HC908 » 12 Abr 2008 18:14

rapaz fiz um sensor test de ultra-som e pelo menos pra mim é normal. Vc deve corrigir isto via software mesmo.
HC908
Byte
 
Mensagens: 248
Registrado em: 26 Mar 2007 09:55

Mensagempor silverbolt » 13 Abr 2008 10:58

eu ja tive esses problemas, mesmo usando outros sensores (sonares)
eu fiz uma média
lia 10 x, somava tudo e depois dividia por 10.
dai pegava esse resultado.
ficou satisfatório
Symphony Robotica
gravador usb, icd2 PIC, AVR e ARM.
Distribuidor BASCOM no Brasil.
www.roboticafacil.com.br
Locação de robos para eventos
www.symphony.com.br
Avatar do usuário
silverbolt
Byte
 
Mensagens: 468
Registrado em: 03 Nov 2006 10:17
Localização: Vulcano - SP

Mensagempor lucaszampar » 14 Abr 2008 07:35

Com a minha experiência que eu tive com diversos sonares, inclusive os da Symphony, esses lixos ocorrem em todos os sensores.

Sugiro que ao invés da média, use mediana das últimas 15 medidas.

Se precisar de velocidade de leitura, faça uma mediana de 3 medidas. Se termo central dessas 3 medidas for lixo, refaça as três medidas... e por aí vai...
Avatar do usuário
lucaszampar
Byte
 
Mensagens: 105
Registrado em: 11 Out 2006 22:30
Localização: Limeira - SP

Mensagempor Mersin » 14 Abr 2008 08:22

É Gente,

Eu imaginava que esses "lixos" fossem normais e pensei também em fazer média de 10 leituras, o problema é que o sensor faz apenas 20 leituras por segundo e se eu tirar média de 10, então terei apenas 2 leituras por segundo, o que é muito pouco.

Vou tentar fazer com a mediana das últimas 3 leituras ou a média das últimas duas e ir guardando esses resultados numa tabela onde terei as médias das médias, daí terei como saber se a leitura foi válida ou não. Vamos ver se fica legal!

Obrigado a Todos!
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Mensagempor silverbolt » 14 Abr 2008 09:54

Mersin escreveu:É Gente,

Eu imaginava que esses "lixos" fossem normais e pensei também em fazer média de 10 leituras, o problema é que o sensor faz apenas 20 leituras por segundo e se eu tirar média de 10, então terei apenas 2 leituras por segundo, o que é muito pouco.

Vou tentar fazer com a mediana das últimas 3 leituras ou a média das últimas duas e ir guardando esses resultados numa tabela onde terei as médias das médias, daí terei como saber se a leitura foi válida ou não. Vamos ver se fica legal!

Obrigado a Todos!


Deixando bem caro que "lixo"não é o sensor e sim a leitura erronea ;-)
Bom ja usei os sonares gringos por Pulso, aqueles SRF04, é pior ainda.
Os da polaroid são os melhores, porem de vez em quando dá uma leitura meio doida.
por isso da necessidade de se usar um algoritmo para correção.

Já tive problemas paraceido com módulos RF ASF.
Se não for implementado algo via soft, o receptor fica recebendo lixo e fica doido.
Symphony Robotica
gravador usb, icd2 PIC, AVR e ARM.
Distribuidor BASCOM no Brasil.
www.roboticafacil.com.br
Locação de robos para eventos
www.symphony.com.br
Avatar do usuário
silverbolt
Byte
 
Mensagens: 468
Registrado em: 03 Nov 2006 10:17
Localização: Vulcano - SP


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x