BH1750 + nRF24L01 + Ds1307 + rgb simular dia e noite real

Olá a todos

Sou novo em arduino e gostaria de por em pratica uma ideia que é de usar o sensor de lux BH1750 + Ds1307 (real time clock) + nRF24L01 + leds RGB e simular as condições naturais de iluminação.
A idéia é:

  • Lêr a quantidade de lux (sensor colocado externamente e protegido de intempérias) usando um arduino pro mini junto com nRF24L01
  • Existe uma biblioteca (Arduino Sunrise Sunset Library) que dá a hora certa do nascer do sol e pôr do sol através da latitude e longitude que trabalha junto com o relogio.
  • Criar a sequência de nascer do sol e por do sol (???)

Com essas ferramentas eu acredito que daria prá simular as reais condições mesmo com tempo nublado, chuvoso, com nuvens, seu aberto, noite etc.

toda ajuda é bem vinda

até

Não entendi bem. Pra que é o led e o que quer controlar?

Basicamente queres acordar sempre com a mesma luminosidade... se lá fora estiver sol, o teu sistema não faz nada... se for Inverno e estiver a chover, nublado ou ainda for noite, o teu sistema simula o amanhecer, é isso?

Isso dá para fazer... tive um colega meu que fez algo semelhante com luz e motores de passo para controlar persianas (claro que isto foi feito à escala como prova de conceito) e lâmpadas duma sala para provar que era possível manter uma luminosidade "constante".

No teu caso, apenas queres que as luzes compensem a luz que não estás a receber de fora... também dá para fazer, creio eu.

No entanto, sem dizeres o que já fizeste não existe muito que possamos fazer, né?
Já ligaste as coisas? Quando dizes LED, devem ser lâmpadas de LED, não? Como ligaste as lâmpadas para poderes fazer dimming?

O problema... como referi antes está no hardware. Ou seja nas lâmpadas RGB. Isto supondo que queres fazer a uma escala humana. Se pretendes apenas uma prova de conceito numa maquete então srá um pouco mais simples.

O que me está a confundir é quereres controlar a "temperatura" da cor sem a medir. O teu sensor dá-te uma medida de luminosidade, não de temperatura de cor. Isso é bastante diferente e sem medires... como diz o Lord Kelvin:

I often say that when you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot express it in numbers, your knowledge is of a meagre and unsatisfactory kind;

Que pode ser expandido para, sem uma medição correcta, não pode haver controlo.

A tradução está errada... Deve ter sido o google que traduziu. :stuck_out_tongue:

Quanto ao teu projecto, estás na mesma a assumir que a temperatura da cor é igual consoante a luminosidade. Entre um dia nublado e o entardecer/amanhecer, podes ter níveis de luminosidade semelhantes, mas com temperaturas completamente distintas. Como pretendes conjugar isso? O teu sistema não saberá se a luminosidade é causada por tempo nublado ou por estar a anoitecer, mesmo sabendo que entardece a determinadas horas.

Mas isto é apenas um reparo. O que pretendes é interessante... no entanto ainda não foste capaz de me explicar como pretendes fazer o hardware. Isso é, tanto quanto vejo, a parte mais complicada do teu sistema uma vez que tens de arranjar vários canais PWM e ligar lâmpadas LED para fazer dimming... Ou pretendes apenas uma prova de conceito para testares o teu algoritmo?

Quanto ao teu algoritmo, acho que estás a complicar um pouco as coisas. Visto que não consegues medir a "temperatura" da cor, acho que devias usar rácios fixos para isso.
Depois o controlo da luminosidade podia ser feito através dum controlador proporcional.

Imagina isto, ligas as tuas lâmpadas no máximo com escuridão total na sala onde vais ter o sistema e medes o que o teu sensor te dá. Isto vai ser o teu máximo físico, as tuas lâmpadas não conseguem dar mais luz do que isso. Se quiseres, podes ver a relação entre níveis de PWM e luminosidade medida nessas condições para garantir que a medição é linear.

Depois abres as janelas, entra alguma luz na sala e dar-te-á uma medida no teu sensor. Tu sabendo quanto é que cada nível de PWM acrescenta de luminosidade, podes então ajustar a tua saída para compensar o efeito da luz exterior.

Lembra-te que se usares a mesma escala para todos os valores, isto torna-se bem mais simples...

Imagina que as lâmpadas te dão um valor máximo de 1000 (para facilitar) e que é linear com o PWM.

Depois ao abrires as janelas ficas com um valor de 500 e pretendes ter um valor de 700 na sala. Aí terias de ajustar o PWM para 20% e isso deveria adicionar mais 200 aos 500 existentes.
Estás a ver a ideia?

Controlar a temperatura, acho que será mais complicado, pelo menos sem umas medições e testes para ajuste da cor, e a meu ver desnecessário a não ser que queiras simular o amanhecer com um sol "quente". :slight_smile:

A ideia não é maluca...

Tem o problema que eu referi do hardware não ser fácil de montar (e ainda não disseste nada sobre isso) e ser um código algo complexo de fazer (mas não é impossível de todo).

Para programar um problema grande tens de decompor esse problema em pequenos problemas. Na minha perspectiva, o primeiro problema a resolver é o do controlo da luminosidade.
Então tens de medir a luminosidade e arranjar uma maneira de a controlar com o LED de forma a ficar constante (suponho que queiras que seja constante).

Estou a supôr, claro, que todo o hardware está montado e a funcionar, então se ainda não fizeste isso, é por aí que começas. Liga o sensor de luminosidade e testa as leituras. Depois o RTC e vê o funcionamento, e depois liga uns quantos LEDs às saídas PWM, ou a um chip de PWM como o TL5940 que tem um PWM de 16 bits (melhor para o que pretendes comparativamente ao PWM do Arduino que é só de 8).

Agora que é que já fizeste em termos de programação no Arduino?

Acho que estás a pegar o boi pelos cornos... eu fiz-te uma pergunta directa e respondeste com algo que não tem nada a ver.

bubulindo:
Tem o problema que eu referi do hardware não ser fácil de montar (e ainda não disseste nada sobre isso) e ser um código algo complexo de fazer (mas não é impossível de todo).
...
Agora que é que já fizeste em termos de programação no Arduino?

Se tens aqui a thread, coloca aqui as tuas questões. Enviar mensagens pessoais tem o efeito contrário ao pretendido... e aconselho-te a ler a minha assinatura. :wink:

Durante imenso tempo perguntei para que era esta aplicacão e como pretendias fazer a simulacão da cor numa escala humana (tipo no quarto...) e só agora percebi que queres meter isto num aquário. LOL

Converter o teu código de basic para ser usado no Arduino deve ser relativamente simples. A principal diferenca está na sintaxe do código que tens de alterar. Acho que podes fazer a maior parte disso, funcão a funcão e ir testando e se tiveres problemas colocar no fórum. Tens de replicar o teu hardware com o Arduino primeiro para poderes testar o código. O LCD é simples de ligar e programar e o resto suponho que sejam sensores digitais, que também são simples com as bibliotecas correctas.

Quando tiveres este software passado para C para ser usado no Arduino e já testado, torna-se mais fácil de escrever a funcão que pretendes.

Eu assim por alto acho que uma maneira "bonita" de fazer seria usando o valor de segundos no dia para calcular a luminosidade.

Portanto, um dia tem 86400 segundos.

Se quiseres comecar a luminosidade às 7 horas da manhã (25200 segundos) e chegar ao máximo da luminosidade às 9 horas (32400), podes fazer uma equacão como esta que te dá um aumento linear de luz de 0 a 255 entre as 7 da manhã e as 9.

PWM = ((agora - 25200)*255)/7200

Onde 7200 é a diferenca entre as 7 e as 9 da manhã em segundos. 255 é o valor máximo do PWM que podes enviar e "agora" é o valor lido do teu RTC.

Depois tinhas apenas de verificar os limites do valor calculado com algo como:

if (PWM < 0 ) PWM = 0; //verificar que não passa a negativo.
if (PWM > 255) PWM = 255; //verificar que não passa do máximo para o PWM.

Certamente que depois seria possível de adicionar um parâmetro para calcular o anoitecer da mesma maneira que fiz aqui.

Eu assumi que a luz é linear, mas pela minha experiência a ver o pôr do sol a luminosidade não aumenta de forma linear, mas sim de forma exponencial. Para isso teríamos de adicionar um termo exponencial em vez da fracão (255/7200).

Depois, como disseste que tens uma biblioteca que te calcula a que horas o dia comeca e provavelmente quanto tempo demora a ter luminosidade máxima, podes usar essa biblioteca para calcular os valores que na minha equacão defini como 7 da manhã e duas horas para amanhecer completamente.

É escusado meter o Caps.
A mensagem que mandaste era um bocado de código do teu controlador de aquário que assumi ser onde querias adicionar o controlo da luminosidade para simular o dia.

Repara que dizes que era para te conhecer melhor e nem sequer sei como te chamas. Sei que estás ligado à engenharia civil e fazes cenas com PICs. Também não diria que responder a questões num fórum seja interaccão pessoal. E depois colocas lá um pedido de ajuda e é isso que eu não faco por Mensagens pessoais senão este fórum estaria vazio. Além do mais estás a assumir que a minha disponibilidade em responder-te no fórum indica conhecimento, quando na realidade não é assim e há mais gente no fórum que sabe do que fala. Provavelmente mais até do que eu.

Percebes onde quero chegar? Eu não quero estar aqui para resolver problemas... o interesse do fórum é a troca de ideias e perspectivas. Eu posso achar que uma solucão é a melhor e haver alguém com uma visão completamente oposta e igualmente acertada. E é isso que eu quero... ver outras opiniões para as questões colocadas. É isso que eu espero em troca de dar ajuda no fórum. E não tiro nada se responder a questões via mensagem pessoal.

Daí recusar discutir coisas técnicas por mensagem pessoal, pois prefiro que seja em público para mais gente participar.

Dito isto, não fiques ofendido se fui curto e grosso na resposta à tua mensagem, não era o pretendido, mas se quiseres falar de algo técnico, mete no fórum e eu responderei com o maior prazer.

Hey... não estou zangado. Apenas não gosto de receber mensagens pessoais com dúvidas que deveriam estar aqui no fórum.

Chegaste a entender o raciocínio que coloquei acerca duma funcão para a luminosidade após o envio da mensagem? Se estivesse zangado para que me daria ao trabalho?
A internet não é um bom meio para passar entoacão e acredito que possas ter tomado de forma errada as palavras que disse. Quanto a isso desculpa, não pretendia ofender, apenas explicar porque não gosto de receber mensagens pessoais... talvez tu nunca tenhas passado por isso, mas a mim elas estão sempre a cair a pedir ajuda directamente a mim sem, na maior parte das vezes, passar pelo fórum. Não que tenha sido isso que fizeste, mas não crio excepcão no que toca a isso das mensagens.

Revê a explicacão que dei acerca da luminosidade em funcão da hora e vê se há algo que não compreendes.