Todas as Discussões Marcadas 'led' - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-28T22:22:13Zhttps://labdegaragem.com/forum/topic/listForTag?tag=led&feed=yes&xn_auth=no(AULA) Função millis()tag:labdegaragem.com,2022-10-14:6223006:Topic:8873182022-10-14T17:42:23.623Ztiago merceshttps://labdegaragem.com/profile/tiagomerces
<p>Olá a todos.</p>
<p></p>
<p></p>
<p></p>
<p>Tendo em vista as repetidas dúvidas sobre a utilização do millis(), resolvi criar este tutorial simples e curto para facilitar o entendimento dos colegas que, eventualmente, possam ter dúvidas.</p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>1. O que é o millis()?</strong></span></p>
<p></p>
<p>O millis() é uma função que retorna um VALOR referente ao TEMPO desde que o PROGRAMA foi iniciado.</p>
<p>Este TEMPO é dado em…</p>
<p>Olá a todos.</p>
<p></p>
<p></p>
<p></p>
<p>Tendo em vista as repetidas dúvidas sobre a utilização do millis(), resolvi criar este tutorial simples e curto para facilitar o entendimento dos colegas que, eventualmente, possam ter dúvidas.</p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>1. O que é o millis()?</strong></span></p>
<p></p>
<p>O millis() é uma função que retorna um VALOR referente ao TEMPO desde que o PROGRAMA foi iniciado.</p>
<p>Este TEMPO é dado em milissegundos(ms), ou seja, 1 segundo é o mesmo que 1000ms.</p>
<p></p>
<p>Exemplo1: Se o programa já está sendo rodado a 17 segundos, ele retornará 17000. </p>
<p>Exemplo 2: Se estiver rodando a 1 minuto e 5 segundos, ele retornará 65000, pois 1 minuto = 60.000ms, e 5 segundos = 5000ms, logo, 60.000+5.000 = 65.000</p>
<p>Exemplo3: Programa rodando a 2 horas. (2h = 120min = 7200sec = 7.200.000ms)</p>
<p></p>
<p>Para visualizar a mudança deste valor, você pode criar o seguinte código:</p>
<p></p>
<p>#define velocidade_serial 115200 // 9600 para arduino e 115200 para Esp8266/32</p>
<p></p>
<p>void setup(){</p>
<p> Serial.begin(velocidade_serial);</p>
<p>}</p>
<p>void loop(){</p>
<p> Serial.println(millis());</p>
<p>}</p>
<p></p>
<p>Após carregar o código, abra o monitor serial, e veja o valor sendo atualizado constantemente. </p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10841957471?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10841957471?profile=RESIZE_710x" class="align-full" width="459" height="306"/></a></p>
<p>Na imagem temos 2 valores (pois é constantemente atualizado).</p>
<p>valor 1: 55989 milissegundos = 55,989 segundos</p>
<p>valor 2: 56000 milissegundos = 56 segundos</p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>2. Como o millis() é utilizado nos códigos? E quais as vantagens?</strong></span></p>
<p></p>
<p>Além do seu retorno nativo, é comumente usado como uma forma de "atraso otimizado".</p>
<p>Esses atrasos são sempre produzidos através de uma condição e um calculo. No geral, a grande vantagem está na possibilidade de não "travar" o programa, que é uma consequência do uso da função delay(). </p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>3. Calculo simples com millis()</strong></span></p>
<p></p>
<p>Primeiramente, vamos visualizar um calculo simples com o millis(). Este calculo será um: millis() - 1000. Para facilitar, vamos fazer o seguinte código:</p>
<p></p>
<p>void setup(){Serial.begin(115200);}</p>
<p></p>
<p>void loop(){</p>
<p> Serial.print("Valor do millis() = ");</p>
<p> Serial.print(millis());</p>
<p> Serial.print(" - Valor do calculo = ");</p>
<p> Serial.print(millis() - 1000);</p>
<p>}</p>
<p></p>
<p>Veja na imagem a seguir o resultado:</p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10841964054?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10841964054?profile=RESIZE_710x" class="align-full" width="387" height="410"/></a></p>
<p></p>
<p>Do lado esquerdo, temos o valor atual do retorno da função "millis()", do lado direito, temos o mesmo valor, só que reduzindo em 1000.</p>
<p></p>
<p>Se adicionarmos a função delay(), teríamos uma pausa entre cada uma dessas leituras.</p>
<p></p>
<p>void loop(){</p>
<p> Serial.print("Valor do millis() = ");</p>
<p> Serial.print(millis());</p>
<p> Serial.print(" - Valor do calculo = ");</p>
<p> Serial.print(millis() - 1000);</p>
<p> delay(1000); ////////////// PAUSA de 1 segundo</p>
<p>}</p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10841973864?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10841973864?profile=RESIZE_710x" class="align-full" width="420" height="299"/></a></p>
<p></p>
<p>Perceba que, neste caso, os cálculos e a impressão dos valores estão ocorrendo EXATAMENTE após 1 segundo, devido ao delay(1000). Entretanto, o código "PARA" quando o delay é chamado, ou seja, nada poderá acontecer em "paralelo".</p>
<p></p>
<p>Se você possuir um led que pisca a cada 0,5 segundos, então ele irá piscar a cada 1,5 segundos.</p>
<p>Se tiver um sensor que fica lendo os valores a cada 0,1 segundo, então ele só irá ler a cada 1,1 segundo.</p>
<p></p>
<p>Para muitas aplicações, o uso do delay() é ótimo, mas para outras, ele causa grandes problemas.</p>
<p>Imagine que você tenha 2 leds, e você deseja que o led 1 pisque a cada 3 segundos, e o led 2 a cada 4 segundos. Com o uso simples e direto do delay(), sem cálculos para compensar, seria impossível. </p>
<p></p>
<p>Imagine ainda que você precisa que um botão fique pressionado por X segundos para uma ação ser ativada. Com delay() seria um grande transtorno.</p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>4. Substituir delay() por millis()</strong></span></p>
<p></p>
<p>Agora a coisa começa a ficar bem legal, pois teremos a nossa primeira aplicação.</p>
<p></p>
<p>O principio deste novo "delay", é um comparativo entre o valor atual de millis() com um valor armazenado em uma variável qualquer, que também lhe foi atribuído o valor do millis(). Exemplo:</p>
<p></p>
<p>// DELAY de 5 segundo //</p>
<p>unsigned long Var; </p>
<p></p>
<p>void setup(){</p>
<p> Serial.begin(115200); </p>
<p> Var = millis(); </p>
<p>}</p>
<p></p>
<p>void loop(){</p>
<p> if (millis() - Var >= 5000){</p>
<p> Serial.println(millis());</p>
<p> Var = millis();</p>
<p> }</p>
<p>}</p>
<p></p>
<p></p>
<p><span style="text-decoration: underline;">Vamos explicar o código</span></p>
<p></p>
<p><strong>unsigned long Var;</strong></p>
<p>Declaração da variável "Var" para o tipo "unsigned long".</p>
<p>"unsigned" -> diz que a variável não irá armazenar números negativos.</p>
<p>"long" -> Armazena até 32 bits.</p>
<p></p>
<p>É a declaração padrão para esta aplicação.</p>
<p></p>
<p><em>Mais informações:</em> <a href="https://www.arduino.cc/reference/pt/language/variables/data-types/unsignedlong/" target="_blank" rel="noopener"><em>LINK AQUI</em></a></p>
<p></p>
<p><strong>Var = millis(); (no setup() )</strong></p>
<p>Ele atribui o valor de millis() para a variável Var.</p>
<p>Ou seja, no exato instante, os dois terão o mesmo valor, entretanto, o valor de millis() é alterado constantemente (item 1, lembra?).</p>
<p></p>
<p></p>
<p><strong>if (millis() - Var >=5000){</strong></p>
<p>A leitura deste código seria assim: "O valor de millis() menos o valor de Var, é maior ou igual a 5000?", então ele retornará "Verdadeiro/True/1" ou "Falso/False/0" </p>
<p></p>
<p>//Exemplo dentro do exemplo</p>
<p>//No primeiro momento iremos atribuir: Var = millis(), e dizer que o valor de millis() é de 1234. Logo: //Var = 1234, millis() = 1234</p>
<p>//</p>
<p>//Após Segundo 1. Var = 1234, millis() = 2234 (millis() - var => 2234 - 1234 => 1000)</p>
<p>//Após Segundo 2. Var = 1234, millis() = 3234 (millis() - var => 3234 - 1234 => 2000)</p>
<p>//Após Segundo 3. Var = 1234, millis() = 4234 (millis() - var => 4234 - 1234 => 3000)</p>
<p>//Após Segundo 4. Var = 1234, millis() = 5234 (millis() - var => 5234 - 1234 => 4000)</p>
<p>//Após Segundo 5. Var = 1234, millis() = 6234 (millis() - var => 6234 - 1234 => 5000)</p>
<p></p>
<p><strong>Var = millis();</strong></p>
<p>Necessário para "reiniciar o cronometro", afinal, quando ele obtém o novo valor de millis(), a SUBTRAÇÃO de millis() por Var, NO EXATO INSTANTE, voltará a ser ZERO. Veja o resultado na imagem:</p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10841991061?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10841991061?profile=RESIZE_710x" class="align-full" width="346" height="325"/></a></p>
<p></p>
<p>Você pode dizer: "Tiago, o resultado é o MESMO que adicionar um delay(5000)". E você estará certo, pois esta aplicação é muito simples! Mas veja o código a seguir:</p>
<p></p>
<p></p>
<p>unsigned long Var; </p>
<p></p>
<p>void setup(){</p>
<p> Serial.begin(115200); </p>
<p> Var = millis(); </p>
<p>}</p>
<p>void loop(){</p>
<p> if (millis() - Var >= 5000){</p>
<p> Serial.println(); // Mudança</p>
<p> Serial.println(millis());</p>
<p> Var = millis();</p>
<p> }</p>
<p> Serial.print("."); // Mudança</p>
<p>}</p>
<p></p>
<p>Veja o resultado:</p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10841997854?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10841997854?profile=RESIZE_710x" class="align-full" width="375" height="267"/></a></p>
<p>o valor do millis() só estava sendo impresso a cada 5 segundos, entretanto, o ".", estava sendo impresso initerruptamente. Ou seja, temos um "evento em paralelo"!!! </p>
<p></p>
<p><span style="text-decoration: underline;"><em><strong>(continua no próximo post)</strong></em></span></p> Contador de dias automáticotag:labdegaragem.com,2022-06-06:6223006:Topic:8840522022-06-06T12:01:00.394Zluiz carlos silveirahttps://labdegaragem.com/profile/luizcarlossilveira
<p>Bom dia meus caros, gostaria de saber como posso fazer um contador de dias automático com arduíno e matriz de led, poderiam me ajudar?</p>
<p></p>
<p>Desde já muito obrigado.</p>
<p></p>
<p>Bom dia meus caros, gostaria de saber como posso fazer um contador de dias automático com arduíno e matriz de led, poderiam me ajudar?</p>
<p></p>
<p>Desde já muito obrigado.</p>
<p></p> Criação de projeto arduinotag:labdegaragem.com,2021-02-07:6223006:Topic:8512012021-02-07T03:31:18.911ZCacio de Souzahttps://labdegaragem.com/profile/CaciodeSouza
<p>opa tudo bem?</p>
<p></p>
<p>gostaria de criar um projeto onde apertando um botão que está longe do arduino, 3mts, vai acionar uma led, tocar uma musica e acionar coolers para vento... essa ação toda dura 12segundos e para até ser acionada novamente.</p>
<p></p>
<p>não posso usar reley por conta do barulho que causa e o sistema nao pode fazer barulho ao agir...</p>
<p></p>
<p>eis ai minha dificuldade, me ajudem por favor... </p>
<p></p>
<p>grato...</p>
<p>opa tudo bem?</p>
<p></p>
<p>gostaria de criar um projeto onde apertando um botão que está longe do arduino, 3mts, vai acionar uma led, tocar uma musica e acionar coolers para vento... essa ação toda dura 12segundos e para até ser acionada novamente.</p>
<p></p>
<p>não posso usar reley por conta do barulho que causa e o sistema nao pode fazer barulho ao agir...</p>
<p></p>
<p>eis ai minha dificuldade, me ajudem por favor... </p>
<p></p>
<p>grato...</p> Arduinotag:labdegaragem.com,2020-11-24:6223006:Topic:7946342020-11-24T05:51:59.325ZEdgardhttps://labdegaragem.com/profile/Edgard
<p><span style="font-size: 12pt;">Pessoal, sou leigo com arduino e estou em um tcc que envolve a programação do mesmo, vcs possuem dicas para como fazer a seguinte programação: </span></p>
<p><span style="font-size: 12pt;">um termopar será ligado ao arduino para detectar temperaturas de 0 a 10 graus, quando essa faixa de temperatura for detectada, irá acionar um Led vermelho, quando Led ficar vermelho, ele irá acionar um relé que por fim acionaria uma eletroválvula, como poderia programar isso…</span></p>
<p><span style="font-size: 12pt;">Pessoal, sou leigo com arduino e estou em um tcc que envolve a programação do mesmo, vcs possuem dicas para como fazer a seguinte programação: </span></p>
<p><span style="font-size: 12pt;">um termopar será ligado ao arduino para detectar temperaturas de 0 a 10 graus, quando essa faixa de temperatura for detectada, irá acionar um Led vermelho, quando Led ficar vermelho, ele irá acionar um relé que por fim acionaria uma eletroválvula, como poderia programar isso no arduino ?</span></p> Um arduino consegue acionar uma eletroválvula ?tag:labdegaragem.com,2020-11-24:6223006:Topic:7946142020-11-24T01:12:28.735ZEdgardhttps://labdegaragem.com/profile/Edgard
<p>Pessoal, estou realizando um tcc e gostaria de saber se um arduino conseguiria fechar uma eletroválvula, exemplo: com a temperatura x, o LED RGB ficará de cor vermelha, quando ficar de cor vermelha, seria a hora do arduino acionar a eletroválvula, isso seria possível ? </p>
<p>Obs: a temperatura que faria o LED ficar vermelho seria determinada por um termopar também conectado a esse arduino</p>
<p>Pessoal, estou realizando um tcc e gostaria de saber se um arduino conseguiria fechar uma eletroválvula, exemplo: com a temperatura x, o LED RGB ficará de cor vermelha, quando ficar de cor vermelha, seria a hora do arduino acionar a eletroválvula, isso seria possível ? </p>
<p>Obs: a temperatura que faria o LED ficar vermelho seria determinada por um termopar também conectado a esse arduino</p> LED Pisca fraco com MILLIStag:labdegaragem.com,2020-06-17:6223006:Topic:7345292020-06-17T01:45:18.244ZRafael Bovohttps://labdegaragem.com/profile/RafaelBovo
<p>Olá.</p>
<p></p>
<p>Estou aprendendo a programar o Arduino.</p>
<p>Gostei de um projeto de Dado Digital e comecei a modificá-lo com o objetivo de incrementar o código e o funcionamento.</p>
<p>Gostaria que quando ele não estivesse em uso, ou seja, sorteando um número, o LED do meio piscasse rapidamente a cada 5 segundos. Isso seria para mostrar que ele está ligado e consumindo a bateria.</p>
<p></p>
<p>Até aí tudo bem... consegui fazer como verão no código. Porém, o LED pisca muito fraco…</p>
<p>Olá.</p>
<p></p>
<p>Estou aprendendo a programar o Arduino.</p>
<p>Gostei de um projeto de Dado Digital e comecei a modificá-lo com o objetivo de incrementar o código e o funcionamento.</p>
<p>Gostaria que quando ele não estivesse em uso, ou seja, sorteando um número, o LED do meio piscasse rapidamente a cada 5 segundos. Isso seria para mostrar que ele está ligado e consumindo a bateria.</p>
<p></p>
<p>Até aí tudo bem... consegui fazer como verão no código. Porém, o LED pisca muito fraco quando está nesse modo acionado pelo MILLIS. O que não acontece quando se clica no botão para efetuar um sorteio.</p>
<p></p>
<p>Alguém tem ideia do que pode estar acontecendo e teria uma dica?</p>
<p></p>
<p>Muito obrigado.</p>
<p></p> Chave alavanca com led no arduinotag:labdegaragem.com,2019-12-28:6223006:Topic:7249682019-12-28T23:35:47.887ZFelipe Mendes de Melohttps://labdegaragem.com/profile/FelipeMendesdeMelo
<p><span style="font-size: 10pt;">Olá pessoas, estou fazendo um projeto com o arduino pro micro e preciso usar uma chave alavanca com LED o modelo asw-07d. Mais não estou conseguindo, estou ligando o terra no gnd do arduino, o + no vcc e o outro pino na saída do arduino. Se alguém puder me ajudar ficarei grato.</span></p>
<p><span style="font-size: 10pt;">Olá pessoas, estou fazendo um projeto com o arduino pro micro e preciso usar uma chave alavanca com LED o modelo asw-07d. Mais não estou conseguindo, estou ligando o terra no gnd do arduino, o + no vcc e o outro pino na saída do arduino. Se alguém puder me ajudar ficarei grato.</span></p> TIMERtag:labdegaragem.com,2018-08-21:6223006:Topic:6833482018-08-21T20:25:48.546ZJosé Ewerton da Silva Sousahttps://labdegaragem.com/profile/JoseEwertondaSilvaSousa
<p>Olá gostaria de alerar a velocidade com q o led desliga e liga <strong>sem usar dalay</strong>. Digiar um valor de velocidade de liga/desliga. Ex: digitar 500 e o led desligar a cada 500ms, ou digitar 1000 e o led desligar a cada 1000ms.</p>
<p>Olá gostaria de alerar a velocidade com q o led desliga e liga <strong>sem usar dalay</strong>. Digiar um valor de velocidade de liga/desliga. Ex: digitar 500 e o led desligar a cada 500ms, ou digitar 1000 e o led desligar a cada 1000ms.</p> [RESOLVIDO] Dúvida Componentetag:labdegaragem.com,2018-01-07:6223006:Topic:6548552018-01-07T15:48:47.885ZJose Augusto Cintrahttps://labdegaragem.com/profile/JoseAugustoCintra
<p>Revisando os componentes que possuo em casa, encontrei esse da figura, mas não consegui identificar.</p>
<p>Aparentemente é um LED, mas pesquisei na Internet e não achei nada parecido.</p>
<p>Alguém saberia identificar?</p>
<p>Revisando os componentes que possuo em casa, encontrei esse da figura, mas não consegui identificar.</p>
<p>Aparentemente é um LED, mas pesquisei na Internet e não achei nada parecido.</p>
<p>Alguém saberia identificar?</p> [AJUDA] Hackeando um módulo RGBtag:labdegaragem.com,2017-05-24:6223006:Topic:6139502017-05-24T03:17:50.517ZHeitor Badotti Sampaiohttps://labdegaragem.com/profile/HeitorBadottiSampaio
<p>Comprei este <a href="https://pt.aliexpress.com/item/Original-16Million-colors-Wifi-5channels-RGB-WW-CW-led-controller-smartphone-control-music-and-timer-mode/32760826866.html" target="_blank">Original 16Million colors Wifi 5channels RGB/WW/CW led controller smartphone</a> da china. <strong>Meu objetivo é: <em>Controlar (enviar os comandos de cores) para esta controladora via Wi-Fi<br></br><br></br></em></strong>Eu cheguei a abrir a controladora e a mesma tem o seguinte chip Wi-Fi…</p>
<p>Comprei este <a href="https://pt.aliexpress.com/item/Original-16Million-colors-Wifi-5channels-RGB-WW-CW-led-controller-smartphone-control-music-and-timer-mode/32760826866.html" target="_blank">Original 16Million colors Wifi 5channels RGB/WW/CW led controller smartphone</a> da china. <strong>Meu objetivo é: <em>Controlar (enviar os comandos de cores) para esta controladora via Wi-Fi<br/><br/></em></strong>Eu cheguei a abrir a controladora e a mesma tem o seguinte chip Wi-Fi <span style="text-decoration: underline;">[Modelo: HF-LPB100-1]</span><br/><a href="http://storage.ning.com/topology/rest/1.0/file/get/1802503752?profile=original" target="_self"><img width="750" src="http://storage.ning.com/topology/rest/1.0/file/get/1802503752?profile=RESIZE_1024x1024" width="750" class="align-full"/></a><br/>O aplicativo te da 2 opções para controlar a fita, 1 remotamente (via redes móveis ou outras redes) e outra localmente (via próprio Wi-Fi), na hora de configurar a rede local, você conecta a controladora e o celular na mesma rede (acredito que talvez ai seja possível entender o que passa pela controladora)<br/>O aplicativo que é usado para controlar ela, é o "Magic Home" <a href="https://play.google.com/store/apps/details?id=com.Zengge.LEDWifiMagicHome" target="_blank">(link play store)</a><br/><br/>O chip que tem atrás da controladora é o <a href="http://www.alldatasheet.com/view.jsp?Searchword=Ds1302z" target="_blank">DS1302Z</a><br/><br/><a href="http://storage.ning.com/topology/rest/1.0/file/get/1802506682?profile=original" target="_self"><img width="750" src="http://storage.ning.com/topology/rest/1.0/file/get/1802506682?profile=RESIZE_1024x1024" width="750" class="align-full"/></a><br/>Bom, eu gostaria de controlar isso via Wi-Fi, de preferência mandar um comando para o modem e o modem retransmitir esse comando para a fita (não sei se isso é possivel), nem que no pior dos casos eu reprogramasse o chip da minha controladora (sei que é possível, mas não sei como fazer)</p>
<p></p>
<p>Preciso da ajuda de vocês, preciso de alguém que tenha o conhecimento na área... Essa controladora é para ser usada junto a minha automação, da qual eu uso o app Blynk para controlar ela.</p>