Projeto escolar - Ajuda

Ainda estou no 1 ano do ensino médio. E foi proposto elaborar uma ideia de economizar de forma inteligente água e energia( devido os problemas no Brasil). Como sou curioso e gosto de eletrônica e informatica pensei em fazer algo pratico, ( sei que todos os outros grupos vão fazer apenas teorias).

Minha ideia seria o seguinte…
Como em uma residencia o chuveiro e o principal foco de consumo de energia e água pensei em algo para fazer um controle.

Queria simular esse sistema da seguinte forma :
1 led azul para agua
1 branco pra energia

quando o chuveiro e ligado( envio “L” na serial) ambos os leds acendem e começa uma contagem. Quando o chuveiro e desligado envio ''D" na serial) para-se a contagem.

Quando liga novamente inicia-se a contagem de onde parou e assim ate estourar o tempo estipulado.

A minha duvida e como fazer essa contagem do tempo do chuveiro( no caso led) ligado e desligado?

Referência: http://arduino.cc/en/Reference/Millis

Julio, apesar de não ter experiência com o Arduino em sí, a contagem de tempo em microcontroladores em geral é feita por meio de periféricos chamados timers. Eles básicamente são contadores de pulsos de clock (o sinal que faz o microcontrolador funcionar) e geralmente são de 8, 16 ou 32 bits. Geralmente há também nos microcontroladores uma estrutura chamada de PLL que pode ser configurada para diminuir a frequência do clock que chega ao timer, permitindo contagens de tempo maiores. Para ilustrar:
Timer de 16 bits = 2ˆ16 = 65536 pulsos de clock antes de estourar.
Clock do Arduino = 16Mhz = 16000000 pulsos por segundo
Se conectado diretamente ao clock principal, o timer só vai conseguir contar até 0,004096 segundos.
Se vc usar um divisor, por exemplo, com uma razão de 16:1, o clock que chega ao timer vai passar para 1000000Mhz, permitindo que seu timer conte até 0,065536 segundos.
Por não ter experiência com o Arduino, não sei os limites de seu divisor, mas no baixo nível essa é a lógica. Provavelmente o que você vai ter que fazer é:
1- Configuração:

  • Escolher um timer para utilizar
  • Configurar o divisor desse timer
  • Montar a rotina de tratamento de interrupção para esse timer (é a função que é chamada quando o timer estourar)
    2 - Execução:
  • Quando receber “L” pela serial, ligar o timer.
  • Quando receber “D” pela serial, desligar o timer.
  • Quando o timer estourar, incrementar uma variável que vai contar quantos estouros de timer já ocorreram. Comparar com o valor que representa o número de estouros do timer que somados são iguais ao tempo que você estipulou. Caso esse valor seja atingido, tomar a atitude que você determinar (por exemplo, acender um terceiro LED indicando que o tempo esgotou).

Provavelmente o Arduino faz tudo isso quase sozinho pra você, mas o básico á isso aí!