Página 1 de 1

Sonar SR-1 da Symphony

MensagemEnviado: 26 Mar 2008 15:38
por Mersin
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!

em basic (bascom avr)

MensagemEnviado: 26 Mar 2008 16:23
por silverbolt
'************************************************************
' 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

em basic (bascom avr)

MensagemEnviado: 26 Mar 2008 16:24
por silverbolt
'************************************************************
' 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

MensagemEnviado: 26 Mar 2008 18:44
por phophollety
hehehe é bom ter suporte do pai da criança.. hehehe

veja se isso te ajuda, achei na net

MensagemEnviado: 28 Mar 2008 19:55
por silverbolt
#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

MensagemEnviado: 12 Abr 2008 10:24
por Mersin
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?

MensagemEnviado: 12 Abr 2008 18:14
por HC908
rapaz fiz um sensor test de ultra-som e pelo menos pra mim é normal. Vc deve corrigir isto via software mesmo.

MensagemEnviado: 13 Abr 2008 10:58
por silverbolt
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

MensagemEnviado: 14 Abr 2008 07:35
por lucaszampar
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...

MensagemEnviado: 14 Abr 2008 08:22
por Mersin
É 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!

MensagemEnviado: 14 Abr 2008 09:54
por silverbolt
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.