LusoRobótica - Robótica em Português

Robótica => Iniciantes => Tópico iniciado por: Bony em 03 de Setembro de 2011, 04:50

Título: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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 : farrusco (http://www.youtube.com/watch?v=sEVhS1PMLO0#)
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 (http://www.robot-electronics.co.uk/htm/srf05tech.htm)
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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); "
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 06 de Setembro de 2011, 05:13
Serve para dizer que queres usar a porta serial com um baud rate de 9600pbs.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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 ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: zordlyon 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.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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

}
}
 

Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso 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?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 24 de Setembro de 2011, 03:06
Não, só te disse o que acho estar errado!
Olha ai código de exemplo
http://letsmakerobots.com/node/1669 (http://letsmakerobots.com/node/1669)
http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/ (http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/)
http://luckylarry.co.uk/arduino-projects/arduino-processing-getting-values-from-srf05-ultrasound-sensor-serial-port/ (http://luckylarry.co.uk/arduino-projects/arduino-processing-getting-values-from-srf05-ultrasound-sensor-serial-port/)

É que basta meter arduino srf05 no google..
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 29 de Setembro de 2011, 23:46
Não, só te disse o que acho estar errado!
Olha ai código de exemplo
http://letsmakerobots.com/node/1669 (http://letsmakerobots.com/node/1669)
http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/ (http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/)
http://luckylarry.co.uk/arduino-projects/arduino-processing-getting-values-from-srf05-ultrasound-sensor-serial-port/ (http://luckylarry.co.uk/arduino-projects/arduino-processing-getting-values-from-srf05-ultrasound-sensor-serial-port/)

É que basta meter arduino srf05 no google..

Obrigado :D


O que faz um "unsigned long" ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso 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.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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 ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso 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.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony 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);
 
}

Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 30 de Setembro de 2011, 00:17
Consegues ver alguma coisa em 2ms ou 1ms?
Mete delays de vários segundos.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 00:20
tens toda a razao !! aii que burro... looool

já agora, porque é que algumas pessoas metem, delay(2) ou delayMicroseconds(2), qual é a diferenca ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 30 de Setembro de 2011, 00:41
O delay é em mili-segundos o Microseconds como o nome diz e em micro-segundos.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 00:55
ah ok nao sabia...

portanta ja retifiquei o codigo e meti no primeiro delay 2000, portanto 2 segundos, e no segundo delay 1000, 1 segundo, mandei para o arduino e nada o gajo nao andou... conclusao, se o codigo esta bem o problema so pode ser a ponte H ? os motores ja os testei e estao a dar...
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 30 de Setembro de 2011, 01:02
Podes ter isso mal ligado.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 16:18
Ja me estou a comecar a passar com isto :| já há 3 horas que estou para meter a ponte H a dar e nada :|

Estou a utilizar o SN754410 que é equivalente ao L293D.

 - liguei o pin 1,9 e 16 ao +5 do arduino
- liguei o pin 2,7,10 e 15 as entradas digitais do arduino
- liguei o pin 3,6,11 e 14 sao os que vao ligar aos motores
- liguei o pin 4,5 12, 13 aos GND de 4x1.2 V
- e por fim o pin 8 a VCC das pilhas 4x1.2V

e tenho arduino alimentado com uma pilha de 9V.
eu quero que os motores sejam alimentados aparte do arduino.
Para o arduino alimentado com uma pilha de 9V
para os dois motores alimentado com 4x1.2V de 2400mAh

Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 16:35
afinal o codigo estava mal loOl agora sim esta correto

Código: [Seleccione]
int motor1pin1 = 1;
int motor1pin2 = 3;
int motor2pin1 = 5;
int motor2pin2 = 6;

void setup()
{
  pinMode(motor1pin1, OUTPUT);
  pinMode(motor1pin2, OUTPUT);
  pinMode(motor2pin1, OUTPUT);
  pinMode(motor2pin2, OUTPUT);
}

void loop()
{
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);
  digitalWrite(motor2pin1, HIGH);
  digitalWrite(motor2pin2, LOW);
  delay(2000);
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);
  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, HIGH);
  delay(1000);
 
}

mas mesmo assim o gajo continua a nao andar :|
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 30 de Setembro de 2011, 16:38
Falta-te ai ligar a massa da alimentação da lógica da ponte H á massa do Arduino, sem massas comuns nunca trabalha.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 16:41
Sim exatamente acabei mesmo agora por descobrir isso :)

ontem a noite ja estavamos com sono, nem tu nem eu descobrimo o erro do 1 codigo que aqui meti xD agora a que descobri :D

