Olha o Homem que me tem ajudado mt com programação!!!
Obrigado Vasco.
A ver se hoje temos ciclo!
PS: tens que te converter para reef's!![]()
Essa é uma que levanta mais outro desafio engraçado. A gente vê esse tema abordado pelo prisma da intensidade e até pelo do ângulo de incidência.
Agora pelo da distribuição espectral é que raramente se afasta do azul a abrir o dia, azul a fechar o dia e amarelo e branco no máximo ao meio dia.
Com uma calha destas deve dar para modelizar melhor a evolução da temperatura de cor durante o ciclo diário. Resta saber onde arranjar informação para isso. É que uma coisa é a luz à superfície, outra é aquela que chega aos 10/15 metros.
Fica mais este desafio.
Olha o Homem que me tem ajudado mt com programação!!!
Obrigado Vasco.
A ver se hoje temos ciclo!
PS: tens que te converter para reef's!![]()
Nuno, mas aí é dificil. Encontrei um site uma vez de fotografia que falava mt sobre isso. Posso procurar outra vez a ver se encontro. Tinha as temperaturas de cor ao longo do dia e consoante se tava nublado e afins.
Mas isso não vou poder replicar desta forma, acima de tudo, pq não tenho um tipo de lampadas por balastro. Essa era a ideia inicial, Mas na bubbles convenceram-me a testar com esta config de lampadas. (3 brancas, 3 azuis, 1 actinica e 1 purple). Quem me o aconcelhou na loja, não sei o nome, disse que tinha assim com sucesso tanto na loja como em casa. Portanto claro, resolvi experimentar esta "receita".
Eu acho que tudo é relevante, mas acho que acima de tudo, o facto de arrancares lentamente com a luz, já é benefico o suficiente paar os corais e animais.
Ninguem gosta de acordar com um foco de luz nos olhos!!
Epa, os peixes assustam-se qd a luz liga, e qd a luz desliga!!
O Vasco por exemplo é dos doces, mas as plantas dele reagiram mt bem ao ciclo.
Boas.
O Ciclo do sol já funciona.
Após mts adaptações, lá consegui finalmente.
Amanhã meto o video.
Boas.
Segue link.
‪Arduino aquacomputer daylight sinewave cicle‬‏ - YouTube
Está representado um ciclo de 8 minutos.
O PWM segue a evolução de uma onda sinusoidal desfazada em 90º. Assim o inicio do ciclo é qd está a ser desenhada a parte debaixo da onda, terminando claro no mesmo ponto.
Dando um exemplo:
Olhando para isto,
A onda começa no ponto que vai a passar por zero. Aplicando o desfazamento de -90*, vamos deslocar a onda para a direita nesta foto. Ou seja, o inicio passa a ser o ponto mais baixo da onda em vez do central.
Assim, obtenho o que pretendo, um inicio suave, depois mais rápido na subida, suavizando no pico, com rapida descida e suavizando qd vai chegar a zero.
Desta forma representamos isto:
Vou ver se consigo por o arduino a fazer um grafico "pi pi", que alias, quero mesmo faze-lo para depois apresentar no menu de status.
Ui.... Isto está cada vez melhor!!!![]()
Segue código em anexo para quem quiser experimentar.
O ficheiro Lamp_functions é o que adaptei do Vasco Cruz.
Poupou-me mt trabalho!
Obrigado Vasco.
Hoje quero ver se ainda consigo meter um ciclo normal e ligar aos balastros, fazer o 1º dia de ciclo do so, para os peixes!!!
PS - vamos lá ver qts vezes os peixes me vão chamar doido...![]()
Não pude deixar de reparar que a tua última mensagem ontem foi às 5:01 e hoje ao meio-dia já estás a trabalhar outra vez.
És cá dos meus eheh..... que mega-viciado!!!!
Apesar de na maior parte dos post's estarem a falar chinês para mim, estou a seguir com muita atenção este tópico.
Tem sido noitadas constantes... Mas como se costuma dizer, quem corre por gosto.....
Mas tou de férias desde ontém, já vai dando para repor as horas de sono!![]()
João, estiver a ver o teu código e não sei se poupas muito em espaço e se é que precisas de poupar sequer ehhehe, mas se usas a lib wire (certamente por causa do glcd) não precisas de usar a do RTC, pois podes ir buscar tudo pela wire directamente.
Assim certamente poupas uns Kb de memoria ficando o código total mais pequeno.
O resto ainda não tive tempo de ver com mais calma, mas parece muito bom, embora a nível dos menus tirava alguns delays pois como reparei num dos teus filmes a resposta depois ao carregar no ecrã parece algo lenta e de fraca sensibilidade não?
Boas Baltasar.
O código não está optimizado, há mt espaço para poupar linhas. Repito mts vezes a mesma coisa, e ainda nem tá acabado.
Qd falas de delay, tás a falar dos ciclos de delay ou de comandos delay mesmo?
Eu comandos de delay, tenho ideia que só tou a usar nas rotinas de escrita na eeprom, pq tem mesmo que ser.
Tenho tb varios IF's para não estar a fazere refresh dos menus sem haver necessidade. Assim deixa o arduino folgado para tar a fazer as contas, que para já são só a sinusoide, mas vai ser mt mais. Isto acabou por ficar aqui no projecto da iluminação, mas isto vai ser mesmo o "AquaComputer".
Mas tendo a calha a funcionar com o arduino, vou +- fechar este tópico em termos de desenvolvimentos.
Devo depois abrir um para o "AquaComputer", que acho que vou ter que incluir "duino" de alguma forma no nome!
Mas vai ser um pouco como aqui, vou fazer o hardware 1º, documentando sempre que possivel, e depois abro o tópico qd tiver "sumo".
Voltando aos ciclos, estes são para evitar que passes varios menus de repente. Ainda há aí mt fine tunning para fazer, mas para já ficou assim.
Tenho ainda que colocar o código para todos os canais e tb ainda quero criar a possibilidade de definir perfis de start-stop, e depois associar os canais que eu quiser a cada perfil. Isto assim permite que se eu quiser que todos os canais usem a mesma programação, a escolha seja mais facil.
Outra coisa que faz perder mt tempo, é o acerto do relógio e dos timers, por causa desses mesmos ciclos de delay entre menus. Vou ter que permitir andar para trás nos acertos, e vou ter que dar volta a esses timers.
Enfim, isso fica para a fase do fine-tunning.
Mas esse código está assustadoramente grande, se fosse arduino deumilnove, já precisava de 2 para meter o código todo.
Obrigado pelo teu feedback!!
Se tiveres alguma sugestão, é sempre bem vinda!![]()
Bom, o programa não está utilizavel ainda.
Apanhei varios bugs que já corrigi, mas é possivel que apareçam mais.
Tinha varias variaveis a fazerem overflow.
Isto estamos sempre a aprender!
Recomendo vivamente a leitura do link a seguir. Quem programa por profissão, já deve saber isto, mas quem como eu, o faz por hobby e está enferrujado....
Arduino - IntegerConstants
http://www.waterinspiration.blogspot.com
"Nunca tenham medo de inovar, Lembrem-se, a Arca foi construida por amadores, profissionais construiram o Titanic."
-Anónimo.
Boas.
Pois, agora tenho um problema maior...
O transformador do circuito queimou... Cheira-me que a montagem do pcb na barra de suporte deixou ali um curto qq, que embora tenha isolado tudo, passou-me despercebido.
Vou comprar os transformador e ver se foi só isso que queimou...
Ia todo lampeiro para o 1º dia de ciclo....![]()
Tive alguns problemas na minha primeira calha, queimaram alguns leds...
mas se calhar pela experiência nesta não tive nenhum problema.
no fundo fiz uma nova calha led DIY, em apenas 1 dia, quando fiz a primeira (dobro dos leds), demorou quase 1 mês...
lol
levou fonte de alimentação... para o novo segmento.
Agora poupei na fonte...das tais que a malta anda a comprar.
meanwell...lol
não vale um tusto.
quando meto meto isto com os leds ao minimo, por causa do desliga e liga rapido, faz um biiiiiiiiiiiiiiizzzzzzzzzzzzzzzzzz, desparece quando meto os leds ao máximo...
lol
a outra não faz ruido só que custou o triplo...
Tive uns azares agora, porque fiz isto no chão e da sala, queimei os braços, não foi a soldar, foi mesmo um acidente estranho...
claramente porque não tenho um espaço para fazer estas coisas, como tinha dito vai ser o meu próximo projecto arranjar um espaço no sotão para as minhas maluquices.
Os meus maiores problemas foram devido a usar artic silver adhesive (que conduz corrente) agora usei artic alumina adhesive, e porque não passa corrente, não tive um único problema...
a gente só aprende a andar depois de cair.
http://www.waterinspiration.blogspot.com
"Nunca tenham medo de inovar, Lembrem-se, a Arca foi construida por amadores, profissionais construiram o Titanic."
-Anónimo.
Boas.
Mas o que me irrita é que testei o circuito antes e tava a funcar, foi pura negligência minha.
Qd alimentei o circuito na calha devia ter vigiado o regulador ou tranformador contra aquecimentos. Mas não consigo perceber mesmo de onde veio o curto circuito.
O que é certo, é que o primário do transformador queimou. Meço resistencia aos terminais dele e nada. Os 220V estão lá qd ligo, e no secundário, népias.
Espero que tenha sido só o transformador, ele era sem duvida o "elo mais fraco". Todos os componentes de potência estão dimensionados para 1A menos ele que era só 300mA. Isto seria pelo menos 10x o necessário, não puz mais pequeno ainda pq não havia. Cada balastro consome 6mA.
Mas nem era este o caso, pq eu liguei os 220V mt antes de começar a religar os fios dos balastros.
Para o circuito ter funcionado bem na bancada, só pode ter sido a barra de suporte que tramou tudo.
Isto é tb uma chapada sem mão para eu não andar a poupar em fusiveis!!
O Pior é que para desmontar o pcb da barra, o pcb estalou tb... O cobre parece estar intacto, mas vou ter que medir com cuidado.
Vamos ver se o consigo aguentar, senão tenho mesmo que fazer tudo de novo.
Qt ao programa, os bugs parecem estar dominados, agora falta algumas afinações.
Por exemplo, estou inibido de utilizar o modo manual, pq o automatico faz override do quer que seja que tente definir.
Tb já pensei numa forma de tirar os delays entre menus, agora é só implementar. Vou aproveitar que estou sem pcb para continuar o programa.
Entretanto, o kit arduino mega novo tb chega, e posso ter um a bumbar na calha e outro na mesa para continuar os desenvolvimentos.
Mandei vir um igual ao do Hugo, pq tem uma coisa que me interessa mt no futuro, o motor passo a passo, e o respectivo driver. Uma máquina CNC faz parte dos projectos. Agora que investi uma pipa de massa no dremel, há que lhe dar uso!
Bom, a mulher tá a dormir, portanto, vou programar!!!![]()
força na programação...que ela está a dormir...
Eu ainda hei-de um dia quando for grande meter o GLCD a trabalhar...
O maior problema do GLCD é ele precisar de uma trama de fios, e sei que falastes tu ou foi outra pessoa de um intermediário para a coisa, seria mesmo interessante, é que estar a soldar novamente ...
http://www.waterinspiration.blogspot.com
"Nunca tenham medo de inovar, Lembrem-se, a Arca foi construida por amadores, profissionais construiram o Titanic."
-Anónimo.
Sim existe um adaptador I2C, mas não te aconcelho. Torna tudo mt mais lento.
Não há nada como a escrita em paralelo!
I2C- 1clock, 1 bit
Paralelo - 1 clock, nBits, em que n é o tamanho do bus.
E acho que não são assim tantos a mais!
Usas 20 pinos! o teu não é 20 pinos tb?
Bom, isto agora tá a dar luta! Implementei a versão sem delays nos menus, mas não funciona, passa a mil à hora entre menus... mas agora tb tou cheio de sono... fica para amanhã...
E eu tenho baptizado do miudo (faz 1 ano hoje) com varicela hoje (já tem as borbulhas secas), e este só lhe apeteceu adormecer...agora...
tenho um arduino normal, brinco primeiro com ele e depois meto no mega que está no aquário...mas possivelmente deixarei de controlar tantos bucks independentemente...
também é verdade que não preciso do GLCD agora é mesmo só por mariquice...
Se calhar implemento os dois...
mas para isso tenho de arranjar uma daquelas tiras com fios condutor, tipo fita cola larga para poder abrir a tampa com o glcd embutido na tampa...
seria interessante...ou usar dois fios de rede...deverá dar também...
aí seria também interessante, ficava estéticamente perfeito, e daria pica para implementar outras coisas...
claro que tenho de aliviar os pinos e só irei mesmo controlar 3 conjuntos de bucks independentemente tem de ser para poupar pinos.
ou...talvez usar dois arduinos...já que eu tenho mesmo dois arduinos, e usar alguma forma de comunicação entre ambos...
http://www.waterinspiration.blogspot.com
"Nunca tenham medo de inovar, Lembrem-se, a Arca foi construida por amadores, profissionais construiram o Titanic."
-Anónimo.
Boa noite
Felizmente encontrei espaço para participar neste tópico...
Deixa-me felicitar-te pela tua iniciativa e partilha para connosco.
Quanto à tua questão, resolves isso com uma variável booleana e com o auxílio de um grafcet.
Por exemplo, no COADAS+ eu tenho uma variável booleana para definir se o PLC está em RUN ou em STOP.
No COADAS original, criei um 'caminho' de modo a permitir o modo 'Manutenção', que é o modo que me permite tirar água, pôr água, fazer água recorrendo a 3 botões. (o LOGO! é assim que funciona, com botões de trabalho, juntamente com a botão ESC), mas respeitando as bóias e temporizadores limite.
Uma coisa é termos um temporizador de trabalho, outra coisa é termos um temporizador limite.
Abraço
Pedro Ferrer
Eu posso!
Eu quero!
Eu consigo!
Boas Pedro.
Obrigado por participares e pelo input.
É mais ou menos por aí que andava o meu pensamento. Ontém acabei por me debruçar no problema dos menus, e a solução foi parecida.
Pegando num exemplo do código:
"void entrance_menu()
{
if (updated_once==false)
{
GLCD.DrawRect(0, 0, 127, 16, BLACK);
GLCD.SelectFont(Arial_14, BLACK);
GLCD.GotoXY(17,1);
GLCD.Puts("AQUA Computer");
//GLCD.InvertRect(0, 0, 127, 16);
GLCD.SelectFont(arial10, BLACK);
GLCD.DrawRoundRect(0, 18, 60, 14, 4, BLACK);
GLCD.GotoXY(15,21);
GLCD.Puts("Light");
GLCD.DrawRoundRect(35, 34, 60, 14, 4, BLACK);
GLCD.GotoXY(50,37);
GLCD.Puts("Config");
updated_once=true;
}
if (touched() && touch_enabled==true)
{
get_pixel_from_coords();
if (Pixel_Position_XY[0]>0 && Pixel_Position_XY[0]<60 && Pixel_Position_XY[1]>18 && Pixel_Position_XY[1]<32)
{
current_menu=1;
GLCD.ClearScreen();
updated_once=false;
touch_enabled=false;
}
else if (Pixel_Position_XY[0]>35 && Pixel_Position_XY[0]<95 && Pixel_Position_XY[1]>34 && Pixel_Position_XY[1]<48)
{
current_menu=3;
GLCD.ClearScreen();
updated_once=false;
touch_enabled=false;
}
/* else if (Pixel_Position_XY[0]>67 && Pixel_Position_XY[0]<127 && Pixel_Position_XY[1]>34 && Pixel_Position_XY[1]<48)
current_menu=4;*/
}
}
"
Basicamente, acrescentei a variavel "touch_enabled" ao if que vai fazer a leitura do touch e fazer o match com o respectivo botão. Qd é feita a leitura, desactivo o touch colocando a variavel em "false", e passa para o menu do match. Mas qd entra no outro menu, mesmo que ainda se esteja a pressionar o touchscreen, não vai fazer nada pq a variavel tá em "false" e não deixa entrar dentro do ciclo de leitura do touch.
Depois no loop, acrescentei um if para fazer o set da variavel a "true" qd se liberta o touch.
"
void loop()
{
TimeStampStart = micros();
if (!touched())
touch_enabled=true;
RTC.get(rtc,true);
switch (current_menu)
.......
"
Desta forma resolvi o problema do touch, e navega-se agora através dos menus sem falhas e de forma fluída.
Mas isto depois levantou o problema de fazer o setup das variaveis das horas por exemplo nos menus. Então, tive que introduzir os mesmo ciclos de delay que tinha, mas só dentro das condições de match que era necessário e baixei o delay para 150ms. Assim consegue-se acertar as horas de forma facil. Além disso, coloquei as variaveis das horas a rodar para tornar o acerto mais facil e rápido, já se pode andar para trás por exemplo.
" if (touched() && touch_enabled==true)
{
get_pixel_from_coords();
if (Pixel_Position_XY[0]>5 && Pixel_Position_XY[0]<15 && Pixel_Position_XY[1]>27 && Pixel_Position_XY[1]<37)
{// Hour up arrow
if ((millis()-read_touch_delay) > 150)
{
read_touch_delay=millis();
if (rtctemp[2] == 23)
{
rtctemp[2]=0;
GLCD.ClearScreen();
updated_once=false;
}
else
{
rtctemp[2] ++;
updated_once=false;
}
}
}
......
"
Vou agora ver como implementar o modo de manutenção, mas a minha ideia é introduzilo com um "if" nos ciclos que actualizam as variaveis de forma automática, e fazer o set duma variavel por canal, por exemplo "maintenance_active", qd entro nos menus do modo manual dando claro um warning que o modo automático para aquele canal foi desactivado.
Bem, qd isto estiver afinado, faço mais um video para verem que desta forma a navegaçção ficou mt mais fluída.![]()
Há 1 Membros navegando neste tópico. (0 registrados e 1 visitantes)