-
Posts
363 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Carlos Zanon postou
-
Arduino LM35 para ligar um LED através do Arduino
Carlos Zanon respondeu ao tópico de jbiribi em Microcontroladores
Eu faço isso antes de enviar Só um exemplo algoritmo se não ia consumir muito do mcu Eu já envio os 1099 faço os calculos e vamos dizer que ele retorne 3000 depois da conta, eu só retorno os 3000 pela serial... faço tudo via int... depois que o programa no PC le os 3000, ele mesmo faz a conversão pra 30.00 adicionado 1 minuto depois https://www.arduino.cc/reference/en/language/functions/communication/serial/parseint/ -
Arduino LM35 para ligar um LED através do Arduino
Carlos Zanon respondeu ao tópico de jbiribi em Microcontroladores
@jbiribi Não é possível trabalhar com casas decimais em int. Você pode programar da seguinte forma: O Número 999.999 equivale a 999999 em int ou até mesmo 10.00 equivale a 1000... tire as casas decimais e trabalhe com ela em int... Come menos ram e espaço adicionado 2 minutos depois Eu uso algo parecido com isso aqui: int converterInt(float fValor, int iCasas) { return floor(fValor * (pow(10, iCasas))); } O Programa em C# que postei é só pra compilar... compila e usa ele pra enviar e receber os dados... adicionado 5 minutos depois Dai usando a função ai.. converterInt(10.99, 2) // vai retornar 1099 Dependendo do teu uso, pode resolver o problema... só tome cuidado com valores muito altos, nesse caso ai vai dar overflow de limite se for valor acima de 2147483647 (ou 32767? não me recordo agora) se não me engano adicionado 9 minutos depois Se precisar de valores maiores, você pode apelar pra usar 2 variaveis... Tem um post meu aqui Que eu faço uso em algumas coisas pra não estourar alguns limites e poder usar os valores normalmente... -
Arduino LM35 para ligar um LED através do Arduino
Carlos Zanon respondeu ao tópico de jbiribi em Microcontroladores
Eu tinha um programa meu em C# perdido aqui no meu micro com .net 4 que abre porta serial e envia... usava pra fazer esses testes ai... acabei de subir ele no github... veja se te ajuda... qualquer coisa avisa https://github.com/carloshenrq/serialport adicionado 8 minutos depois É... pouco tempo atrás eu fiz da seguinte forma: fazia todo o processo com int mesmo... fixava um numero de casas... tipo pra 3 casas decimais eu usava formato '999999' por exemplo dai já sabia que os 3 últimos são as casas decimais... trabalhava com o valor e depois retornava da mesma forma pela serial... era só tratar... dividir por 1000 quando chegava no programa do PC no caso... e funciona que é uma beleza... Tenho uma rotina de arredondamento com 10 casas decimais que faço dessa forma ai também (por causa da ABNT NBR 5891:2014) e achei mais simples implementar usando inteiros. -
Arduino LM35 para ligar um LED através do Arduino
Carlos Zanon respondeu ao tópico de jbiribi em Microcontroladores
Não é bem isso o que este método faz. Veja a documentação: https://www.arduino.cc/reference/en/language/functions/communication/serial/available/ Get the number of bytes (characters) available for reading from the serial port. This is data that's already arrived and stored in the serial receive buffer (which holds 64 bytes). available() inherits from the Stream utility class. "Obtém o número de bytes (caracteres) disponíveis para leitura através da porta serial." Seu programa só vai ascender o LED quando e enquanto houver dados na porta serial. adicionado 2 minutos depois Acho que você não leu a documentação =) adicionado 15 minutos depois O Serial.read() retorna o primeiro byte (int) recebido pela comunicação Serial... Se você for ler tudo, você pode usar o Serial.readBytes() // Existem dados a serem lidos... int tamanhoDados = Serial.available(); char[] dados; if(tamanhoDados > 0 && Serial.readBytes(dados, tamanhoDados) == tamanhoDados) { // Tratar informações recebidas em dados } Pra fazer isso ai que você quer, você precisa tratar antes... Por exemplo: // Existem dados a serem lidos... if(Serial.available() > 0) { float valorInserido = Serial.parseFloat(); if(temperatura > valorInserido) { } else { } } -
@Sérgio Lembo Isso ocorre em milésimos de segundo correto? Essa variação ocorre tanto no momento que eu pressiono quanto no momento que eu solto o botão, certo? @Isadora Ferraz O Meu código ali faz algo parecido com isso só que com 50ms de intervalo... Ele só "trava" (máx de 150ms) o MCU quando está inicializando onde ocorre o delay, de resto eu procuro não travar o processamento de nenhuma forma.
-
@Isadora Ferraz Eu olhei um monte de links mas nenhum foi tão explicativo quanto o do @aphawk No caso eu preferi fazer de uma segunda forma (ao invés de usar o delay), acabei por colocar um comparativo de timing no código. Meu código final de teste para debouncing ficou: /** * Verifica se o botão foi clicado e verifica o debouncing. * @return void */ bool btnIsClicked() { // Verifica se o botão foi pressionado, a entrada irá a 0 // Então, inicia a verificação de debouncing if(digitalRead(PIN_BTN) == LOW) { // Caso os testes "contra" o debouncing mostrem que o botão foi realmente // apertado, então retorta informando que o mesmo está em estado HIGH. if(BTN_STATE_TIME == HIGH) return HIGH; // Se ainda não foi provado que o mesmo foi clicado, então, marca a hora atual // no botão para futura comparação de dados e timing if(BTN_TIMER_PRESSED == 0) BTN_TIMER_PRESSED = time; // Este IF será valido num momento futuro onde é provado que o botão continua pressionado // Mantendo a entrada em nível 0 durante um certo tempo, então é considerado o click. if((time-BTN_TIMER_PRESSED) > 50) { BTN_STATE_TIME = HIGH; return btnIsClicked(); } } else { // Se for apenas ruido, ele irá zerar, a filtragem/desacoplamento o capacitor // irá cuidar no circuito até que tudo esteja correto para validar o click. BTN_STATE_TIME = LOW; BTN_TIMER_PRESSED = 0; } return LOW; } E caso o mesmo seja pressionado, quero que apenas 1 vez este seja executado enquanto apertado: if(btnIsClicked()) { if(BTN_STATE == LOW) { BTN_STATE = HIGH; btnClicked(); } } else { BTN_STATE = LOW; } Aproveitei para colocar durante a inicialização do MCU: /** * Configura o MCU para as operações de leitura de porta * e realiza os testes iniciais */ void setup() { // Número de erros obtidos. int errorCount = 0; // Tempo inicial de execução do MCU time = millis(); // Configura os pinos de leitura pinMode(PIN_BTN, INPUT); pinMode(PIN_HGM, INPUT); pinMode(PIN_LDR, INPUT); // Configura os pinos de escrita pinMode(PIN_LIGHT, OUTPUT); pinMode(PIN_WATER, OUTPUT); // Desliga os pinos de agua e luz digitalWrite(PIN_LIGHT, LOW); digitalWrite(PIN_WATER, LOW); // Somente estará em LOW caso esteja pressionado ou capacitor ainda não carregado. while((errorCount++) < 3 && digitalRead(PIN_BTN) == LOW) delay(50); // Em caso de erro ou sensores sem funcionamento, então // Declara estado de ERRO. if(errorCount >= 3 || !verificarSensores()) { ERROR_STATE = HIGH; } }
-
Tenho algumas pequenas dúvidas sobre o debouncing. A dúvida surgiu em um projetinho meu usando um ATTiny85 para uma pequena horta que estou montando em casa e vou fazer ela micro-controlada... Por puro hobby e aprendizado =) O Botão ali em A1, ele somente tinha a seguinte estrutura: Meu código já estava prevendo o tempo de segurar o botão, pois a cada clock ele ia executar o código novamente e isso ia me dar uma dor de cabeça... Mas pelo que entendi do bouncing a melhor forma de eu deixar o botão é dessa forma aqui: A Dúvida é no papel do capacitor... O Capacitor ai no caso, vai funcionar como um "filtro" para os ruídos? É isso que se chama de capacitor de desacoplamento? No caso do reset, funciona da mesma forma... ele entra com um resistor de pull-up, é interessante eu fazer o mesmo procedimento nele?
-
@mestre88 eu fiz a conta assim: z = 127/0.06 z = 2116.66666667 z = 2116.67 r = 74/0.06 r = 1233.33 xc² = z² - r² xc² = 2116.67² - 1233.33² xc² = 2959189 xc = 2959189^(1/2) xc = 1720.22934517 xc = 1720.23 c = 1/(2 * 3.14 * 60 * 1720.23) c = 0.00000154277 c = 0.00154277 mf c = 1.54266 uf
-
Pelas contas aqui isso deve funcionar... agora o capacitor deve esquentar muito como o @Mestre88 disse...
-
Era uma duvida geral mesmo... é que tenho alguns desses pic, attiny85 e uns atmega328-pu também... dai ficava minha dúvida em relação a osciladores neles Eu uso sem o cristal também, mas peguei de exemplo adicionado 5 minutos depois Tenho alguns mt8870 da bina que estava montando tempinho atrás e precisava de uma interface de comunicação usb com micro e etc... Dai eles usam cristais osciladores...
-
Eu tenho uma duvidazinha bem rápida quanto a osciladores em geral. No datasheet do PIC12F629 (http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf) diz que a frequência máxima de operação é 20MHz, conforme a figura abaixo: Todo o datasheet dele em outras tabelas mostram os valores de osciladores sempre 20, 10, 5 e 4 MHz, tem os KHz, mas eu to mais ligado nesses de MHz. Pergunta ***** e que eu nem deveria estar perguntando mas... Eu posso usar um cristal de, por exemplo, 16 MHz? Sei que ele vai operar com velocidade diferente e não vou aproveitar 100% da capacidade do MCU, mas desde que esteja dentro dos limites eu posso trabalhar com o oscilador do valor desejado, certo? Seja neste ou qualquer outro CI desde especificado no datasheet...
-
Eu jurava que a corrente somava quando os leds estavam em série... por isso que somei tudo não saiba D: Se ele vai puxar só 60mA então muda tudo 74.4v por 60mA é beeeem menor, da pra fazer com aquelas fontes sem transformador mesmo. Da pra usar 2 capacitores de 22uF / 400v pra despolarizar eles... O Valor dos capacitores deve ser o mesmo, se mudar da muito ruim (eu fiz o teste em casa kkkk) Me lembro de alguém aqui no fórum ter me mostrado isso...
-
Tirei umas médias entre os valores de led porque você não informou a quantidade exata e suas tensões exatas dai calculo foi por média... (2.8+3.4)/2 = 3.1v Se você tem 24 leds ligados em série a tensão deve ser: 24*3.1 = 74.4v A Corrente dai... 48*0.03 = 1.44A 1.44A / 2 = 0.72A por linha de led Vou subir essa tensão ai pra 81.6v porque talvez tenha mais leds com com 3.4v e isso ai pode dar uma diferença... (3.4v * 24 = 81.6v, quase 90v ewe) Se você ligar direto na rede 127v com uma ponte retificadora de pelo menos 3A, vai precisar de um resistor pra cada uma das linhas de led. U = R * I (127-81.6) = R * 0.72 R = (127-81.6) / 0.72 R = 63.05 -> valor comercial = 68R P = U * I P = (127-81.6) * 0.72 P = 32.69W Não sei como fazer algo dessa potência ai, talvez tenha algum drive ai que faça isso... pelas minhas contas vai precisar de um resistor ai de 68R por 35~40W de potência pelo menos... Talvez alguém ai saiba te orientar melhor sobre isso... Pra 74.4V seria um resistor de 75R com 40W de potência... deve ter uma forma mais eficiente de fazer isso x) é muito calor jogado fora... Seria mais interessante você criar mais linhas em paralelo ai pra facilitar as coisas Se bobiar sai mais barato você usar uma resistência de chuveiro ai pra esse circuito
-
Circuito que pare de carregar baterias quando sua carga estiver completa
Carlos Zanon respondeu ao tópico de LucasMorgado em Eletrônica
Eu fiz uma coisinha rapida aqui e não sei se daria muito certo... mas a ideia é: O Zener é um 9.1v... e uma bateria de 9v carrega fica envolta de 9.7v, quando a bateria atinge 9.7v+, o zener consegue dar tensão suficiente pra base do transistor saturar e começar a conduzir, abaixo disso ele vai cortar forçando a bateria a carregar... Talvez alguém consiga te auxiliar melhor nisso que eu -
Se me permite complementar o tópico... chamamos isso ai de ternário. condição ? true : false é como se fosse... if(condicao) { true } else { false } Normalmente é usado pra esse tipo de situação aqui oh: if( x >= 10 ) { y = 40; } else { y = 20; } Dai você pode simplificar para: y = x >= 10 ? 40 : 20; Linguagens como PHP tem certos problemas de interpretação dai recomendo você usar parenteses y = ((x >= 10) ? 40 : 20);
-
C Função : Vetor e maior número lido.
Carlos Zanon respondeu ao tópico de Dafne Guimarães em C/C#/C++
Sugiro remover essa linha aqui. Ele está definindo o valor de 'maior' para a primeira posição do vetor a cada iteração do laço =) Se você inserir um vetor da seguinte forma: 8 9 4 3 2 1 2 3 4 5 Ele irá imprimir 8 como maior valor sendo que tem o 9 ali no meio :v -
Talvez um circuito step-up... mas a tensão está extremamente baixa... Não sei se vai conseguir subir a tensão só com 0.5v >~> aguarda ai que talvez mais alguém te ajude
-
Chave seletora de tensão para Cooler Fan
Carlos Zanon respondeu ao tópico de cesarssantosgamer em Eletrônica
PWM com 555 não seria uma opção? Fica menos gambiarra No lugar do M ali, coloca o cooler :v o "resistor" de 50k, é um potenciômetro você pode controlar a velocidade por ele =) -
Valor da corrente na carga e no transformador
Carlos Zanon respondeu ao tópico de Edgon em Eletrônica
@Edgraund Você pode ligar qualquer coisa que puxe até 1A do transformador (se não houver perdas)... acima disso vai começar a dar ruim :v -
Valor da corrente na carga e no transformador
Carlos Zanon respondeu ao tópico de Edgon em Eletrônica
@isadora ferraz aeuhaeuhaeuhaeuhaehuaehuaehauheaue agora que eu li, corrigido -
Valor da corrente na carga e no transformador
Carlos Zanon respondeu ao tópico de Edgon em Eletrônica
Está meio confuso o que você disse... Você quer saber o quanto o transformador consome e quanto ele consegue liberar para o circuito? Se for o quanto ele consegue liberar de corrente é 1A. Você pode usar esta formula aqui... Vp x Ip = Vs x Is Vp = Tensão do primário Ip = Corrente do primário Vs = Tensão do secundário Is = Corrente do secundário Quando o primário está em 110 e a carga está puxando 1A do transformador: 110 * Ip = 12 * 1 Ip = 12 / 110 Ip = 0.1090909 Ip =~ 110mA Quando o primário está em 220 e a carga está puxando 1A do transformador: 220 * Ip = 12 * 1 Ip = 12 / 220 Ip = 0.0545454 Ip =~ 54mA -
Circuito seletor tensão automático
Carlos Zanon respondeu ao tópico de Jaime Francisco da Silva em Eletrônica
Se você quiser... tem uma segunda opção mas usa mais componentes, sai mais caro, mas funciona da forma que eu gostaria na época que criei o tópico acima. 1x Rele 5v 2x Zener 5v6 1w (1n4734a) 1x Resistor 47 ohms 2w (da pra usar 1w, mas por segurança... usar 2) 1x Resistor 330 ohms 1/4w (Laranja Laranja Marrom) 1x Resistor 2k 1/4w (Vermelho Preto Vermelho) 1x Resistor 2k2 1/4w (Vermelho Vermelho Vermelho) 2x Resistor 4k7 1/4w (Amarelo Roxo Vermelho) 1x Resistor 10k 1/4w (Marrom Preto Laranja) 1x Capacitor Eletrolitico 220uF - 25v 2x Transistores PNP BC558 1x LM358 1x Transformador 200mA Primario 220v : Secundário 12v 1x Ponte retificadora W10 (1kV 1.5A) ou 4x diodo 1n4004 ou 1n4007 O Relé somente é acionado quando o circuito for ligado em 110v. (90v~180v) Acima disso, o rele deixa de ser acionado. A Opção do @Mestre88 é bem mais barata e funciona bem só tem a diferença de que o rele é acionado quando está em 220v. -
Circuito seletor tensão automático
Carlos Zanon respondeu ao tópico de Jaime Francisco da Silva em Eletrônica
O Mestre outro dia me sugeriu um circuito :v Funcionou bem, dai fui tentar fazer umas mudanças mas sem sucesso -
Componentes para fazer chave para acionar relé
Carlos Zanon respondeu ao tópico de FERNANDO PEDERSEN em Eletrônica
Eu tinha um esquema salvo aqui de um tempinho que eu tava estudando comparadores Eu usei ali no lugar da chave, um fototransistor IR e um flip-flop tipo "D" pra fazer o ON/OFF a cada click. O POT ali em baixo, usei um trimpot de 1k pra ajustar sensibilidade e coloquei um resistor (4k7 ou 10k, não me lembro) antes do sensor também (just-in-case) Como a questão é ventilador, você poderia melhorar o esquema usando algum 555 da vida pra manter o relé ativo por alguns instantes para ele não ficar ligando e desligando toda hora... Por exemplo, ele liga e fica ativo por pelo menos 2 minutos antes de ser desligado por conta da temperatura baixar... mas ai é contigo =) -
Como utilizar um transistor antes da carga como chave?
Carlos Zanon respondeu ao tópico de Eduardo Lima Nascimento em Eletrônica
Aqui no fórum mesmo já tem a resposta... de uma olhada aqui Em resumo, você precisa calcular o resistor na base do transistor =)
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais