Pages: 1 2 [3] 4 5   Go Down
Author Topic: Sensor de corrente(programação)  (Read 7168 times)
0 Members and 1 Guest are viewing this topic.
'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Primeiro lês o valor do AD.

Code:
int valor = analogRead(pino_do_AD);

//o teu sinal anda entre 1 e 3V.
//5V = 1024 1V = (1*1024)/5 = 204.8 ~ 209
//5V = 1024 3V = (3*1024)/5 = 614.4 ~ 614

long corrente = map(valor, 209, 614, -100, 100);

Serial.print("Corrente = ");
Serial.println(corrente);



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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Não se enganou://5V = 1024 1V = (1*1024)/5 = 204.8 ~ 209

Sim Percebi perfeitamente e depois??
Logged

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

E depois o quê???

Que precisas mais?
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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A medição da corrente(A) é apenas o código que escreveu acima??
Cumprimentos
 
Logged

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

Sim... eventualmente precisas de corrigir as escalas e confirmar a medição... mas basicamente é isso.

Dependendo da aplicação que estás a planear podes fazer o código de maneira diferente. Mas não sei exactamente que aplicação vais fazer, logo... é difícil de dizer algo sobre isso.
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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu quero apenas medir a corrente instantaneamente ou segundo a segundo e pôr os valores no serial monitor, essa é a minha dificuldade depois o resto em principio consigo fazer.
Se não lá vou eu chatear outra vez o bubulindo. smiley-red
Logged

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

segundo a segundo não tem muito que saber...

Code:

unsigned long antes = 0;
int valor = 0;
long corrente = 0;

void setup(){

   Serial.begin(19200);
}

void loop(){

if (millis() - antes >= 1000) { //1000 milissegundos = 1 segundo.

   valor = analogRead(pino_do_AD);

   //o teu sinal anda entre 1 e 3V.
   //5V = 1024 1V = (1*1024)/5 = 204.8 ~ 209
   //5V = 1024 3V = (3*1024)/5 = 614.4 ~ 614
   corrente = map(valor, 209, 614, -100, 100);

   Serial.print("Corrente = ");
   Serial.println(corrente);
   }

}

Algo assim é o que pretendes.
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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tenho mais uma questão não definiu a situação de termos sempre 2 Volts=0  constantes no arduino porque o sensor ao ser alimentado com 8 volts vai ficar 2 devido ao offset e ao divisor de tensão que vou utilizar.
Quero definir os 2 volts como sendo 0 e começãr a contar os 9.4mV a partir daí.
Logged

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

   //o teu sinal anda entre 1 e 3V.
   //5V = 1024 1V = (1*1024)/5 = 204.8 ~ 209
   //5V = 1024 3V = (3*1024)/5 = 614.4 ~ 614
   corrente = map(valor, 209, 614, -100, 100);

Analisaste bem estes números?
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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok já entendi
E tenho outra questão qual a diferensa de pôr:
if (millis() - antes >= 1000) { //1000 milissegundos = 1 segundo.
ou
delay(1000);
Logged

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

Boas práticas de programação.

Vou tentar dar um exemplo prático.

Imagina que queres fazer um chá. Tens de aquecer a água, então pões a chaleira ao lume. Aquecer a água demora... imaginemos, 5 minutos.
Agora a pergunta é, durante esses 5 minutos o que é que tu fazes? Ficas 5 minutos a olhar para a chaleira até a água estar a ferver? Ou vais olhando para a chaleira de, digamos, 1 em 1 minuto para ver se ferveu e vais tirando a saqueta de chá do pacote e preparando as chávenas/bule?

Ficares a olhar para a chaleira durante 5 minutos é exactamente igual a usares delay(1000) no teu programa. O teu microcontrolador vai ficar ali, parado, literalmente a contar carneirinhos até passar esses 1000 milisegundos.

Enquanto que se usares o millis podes colocar o processador a fazer algo mais sem atrapalhar o que tens de fazer de segundo a segundo, isto equivale a preparar o chá enquanto a água ferve. 

Mas, claro... tu podes dizer-me "O meu programa só vai fazer aquilo logo o resultado é o mesmo!".
Sim... é o mesmo, mas isso não significa que devas optar por uma opção menos boa, quando a opção correcta não custa mais a fazer. E, mais importante de tudo, é o facto que de hoje para amanhã podes precisar de fazer algo mais com o teu programa e esse delay vai atrapalhar tudo e vais ficar num sarilho. Se o código já estiver pensado de maneira a poder receber mais funcionalidade, adicionar essa funcionalidade será simples mais tarde ou logo de seguida.

Um exemplo ideal de funcionalidade que eu colocaria num programa deste género seria estar sempre a fazer conversões da medição de corrente e de segundo a segundo enviar uma média dessas medições. Nesse caso, o programa seria diferente, e dentro do if com o millis apenas estaria o cálculo da média e envio para o computador. Fazer esta alteração é simples, no entanto, se tivesses escrito o programa originalmente com um delay() seria bem mais difícil de o fazer.

Por último, o delay() foi adicionado pelos artistas do Arduino e, na minha opinião, causa mais problemas do que resolve uma vez que incentiva, ou facilita esta má prática de programação... mas que fazer?
Já agora, para que não fiques com uma má ideia do delay() ele tem utilidade mas apenas em situações onde se precisa de um pequeno delay (uns milissegundos, nunca segundos inteiros). Um exemplo destes delays é ao activar sinais de latch em memórias por exemplo, onde é mais simples adicionar um delay de 1 milissegundo que fazer este truque do millis.
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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muito obrigado pelo esclarecimento, eu como sempre vi utilizarem delay(), quis perguntar porque utilizava assim.
Estou só à espera do regulador de carga para poder testar o sensor e depois dou noticias,
Agradeço a  ajuda
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Liguei agora o sensor
Sem tensão nenhuma deu -203 A o que estará de errado???
Logged

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

Tens 0 na entrada... não 2V como fizeste as contas.
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
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estive a fazer a medição e estão 2Volts antes de entrar no arduino
Logged

Pages: 1 2 [3] 4 5   Go Up
Jump to: