collapse

* Posts Recentes

Cerca eléctrica por SerraCabo
[14 de Junho de 2025, 23:26]


Alguém arranja motores? por almamater
[10 de Junho de 2025, 22:34]


Condensador 4.7uF 0603 por brunus
[09 de Junho de 2025, 15:52]


+ LASERs por dropes
[30 de Maio de 2025, 23:11]


Lenovo IdeaPad 3 Não liga por jm_araujo
[07 de Maio de 2025, 19:10]


Identificar Diodo Zenner por filjoa
[01 de Maio de 2025, 23:07]


Meu novo robô por dropes
[18 de Março de 2025, 14:51]


JBL partybox On-The-Go por almamater
[21 de Fevereiro de 2025, 23:32]


Talking Reverse Engineering with an Absolute Legend! por SerraCabo
[13 de Fevereiro de 2025, 09:56]


Motoserra Stihl 120C por brunus
[11 de Fevereiro de 2025, 16:29]

Autor Tópico: [INICIAÇÃO] O nosso projecto  (Lida 38844 vezes)

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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [INICIAÇÃO] O nosso projecto
« Responder #90 em: 18 de Janeiro de 2011, 18:52 »
Não, porque sem nada ligado ás entradas as pistas da placa do arduino funcionam tal e qual a antena de um telemovel, se tiveres lá alguma coisa ligada, seja uma resistência, esse sensor ou qualquer outro, o sensor tem um sinal milhares de vezes mais forte que o sinal que é criado pelo ruido electromagnético.
Avr fanboy

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #91 em: 18 de Janeiro de 2011, 19:05 »
Humm, eu desconfiei que o sinal de qualquer coisa "a sério" ligada ao Arduino fosse mais forte e se sobrepusesse. Já tenho as fotos, não é que venham neste momento ser do mais útil, depois do conselho que deste...

Estão neste album do Picasa:http://picasaweb.google.com/107646094444896100474/RobotProjectoAREAImagens?authkey=Gv1sRgCMXSkOKb2O3P8AE&feat=directlink

Offline Capeleiro

  • Mini Robot
  • *
  • Mensagens: 127
Re: [INICIAÇÃO] O nosso projecto
« Responder #92 em: 18 de Janeiro de 2011, 19:18 »
Esse sensor apesar de ser digital é um pouco diferente. Eu já os usei.
É tal e qual o fabricante manda fazer: primeiro têm de colocar o pino em HIGH como OUTPUT por algum tempo, porque esta saída está ligada a um condensador, que vai ficar carregado. Depois, esse pino deve ficar como INPUT e sem pull up (que é a tal resistência), porque o condensador vai fornecer alguma tensão e vai descarregando através do foto-transístor. Se houver muita luz a chegar ao foto-transístor o condensador descarrega mais rapidamente, e vice-versa. Assim só é preciso ir fazendo digitalRead() sucessivos até a tal entrada ficar a zero. Se demorar muito tempo até isso acontecer o robot está em cima de algo preto, senão é algo branco.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [INICIAÇÃO] O nosso projecto
« Responder #93 em: 18 de Janeiro de 2011, 19:24 »
Não vale a pena inventar com o código porque a biblioteca que a Pololu oferece para esses sensores faz tudo isso sem teres que te chatear com nada de tempos nem nada, é invocar e chamar a função de leitura.
Avr fanboy

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #94 em: 18 de Janeiro de 2011, 21:01 »
Senso, no vídeo do Tiago Rodrigues não dá para ver muito bem, mas também fiquei com a sensação que o array não estava soldado aos headers. Porque é que não deu luz nenhuma, mesmo quando eu via que os headers estavam a tocar no metal dos pinos do sensor?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [INICIAÇÃO] O nosso projecto
« Responder #95 em: 18 de Janeiro de 2011, 21:07 »
Pode ter dado tão rápido que não viste, ou então a tua camera tem um filtro por causa dos infra-vermelhos, praticamente todas as cameras agora têm porque descobriram que grande parte dos bikinis e roupa de banho em geral são transparentes aos infra-vermelhos, então se fores para uma praia tirar fotos vês por baixo da roupa das pessoas lol...
Avr fanboy

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #96 em: 18 de Janeiro de 2011, 21:20 »
Lol, é bom saber isso.... :D

