Ir ao conteúdo
  • Cadastre-se

Bruno R Ruinho

Membro Pleno
  • Posts

    119
  • Cadastrado em

  • Última visita

Tudo que Bruno R Ruinho postou

  1. A placa-mãe IE-G31TM7 é baseada no chipset Intel G31 e suporta processadores Intel Core 2 Quad/Core 2 Duo/Pentium Dual-Core. Em relação à capacidade de memória, a IE-G31TM7 geralmente suporta até 4GB de memória DDR2. Hoje em dia não tem muito o que fazer com 4Gb de ram mesmo que você trocasse o processador para um core2quad e colocasse um SSD. No entanto, é importante notar que a placa-mãe IE-G31TM7 é mais antiga, e a interface PCIe pode ser limitada a velocidades mais baixas em comparação com placas-mãe mais recentes. Portanto, embora a adição da GTX 750 traga melhorias, o desempenho pode não atingir o máximo potencial da placa de vídeo devido às limitações da placa-mãe mais antiga. Mesmo assim, ainda deve proporcionar uma melhoria notável em comparação com os gráficos integrados.
  2. Bom Dia/Tarde/Noite a todos! Tenho um Optiplex 9020 já andei fazendo alguns upgrades nele, coloquei um SSD de 500Gb e 2 x 8gb Kingston. porém esse gabinete é o SFF poucas coisas cabem nele gostaria de encontrar uma placa de vídeo low profile, boa para rodar jogos mas se conexão de fonte pois essa fonte da Dell não tem mais saídas. Encontrei essas: - Placa de Vídeo RX 6400 Gaming Sapphire Pulse AMD Radeon, 4GB GDDR6, HDMI e DisplayPort, Low Profile - PLACA DE Vídeo ASRock INTEL ARC A380 LOW PROFILE, 6GB, GDDR6, 96-BIT, 90-GA46ZZ-00UANF porém uma esta ~700 e a outra 900, o que me dizem? Não sei se seria interessante adquirir mais 2x8gb... A Dell bloqueia a maioria dos aplicativos de monitoramento como Everest, Afterburner não consigo dar mais detalhes... Tenho um PC parado Xeon 5450 com 8gb de ram, e uma fonte CX500 poderia ser uma opção mudar de gabinete para ter uma fonte melhor e com mais saídas. Segue o CPUZ: Esta aparecendo Single Channel mas já arrumei isso para Dual Channel...
  3. Vou ter que pesquisar outro processador, não quero gastar muito em um upgrade, é para um PC de uso cotidiano sem jogos. Algo mais básico mas que seja rápido.
  4. Boa noite a todos! E feliz ano novo! Gostaria de uma recomendação de placa-mãe da gigabyte que tenha entrada para M.2 porém com o processador AMD A6-7480. Não estou encontrando, acredito que já é um processador antigo por isso não acho placa-mãe.
  5. Quanto a solda, não tem problema, pois antes de você arrumar a solda já estava la antes, A menos que por algum descuido você engula o mic, mas isso vai causar outros problemas. Brincadeira... A fumaça que é liberada é do fluxo que tem no estanho, não tem problema em inalar momentaneamente, vai tossir e tal, mas sem perigo. Se aquecesse a 2600º C o estanho ele ia entrar em ebulição e essa fumaça sim poderia causar mal. O estanho contem chumbo, se ingerido acredito que pode ter alguma complicação, agora em contato com a lingua por acidente não sei dizer, pois (eu) quando vou soldar alguma coisa e tenho que esticar o estanho que esta naqueles rolinhos, eu puxo com a boca...
  6. Boa Noite! Estou vendo em vários videos no youtube sobre as placas mãe de mineração, praticamente todos falam que não precisa de uma placa-mãe e processador f0d@ pois o processamento vem da placa de vídeo correto? Então posso pegar placas mãe que tenham PCIe 16x, 1x e usar o adaptador riser tranquilamente? Ex: GA-G31M-ES2L com um DualCore e 2 GB de ram ? Expansion Slots:  1 x PCI Express x16 slot  1 x PCI Express x1 slot  2 x PCI slots Quero validar a mineração antes de investir em uma placa de video, tenho uma GTS 450 - 2Gb , (sei que nao vai dar quase nada) Alguém poderia me dar um norte com relação a placa-mãe?
  7. Vai ter que lixar novamente, passar o primer, lixar com lixa d'agua e pintar
  8. @Tavaares00 sim gostei , mas no futuro pretendo colocar um M2 e a placa que me indicou não da suporte, fora que nao tenho a grana a vista . Agora não sei se espero e junto a grana a vista ou se parcelo no cartão, a diferença é boa!
  9. Excelente, vou desse combo, a memória posso comprar somente uma, a outra seria obrigatório ser igual. As Corsair falaram que não estão mais aquela qualidade, indica outra? Obrigado a todos.
  10. Boa Noite a todos! Meu computador já sofreu vários upgrades durante esse tempo, ja chegou no limite do upgrade, hoje ele esta assim: Biostar G41-M7 (ultima atualização da BIOS 2009...kkk) Memoria 4Gb-2x2Gb DDR2 (maximo suportado) Core 2 Quad (não é o maximo suportado, mas hoje em dia nao consigo encontrar nenhum outro) SSD 120Gb (deu uma melhora significativa, mas fazem 2 anos já) Fonte Corsair 500w (acho 80 plus) Zotac GTS 450 2Gb 4Tb - WD Faz muito tempo que a LAN-on nao conecta mais, ja verifiquei na bios, formatei vairas vezes, mesmo com drive correto nao reconhece cabo nenhum. Semana passada a Lan OFF queimou devido a chuva, nao acende mais nada, nao reconhece nada, queimou mesmo. adquiri um adaptador wifi pois uma placa PCI estava o mesmo preço eu poderia usar ele futuramente para outras coisas, Mas ele nao reconhecia de jeito nenhum, testei no note, tudo ok. Formatei o PC, depois disso ele apareceu, mas cada vez que iniciava ele nao conectava tinha que ficar plugando o USB para reconhecer. Nao gosto de usar o PC nessas condições, tem que ligar e estar tudo ok sem precisar de gambiarra... Estou usando o PC para trabalho, Promob e Sketchup, roda ate bem, WIN 7 Enteprise (nao tentei instalar outros) mas preciso usar o Fusion 360 e Cura, acho que nao vai dar mais conta... Iria aproveitar: Fone, SSD, Placa de video (nao sei se a minha GTS 450 é compativel) e Futuramente um upgrade de um M2 e mais um pente de memoria. Me deparei com o: Kit Processador AMD Ryzen 5 1600, Cache 19MB, 3.2GHz + Placa-Mãe Gigabyte B450M DS3H, AMD, mATX, DDR4 que esta 1550,00 + Memória Corsair Vengeance LPX, 8GB, 2400MHz, DDR4 - CMK8GX4M1A2400C16 - 365,00 Esse kit é compativel com a minha placa de video? se for fico com um PC novo e gastando no maximo 1950. Aguardo sujestoes. Obrigado!!
  11. explique o que quer fazer com isso ?
  12. Compre um conversor step down de mesma potencia / corrente da fonte que vai ser utilizada, se for ATX de 300W, compre um StepDown de 300W. Esse que postou é para coisas bem suaves. tipo o led que nosso amigo falou. A parte dos potenciometros segue normal com voltimetro ou sem. Estou querendo fazer o mesmo com uma fonte minha da Corsair, de 450W, esta dando choque e mesmo com aterramento devido esta derrubando meu DR, entao vai virar uma fonte de bancada logo mais. Nao se esqueça do resistor na linha de 5V
  13. @MARCOS V RAMBO Conseguiu algum avanço em seu projeto, poste aqui para nós, com fotos!!
  14. O Circuito proposto é este, aumentando o numero de TIPs, aumenta a conrrente, lembrando também da ponte retificadora e o banco de capacitores (que será enorme....kkk). Meu medo nessa corrente é, caso encoste uma ponta na outra acidentalmente, o que vai ocorrer no circuito com 30A Lembrando que seu projeto é reaproveitar o transformador recuperado, o meu também será, mesmo que o valor gasto saia mais que uma fonte comercial, sem escrúpulos para executar esse projeto. Mas estava navegando pelo Aliexpress e me deparei com essa fonte: Aqui só esta a frontal controladora, é uma excelente escolha com um acabamento de encher os olhos, estou na mira dessa compra faz tempo!!!!!
  15. Amigo acho que falta pesquisa e estudo de sua parte, mas vamos deixar isso para lá pois esta sua a afirmação que uma fonte chaveada é mais simples de trabalhar que uma fonte linear não vai levar a nada... Colega @MARCOS V RAMBO em 2011 o nosso amigo @faller postou está fonte e rendeu vários aprendizados e discussões sobre o desenvolvimento, muito interessante: https://www.clubedohardware.com.br/forums/topic/871394-fonte-de-alimentação-ajustável-12-a-20v-x-10a-primeira-parte-montagem/ Antes que alguém fale que essa fonte é de 10A e você quer utilizar 30A (sabendo que seu trafo vai entregar próximo aos 60A, pois isso não tem como reduzir, e sim limitar) É somente adicionar mais transistores de potência em paralelo! ( Simplifiquei demais essa parte...kkk) Estou querendo fazer o mesmo que você com o transformador apresentado neste tópico: https://www.clubedohardware.com.br/forums/topic/1448656-tutorial-como-descobrir-a-corrente-de-um-transformador/?tab=comments#comment-7786670 Já encontrei o circuito mas ainda não tive tempo para testar. Porém meu trafo é de 20A. Outro tópico que já está em andamento que pode ser retirado ideias é: https://www.clubedohardware.com.br/forums/topic/1461577-fonte-ajustável-com-lm317-potênciômetro-do-divisor-de-tensão/page/1/?tab=comments#comment-7841435 do @ls.bastos
  16. @GuilhermeGB Poderia exemplificar melhor onde as fontes lineares de alta corrente não são ajustaveis ?? De uma pesquisada nas fontes da Tektronix... HP....
  17. @Renato.88 é correto isso que apresentei, seguindo seus calculos ??
  18. Mas no caso de comprar-mos um transformador comercial (esses que são feitos sob medida a pedido do cliente) Ex: 0-20v / 5A, >>>> 5÷1,4142 = 3,5A ele já esta compensado ou temos que mandar enrolar acima, para tem uma corrente final de 5A? Sendo assim seria uma corrente de 7A para obternos os 5A eficaz(ou bem proximo). 7÷1,4142 = 4,94A
  19. Boas pessoal do Forum! Com esse COVID-19 e precisando ficar em casa... Isolamento social e tal, peguei para ler varios posts antigos aqui no forum, ver soluções do passado para aplicar agora, ter ideiasnovas sobre projetos antigos. Estava concentrado no post do Faller sobre a "fonte de alimentação primeira parte" (que foi em 2011 estou esperando a segunda parte ate hoje...kkk ficou TOP aquela fonte!). Foram mais de 25 paginas naquele topico recomendo a todos a darem uma lida!!! https://www.clubedohardware.com.br/forums/topic/871394-fonte-de-alimentação-ajustável-12-a-20v-x-10a-primeira-parte-montagem/ Entre todos os outros topicos que estava lendo, achei um que varias pessoas passaram pela mesma dificuldade, e com toda a paciencia foram respondidas infinitamente pelos mesmos membros renomados aqui presente. Os topicos eram + - : "TENHO UM TRANSFORMADOR XXX QUE RETIREI DE TAL LUGAR MAS NAO SEI A CORRENTE" "TINHA UM VIDEO GAME ANTIGO E RETIREI O TRAFO DELE E QUERIA USAR PARA OUTRA COISA" e por ai vai... Com essa ideia e juntando que eu tinha um "meio Nobreak" parado aqui,(trafo+placa) com aquele pensamento : "não vou jogar fora pois esse transformador é grande e posso aproveitar algum dia" E este belo dia chegou...!! kkkk Segue algumas imagens: Retirei a primeira camada de papelão pois estava na duvida sobre a entrada, como era de um nobreak ele fazia a função de estabilizador tambem, logo eu teria um fio comum e o restante seriam TAPs. Não encontrei chave seletora de entrada, então acredito que seja comutação automatica (127/220). Como o fio preto estava ligado a uma das fases da tomada de saida "penso eu" que seria o fio "comum" . Fiz um desenho arbitrario dos enrolamentos primario e secundario >>>>> Medição da entrada>>>> Resultado (tabela abaixo, valores em ohms) entre os fios, chegado assim a conclusão nenhuma com essa medição, pois os valores são muito proximos. >>>>> Agora sim a parte BOA, medir com alimentação! Pegando o fio Preto como "comum" segue a sequencia de valores das tensões>>>>> Com essa tabela, consigo selecionar a tensão de saida que mais se adequa a aproveitar o trafo para uma futura fonte de bancada, sabendo que a saida retificada e filtrada é igual: Vpico = Veficaz*raiz quadrada de 2 Escolhida foi : ENTRDA: PRETO + VERMELHO SAIDA: PRETO + BRANCO = 29,5V Ficando assim: Veficaz = 29,5v Vpico = 29,5 * 1,4142 Vpico = 41,71v Tensão excelente para fazer uma fonte variavel ate 35V, porque após esse valor eu nao vejo mais uso. porém vai ser limitada pelo circuito, sendo assim se alguem encotrar algum Trafo com essas caracteristicas podem ficar livres para escolher a tensão que mais lhe adequar. Vamos agora aos testes de descobrir a corrente que esse Trafo pode entregar, vou adotar aqui a mesma queda de tensão já adotada pelo @faller, que são os 10% da tensão eficaz. (26,5V) Fiz um cabo com fio de 4mm somente para esta aplicação (particularmente ficou muito bom!) >>>> PRIMEIRA LIGAÇÃO>> LIGAR O TRAFO NA RESISTENCIA(Encontre uma resistencia já queimada, de chuveiro mesmo, é melhor...kkkk) SEGUNDA LIGAÇÃO>> MULTIMETRO NA RESISTENCIA (já na escala de tensão alternada 200v) COLOCAR O CONJUNTO DENTRO DA AGUA>> ENERGIZAR O CONJUNTO (MUITO CUIDADO NESSE MOMENTO!!!!) Já podem ver a pequena queda de tensão em cima da resistencia. (TENSÃO INICIAL 29,5V) DURANTE O PINÇAMENTO DAS ESPIRAS, A RESISTENCIA ACABOU QUEBRANDO NOS TERMINAIS, MAS NADA QUE VÁ ATRAPALHAR NO TESTE! SEGUE O TESTE DO PINÇAMENTO, PODEMOS VER QUE A TENSÃO CAIU NOS 10%, LEMBRANDO QUE A TENSÃO INICIAL ERA DE 29,5v AGORA TEMOS>>>>>>>>>>>>> NESTE PONTO O SOM DA CORRENTE PASSANDO PELA RESISTENCIA É DE ASSUSTAR.... KKKK PARECE MESMO QUANDO voce FECHA O REGISTRO DO CHUVEIRO NA EPOCA DO FRIO, E DEIXA SOMENTE AQUELE FIOZINHO DE AGUA PASSANDO... CONTINUANDO..... COMO EU SOU MALUCO(E ESTAVA QUERENDO COMPRAR OUTRO MULTIMETRO!) >>> AO invés DE PEGAR O PONTO DA RESISTENCIA E MEDIR EM OHMS. RESOLVI TESTAR NA ESCALA DE CORRENTE MESMO!!!! (LEMBRANDO QUE ISSO NUNCA DEVE SER FEITO POIS NÃO SABEMOS QUAL CORRENTE ESTA PASSANDO PELO CIRCUITO, SENDO ESSE PROCEDIMENTO ALTAMENTE ARRISCADO!!!!) Corrente de 19,66A Excelente!!!! Caso for fazer esse teste lembre-se que para medir corrente os cabos tem que ser alterados, abrindo o circuito e colocando o multimetro no meio... (CONTINUO NAO RECOMENDADO!!!!!!!!!!!!!) AGORA FAZENDO DO JEITO CORRETO, E SEGURO! PINÇAMOS COM O MULTIMETRO NA ESCALA DE OHMS, OS PONTOS EXATOS QUE PEGAMOS A CORRENTE DE 19,66A >>>> Qual resistencia nos temos???? Já sabendo que a tensão é 29,5v e a corrente 19,66A Logo >>>>>>> Lei de Ohm: I = V / R I = 29,5 / 1,5 I = 19,6666A Antes de sabermos a resisitencia: R = V / I R = 29,5 / 19,66 R = 1,5 ohms LINDA ESSA LEI DE OHM!!! KKKKKK Testes finalizados, espero ter exclarecido alguma coisa para alguem, se quiserem aproveirar trafos de outros lugares para montar fontes de alimentação, ou qualquer outra ideia, este é o procedimento basico que tem que ser feito. Final do meu trafo: Tensão: 29V Corrente: 19A Agora vou em busca de um circuito de fonte de alimentação variavel de 0-35V com uma corrente variavel de 0-10~15A pois para segurar essa corrente vai dar um trabalho!!! Pois fontes com corrente variavel é complicado de se encontrar, e muitos ainda questionam o motivo pelo qual variar a corrente, mas isso é assunto para outro topico! Obrigado a Todos!!! Tem duas imagens abaixo que nao querem sair... favor desconsiderar.... kkkk
  20. Bem, estou desenvolvendo um alarme para minha casa, o que preciso fazer é o seguinte: Coloquei um sensor de abertura do portão para quando eu chegar de carro, e gostaria de colocar um tempo de 30 segundos para desarme do alarme sem que o mesmo disparasse... Algo como "Invasão detectada" digite a senha... 30...29..28...... Para acionar eu consegui fazer, para acionar o alarme ele me da X segundos para que seja ativado, mas o inverso disso não consegui fazer pois fica travado dentro do "WHILE" e trava o teclado (claro....) porém o que fiz ele já dispara e já entra na função de senha , apos digitar a senha ele desliga, tentei usar o millis() o timerOne, mas sem sucesso , alguma sugestão de como eu executo esses "30" segundos sem o teclado travar no delay ou while ?? Estou na pesquisa ainda.... se eu usar um for dessa maneira: for (int i = 0; i < 30; i++) { ativa_alarme() } Esta correto?
  21. não estava dando certo pois estava colocando ações muito longa dentro da interrupção. então modifiquei para ficar parecido com a função do millis> //============================= declaração de variaveis =============================== //*************************************************************************************// unsigned int sensor_dht=0; //armazena o contador de tempetarura/umidade unsigned int temp_dht=2; //armazena o tempo de leiura da temperatura //============================ configurações de iniciais ============================== //*************************************************************************************// pinmode(2,input); //entrada do sinal de interrupção do rtc rtc.writesqwpinmode(ds1307_squarewave1hz); // seta o pino sqw do rtc para frequencia de 1hz attachinterrupt(0,leitura_sensor,rising); // interrupção do rtc no pino 2 //============================ configurações de loop ================================== //*************************************************************************************// void loop(){ if(sensor_dht >= temp_dht){ //se "sensor" é maior ou igual a "temp_dht" dht1.read11(dht11_pin); //se sim, le o sensor dht sensor_dht = 0; //zera a variavel } lcd.createchar(1,thermometro); //cria caractere do termometro e grava na posição 1 lcd.setcursor(1,2); //posiciona cursor na coluna 2 e linha 3 lcd.write(byte(1)); //escreve caratere gravdo na posição 1 lcd.setcursor(2,2); lcd.print(dht1.temperature,0); //escreve a teperatura no lcd, sem casas decimais (temperature,0) lcd.setcursor(4,2); lcd.write(byte(223)); //escreve caractere de °grau lcd.createchar(2,gota); //cria caractere de "gota" e grava na posição 2 lcd.setcursor(15,2); lcd.write(byte(2)); //escreve caratere gravdo na posição 2 lcd.setcursor(16,2); lcd.print(dht1.humidity,0); //escreve a umidade no lcd, sem casas decimais (humidity,0) lcd.setcursor(18,2); lcd.write("%"); //escreve caractere de porcentagem } void leitura_sensor(){ //FUNÇÃO DA INTERRUPÇÃO sensor_dht++; //INCREMENTA +1 A VARIAVEL } //FINAL DA FUNÇÃO DE INTERRUPÇÃO funcionando perfeitamente, faz a leitura a cada 2 segundos! obrigado a todos!
  22. Obrigado pelos esclarecimentos!! Consegui fazer o RTC me retornar 1Hz: RTC.writeSqwPinMode(DS1307_SquareWave1HZ); mas ainda tenho um problema, a interrupção acontece pois o led no pino 10 fica mudando de estado, mas a leitura do sensor DHT não atualiza.... attachInterrupt(0,leitura_temp,RISING); void leitura_temp() { DHT1.read11(DHT11_PIN); digitalWrite(10, !digitalRead(10)); }
  23. Vou fazer o video e posto aqui, mas ainda segue a minha duvida, o trecho do codigo>>> void leitura_temp() { if ((millis() - delayIntervalo) > intervalo) { //delayIntervalo => ARMAZENA O TEMPO DE COMPARAÇÃO COM MILLIS unsigned long start = micros(); //intervalo=> INTERVALO DE LEITURA DO SENSOR DTH - esta setado para 2000ms int chk = DHT.read11(DHT11_PIN); unsigned long stop = micros(); delayIntervalo = millis(); }; } //FINAL DA FUNÇÃO LEITURA TEMPERATURA porém ao final de ~48 dias vai acontecer o ovewflow e será zerada, mas a minha variavel delayIntervalo estará carregada com o ultimo valor de millis, sendo assim a leitura ficará travada, assim como todo o resto que esta usando o millis. Já vi exemplos que usam o Timer1 com interrupção por overflow. Mas nao faço ideia..... Tem o RTC no circuito mas não faço ideia de como utilizar o tempo dele (imagino que dos segundos) para fazer a leitura do sensor. E dar um reset no Arduino antes do Millis estourar?
  24. Erro meu, este que desenhei é o de umidade do ar e temp, o higrometro eu nao encontrei, estava apanhando do Fritzing Eu me expressei mal, as luzes só vão ter o controle de tempo, ligada 24Horas, / ligada 12horas desligada 12horas / ligado 8h desligados 16h.....para simular as epocas do ano, exemplo que no inverno a irradiação do sol são mais curtos, intensidade estará sempre no 100% Para o tempo de medição dos sensores, estou pensado em usar os segudos do RTC mas estou travado ainda como transformar isso em função/código. Penso em escrever parecido com o Millis mas utilizando o now.second, acho que estou na linha certa Entrei para ver, vou precisar de um tutorial no Youtube, em primeira vista, nao entendi muito..... kkkk ainda nao, wireless seria na versão da estufa 5.0 ..... estou na versão 0.5....kkkkkkkkkk Dei uma melhorada no fonte, ainda baseando no millis, fazendo a leitura da temperatura/umidade e a umidade do solo, desconsidere o diagrama acima, pois tive que alterar algumas portas para fazer a leitura analogica. Fonte alterado nas linhas 167 ate 209, comentei mais linhas para ficar o mais claro do que esta acontecendo. /* ============================================================================================================= ============================================================================================================= */ //*************************************************************************************// //============================= DECLARAÇÃO DE BIBLIOTECAS ============================= #include <LiquidCrystal_I2C.h> //BIBLIOTECA DE LCD POR I2C #include <Wire.h> //BIBLIOTECA PARA COMUNICAÇÃO COM I2C #include <RTClib.h> //BIBLIOTECA DO RTC DS1307 #include <dht.h> //BIBLIOTECA DO SENSOR DTH //*************************************************************************************// //============================= DECLARAÇÃO DE CONSTANTES ============================== //*************************************************************************************// LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); RTC_DS1307 RTC; dht DHT; //*************************************************************************************// //============================= MAPEAMENTO DE HARDWARE ================================ //*************************************************************************************// #define bt_dir 2 //BOTÃO DA DIREITA #define bt_esq 3 //BOTÃO DA ESQUERDA #define bt_enter 4 //BOTÃO ENTER #define bt_down 5 //BOTÃO DOWN #define bt_up 6 //BOTÃO UP #define bt_esc 7 //BOTÃO ESC #define saida 8 //BOMBA DE IRRIGAÇÃO #define Relay 10 //RELE LAMPADA #define analog_sens A1 //SENSOR DE UMIDADE DO SOLO #define bomba 9 //BOMBA DE IRRIGAÇÃO #define DHT11_PIN 12 //SENSOR DTH //*************************************************************************************// //============================= DECLARAÇÃO DE VARIAVEIS =============================== //*************************************************************************************// byte menu_num = 1, sub_menu = 1; //FLAGS PARA OS MENUS PRINCIPAIS byte submenu1 = 1, submenu2 = 1; //FLAGS PARA OS SUBMENUS byte t_bt_down, t_bt_up; //FLAGS PARA ARMAZENAR OS ESTADOS DOS BOTÕES byte set_full=1; //FLAG PARA MANTER O RELÊ LIGADO int hourupg=0; //ARMAZENA HORA - INICIA COM 0 int minupg=0; //ARMAZENA MINUTOS - INICIA COM 0 int dayupg=1; //ARMAZENA DIA - INICIA COM 1 int monthupg=1; //ARMAZENA MÊS - INICIA COM 1 int yearupg=0; //ARMAZENA ANO - INICIA COM 0 int menu=0; //ARMAZENA O ESTADO DO MENU DENTRO DO SWITCH CASE int set_on=0; //ARMAZENA A HORA DE LIGAR O RELÊ int set_off=0; //ARMAZENA A HORA DE DESLOGAR O RELÊ int adc_value=0; //ARMAZENA VALOR DA UMIDADE DO SOLO - INICIA COM 0 int intervalo=2000; //INTERVALO DE LEITURA DO SENSOR DTH int intervalo2=5000; //INTERVALO DE LEITURA DO SENSOR DE SOLO String fotoperiodo; //ARMAZENA A STRING DO FOTO PERIODO "24h" , "18h" , "12h" , OFF String umidade_solo; unsigned long delayIntervalo; //ARMAZENA O TEMPO DE COMPARAÇÃO COM MILLIS unsigned long tempo=0; //ARMAZENA int level1=350; int level2=450; int level3=880; byte thermometro[8] = { //SIMBOLO TERMOMETRO B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110}; byte gota[8] = { //SIMBOLO GOTA-UMIDADE B00100, B00100, B01110, B01110, B11111, B11111, B11111, B01110}; byte sol_sym[8] = { //SIMBOLO SOL B00100, B10001, B01110, B11111, B01110, B10001, B00100, B00000 }; //*************************************************************************************// //============================ CONFIGURAÇÕES DE INICIAIS ============================== //*************************************************************************************// void setup() { pinMode(bt_dir, INPUT_PULLUP); //CONFIGURA COMO ENTRADA E SETA RESISTORES DE PULLUP INTERNOS pinMode(bt_esq, INPUT_PULLUP); // pinMode(bt_enter, INPUT_PULLUP); // pinMode(bt_down, INPUT_PULLUP); // pinMode(bt_up, INPUT_PULLUP); // pinMode(bt_esc, INPUT_PULLUP); // pinMode(analog_sens, INPUT); //COMFIGURA COMO ENTRADA ANALOGICA pinMode(Relay, OUTPUT); //CONFIGURA COMO SAIDA pinMode(bomba, OUTPUT); //CONFIGURA COMO SAIDA pinMode(saida, OUTPUT); //CONFIGURA COMO SAIDA lcd.begin(20, 4); //INICIA COMUNICAÇÃO COM LCD E SETA LCD20x4 Wire.begin(); //INICIA COMUNICAÇÃO WIRE RTC.begin(); //INICIA COMUNICAÇÃO COM MODULO RTC } //FINAL DO SETUP //*************************************************************************************// //============================ CONFIGURAÇÕES DE LOOP ================================== //*************************************************************************************// void loop() { leitura_temp(); //CHAMA FUNÇÃO DE LEITURA DE TEMPERATURA keyboard(); //CHAMA FUNÇÃO DE LEITURA DE TECLADO read_humidity(); //CHAMA FUNÇÃO DE LEITURA DE UMIDADE DO SOLO switch(menu_num) //SWITCH DO MENU { case 1: resumo(); break; case 2: iluminacao(); break; case 3: temperatura(); break; case 4: umidade(); break; case 5: ajuste_relogio(); break; } //FINAL DO SWITCH } //FUNAL DO LOOP //*************************************************************************************// //=========================== DESENVOLVIMENTO DAS FUNÇÕES ============================= //*************************************************************************************// void keyboard() { if(!digitalRead(bt_up)) t_bt_up = 0x01; //BOTÃO UP PRESSIONADO? SETA A FLAG if(!digitalRead(bt_down)) t_bt_down = 0x01; //BOTÃO DOWN PRESSIONADO? SETA A FLAG if(digitalRead(bt_up) && t_bt_up) //BOTÃO UP SOLTO E FLAG SETADA? { //SE SIM... t_bt_up = 0x00; //LIMPA FLAG lcd.clear(); //LIMPA LCD menu_num++; //INCREMENTA MENU if(menu_num > 0x05) menu_num = 0x01; //SE MENU FOR MAIOR QUE 5, MENU VOLTA A SER 1 } //FINAL BOTÃO UP (bt_up) if(digitalRead(bt_down) && t_bt_down) //BOTÃO DOWN SOLTO E FLAG SETADA? { //SE SIM... t_bt_down = 0x00; //LIMPA FLAG lcd.clear(); //LIMPA LCD menu_num--; //DECREMENTA MENU if(menu_num < 0x01) menu_num = 0x05; //SE MENU FOR MENOR QUE 1, MENU VOLTA A SER 5 } //FINAL BOTÃO DOWN (bt_down) if(!digitalRead(bt_enter)) //BOTÃO ENTER PRESSIONADO? { //SE SIM... delay(150); //AGUARDA 150ms lcd.clear(); if(sub_menu <= 2) sub_menu ++; //SE sub_menu FOR MENOR OU IGUAL A 2, INCREMENTA sub_menu } //FINAL BOTÃO ENTER (bt_enter) if(!digitalRead(bt_esc)) //BOTÃO ESC PRESSIONADO? { //SE SIM... delay(150); //AGUARDA 150ms if(sub_menu > 0) sub_menu --; //SE sub_menu FOR MAIOR QUE 0, DECREMENTA sub_menu } //FINAL BOTÃO ESC (bt_esc) } //FINAL DA FUNÇÃO KEYBOARD void leitura_temp() { if ( (millis() - delayIntervalo) > intervalo ) { //LEITURA DOS DADOS unsigned long start = micros(); int chk = DHT.read11(DHT11_PIN); unsigned long stop = micros(); delayIntervalo = millis(); }; } //FINAL DA FUNÇÃO LEITURA TEMPERATURA void read_humidity() { if((millis()- tempo) >= intervalo2) { tempo = millis(); adc_value = analogRead(analog_sens); } if (adc_value > 0 && adc_value < level1) //identifica nível de umidade 5 { umidade_solo = String("Umido "); digitalWrite(bomba,LOW); } // ================================================================ else if (adc_value > level1 && adc_value < level2) //identifica nível de umidade 3 { umidade_solo = String("Umd. Media "); digitalWrite(bomba,LOW); } // ================================================================ else if (adc_value > level2 && adc_value < level3) //identifica nível de umidade 2 { umidade_solo = String("Umd. Minima"); digitalWrite(bomba,HIGH); } // ================================================================ else if (adc_value > level3 && adc_value >= 1000) //identifica nível de umidade 3 { umidade_solo = String("Seco "); digitalWrite(bomba,HIGH); } } void resumo() //INICIO DA TELA PRINCIPAL { DateTime now = RTC.now(); lcd.setCursor(0,0); lcd.print("====== ESTUFA ======"); lcd.setCursor(0,1); if (now.hour()<=9) //SE A HORA FOR MENOR OU IGUAL A 9 { lcd.print("0"); //SIM... MOSTRA "0" NA FRENTE } lcd.print(now.hour(), DEC); //GET HORA DO RTC E MOSTRA NO LCD hourupg=now.hour(); lcd.print(":"); //ADICIONA ":" ENTRE HORA E MINUTO if (now.minute()<=9) //SE O MINUTO FOR MAIOR OU IGUAL A 9 { lcd.print("0"); //SIM... MOSTRA "0" NA FRENTE } lcd.print(now.minute(), DEC); minupg=now.minute(); //GET MINUTOS DO RTC E MOSTRA NO LCD //=====================segundos lcd.print(":"); if (now.second()<=9) //SE O DIA FOR MENOR OU IGUAL A 9 { lcd.print("0"); //SIM... MOSTRA "0" NA FRENTE } lcd.print(now.second(), DEC); //=====================segundos lcd.setCursor(15, 1); if (now.day()<=9) //SE O DIA FOR MENOR OU IGUAL A 9 { lcd.print("0"); //SIM... MOSTRA "0" NA FRENTE } lcd.print(now.day(), DEC); dayupg=now.day(); //GET DIA DO RTC E MOSTRA NO LCD lcd.print("/"); //ADICIONA "/" ENTRE DIA E MÊS if (now.month()<=9) //SE O MÊS FOR MENOR OU IGUAL A 9 { lcd.print("0"); //SIM... MOSTRA "0" NA FRENTE } lcd.print(now.month(), DEC); monthupg=now.month(); //GET MÊS DO RTC E MOSTRA NO LCD lcd.createChar(1,thermometro); //CRIA CARACTERE DO TERMOMETRO E GRAVA NA POSIÇÃO 1 lcd.setCursor(1,2); //POSICIONA CURSOR NA COLUNA 2 E LINHA 3 lcd.write(byte(1)); //ESCREVE CARATERE GRAVDO NA POSIÇÃO 1 lcd.setCursor(2,2); lcd.print(DHT.temperature,0); //ESCREVE A TEPERATURA NO LCD, SEM CASAS DECIMAIS (temperature,0) lcd.setCursor(4,2); lcd.write(byte(223)); //ESCREVE CARACTERE DE °GRAU lcd.createChar(2,gota); //CRIA CARACTERE DE "GOTA" E GRAVA NA POSIÇÃO 2 lcd.setCursor(15,2); lcd.write(byte(2)); //ESCREVE CARATERE GRAVDO NA POSIÇÃO 2 lcd.setCursor(16,2); lcd.print(DHT.humidity,0); //ESCREVE A UMIDADE NO LCD, SEM CASAS DECIMAIS (humidity,0) lcd.setCursor(18,2); lcd.write("%"); //ESCREVE CARACTERE DE PORCENTAGEM if(now.second() >= 30 && now.second() < 35 ){ //SE HORA FOR MAIOR OU IGUAL A set_on E HORA FOR MENOR QUE set_off digitalWrite(Relay, HIGH); //SIM... LIGA RELÊ } lcd.createChar(3,sol_sym); //CRIA CARACTERE DE "SOL" E GRAVA NA POSIÇÃO 3 lcd.setCursor(8,2); lcd.write(byte(3)); //ESCREVE CARATERE GRAVDO NA POSIÇÃO 3 lcd.setCursor(9,2); lcd.print(fotoperiodo); //ESCREVE o que ESTA GRAVADO DENTRO DA STRING O QUAL FOTO-PERIODO ESTA SELECIONADO //INICO TESTE DE UMINDADE DO SOLO lcd.setCursor(2,3); lcd.print("Solo:"); lcd.setCursor(8,3); lcd.print(umidade_solo); //lcd.setCursor(7,1); //lcd.print(adc_value); } void iluminacao() { switch(sub_menu) { case 1: lcd.setCursor(0,0); //APRESENTA A PRIMEIRA TELA DE MENU lcd.print(">ILUMINACAO "); //ILUMINAÇÃO lcd.setCursor(0,1); lcd.print(" TEMPERATURA "); lcd.setCursor(0,2); lcd.print(" UMIDADE "); lcd.setCursor(0,3); lcd.print(" AJUSTE RELOGIO "); break; case 2: //SUBMENU DE ILUMINAÇÃO lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" ILUMINACAO "); lcd.setCursor(0,3); lcd.print(" "); switch(submenu1) { case 1: lcd.setCursor(0,2); lcd.print(" 24h >"); //MOSTRA AS opções DE FOTO-PERIODO if(!digitalRead(bt_dir)) {delay(150); submenu1 ++;} //BOTÃO DIREITO PRESSIONADO? SE SIM.. INCREMENTA submenu1 if(!digitalRead(bt_enter)){ //BOTÃO ENTER PRESSIONADO? lcd.clear(); //SE SIM... LIMPA LCD lcd.setCursor(0,0); lcd.print("SALVANDO..."); //MOSTRA "SALVANDO..." NO LCD digitalWrite(Relay, HIGH); //LIGA RELÊ fotoperiodo = String("24h"); //GRAVA "24h" DENTRO DA STRING delay(200); //AGUARDA 200ms set_full=0; //ZERA A FLAG set_full submenu2=1; //GRAVA 1 NA FLAG submenu2 PARA SAIR DO SUBMENU sub_menu=1; //GRAVA 1 NA FLAG sub_menu PARA SAIR DO SUB_MENU menu_num=1; //GRAVA 1 NA FLAG menu_num PARA IR A TELA PRINCIPAL } break; case 2: lcd.setCursor(0,2); lcd.print("< 12/12 >"); //MOSTRA AS opções DE FOTO-PERIODO if(!digitalRead(bt_dir)) {delay(150); submenu1 ++;} //BOTÃO DIREITO PRESSIONADO? SE SIM.. INCREMENTA submenu1 if(!digitalRead(bt_esq)) {delay(150); submenu1 --;} //BOTÃO ESQUERDO PRESSIONADO? SE SIM.. DECEMENTA submenu1 if(!digitalRead(bt_enter)) { set_on = 0; set_off = 30; lcd.clear(); lcd.setCursor(0,0); lcd.print("SALVANDO..."); fotoperiodo = String("12h"); delay(200); submenu2=1; sub_menu=1; menu_num=1; } break; case 3: lcd.setCursor(0,2); lcd.print("< 16/8 >"); if(!digitalRead(bt_dir)) {delay(150); submenu1 ++;} if(!digitalRead(bt_esq)) {delay(150); submenu1 --;} if(!digitalRead(bt_enter)) { set_on = 6; set_off = 50; lcd.clear(); lcd.setCursor(0,0); lcd.print("SALVANDO..."); fotoperiodo = String("18h"); delay(200); submenu2=1; sub_menu=1; menu_num=1; } break; case 4: lcd.setCursor(0,2); lcd.print("< OFF "); if(!digitalRead(bt_esq)) {delay(150); submenu1 --;} if(!digitalRead(bt_enter)) { set_on = 0; set_off = 0; set_full = 1; lcd.clear(); lcd.setCursor(0,0); lcd.print("SALVANDO..."); fotoperiodo = String("OFF"); delay(200); submenu2=1; sub_menu=1; menu_num=1; } break; } //Final Switch foto-periodo break; } } //Final Switch Iluminação void temperatura() { switch(sub_menu) { case 1: lcd.setCursor(0,0); lcd.print(" ILUMINACAO "); lcd.setCursor(0,1); lcd.print(">TEMPERATURA" ); lcd.setCursor(0,2); lcd.print(" UMIDADE "); lcd.setCursor(0,3); lcd.print(" AJUSTE RELOGIO "); break; case 2: lcd.setCursor(0,0); lcd.print(" Temperatura "); lcd.setCursor(1,2); lcd.print("Interno"); lcd.setCursor(11,2); lcd.print("Externo"); lcd.createChar(1,thermometro); lcd.setCursor(2,3); lcd.write(byte(1)); lcd.print(DHT.temperature,0); lcd.write(byte(223)); lcd.print("C"); lcd.createChar(1,thermometro); lcd.setCursor(12,3); lcd.write(byte(1)); lcd.print(DHT.temperature,0); lcd.write(byte(223)); lcd.print("C"); break; }//FINAL SUB_MENU } //end temperatura void umidade() { switch(sub_menu) { case 1: lcd.setCursor(0,0); lcd.print(" ILUMINACAO "); lcd.setCursor(0,1); lcd.print(" TEMPERATURA "); lcd.setCursor(0,2); lcd.print(">UMIDADE "); lcd.setCursor(0,3); lcd.print(" AJUSTE RELOGIO "); break; case 2: lcd.setCursor(0,0); lcd.print(" Umidade: "); lcd.setCursor(0,2); lcd.print("Leitura ADC:"); lcd.setCursor(13,2); lcd.print(adc_value); lcd.setCursor(0,3); lcd.print(umidade_solo); delay(1000); lcd.clear(); break; } } //end umidade void ajuste_relogio() { switch(sub_menu) { case 1: lcd.setCursor(0,0); lcd.print(" ILUMINACAO "); lcd.setCursor(0,1); lcd.print(" TEMPERATURA "); lcd.setCursor(0,2); lcd.print(" UMIDADE "); lcd.setCursor(0,3); lcd.print(">AJUSTE RELOGIO "); break; case 2: ajuste_sub(); break; } } //end ajuste_relogio void ajuste_sub() { switch(submenu2) { case 1: // ============ AJUSTE DA HORA =================================== lcd.clear(); //DateTime now = RTC.now(); if(digitalRead(bt_dir)==LOW) // Se P2 estiver em nivel logico baixo { if(hourupg==23) // Se "hourupg" for igual a 23 { hourupg=0; // "hourupg" passa a ser 0 } else { hourupg=hourupg+1; // Se não, incrementa +1 a "hourupg" } } if(digitalRead(bt_esq)==LOW) // Se P3 estiver em nivel logico baixo { if(hourupg==0) // Se "hourupg" for igual a 0 { hourupg=23; // "hourupg" passa a ser 23 } else { hourupg=hourupg-1; // Se não, decrementa -1 a "hourupg" } } lcd.setCursor(0,2); lcd.print("Ajustar Hora: ");// Escreve "Ajustar Hora" lcd.setCursor(0,3); lcd.print(hourupg,DEC); delay(200); if(!digitalRead(bt_enter)) {delay(150); submenu2 ++;} break; case 2: // ============ AJUSTE DOS MINUTOS ================================= lcd.clear(); if(digitalRead(bt_dir)==LOW) // Se P2 estiver em nivel logico baixo { if (minupg==59) // Se "minupg" for igual a 59 { minupg=0; // "minupg" passa a ser 0 } else { minupg=minupg+1; // Se não, incrementa +1 a "minupg" } } if(digitalRead(bt_esq)==LOW) // Se P3 estiver em nivel logico baixo { if(minupg==0) // Se "minupg" for igual a 0 { minupg=59; // "minupg" passa a ser 59 } else { minupg=minupg-1; // Se não, decrementa -1 a "minupg" } } lcd.setCursor(0,2); lcd.print("Ajustar Minutos:");// Escreve "Ajustar Minutos" lcd.setCursor(0,3); lcd.print(minupg,DEC); delay(200); if(!digitalRead(bt_enter)) {delay(150); submenu2 ++;} break; case 3: // ============ AJUSTE DIA ====================================== lcd.clear(); if(digitalRead(bt_dir)==LOW) // Se P2 estiver em nivel logico baixo { if(dayupg==31) // Se "dayupg" for igual a 31 { dayupg=1; // "dayupg" passa a ser 1 } else { dayupg=dayupg+1; // Se não, incrementa +1 a "dayupg" } } if(digitalRead(bt_esq)==LOW) // Se P3 estiver em nivel logico baixo { if(dayupg==1) // Se "dayupg" for igual a 1 { dayupg=31; // "dayupg" passa a ser 31 } else { dayupg=dayupg-1; // se não, decrementa 11 a "dayupg" } } lcd.setCursor(0,2); lcd.print("Ajustar Dia:");// Escreve "Ajustar dia" lcd.setCursor(0,3); lcd.print(dayupg,DEC); delay(200); if(!digitalRead(bt_enter)) {delay(150); submenu2 ++;} break; case 4: // ============ AJUSTE MÊS =========================================== lcd.clear(); if(digitalRead(bt_dir)==LOW) // Se P2 estiver em nivel logico baixo { if(monthupg==12) // Se "monthupg" for igual a 12 { monthupg=1; // "monthupg" passa a ser 1 } else { monthupg=monthupg+1; // Se não, incrementa +1 a "monthupg" } } if(digitalRead(bt_esq)==LOW) // Se P3 estiver em nivel logico baixo { if(monthupg==1) // Se "monthupg" for igual a 1 { monthupg=12; // "monthupg" passa a ser 12 } else { monthupg=monthupg-1; // Se não, decrementa -1 a "monthupg" } } lcd.setCursor(0,2); lcd.print("Ajustar Mes:"); // Escreve "Ajustar Mes" lcd.setCursor(0,3); lcd.print(monthupg,DEC); delay(200); if(!digitalRead(bt_enter)) {delay(150); submenu2 ++;} break; case 5: // ============ AJUSTAR ANO =================================== lcd.clear(); if(digitalRead(bt_dir)==LOW) // Se P2 estiver em nivel logico baixo { yearupg=yearupg+1; // Incrementa +1 a "yearupg" } if(digitalRead(bt_esq)==LOW) // Se P3 estiver em nivel logico baixo { yearupg=yearupg-1; // Decrementa -1 a "yearupg" } lcd.setCursor(0,0); // Posiciona o cursor na coluna 0 e linha 0 lcd.print("Ajustar Ano:"); // Escreve "Ajustar Ano" lcd.setCursor(0,1); lcd.print(yearupg,DEC); delay(200); if(!digitalRead(bt_enter)) {delay(150); submenu2 ++;} break; case 6: lcd.clear(); lcd.setCursor(0,0); lcd.print("SALVANDO..."); RTC.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0)); // Grava os dados no RTC delay(200); submenu2=1; sub_menu=1; menu_num=1; break; } //end switch } Tudo "funcionando" mas com o risco do estouro do Millis: Não sei se o Forum permite eu fazer um video com o funcionamento do menu e do projeto em funcionamento , se posso upar diretamente aqui na pagina ou tenho que carregar no YouTube como "não listado" e postar o link aqui.

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

×
×
  • Criar novo...