finalmente... possa... pronto, proximo passo, SRF05 meter a bombar :D
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 16:57
é normal a ponte H aquecer muito ? é que ja estava a testar isto com o ultrasonico e meti o dedo na ponte H e ela "fervia"
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: andre_f_carvalho em 30 de Setembro de 2011, 16:58
é normal a ponte H aquecer muito ? é que ja estava a testar isto com o ultrasonico e meti o dedo na ponte H e ela "fervia"

tem dissipador?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 16:59
nao, é preciso ? as outras pontes H que tenho visto do pessoal nunca vi a usar... mas de facto a minha ponte H aquece mesmo bastante... nem sei como é que ainda nao se queimou :|

ja testei o gajo com o sensor, ele anda e desvia.se, mas está com um problema estranho, quando ele anda em frente fica a andar bue devagar, nao estou a PWM :S soluções ?
 
o codigo sofreu umas alterações, agora estou com este:

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
unsigned long pulsetime = 0; // Variavel que faz a leitura do pulso
unsigned long distancia = 0; //Variavel que que armazena a distancia

void setup()
 {

   pinMode(motor1pin1, OUTPUT);
   pinMode(motor1pin2, OUTPUT);
   pinMode(motor2pin2, OUTPUT);
   pinMode(motor2pin2, OUTPUT);
   pinMode(trigerpin, OUTPUT);
   pinMode(echopin, INPUT);
 }

void loop()
{
digitalWrite(trigerpin, HIGH);
delayMicroseconds(50);
digitalWrite(trigerpin,LOW);
pulsetime = pulseIn(echopin, HIGH);
distancia = pulsetime/58; // converte para cm

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

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

}
}
 
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 30 de Setembro de 2011, 20:07
Essa ponte H se não me engano só deve ser usada com 500mA constantes, e 1A pico.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 21:34
Como é que eu vejo quantos mA estao a ser consumidos nos dois motores ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 30 de Setembro de 2011, 21:38
Com um multimetro.
Sabes medir correntes?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 30 de Setembro de 2011, 21:42
Com um multimetro.
Sabes medir correntes?

Pois nao tenho nenhum...
nao sei, mas gostava de saber :D

SN754410
Ponte H quadrupla.
Tensão de saída: 36V
Corrente de saída: 2x1A
Não necessita de diodos de protecção no motor.
Compativel com o Layout das L293D, em: http://lusorobotica.com/index.php?topic=262.0 (http://lusorobotica.com/index.php?topic=262.0)
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 01 de Outubro de 2011, 03:06
Aquilo aquece que e uma coisa por demais, queima mesmo nem sei como é que aquilo ainda nao se queimou, mal lá meto o dedo em cima esta mesmo a "ferver" loOl

relativamente ao problema de os motores estarem a andar devagar de mais, em digital resolver meter por analog em PWM a 100% e os gajos assim ja andam no maximo :S que conclusao se pode tirar daqui ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 05 de Março de 2012, 22:35
ainda ando de volta deste projecto... isto programa-lo como eu quero ainda nao consegui, ja me pintei de amarelo e nada... agora ao enviar o programa para o arduino da-me isto

done uploading, mas por baixo da este erro:

"Binary sketch size: 4440 bytes (of a 32256 byte maximum)
avrdude: stk500_getsync(): not in sync: resp=0x00"

o que será ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 05 de Março de 2012, 22:40
Se dá esse erro de certeza que não faz o upload, está a dizer-te que o bootloader não está sincronizado com o avrdude, ou seja que não lhe respondeu ou que respondeu com caracteres estranhos.

Tens alguma coisa nos pinos digital0/1?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 05 de Março de 2012, 22:47
já descobri, era a serial port em que o arduino estava ligado, tinha COM1 e era a COM3 :)
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 06 de Março de 2012, 00:36
Código: [Seleccione]
#include <Servo.h>

int maxspeed = 100;

#define MotorR 5
#define MotorL 3

int pause = 1000;

#define sensorpin 2
int duration;
int distance;

Servo servo;

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

void rightForward(void){
  digitalWrite(8, HIGH);
  digitalWrite(11, LOW);
}

void leftForward(void){
  digitalWrite(12, LOW);
  digitalWrite(7, HIGH);
}

void rightBackward(){
  digitalWrite(8, LOW);
  digitalWrite(11, HIGH);
}

void leftBackward(void){
  digitalWrite(12, HIGH);
  digitalWrite(7, LOW);
}

void accelerate(){
 
    analogWrite(MotorR, 0);
    analogWrite(MotorL, 0);
 
    for(int i = 0; i < maxspeed; i += 10){
      analogWrite(MotorR, i);
      analogWrite(MotorL, i);
      delay(40);
    }
   
    analogWrite(MotorR, maxspeed);
    analogWrite(MotorL, maxspeed);
    delay(40);
}

void slowdown(){
 
  for(int i = maxspeed; i > 0; i -= 10){
    analogWrite(MotorR, i);
    analogWrite(MotorL, i);
    delay(40);
  }
 
  analogWrite(MotorR, 0);
  analogWrite(MotorL, 0);
}


void setup(){
 
  Serial.begin(9600);
 
  // right motor
    pinMode(8, OUTPUT); // 1A
    pinMode(11, OUTPUT); // 1B
    pinMode(MotorR, OUTPUT); // PWM
   
    // left Motor
    pinMode(MotorL, OUTPUT); // PWM
    pinMode(12, OUTPUT); // 2A
    pinMode(7, OUTPUT); // 2B
   
    servo.attach(6);
    servo.write(80);
}

void loop(){
 
  int incomingByte = 0;
 
  if(Serial.available() > 0){
 
    incomingByte = Serial.read();
   
  }
 
  if(incomingByte == 102){
    rightForward();
    leftForward();
    accelerate();
  }
 
  if(incomingByte == 98){
    rightBackward();
    leftBackward();
    accelerate(); 
  }
 
  if(incomingByte == 108){
    rightForward();
    leftBackward();
    accelerate();
  }
 
  if(incomingByte == 114){
    rightBackward();
    leftForward();
    accelerate();
  }
 
  if(incomingByte == 100){
    slowdown();
  }
 
  if(incomingByte == 76){
    servo.write(170);
  }
 
  if(incomingByte == 77){
    servo.write(80);
  }
 
  if(incomingByte == 82){
    servo.write(0);
  }
 
  delay(100);
  getDistance();
  Serial.println(distance, DEC);
 
}
Neste codigo aqui, quais é que sao os pins dos motores ?

ele liga a motor a 3 pins diferentes :S mas eu so posso ligar a 2 pinos.

do tipo:

#define MotorR 5 ligar ao pino 5
#define MotorL 3 e ligar ao pino 3
depois mais abaixo, diz:

// right motor
    pinMode(8, OUTPUT); // 1A
    pinMode(11, OUTPUT); // 1B
    pinMode(MotorR, OUTPUT); // PWM
   
    // left Motor
    pinMode(MotorL, OUTPUT); // PWM
    pinMode(12, OUTPUT); // 2A
    pinMode(7, OUTPUT); // 2B