Mas eu fartei-me de experimentar o sensor em vários momentos (desde 5ª feira) e nunca vi nada com os meus próprios olhos. Se é por piscar muito rápido, então porque é que isso está a acontecer, enquanto no vídeo do TigPT, não?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [INICIAÇÃO] O nosso projecto
« Responder #97 em: 18 de Janeiro de 2011, 21:31 »
Por não teres isso a fazer bom contacto por não estar soldado.
Avr fanboy

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #98 em: 18 de Janeiro de 2011, 21:54 »
Pensava que aquelas luzes eram uns LEDs normais que indicavam funcionamento. Só agora é que me apercebi que afinal são os emissores em IV do próprio sensor. Sabes, por causa do que disseste fui buscar o telemóvel do meu irmão que tem uma câmara sem filtro (lembro-me que numa sessão na Fábrica da Ciência Viva aí em Aveiro, sobre Robótica :D, a senhora disse isso que tu disseste mas sobre controlos remotos e aquele telemóvel mostrou os IV). Com o ajuste certo (vê a foto) consegui pôr um bom contacto e no telemóvel, voilá, luzes IV a dar. A partir daí comecei melhor a ter noção quando é que o sensor estava a ler valores ou não. Reparei que bem calibrado, as leituras davam correctas. Quer dizer não era uma perfeição, mas notei as variações concordantes com eu ir para a ponta da esquerda ou da direita com o papel pintado. Espero que quando soldado e no ambiente correcto (agora o sensor estava virado para cima e a minha mão treme um bocado também xD), as leituras melhorem um bocadinho...

Foto: http://picasaweb.google.com/lh/photo/3SZBKf9ctx1APrXr81fXH5SYJHQ_NssFyboOq_yFia0?feat=directlink

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #99 em: 19 de Janeiro de 2011, 21:28 »
Tenho uma dúvida em relação à calibração. É individual de cada sensor ou é geral para todo o array? Ou seja, tenho de passar o cartão para calibrar em todos os sensores, uniformemente, ou basta em alguns? Isto porque durante a calibração, o sensor regista o mínimo lido como 0 e o máximo lido como 1000. Se os sensores são calibrados individualmente então é possível que pela variação da condições do meio, nem todos os sensores registem o mesmo 0 (mínimo) e depois a função readLine pode não funciona na perfeição...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [INICIAÇÃO] O nosso projecto
« Responder #100 em: 19 de Janeiro de 2011, 21:51 »
Existe por ai um filme, penso que do TigPt a mostrar a calibração, simplesmente passou um papel de ponta a ponta dos sensores várias vezes.
Avr fanboy

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #101 em: 19 de Janeiro de 2011, 22:52 »
Pois, esse já tinha visto. Okay então...

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #102 em: 24 de Março de 2011, 00:08 »
Dois meses depois, o nosso robot já anda.

Lá tivemos que tratar da parte estrutural e do circuito, o que ainda demorou algum tempo. E surgiram alguns obstáculos que nós tivemos de ultrapassar com a nossa inexperiência (ainda estragámos uma peça ou outra como um suporte de pilhas que ficou a fazer curto circuito na caixa do robot durante algumas horas :) ). Enfim, mas neste momento temos o robot programado o suficiente para "impressionar" uma pessoa que não perceba muito de robótica ;) . Anda em frente, roda consoante lê a linha à direita ou à esquerda e pára se ler tudo "escuro". Na prática segue uma linha sem ramificações de forma mais ou menos atabalhoada.

Dentro de 2 semanas, vamos apresentá-lo num evento (a Semana da Ciência lá da escola - em que todos os alunos visitam os nossos projectos, bem como experiências preparadas pelos professores de FQ e Biologia). Amanhã vou ver se faço um vídeo e posto o código para pedir a vossa opinião e ver que aspectos se podem melhorar :D

Para depois da Páscoa, gostava de tentar fazer do robot um Maze Solver e usar controlo PID com eficácia.

Cumprimentos,
Manel do projectoAREA

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: [INICIAÇÃO] O nosso projecto
« Responder #103 em: 24 de Março de 2011, 00:53 »
Parabéns ;)
Para estarem a falar em PID estou a fazer que correu mesmo bem o trabalho!

Cá esperamos para ver o video e ajudar no que for preciso.

PS: Não se esqueçam das outras disciplinas :p

Offline projectoAREA

  • Mini Robot
  • *
  • Mensagens: 64
    • projectoAREA - blog
