collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

Autor Tópico: Diferença entre ultra-sons  (Lida 26026 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline zordlyon

  • Mini Robot
  • *
  • Mensagens: 1.768
Re: Diferença entre ultra-sons
« Responder #45 em: 19 de Fevereiro de 2013, 22:55 »
Bem após vários testes, penso que já cheguei à solução pretendida.

Só tenho que agradecer a todos os que me ajudaram ou tentaram...  ;)

Deixo aqui o que fiz:

Primeiro de tudo fiz este circuito disponibilizado pela maxbotix para filtrar o ruído:


Segundo, liguei-os todos desta forma:



Depois fiz um quadrado de paredes de modo a ver se todos interferiam uns com os outros, e pelos vistos não, estão a dar valores consistentes.

Agora a programação vai passar por filtros de average e etc.

Deixo aqui o código de teste para os sensores:

Código: [Seleccione]
/**
*
*@Andre Carvalho
*
**/


const int sonarPinAN0 = 0;//AnLeft
const int sonarPinAN1 = 1;//AnFront
const int sonarPinAN2 = 2;//AnRight
const int sonarPinRx = 28;//TriggerPin


//variables needed to store values
long inches, cm;


void setup() {
  Serial.begin(9600);
 
  pinMode(sonarPinAN0, INPUT);
  pinMode(sonarPinAN1, INPUT);
  pinMode(sonarPinAN2, INPUT);
 
  pinMode(sonarPinRx, OUTPUT);
 
  //give the sensors time to boot up
  delay(250);
}

void loop() {
 
  digitalWrite(sonarPinRx, HIGH);
  delayMicroseconds(30);
 
  digitalWrite(sonarPinRx, LOW);
  delay(50);
 
  inches = readSonarAnalogPortChain(sonarPinAN0);
  cm = inches * 2.54;
  Serial.println();
  Serial.print("Analog port chain mode (AnLeft) reading:  ");
  Serial.print(cm/2);
  Serial.print("cm");
  Serial.println();
 
  inches = readSonarAnalogPortChain(sonarPinAN1);
  cm = inches * 2.54;
  Serial.println();
  Serial.print("Analog port chain mode (AnFront) reading:  ");
  Serial.print(cm/2);
  Serial.print("cm");
  Serial.println();
 
  inches = readSonarAnalogPortChain(sonarPinAN2);
  cm = inches * 2.54;
  Serial.println();
  Serial.print("Analog port chain mode (AnRight) reading:  ");
  Serial.print(cm/2);
  Serial.print("cm");
  Serial.println();
 
 

  delay(1000);
}




int readSonarAnalogPortChain(int pin) {
  long d;
// see: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288290319
    //Used to read in the analog voltage output that is being sent by the MaxSonar device.
    //Scale factor is (Vcc/512) per inch. A 5V supply yields ~9.8mV/in
    //Objects between 0 and 15 cm range as 15 cm
    digitalWrite(sonarPinRx,HIGH);
    delayMicroseconds(50); // minimum pulse recommended is 20 microseconds
    digitalWrite(sonarPinRx,LOW);
    d = analogRead(pin); // range: 0...1023 10bit ADC
    // delay(50); //minimum delay for the next measure is 50 ms
  return d;
}

Já agora testei os motores (são os da polulu micro-metal 30:1), com e sem o condensador de 100nF e a diferença é grande, pois os motores desligados não há problema nenhum, mas no momento em que os ligo, os sonares disparam os valores durante uns 2~5s. Portanto adicionei uns condensadores de 100nf (cerâmicos 104).
Cumprimentos,
André Carvalho.

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 783
Re: Diferença entre ultra-sons
« Responder #46 em: 11 de Dezembro de 2013, 14:49 »
boas zordlyon, se me permitires deixo aqui algumas duvidas que tenho em relação aos sensores ultrasonicos.

Pelo que ando a pesquisar, existem os transdutores (emitem e recebem os sinais ultrasonicos), e existe o respectivo circuito com o microcontrolador que "interpreta primeiramente os sinais" enviando um sinal que representa a diferença temporal entre o sinal enviado e o sinal recebido.
Até aqui penso que consegui assimilar o funcionamento.

Logo pressuponho que não posso (ou será bem mais facil não o fazer) usar unicamente o transdutor e programar no arduino o envio e a recepção dos sinais do transdutor.

Fiquei um pouco confuso com a comunicação entre os sensores e o arduino (Serial, I2C), ainda nao trabalhei com este tipo de comunicações, mas segundo o que sei do I2C, trabalha por endereços, será que posso usar um endereço diferente para cada sensor?

O objectivo disto será planear uns sensores de estacionamento para veiculos.
E estava a pensar usar algo como isto http://www.futurlec.com/Ultrasonic_Sensors.shtml, contudo penso que estes não têm implementado o controlo e a comunicação.