3 pins :( mas eu so tenho dois pela ponte H.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 06 de Março de 2012, 00:42
Não tens acesso aos enables da ponte H?
Normalmente usa-se as entradas das pontes H para selecionar a direcção de rotação e faz-se o pwm para controlo de velocidade no enable de cada canal da ponte.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 06 de Março de 2012, 00:47
Tenho. Estou a utilizar a ponte H SN754410, e tive agora a ver o DS do CI, e o EN é o pin 1 e 9 e tenho ambos ligados ao VCC.

sendo assim como é que ficam as ligacoes ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 08 de Março de 2012, 23:24
nao estou mesmo a ver o problema disto... isto a meu ver deve ser alguma ligacao nas ponte H :S a nivel do Enable...

o sensor funciona perfeitamente bem, mas o servo e os 2 motores nada... quando o ligo o servo mexe-se mas depois para logo e fica a fazer um barulho como se tivesse preso e nao consegue andar...

até fiz um video para verem que o sensor funciona:

SRF05+arduino+servo+dc motors.mp4 (http://www.youtube.com/watch?v=e38DyaysD3k#)

tirei uma foto as ligacoes da ponte H, porque penso que o problema, deve estar em alguma ligacao da mesma... mas ja estou farto de rever e rever e pesquisar e aparentemente tudo se encontra bem...
deixo aqui duas fotos frente e tras:

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0084.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0084.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0083.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0083.jpg)

vejam la se detetam alguma coisa de mal ligada ou em falta... tenho a ponte H a ser alimentada pelo arduino, mas por sua vez os motores sao alimentados pelas 4 pilhas cmo está vizivel no video, que corresponde ao pin 8 da ponte H.

estou a utilizar este codigo:

Código: [Seleccione]
#include <Servo.h>

int maxspeed = 100;

#define MotorR 5
#define MotorL 3

int pause = 1000;

#define sensorpin 2
int duration;
int distance;

Servo servo;


void getDistance(){

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

void rightForward(void){
  digitalWrite(8, HIGH);
  digitalWrite(11, LOW);
}

void leftForward(void){
  digitalWrite(12, LOW);
  digitalWrite(7, HIGH);
}

void rightBackward(){
  digitalWrite(8, LOW);
  digitalWrite(11, HIGH);
}

void leftBackward(void){
  digitalWrite(12, HIGH);
  digitalWrite(7, LOW);
}

void accelerate(){

  analogWrite(MotorR, 0);
  analogWrite(MotorL, 0);

  for(int i = 0; i < maxspeed; i += 10){
    analogWrite(MotorR, i);
    analogWrite(MotorL, i);
    delay(40);
  }

  analogWrite(MotorR, maxspeed);
  analogWrite(MotorL, maxspeed);
  delay(40);
}


void slowdown(){

  for(int i = maxspeed; i > 0; i -= 10){
    analogWrite(MotorR, i);
    analogWrite(MotorL, i);
    delay(40);
  }

  analogWrite(MotorR, 0);
  analogWrite(MotorL, 0);


}


void setup(){

  Serial.begin(9600);

  // right motor
  pinMode(8, OUTPUT); // 1A
  pinMode(11, OUTPUT); // 1B
  pinMode(MotorR, OUTPUT); // PWM


  // left Motor
  pinMode(MotorL, OUTPUT); // PWM
  pinMode(12, OUTPUT); // 2A
  pinMode(7, OUTPUT); // 2B

  servo.attach(6);
  servo.write(90
    );
}

void loop(){

  int incomingByte = 0;

  if(Serial.available() > 0){

    incomingByte = Serial.read();

  }

  if(incomingByte == 102){
    rightForward();
    leftForward();
    accelerate();
  }

  if(incomingByte == 98){
    rightBackward();
    leftBackward();
    accelerate(); 
  }

  if(incomingByte == 108){
    rightForward();
    leftBackward();
    accelerate();
  }

  if(incomingByte == 114){
    rightBackward();
    leftForward();
    accelerate();
  }

  if(incomingByte == 100){
    slowdown();
  }

  if(incomingByte == 76){
    servo.write(170);
  }

  if(incomingByte == 77){
    servo.write(80);
  }

  if(incomingByte == 82){
    servo.write(0);
  }

  delay(100);
  getDistance();
  Serial.println(distance, DEC);

}

Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 08 de Março de 2012, 23:39
Só estás a uma ponte H de casa chip porque?
Isso é falta de uns condensadores de decoupling, que deve ser uma ruideira na alimentação que o arduino entra em modo de reset.
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 09 de Março de 2012, 00:26
Só estás a uma ponte H de casa chip porque?
Isso é falta de uns condensadores de decoupling, que deve ser uma ruideira na alimentação que o arduino entra em modo de reset.

porque era o tal problema de aquecerem muito, foi me dito que era melhor meter uma ponte H para cada motor.

Nao é visivel nas fotos, mas cada motor já tem um condensador.

esses condensadores de decoupling é para meter onde? nos motores ou na ponte H ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 09 de Março de 2012, 02:44
Comeco a ficar frustrado com isto... nao sei mais o que fazer...

já lhe meti os condesadores, segui tal e qual este esquema :

http://i296.photobucket.com/albums/mm184/CrazyBony/3235658022_7f505922e3_o.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/3235658022_7f505922e3_o.jpg)

a unica diferenca é no pin 1 (enable) liguei ao pin 5 do arduino, e do outro CI liguei tb o pin 1 ao pin 3 do arduino, como diz o codigo, para ter o PWM.

Mas nada, o gajo continua a nao dar sinal de vida...

o servo, quando ligo o arduino via UBS, nada, quando ligo o arduino com uma pilha de 9 Volts o gajo gira ate aos 180 e fica ali, aquele LED amarelo que os arduinos tem que esta sempre acesso quando o servo gira e fica nos 180 quase que se apaga parece que esta ali algum curto circuito ou assim...

deixo aqui mais umas fotos de varios angulos da ponte H e as suas ligacoes, sei que é dificil de perceber mas vejam lá se descobrem algo de errado... é que mto sinceramente, ja nao sei mais o que fazer com isto...

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0095.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0095.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0094.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0094.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0093.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0093.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0092.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0092.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0091.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0091.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0090.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0090.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0089.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0089.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0088.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0088.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0087.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0087.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0087.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0087.jpg)

http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0086.jpg (http://i296.photobucket.com/albums/mm184/CrazyBony/IMAG0086.jpg)

se tiverem alguma duvida de onde é que vai ligar onde perguntei que eu digo.

cumps
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Hugu em 10 de Março de 2012, 01:12
Comeco a ficar frustrado com isto... nao sei mais o que fazer...

já lhe meti os condesadores, segui tal e qual este esquema :

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2F3235658022_7f505922e3_o.jpg&hash=5f99cd56dd71c5c08e59056413014eccc9309434)

a unica diferenca é no pin 1 (enable) liguei ao pin 5 do arduino, e do outro CI liguei tb o pin 1 ao pin 3 do arduino, como diz o codigo, para ter o PWM.

Mas nada, o gajo continua a nao dar sinal de vida...

o servo, quando ligo o arduino via UBS, nada, quando ligo o arduino com uma pilha de 9 Volts o gajo gira ate aos 180 e fica ali, aquele LED amarelo que os arduinos tem que esta sempre acesso quando o servo gira e fica nos 180 quase que se apaga parece que esta ali algum curto circuito ou assim...

deixo aqui mais umas fotos de varios angulos da ponte H e as suas ligacoes, sei que é dificil de perceber mas vejam lá se descobrem algo de errado... é que mto sinceramente, ja nao sei mais o que fazer com isto...

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0095.jpg&hash=d62ea42323a037f58f052b25916076a455ca6bd9)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0094.jpg&hash=13675668c2410e37b2660b2022ade792d338ed62)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0093.jpg&hash=964292a12b19e49d2a7261e026ebbf97f30ba0c2)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0089.jpg&hash=d90f59260e94946b42b035f1b81d7b0684a231eb)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0091.jpg&hash=059a624682f80c898b4a9debfedd8dc45d371209)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0090.jpg&hash=3afd8d5ef1bc5d98722d377f339afee0063d8a8f)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0092.jpg&hash=e9296248200a124a32dc3e72ee6fed48947673ef)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0088.jpg&hash=416144f41b9b029e9e8cd2867299ef842da47558)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0087.jpg&hash=bed240b484737d81122321e795ddf606336b6c48)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0087.jpg&hash=bed240b484737d81122321e795ddf606336b6c48)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0086.jpg&hash=3665bea5b317b1764063bd4e4a84dc09fb846845)
se tiverem alguma duvida de onde é que vai ligar onde perguntei que eu digo.