Re: [INICIAÇÃO] O nosso projecto
« Responder #104 em: 24 de Março de 2011, 19:37 »
Boas,
Pelo que eu estive a ver, o controlo PID é uma função ou umas funções que tens no código com uns certos parâmetros de afinação e que depois resultam num valor de velocidade de motores que transmito aos motores através da função analogWrite por PWM. Só não avançámos ainda para isso, porque temos outros aspectos para corrigir ainda e não temos muito tempo, mas se calhar até era capaz de experimentar um código com PID e depois se funcionasse, tudo bem. Se não funcionasse, tinha sempre o outro simples.

Em relação ao vídeo, peço desculpa mas não vai dar para postar. Ontem o robot ficou com um colega meu e hoje reparei que as pilhas estavam descarregadas. Faziam os motores entram em stall com uma chiadeira enorme mas nenhum movimento. No início, cheguei a temer que fossem atritos com os motores Tamiya Double Gearbox ou das rodas, porque os motores funcionam com as rodas levantadas mas era no contacto com o chão que tinham muita dificuldade em especial na rotação. Já agora, gostava que alguém que já tenha trabalhado com esses motores, partilhasse a sua experiência quanto a isto.

Amanhã de tarde tenho mais tempo (hoje ainda tenho de estudar para um teste) e vou fazer o tal vídeo. O código já o posso partilhar. Quer dizer, tenho uma série deles que fomos experimentando mas aqui está o último:
Código: [Seleccione]
#include <PololuQTRSensors.h> //inclui a library da Pololu

PololuQTRSensorsRC qtr((unsigned char[]) {14,15,16,17,18,19}, 6);

// —————————————————————————  Motors
int motor_left[] = {3, 9};
int motor_right[] = {5, 6};

void setup()
{
  Serial.begin(9600);
 
 pinMode(13, OUTPUT);
   digitalWrite(13, HIGH); //o LED 13 fica ligado durante
  int i;                   // a calibração para indicar que está a decorrer
  for (i = 0; i < 250; i++)
  {
    qtr.calibrate(); //faz 250 calibrações durante 5 s
    delay(20);      // passar o cartao de calibração neste momento
  }
   digitalWrite(13, LOW);
  // Setup motors
  int j;
  for (j = 0; j < 2; j++)
  {
    pinMode(motor_left[j], OUTPUT);
    pinMode(motor_right[j], OUTPUT);
  }
  delay(1000); //dá um segundo para não começar logo a andar
}              // depois da calibração

void loop()
{
  unsigned int sensors[6];
 
  int position = qtr.readLine(sensors);  // position varia entre 0 e 5000
  int error = position - 2500; //o erro varia entre -2500 e 2500
 
if (sensors[0] > 750 && sensors[1] > 750 && sensors[2] > 750 &&  sensors[3] > 750 &&  sensors[4] > 750 &&
  sensors[5] > 750)  // tudo escuro => parar
  {                  // nao anda se levantar do chão nem sobre a linha preta transversal
        motor_stop();
     }
 
if (sensors[0] > 200 && sensors[1] > 200 && sensors[2] > 200 &&  sensors[3] > 200 &&  sensors[4] > 200 &&
  sensors[5] > 200)     // tudo branco => parar
  {                    // em princípio, não anda se se afastar muito da linha
    motor_stop();
  }

     else if (error < -500) //linha à direita => roda à direita
  {
    turn_right();
  }
 
  else if (error > 500) // linha à esquerda => roda à esquerda
  {
    turn_left();
  }
 
  else // linha ao centro => anda para a frente
 {
   drive_forward();
 }
 
  delay(100); //não sei se é 100% mas dá algum tempo para o Arduino processar e decidir em que direcção mover
 
}


// ————————————————————————— Funções de movimento

void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
delay(25);
}

void drive_forward(){
analogWrite(motor_left[0], 150);              // PWM
digitalWrite(motor_left[1], LOW);

analogWrite(motor_right[0], 150);
digitalWrite(motor_right[1], LOW);
}

void drive_backward(){   // está aqui just in case visto que não é usada
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}

void turn_left(){
digitalWrite(motor_left[0], LOW);
analogWrite(motor_left[1], 150);

analogWrite(motor_right[0], 150);
digitalWrite(motor_right[1], LOW);
}

void turn_right(){
analogWrite(motor_left[0], 150);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], LOW);
analogWrite(motor_right[1], 150);
}
 

Gostava que comentassem esse código e dessem algumas sugestões para melhorar ;)

Cumprimentos,
Manel do projectoAREA

PS: Não se preocupem com as outras disciplinas :D Se bem que o robot faz-me perder algumas horas de estudo e sono, mas é por uma boa causa AHAHAH