Pages: [1] 2   Go Down
Author Topic: RASTREADOR SOLAR!!! URGENTE...  (Read 2514 times)
0 Members and 1 Guest are viewing this topic.
maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá pessoal, sou novo aqui e tenho muitas duvidas com programação, então comprei um arduino e estou baixando algumas apostilas para poder aprender a programar!!!!

Mais estou aqui pois preciso fazer um trabalho com arduíno, é um RASTREADOR SOLAR... para isso vou usar 2 servos motores 9g (para ele se mover tanto horizontalmente, como verticalmente) e para fazer esse movimento usarei 4 LDRs para fazer a leitura e saber onde esta a maior intensidade de luz no momento...
http://4.bp.blogspot.com/-tbUjXBBtip4/T4twRDb5YAI/AAAAAAAAAAk/QM5rnEKphYA/s1600/Capturar.PNG



SE alguem puder me ajudar agradeço... é meio urgente !!!! vlw
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

O que é que já fizeste?

Nós estamos aqui para ajudar, não para te fazer o trabalho. Se disseres o que já fizeste e qual a dúvida em específico que encontraste, certamente que alguém aqui te ajudará.

Ser urgente não nos interessa para nada. smiley-razz
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esse e o programa que pretendo usar, mas ele está meio instável... quando ele vai mover o servo da vertical ele não fica sempre apontado pro lugar de maior intensidade, fica para baixo... Já dei umas modificadas, mas não faço ideia do que fazer!!! Se puderem olhar e me dizer se tem algo errado, fico agradecido!!!


#include <Servo.h>

Servo servo1;          //Declara servos
Servo servo2;
int pos1 = 0;             // pos1 é a posião horizontal
int pos2 = 0;             // pos2 é a posição vertical
int right = 0;            // LDR direita
int left = 0;             // LDR esquerda
int up = 0;               // LDR superior
int down = 0;             //LDR inferior

int ldr1 = 0;          // pinos dos LDRs
int ldr2 = 1;
int ldr3 = 2;
int ldr4 = 3;

void setup()
{
  servo1.attach(10);      //anexar servo 1 ao pino digital 10
  servo1.write(90);       //posição inicial de 90 graus
 
  servo2.attach(9);        // anexar o servo 2 ao pino digital 9
  servo2.write(90);        // posição inicial de 90 graus
 
  pinMode(ldr1, INPUT);      //Declara LDRs como entradas
  pinMode(ldr2, INPUT);
  pinMode(ldr3, INPUT);
  pinMode(ldr4, INPUT);
}

void loop()
{
 
  pos1 = servo1.read();            // pos1 informa a posição atual do servo1 (horizontal)
  pos2 = servo2.read();            // pos2 informa a posição atual do servo2 (vertical)
 
 // Leitura de cada LDR

  int right = analogRead(ldr1);      // LDR1 é o da direita
  int left = analogRead(ldr2);   //LDR2 é o da esquerda
  int up = analogRead(ldr3);   //LDR3 é o superior
  int down = analogRead(ldr4);   //LDR4 é o inferior
 
                  //Controle da posição horizontal

  if(right > left )                   // Se tem mais luz no LDR da direita do que no da esquerda, move-se para a direita
  {
    servo1.write(pos1 +1);                  //Aumenta a posição do servo em 1
    delay(10);                                      // este atraso é necessário para evitar servo de ir 0-180 sem parar
  }
 
  else if(left > right)      //Move-se para esquerda, pois existe mais intensidade
  {
    servo1.write(pos1 -1);                    // Diminui a posição do servo em 1
    delay(10);
  }
 
  else
  {
    servo1.write(pos1);                    // Caso nenhuma condição seja satisfeita, se mantem a mesma posição
  }
                 
                 //Posição do controle Vertica


  if(up > down)
  {
    servo2.write(pos2 +1);
    delay(10);
  }
 
  else if(down > up)
  {
    servo2.write(pos2 -1);
    delay(10);
  }
 
  else
  {
    servo2.write(pos2);
  }
 
}
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Já experimentaste meter uns Serial.print() para ver os valores das LDR e qual o fluxo do programa, ou seja como é que estão a funcionar os ifs.

Outra coisa, o Sol não se mexe o suficiente de segundo a segundo para o seguidor o seguir... então seria interessante fazeres uma filtragem dos valores analógicos para evitar que o sistema ande feito maluco dum lado para o outro. E isso é o outro problema, as tuas condições fazem com que o sistema nunca esteja estável. Repara que não existe a situação em que as LDRs têm o mesmo valor.

Mete uns Serial.print() dos valores das LDR e isso indica-te o que está mal com o programa.

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vou tentar fazer isso com os serial.print... então vc acha que seria bom eu colar uma função i indicando quando eles forem iguais ???
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sim, acho que deverias ter a opção de parar os motores, senão vais sempre tê-los a mexer dum lado para o outro.

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vou tentar fazer isso com os serial.print, mais eu coloco ele onde? e essa verificação eu faço usando a quela tela de monitoramento do arduino? ... mas a função else que mantem a posição do motor já não indica que nem umas das funções acima foi satisfeita, ou seja que há uma igualdade ???
Logged

maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tirei o delay, continuo normal... o problema e na hora dele mover verticalmente, pois ele não responde, já na horizontal está perfeito aparentemente
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Desculpa o comentário da situação de igual... existe lá essa possibilidade no código.

Experimenta fazer um programa para mover o motor vertical com comandos de teclas e/ou porta série... ou para rodar numa sequência. Isso serve para provar que o motor está bem ligado e a funcionar.

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

continuo com o mesmo problema... Não faço ideia de onde esteja o erro desse programa!!!
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Não consegues fazer mexer o motor? Que programa fizeste?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

maringá-pr
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

o motor fica travando, ele não vai... eu tampo um los ldr e o motor continua na mesma, sem mexer..
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu disse para testares o motor... algo como:

Code:

#include <Servo.h>

Servo servo1;          //Declara servos

int pos1 = 0;             // pos1 é a posião horizontal


void setup()
{
  servo1.attach(9);      //anexar servo 1 ao pino digital 10
  servo1.write(pos1);       //posição inicial de 90 graus
   
}

void loop()
{
delay(1000);

servo1.write(pos1%360); //assim pode andar às voltas...
pos1 +=90; 
}


Isto deve fazer o motor rodar de 90 em 90 graus de segundo a segundo. Experimenta isto para ambos os motores de forma a tirares as dúvidas acerca das ligacões do motor.

Se queres ver se a lógica está com problemas, tens de colocar Serial.println() em sítios estratégicos... por exemplo:

Code:
#include <Servo.h>

Servo servo1;          //Declara servos
Servo servo2;
int pos1 = 0;             // pos1 é a posião horizontal
int pos2 = 0;             // pos2 é a posição vertical
int right = 0;            // LDR direita
int left = 0;             // LDR esquerda
int up = 0;               // LDR superior
int down = 0;             //LDR inferior

int ldr1 = 0;          // pinos dos LDRs
int ldr2 = 1;
int ldr3 = 2;
int ldr4 = 3;

void setup()
{
  servo1.attach(10);      //anexar servo 1 ao pino digital 10
  servo1.write(90);       //posição inicial de 90 graus
 
  servo2.attach(9);        // anexar o servo 2 ao pino digital 9
  servo2.write(90);        // posição inicial de 90 graus
 
  pinMode(ldr1, INPUT);      //Declara LDRs como entradas
  pinMode(ldr2, INPUT);
  pinMode(ldr3, INPUT);
  pinMode(ldr4, INPUT);
}

void loop()
{
 
  pos1 = servo1.read();            // pos1 informa a posição atual do servo1 (horizontal)
  pos2 = servo2.read();            // pos2 informa a posição atual do servo2 (vertical)
 
 // Leitura de cada LDR

  int right = analogRead(ldr1);      // LDR1 é o da direita
  int left = analogRead(ldr2);   //LDR2 é o da esquerda
  int up = analogRead(ldr3);   //LDR3 é o superior
  int down = analogRead(ldr4);   //LDR4 é o inferior

//pegas nestes valores e comparas com o programa para ver o que ele está a fazer...
 Serial.print("down = ");
 Serial.println(down);
 Serial.print("up = ");
 Serial.println(up);
 Serial.print("left = ");
 Serial.println(left);
 Serial.print("right = ");
 Serial.println(right);
 
                  //Controle da posição horizontal

  if(right > left )                   // Se tem mais luz no LDR da direita do que no da esquerda, move-se para a direita
  {
    Serial.println("R > L");
    servo1.write(pos1 +1);                  //Aumenta a posição do servo em 1
    delay(10);                                      // este atraso é necessário para evitar servo de ir 0-180 sem parar
  }
 
  else if(left > right)      //Move-se para esquerda, pois existe mais intensidade
  {
    Serial.println("L > R");
    servo1.write(pos1 -1);                    // Diminui a posição do servo em 1
    delay(10);
  }
 
  else
  {
    Serial.println("R = L");
    servo1.write(pos1);                    // Caso nenhuma condição seja satisfeita, se mantem a mesma posição
  }
                 
                 //Posição do controle Vertica


  if(up > down)
  {
    Serial.println("U > D");   
    servo2.write(pos2 +1);
    delay(10);
  }
 
  else if(down > up)
  {
    Serial.println("D > U");
    servo2.write(pos2 -1);
    delay(10);
  }
 
  else
  {
    Serial.println("U = D");
    servo2.write(pos2);
  }
 
}

E assim podes ver se existe algum problema na lógica do programa ou nas leituras do AD.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ola Guilherme Americo, lhe enviei um e-mail, se puder ver ficarei muito grato!
Abraço!
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

O mais importante num segredo... é não informar que existem segredos... smiley-wink
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1] 2   Go Up
Jump to: