collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[Hoje às 15:31]


Arame de Estendal por almamater
[Ontem às 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


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


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]

Autor Tópico: Projecto FanController  (Lida 30654 vezes)

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

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Projecto FanController
« Responder #30 em: 20 de Junho de 2010, 10:56 »
Se calhar é o que o LCD Smartie envia quando desliga. E depois como não recebes mais nada, fica assim...

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #31 em: 21 de Junho de 2010, 10:30 »
Se calhar é o que o LCD Smartie envia quando desliga. E depois como não recebes mais nada, fica assim...

Não.. pq se iniciar o Arduino sem ligar o LCD Smartie ou o Serial Monitor (do software do arduino) ele faz o mesmo..   :o  Mas para o arranque consegui resolver colocando uma variável, mas para qdo desligo o LcdSmartie é que não..

enfim.. vou ter que viver com os "6"  :P

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Projecto FanController
« Responder #32 em: 21 de Junho de 2010, 14:52 »
Se calhar é o que o LCD Smartie envia quando desliga. E depois como não recebes mais nada, fica assim...

Não.. pq se iniciar o Arduino sem ligar o LCD Smartie ou o Serial Monitor (do software do arduino) ele faz o mesmo..   :o  Mas para o arranque consegui resolver colocando uma variável, mas para qdo desligo o LcdSmartie é que não..

enfim.. vou ter que viver com os "6"  :P

Podes definir um tempo máximo para receber coisas do LCDSmartie. Passado X tempo se não receberes nada, limpas o LCD com o Arduino.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #33 em: 22 de Junho de 2010, 13:21 »
microbyte enviei um mail para ti mas faz mais sentido colocar aqui no fórum  ::) sorry.

A minha dúvida de agora é em tentar perceber pq aumenta 1 grau ao alterar o código no Loop da temperatura.

Tenho um botão que liga\desliga os displays de segmentos, mas pretendo que o cálculo da variável tempc continue a ser feito mesmo qdo estão off.

O código que tenho é este:
Código: [Seleccione]
void loop() {
   buttonState3 = digitalRead(botao3);

   if (buttonState3 == HIGH) {       //tudo OK com esta parte

  unsigned long currentMillis = millis();

   if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    nleituras++;
      // Se atingimos o maximo de leituras que queremos
       if(nleituras == maxLeituras){
      nleituras = 0; // recomecamos no proximo ciclo
      // vamos calcular a media
      for(i = 0; i<=9; i++){
    samples[i] = ( 5.0 * analogRead(sensorPin) * 100.0) / 1024.0;
    tempc = tempc + samples[i];
       
      }
      tempc = tempc/10.0; // Calcula-se a média     
      //Serial.println(tempc);
     
     
     // para mostrar nos displays de 7 segmentos...
         
      // Calcula-se o dígito da esquerda e da direita
      int num1 = 0;
      do{
        num1++;
        tempc = tempc - 10;
      }while(tempc >= 10);
     
      dataEsq = esq[num1];
      dataDir = dir[tempc];
     
      // Enquanto estivermos a transmitir, o pino "latch" tem de estar a LOW
      digitalWrite(latchPin, 0);
      // Enviar os bytes
      shiftOut(dataPin, clockPin, dataDir);   
      shiftOut(dataPin, clockPin, dataEsq);
      // Voltamos a por o pino "latch" do CI a HIGH para lhe indicar que já acabámos
      // de transmitir os dados
      digitalWrite(latchPin, 1);
         }
     }
  }

if (buttonState3 == LOW) {    // O problema é nesta parte
 
  unsigned long currentMillis = millis();

   if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    nleituras++;
      // Se atingimos o maximo de leituras que queremos
       if(nleituras == maxLeituras){
      nleituras = 0; // recomecamos no proximo ciclo
      // vamos calcular a media
      for(i = 0; i<=9; i++){
    samples[i] = ( 5.0 * analogRead(sensorPin) * 100.0) / 1024.0;
    tempc = tempc + samples[i];
       
      }
      tempc = tempc/10.0; // Calcula-se a média     
      Serial.println(tempc);
     
     
       // para mostrar nos displays de 7 segmentos...         
      // Calcula-se o dígito da esquerda e da direita
      int num1 = 0;
      do{
        num1++;
        tempc = tempc - 10;
      }while(tempc >= 10);
     
      dataEsq = esq[num1];
      dataDir = dir[tempc];
     
      // Enquanto estivermos a transmitir, o pino "latch" tem de estar a LOW
      digitalWrite(latchPin, 0);
      // Enviar os bytes
      shiftOut(dataPin, clockPin, dataDir);   
      shiftOut(dataPin, clockPin, dataEsq);
      // Voltamos a por o pino "latch" do CI a HIGH para lhe indicar que já acabámos
      // de transmitir os dados
      digitalWrite(latchPin, 1);
         }
     }
}

Testei duas coisas, remover o envio para os Segmentos qdo o botão está LOW e deixar apenas o cálculo da variável tempc, ele aumenta 1 grau em relação ao código do ciclo anterior (de qdo o botão está HIGH).

Depois para desligar mesmo os displays de segmentos testei adicionar as seguintes linhas no binário definido anteriormente:
Código: [Seleccione]
esq[10]= B11111111; //OFF
dir[10]= B11111111; //OFF

e apenas alterei no ciclo LOW os valores enviados para a função ShiftOut (dataEsq = esq[10]; e dataDir = dir[10];):
Código: [Seleccione]
if (buttonState3 == LOW) {
   
  unsigned long currentMillis = millis();

   if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    nleituras++;
      // Se atingimos o maximo de leituras que queremos
       if(nleituras == maxLeituras){
      nleituras = 0; // recomecamos no proximo ciclo
      // vamos calcular a media
      for(i = 0; i<=9; i++){
    samples[i] = ( 5.0 * analogRead(sensorPin) * 100.0) / 1024.0;
    tempc = tempc + samples[i];
       
      }
      tempc = tempc/10.0; // Calcula-se a média     
      Serial.println(tempc);
           
     // para mostrar nos displays de 7 segmentos...         
      // Calcula-se o dígito da esquerda e da direita
      int num1 = 0;
      do{
        num1++;
        tempc = tempc - 10;
      }while(tempc >= 10);
     
      dataEsq = esq[10];
      dataDir = dir[10];
     
      // Enquanto estivermos a transmitir, o pino "latch" tem de estar a LOW
      digitalWrite(latchPin, 0);
      // Enviar os bytes
      shiftOut(dataPin, clockPin, dataDir);   
      shiftOut(dataPin, clockPin, dataEsq);
      // Voltamos a por o pino "latch" do CI a HIGH para lhe indicar que já acabámos
      // de transmitir os dados
      digitalWrite(latchPin, 1);
         }
     }
}

Desta forma resulta, os segmentos ficam OFF tal como queria, mas aumenta também 1 grau ao valor calculado para tempc :)

O Cálculo da variável tempc é influenciado por esta parte do código de envio para os segmentos?

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #34 em: 23 de Junho de 2010, 22:31 »
 :o ena apercebi-me de uma coisa relativamente à diferença de 1 grau

Na placa tenho um dip switch de 4, os 3 primeiros estão ligados a Pinos analógicos do arduino (inclusivé o que Liga\Desliga os displays de segmentos) e o último serve mesmo de interruptor para o backlight do Lcd 16x2.

Reparei que ao ligar ou desligar os 3 botões, altera o valor da temperatura, por exemplo, tenho 26º se ligar o backlight do Lcd ele aumenta para 27º  :D há coisas incríveis :) Por algum motivo deve interferir com a sensibilidade do LM35 e altera.. mas pronto. Os 3 botões do Dip-Switch liguei segundo este esquema http://webzone.k3.mah.se/projects/arduino-workshop/projects/arduino_meets_processing/instructions/8switches.html por isso penso que está correcto.

Enfim.. vou prosseguir para outra tarefa.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #35 em: 28 de Junho de 2010, 14:49 »
Relativamente à alteração do valor calculado para a temperatura sempre que ligo/desligo os botões ou mexo um potênciometro alguém disse para fazer isto:

"colocar um resistor "pulldown" de 10k entre o fio que vem do sensor para a arduino e o terra"

Vou testar a ver se resolve!  :P

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #36 em: 30 de Junho de 2010, 15:37 »
Bom.. acho que vou desistir desta ideia de ter todos os circuitos/projectos na mesma placa e ao mesmo tempo..

Os valores obtidos do LM35 já estavam a oscilar se ligar ou desligar os botões ou o Backlight do Lcd, mas não era muito grave, apenas 1 ou 2 graus.

Ontem testei ligar as Fans e introduzir no Loop o envio do valor PWM conforme a temperatura e com as ventoinhas ligadas passa de uns 28º para uns 40º  :'(  se deixar apenas uma das duas Fans ligadas é capaz de ficar nos 36/38º...

