collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


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]

Autor Tópico: Servo + Sensor Ultrasonico + arduino + ponte H  (Lida 21790 vezes)

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

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Servo + Sensor Ultrasonico + arduino + ponte H
« em: 03 de Setembro de 2011, 04:50 »
Ola

Ando aqui de volta de um projecto que já aqui estava parado aos meses... já tenho tudo montado :)

é o seguinte, queria ligar o sensor ultrasonico o SRF05 ao arduino e por sua vez que vai ligar a uma ponte H e queria o sensor andasse em cima de um servo que o mesmo girasse, já há aqui no fórum alguns projectos semelhantes, mas nenhum deles disponibiliza o código, queria um código que relacionasse o [sensor + arduino + ponte H + servo] já andei a pesquisar, encontrei umas coisas sobre o sensor e o arduino, mas para o resto nada, não sei como juntar tudo depois tudo só num código :|

Pretendo fazer algo semelhante a este projecto do guibOt :
algum pode dar ai um ajuda uns link que fale sobre como juntar aquilo tudo...

Nas ligações do sensor/arduino, estou a basear por este link: http://www.robot-electronics.co.uk/htm/srf05tech.htm

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #1 em: 06 de Setembro de 2011, 02:16 »
Código: [Seleccione]

int duration;                          // Stores duratiuon of pulse in
int distance;                          // Stores distance
int srfPin = 2;                        // Pin for SRF05

void setup(){
Serial.begin(9600);
}

void loop(){
  pinMode(srfPin, OUTPUT);
  digitalWrite(srfPin, LOW);           // Make sure pin is low before sending a short high to trigger ranging
  delayMicroseconds(2);
  digitalWrite(srfPin, HIGH);          // Send a short 10 microsecond high burst on pin to start ranging
  delayMicroseconds(10);
  digitalWrite(srfPin, LOW);           // Send pin low again before waiting for pulse back in
  pinMode(srfPin, INPUT);
  duration = pulseIn(srfPin, HIGH);    // Reads echo pulse in from SRF05 in micro seconds
  distance = duration/58;              // Dividing this by 58 gives us a distance in cm
  Serial.println(distance);
  delay(50);                           // Wait before looping to do it again
}


para que serve esta parte " Serial.begin(9600); "

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #2 em: 06 de Setembro de 2011, 05:13 »
Serve para dizer que queres usar a porta serial com um baud rate de 9600pbs.
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #3 em: 23 de Setembro de 2011, 02:43 »
Bahhh

Sem ajuda nao vou lá, quanto mais altero pior fica :|

encontrei este codigo, mas nao entendo algumas coisas,

Código: [Seleccione]