cumps
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 10 de Março de 2012, 03:55
obrigado Hugo :)
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 10 de Março de 2012, 13:44
Que regulador de voltagem é esse que está ai perdido no desenho?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 10 de Março de 2012, 18:54
acho que nao tenho nenhem regulador de voltagem... estas a falar de que foto ?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Hugu em 10 de Março de 2012, 19:46
acho que nao tenho nenhem regulador de voltagem... estas a falar de que foto ?

na primeira imagem, a do circuito..
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 10 de Março de 2012, 22:42
Estive a pesquisar isto do regulador de tensao, e no meu caso, acho que nao é preciso...

entao, tenho a ponte H a ser alimentada pelo arduino ligada ao +5 v e tenho os motores a serem alimentados por 4 pilhas recarregaveis, 4.8 V....
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: senso em 11 de Março de 2012, 22:30
E o arduino é alimentado por onde?
Pelas pilhas tambem?
Se sim isso é ou ruido ou a tensão a baixar e o arduino faz reset.
Um multimetro é muito lento para medir essas coisas, tens acesso a uns osciloscópio?
Título: Re: Servo + Sensor Ultrasonico + arduino + ponte H
Enviado por: Bony em 25 de Março de 2012, 23:49
o Arduino por uma pilha de 9 V. Ociloscopio nao tenho.

tirem-me la uma duvida,
Código: [Seleccione]
void loop()
{
  funcaosensor();
  if(distancia > 10) // se esta tudo em ordem
  {
    frente(); // sempre em frente
  }
  else
  { // obstaculo a frente
    para(); // Ele para, e vai girar o servo a
    servo1(); // 180 graus, para a direita e
    funcaosensor();// teste do sensor. 
   
    if(distancia > 10)// se a distancia for maior que 10 cm, portanto
    { //esta livre, vira a direita.
     
      for( byte repete = 0; repete >= 3; repete++ )
      {
        direita();// vira a direita
       delay(1000);
      }
      frente(); // ao fim de virar a direita durante 1s segue outra x sempre em frente...
      servo.write(90); // alinha o servo em relacao ao robot
      delay(100);

Ora, o gajo detecta o objecto o servo vira para a direita, até aqui tudo bem, depois para tudo, e o servo ja nao alinha outra vez nos 90 graus, e os motores param... deem ai uma sugestao no codigo, sff...