Testei com 1 fonte 12v 500ma e 2A, com um regulador de tensão envio apenas 5v para o arduino e ligo directamente os V+  do circuito das Fans aos 12v, os GRND do circuito das Fans estou a ligar ao GRND do arduino.

e  qdo ligo as fans à placa parece que "roubam" corrente e interferem com o restante circuito, tenho 2 LEDs verdes e ficam logo mais apagados qdo as ligo. Não sei se tem a ver com esta ligação GRND.. num percebo! dam

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: Projecto FanController
« Responder #37 em: 30 de Junho de 2010, 15:56 »
esperimenta usar outro termometro, tipo DS1820, há um one-wire, mas é digital, ao contrário do que usas, que é analogico, penso que com o DS1820 não terás temperaturas malucas, e se tiveres na mesma não perdes nada...

Ou então fazes como foi falado no electronica pt, tiras montes de temperaturas, e fazes a média, uma temperatura alta, ou baixa demais será quase anulada pelas temperaturas certas.

Não estive a seguir este tópico a 100% por isso se falei em algo que já foi falado, peço desculpa.
« Última modificação: 30 de Junho de 2010, 18:49 por amando96 »

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #38 em: 30 de Junho de 2010, 15:59 »
esperimanta usar outro termometro, tipo DS1820, á um one-wire, mas é digital, ao contrário do que usas, que é analogico, penso que com o DS1820 não terás temperaturas malucas, e se tiveres na mesma não perdes nada...

Ou então fazes como foi falado no electronica pt, tiras montes de temperaturas, e fazes a média, uma temperatura alta, ou baixa demais será quase anulada pelas temperaturas certas.

Não estive a seguir este tópico a 100% por isso se falei em algo que já foi falado, peço desculpa.

vou tentar tirar mais samples de temperaturas... qto ao sensor, por acaso comprei o DS18B20 mas ainda não chegou a casa! mas depois vou testar com ele tb

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto FanController
« Responder #39 em: 30 de Junho de 2010, 18:27 »
Então a fonte é 500mA ou 2A?
O problema que tu tens é falta de corrente e provavelmente má distruibuição de massa, e interferencias entre sinais com fartura.
Se os led's quase que se apagam é garantido que estás com falta de corrente e admira-me o atmega ainda não ter começado a fazer resets por falta de energia.
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #40 em: 30 de Junho de 2010, 18:59 »
Então a fonte é 500mA ou 2A?
O problema que tu tens é falta de corrente e provavelmente má distruibuição de massa, e interferencias entre sinais com fartura.
Se os led's quase que se apagam é garantido que estás com falta de corrente e admira-me o atmega ainda não ter começado a fazer resets por falta de energia.

Testei com ambas..

O melhor é fazer tudo de novo numa breadboard a ver o resultado..  :-\

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto FanController
« Responder #41 em: 30 de Junho de 2010, 19:32 »
Uma breadboard não será melhor, pode ser até pior.
Experimenta com a fonte do pc, porque 2A com 4 ventoinhas, atmega, sensores, led's, resistencias, lcd's e não sei que mais é pouco.
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #42 em: 01 de Julho de 2010, 00:21 »
Uma breadboard não será melhor, pode ser até pior.
Experimenta com a fonte do pc, porque 2A com 4 ventoinhas, atmega, sensores, led's, resistencias, lcd's e não sei que mais é pouco.

Testei com uma fonte do PC:

Reparei tb que ao desligar/ligar o cabo USB tb faz variar o LM35  :o será que tenho de dar mais que 5v ao Arduino?   Liguei os 12v apenas para o + das Fans e o Arduino ficou com 5v

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto FanController
« Responder #43 em: 01 de Julho de 2010, 00:46 »
Isso tens de ter ai algo mal ligado, ou então precisas de uns condensadores de decoupling maiores no arduino e tambem meter um condensador ou um pequeno filtro LC no pino Aref.
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.921
    • GrcByte - Projectos
Re: Projecto FanController
« Responder #44 em: 01 de Julho de 2010, 09:02 »
Isso tens de ter ai algo mal ligado, ou então precisas de uns condensadores de decoupling maiores no arduino e tambem meter um condensador ou um pequeno filtro LC no pino Aref.

Eu testei antes disto meter 1 condensador de 100uf nos pinos de alimentação de cada Fan.. só se testar com outros maiores! 

Como não sou grande expert não sei como resolver, mas possivelmente é como dizes, algo pode estar mal ligado ou não deveria estar ligado desta forma..