const int numOfReadings = 10;                   // number of readings to take/ items in the array
int readings[numOfReadings];                    // stores the distance readings in an array
int arrayIndex = 0;                             // arrayIndex of the current item in the array
int total = 0;                                  // stores the cumlative total
int averageDistance = 0;                        // stores the average value
// setup pins and variables for SRF05 sonar device
int echoPin = 12;                               // SRF05 echo pin (digital 2)
int initPin = 13;                               // SRF05 trigger pin (digital 3)
unsigned long pulseTime = 0;                    // stores the pulse in Micro Seconds
unsigned long distance = 0;                     // variable for storing the distance (cm)
int motor1Pin1 = 3;                             // pin 2 on L293D
int motor1Pin2 = 4;                             // pin 7 on L293D
int enable1Pin = 9;                             // pin 1 on L293D
int motor2Pin1 = 5;                             // pin 10 on L293D
int motor2Pin2 = 6;                             // pin  15 on L293D
int enable2Pin = 10;                            // pin 9 on L293D
void setup() {
  // set the motor pins as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enable1Pin, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(enable2Pin, OUTPUT);
  // set enablePins high so that motor can turn on:
  digitalWrite(enable1Pin, HIGH);
  digitalWrite(enable2Pin, HIGH);
  pinMode(initPin, OUTPUT);                     // set init pin 3 as output
  pinMode(echoPin, INPUT);                      // set echo pin 2 as input
  // create array loop to iterate over every item in the array
  for (int thisReading = 0; thisReading < numOfReadings; thisReading++) {
    readings[thisReading] = 0;
  }
}
void loop() {
  digitalWrite(initPin, HIGH);                  // send 10 microsecond pulse
  delayMicroseconds(10);                                // wait 10 microseconds before turning off
  digitalWrite(initPin, LOW);                   // stop sending the pulse
  pulseTime = pulseIn(echoPin, HIGH);           // Look for a return pulse, it should be high as the pulse goes low-high-low
  distance = pulseTime/58;                      // Distance = pulse time / 58 to convert to cm.
  total= total - readings[arrayIndex];          // subtract the last distance
  readings[arrayIndex] = distance;              // add distance reading to array
  total= total + readings[arrayIndex];          // add the reading to the total
  arrayIndex = arrayIndex + 1;                  // go to the next item in the array
  // At the end of the array (10 items) then start again
  if (arrayIndex >= numOfReadings)  {
    arrayIndex = 0;
  }
  averageDistance = total / numOfReadings;      // calculate the average distance
  delay(10);
  // check the average distance and move accordingly
  if (averageDistance <= 10){
    // go backwards
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
  }
  if (averageDistance <= 25 && averageDistance > 10) {
    // turn
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
  }
  if (averageDistance > 25)   {
    // go forward
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
  }
}



o que é que isto faz: const int numOfReadings = 10; ? o que significa o cost ? porque o 10 ?
« Última modificação: 23 de Setembro de 2011, 02:44 por Bony »

Offline zordlyon

  • Mini Robot
  • *
  • Mensagens: 1.768
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #4 em: 23 de Setembro de 2011, 10:35 »
Como diz no comentário a frente, serve para retirar 10 elementos do array...

Const significa que é uma variável constante, ou seja ao longo do programa e como é global, não a consegues alterar..

int é um inteiro...

portanto o que tens aí é uma variável constante de valor inteiro...

O meu concelho para teres duvidas destas, é porque estas mesmo a nora com a programação.

Compra um livro de programação e começa pelas bases...

Olha aconcelho-te o livro Linguagem C da FCA...não é de programação para arduinos nem nada parecido, mas é programação em C, e é muito bom..

Cumprimentos,
André Carvalho.
Cumprimentos,
André Carvalho.

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #5 em: 23 de Setembro de 2011, 23:19 »
Eu ja tive programacao C mas já la vai tanto tempo que ja nao me lembro das coisas :S

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #6 em: 23 de Setembro de 2011, 23:22 »
Entretanto estive a escrever este codigo completamente por mim, retirei algumas coisas de outros post e tal e saiu nisto, já compilei e nao deu erro, ja meti no arduino o carro nem se mexeu :|
digam lá a vossa sentenca no que esta mal ?
por enquanto so queria que o carro andasse para a frente e sempre que encontrasse o um obstaculo a menos de 4 cm ele virasse para a direita..
aqui fica o codigo que escrevi nas ultimas horas:

Código: [Seleccione]


int echopin = 13; // a saido echo do SRF05 liga no pin 13
int trigerpin = 12; // a saida triger do SRFo5 liga no pin 12
int motor1pin1 = 11; // Ponte H motor 1 saida 1
int motor1pin2 = 10; // Ponte H motor 1 saida 2
int motor2pin1 = 6; // Ponte H motor 2 saida 1
int motor2pin2 = 5; // Ponte H motor 2 saida 2
int distancia; // Variavel distancia suponho eu em cm
int duracao; //Variavel duracao

void setup()
 {

   pinMode(motor1pin1, OUTPUT);
   pinMode(motor1pin2, OUTPUT);
   pinMode(motor2pin2, OUTPUT);
   pinMode(motor2pin2, OUTPUT);
   pinMode(trigerpin, OUTPUT);
   pinMode(echopin, INPUT);
 }
 
void loop()
{
digitalWrite(trigerpin, LOW); // da um sinal baixo ao triger
delayMicroseconds(2);
digitalWrite(trigerpin,HIGH);  // da um sinal alto ao triger
delayMicroseconds(10);
digitalWrite(trigerpin,LOW); // da um sinal baixo ao triger
delayMicroseconds(10);
duracao = pulseIn(trigerpin, HIGH); // isto a que ainda nao percebo bem o que é loOl
distancia = duracao/58; // converte para cm

if (distancia >= 5) // se a distancia for maior ou igual que 5 cm
{
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2,LOW);
  digitalWrite(motor2pin1,HIGH);
  digitalWrite(motor2pin2,LOW);
 
  //anda sempre em frente ...
 
}

if (distancia <= 4) // se a distancia for menor ou igual que 4 cm
{
  digitalWrite(motor1pin1,LOW);
  digitalWrite(motor1pin2,HIGH);
  digitalWrite(motor2pin1,LOW);
  digitalWrite(motor2pin2,HIGH);
  delay(1000);
// vira para a direita durante 1 segundo

}
}
 


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #7 em: 24 de Setembro de 2011, 00:09 »
De certeza que isto é assim:
digitalWrite(trigerpin, LOW); // da um sinal baixo ao triger
delayMicroseconds(2);
digitalWrite(trigerpin,HIGH);  // da um sinal alto ao triger
delayMicroseconds(10);
digitalWrite(trigerpin,LOW); // da um sinal baixo ao triger
delayMicroseconds(10);
duracao = pulseIn(trigerpin, HIGH); // isto a que ainda nao percebo bem o que é loOl
distancia = duracao/58; // converte para cm

É que estás sempre a escrever low, logo após a primeira que mandas um low o pino fica a low/0 e nunca mais volta a 1/High, que imagino que seja preciso.
Já começas-te pelo básico de meter prints por serial para ver onde o programa está e se está a ler alguma coisa do sensor de distancia e assim?
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #8 em: 24 de Setembro de 2011, 00:45 »
Senso, fizes-te alguma alteracao no codigo ? é que nao noto diferenca nenhuma :|

Bem pensado vou testar por prints

ty

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #11 em: 29 de Setembro de 2011, 23:55 »
Unsigned long é uma variavel de 32 bits sem sinal, ou seja é sempre positiva, é para guardar o valor do millis, que usa esse mesmo tipo de variavel.
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #12 em: 29 de Setembro de 2011, 23:58 »
e porque é que no codigo ele diz unsigned long pulseTime = 0, de onde é que vem o 0, ou porque o 0 ?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #13 em: 30 de Setembro de 2011, 00:00 »
É para inicializar essa variavel com o valor 0, porque a função pulseIn retorna em micro-segundos o tempo em que o pulso que o sensor manda está a High(neste caso é a high como podes ver no código.
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Servo + Sensor Ultrasonico + arduino + ponte H
« Responder #14 em: 30 de Setembro de 2011, 00:14 »
Aii oh caracas... vejam lá se isto esta correto, isto é meramente para testar a ponte H se esta bem ligada.

Código: [Seleccione]
int motor1pin1 =1;
int motor1pin2 = 3;
int motor2pin1 = 5;
int motor2pin2 = 6;
void setup()
{
  digitalWrite(motor1pin1, OUTPUT);
  digitalWrite(motor1pin2, OUTPUT);
  digitalWrite(motor2pin1,OUTPUT);
  digitalWrite(motor2pin2,OUTPUT);
}
void loop()
{
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2,LOW);
  digitalWrite(motor2pin1,HIGH);
  digitalWrite(motor2pin2,LOW);
  delay(2);
  digitalWrite(motor1pin1,HIGH);
  digitalWrite(motor1pin2,LOW);
  digitalWrite(motor2pin1,LOW);
  digitalWrite(motor2pin2,HIGH);
  delay(1);
 
}