Ir para conteúdo
  • Cadastre-se

nagkiller

Técnico Cooperador
  • Posts Por Dia

    0.32
  • Posts

    1.024
  • Registrado em

  • Última visita

  • Vitórias

    5
  • Créditos EBR

    2,506 [ Doar ]

Tudo que nagkiller publicou

  1. R107 desconhecido R111 desconhecido R112 aparentemente é um resistor na casa dos KiloOhms, entre 1K e menos de 10K... ou começando por 2... R113 aparentemente é um 5R1... 5,1 Ohms... R114 aparentemente é um 5R1 Mas isso são chutes, infelizmente encontrar aqui alguém que tenha um equipamento igual, pode ser mosca branca. No caso, o negócio ou é esperar alguém responder este tópico, ou usar valores empíricos nos locais faltantes e verificar se funcionam. Deverá verificar ainda se as trilhas onde estavam os componentes também não foram afetados. Boa sorte.
  2. Está certo sim, única coisa que faltou foi uma referencia melhor desses resistores, por exemplo R352, R25, etc.. nem a foto da posição dos componentes, ou circulação houve, apenas fotos da placa. Além disso, ela chegou apenas as PCBs, não tem caixa/gabinete e referencias externas? Flw...
  3. nagkiller

    dica arduino

    Tem que se ter ao menos conhecimentos básicos em eletrônica! Se não souber o que é, as características elétricas e como usar as entradas e saídas, vai dar problema mesmo! Flw...
  4. Olhando o relay pela parte de baixo, os pinos 2 e 9 são da bobina, no seu caso alimentada pela tensão de 24Volts. Os pinos 5 e 6 são o comum da chave. O pino 1 é o normalmente fechado. O pino 10 é o normalmente aberto. Você pode testar a bobina e a mudança do estado da chave de normalmente fechado (pino 1) para normalmente aberto (pino 10) com um multímetro na escala de continuidade, onde uma das sondas ficará exclusivamente nos pinos 5 e 6. Já nos pinos 2 e 9 você alimentar com uma tensão aproximada de 24V. Se for um componente usado, o ideal é usar uma carga nos terminais de chaveamento e medir se a chave está boa. Isso é observado na coluna Contact Ratings do item Approvals, onde a corrente máxima é 1A em até 30VDC. Geralmente pode ser utilizada uma lâmpada de carro e tensão de 12Volts para medir se há queda de tensão nos terminais. Leds não são muito indicados para isso! Flw...
  5. Já experimentou o básico, ler o manual : https://www.sistemaqtecnologia.com.br/anexos/60b0ed717e93bb17deb4171371e28712.pdf ? 05 - Botoeira externa - Sinaleira e Luz de Garagem SIN - Sinaleira consiste em interligar uma sinaleira com a central do portão utilizando os bornes SIN - GND e 12Vcc. Deverá montar um circuito que receberá o sinal da sinaleira e acionar algo com um transistor NPN, por exemplo um relay, conforme a figura abaixo: Sugestão de circuito (bem semelhante com o circuito acima): Pode testar essa solução e após isso, em CN1 ligar o Comum e o NA em seu circuito. Flw...
  6. Osciladores Hartley (± 100MHz) e Colpitts (+3x Hartley) e Phase Shift (circuito RC tem muita instabilidade), acredito que, se não me engano, não chegam a esse range, hein!?!?! E ainda se você, supondo que conseguisse montar este circuito, devára calibrá-lo! Vai precisar de um analisador de espectros! Sem contar que o layout da pcb é extremamente importante!!! Vai ter que procurar outra solução, como por exemplos circuitos VCO prontos!!! Pesquise por "frequency oscillator 2.4ghz circuit" e/ou "bluetooth jammer schematic" e veja se encontra algo que te possa ser útil. Mas posso estar enganado no que disse acima, pois RF não é uma especialidade minha!!! Flw...
  7. nagkiller

    notícia Chamado para nova área do Fórum

    @icenove Pode sim, só deixe bem claro em suas mensagens qual o MCU e a IDE+compilador, para não confundir uma coisa com outra!
  8. nagkiller

    dúvida Relogio com arduino

    O código com millis pode ser alterado conforme o exemplo: https://docs.arduino.cc/built-in-examples/digital/BlinkWithoutDelay/ #define PIN_RELE 8 // Use o pino desejado aqui para a saída do mosfet unsigned long previousMillis = 0; unsigned long tempoAtualRelay = 0; const long interval = 1000; // 1000 milissegundos = 1 segundo int horas = 15; // Hora sincronizada com o PC int minutos = 59; // Hora sincronizada com o PC int segundos = 45; // Hora sincronizada com o PC int tempoReleAcionado = 100; // 100 milissegundos é o tempo que o pino de relay está em nivel logico 1 (Acionado) boolean passouUmaHora = false; void setup() { pinMode(LED_BUILTIN, OUTPUT); // SAIDA pinMode(PIN_RELE, OUTPUT); // ENTRADA digitalWrite(PIN_RELE, LOW); // DESLIGADO Serial.begin(9600); // PORTA SERIAL PARA MONITORAR AS MENSAGENS } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; segundos++; if (segundos > 59) { // 60 segundos = 1 minuto segundos = 0; minutos++; } if (minutos > 59) { // 60 minutos = 1 hora minutos = 0; horas++; passouUmaHora = true; Serial.println(F("Acionando o Relay")); } if (horas > 23) { horas = 0; } imprimirHora(); digitalWrite(LED_BUILTIN, 1 ^ digitalRead(LED_BUILTIN)); // Led pisca a cada 1 segundo } // INDICA AQUI QUE SE PASSOU UMA HORA E ACIONA O PINO DO RELAY if (passouUmaHora) { unsigned long tempoDecorrido = millis(); digitalWrite(PIN_RELE, HIGH); // Acionou relay if ( tempoDecorrido - tempoAtualRelay >= tempoReleAcionado ) { // Se o tempo em segundos for maior ou igual a 100ms, desliga Relay tempoAtualRelay = tempoDecorrido; Serial.println(F("Desligando o Relay")); digitalWrite(PIN_RELE, LOW); // Desatraca o relay passouUmaHora = false; } } } // EXIBE NO TERMINAL A HORA ATUAL void imprimirHora() { if (horas < 10) Serial.print("0"); Serial.print(horas); Serial.print(":"); if (minutos < 10) Serial.print("0"); Serial.print(minutos); Serial.print(":"); if (segundos < 10) Serial.print("0"); Serial.println(segundos); } Flw...
  9. Eu postei o código completo, mas está bloqueado e aguardando liberação pelos moderadores!
  10. Certo, entendi. Se não for um tempo preciso, pode usar o millis ou o timer do mcu. Ai será um codigo mais simples. Flw...
  11. Aquivo RelogioAlarme.ino // #include <Arduino.h> #include "Ds1302.h" #define PIN_SET_HORA 3 #define PIN_ENA 5 #define PIN_CLK 6 #define PIN_DAT 7 #define PIN_RELE 8 Ds1302 rtc(PIN_ENA, PIN_CLK, PIN_DAT); volatile Ds1302::DateTime tempoAtual; static int ultimoSegundo = 0; static int minutoAtual = 61; static int tolerancia = 5; // 5 segundos de tolerancia boolean alarmeAtivo = false; // Vamos usar essa boolean para dizer que houve ou nao o alarme static uint8_t char_idx = 0; const int bufferSize = 13; static char buffer[bufferSize]; // Constante para o dia da semana const static char* WeekDays[] = { "Segunda", // 1 para segunda "Terca", // 2 para terca "Quarta", // 3 para quarta "Quinta", // 4 para quinta "Sexta", // 5 para sexta "Sabado", // 6 para sabado "Domingo" // 7 para domingo }; void setup() { pinMode(PIN_SET_HORA, INPUT_PULLUP); pinMode(PIN_RELE, OUTPUT); digitalWrite(PIN_RELE, LOW); rtc.init(); adicionarHoraPadrao(); Serial.begin(9600); } void loop() { rtc.getDateTime(&tempoAtual); int minutos = tempoAtual.minute; int segundos = tempoAtual.second; // Se o botao de setar hora for pressionado if (!digitalRead(PIN_SET_HORA)) { // Se o botao for pressionado delay(100); if (!digitalRead(PIN_SET_HORA)) { // Se o botao for pressionado Serial.println("Digite a data e hora no formato (YYMMDDWhhmmss)"); Serial.println("Exemplo : 17:42:00 Quarta 25/09/2024 ficará => 2409253123100"); alterarDataHora(); // Alterar a hora usando o Monitor Serial } } if (!alarmeAtivo && ( minutos == 00 && segundos < tolerancia )) { // Tolerancia, para não haver repique. Evento acontece a cada 60 minutos! alarmeAtivo = true; Serial.println("Acionando o Relay"); digitalWrite(PIN_RELE, HIGH); // Atraca o relay delay(1000); // Deixar preso em um delay de 1 segundo ligado Serial.println("Desligando o Relay"); digitalWrite(PIN_RELE, LOW); // Desatraca o relay } if ( alarmeAtivo && (segundos > tolerancia)) { // Se o alarmeAtivo está ativo, então desliga alarmeAtivo = false; } if (ultimoSegundo % 30 == 0) { // A cada minuto exibe a hora no Monitor Serial imprimirDataHora(); } if (Serial.available()) { buffer[char_idx++] = Serial.read(); } } uint8_t parseDigits(char* str, uint8_t count) { uint8_t val = 0; while (count-- > 0) val = (val * 10) + (*str++ - '0'); return val; } void alterarDataHora() { if (char_idx >= bufferSize) { tempoAtual.year = parseDigits(buffer, 2); // Pega os dois primeiros digitos para ano tempoAtual.month = parseDigits(buffer + 2, 2); // Pega os dois proximos para o mes tempoAtual.day = parseDigits(buffer + 4, 2); // Pega os dois proximos para o dia tempoAtual.dow = parseDigits(buffer + 6, 1); // Pega o proximo para o dia da semana => Ver o WeekDays acima tempoAtual.hour = parseDigits(buffer + 7, 2); // Pega os dois proximos para a hora tempoAtual.minute = parseDigits(buffer + 9, 2); // Pega os dois proximos para minutos tempoAtual.second = parseDigits(buffer + 11, 2); // Pega os dois proximos para os segundos rtc.setDateTime(&tempoAtual); // set the date and time imprimirDataHora(); char_idx = 0; for (int i = 0; i < bufferSize; ++i) { buffer[i] = '\0'; } } } void imprimirDataHora() { if (tempoAtual.day < 10) Serial.print('0'); Serial.print(tempoAtual.day); // 01-31 Serial.print('/'); if (tempoAtual.month < 10) Serial.print('0'); Serial.print(tempoAtual.month); // 01-12 Serial.print('/'); Serial.print("20"); Serial.print(tempoAtual.year); // 00-99 Serial.print(' '); if (tempoAtual.hour < 10) Serial.print('0'); Serial.print(tempoAtual.hour); // 00-23 Serial.print(':'); if (tempoAtual.minute < 10) Serial.print('0'); Serial.print(tempoAtual.minute); // 00-59 Serial.print(':'); if (tempoAtual.second < 10) Serial.print('0'); Serial.print(tempoAtual.second); // 00-59 Serial.println(); } void adicionarHoraPadrao() { Ds1302::DateTime dataPadrao = { .year = 24, .month = 9, .day = 25, .hour = 12, .minute = 00, .second = 25, .dow = 3 }; rtc.setDateTime(&dataPadrao); } Aquivo Ds1302.h /** Ds1302.h * * Ds1302 class. * * @version 1.0.3 * @author Rafa Couto <caligari@treboada.net> * @license GNU Affero General Public License v3.0 * @see https://github.com/Treboada/Ds1302 * */ #ifndef _DS_1302_H #define _DS_1302_H #include <stdint.h> class Ds1302 { public: typedef struct { uint8_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; uint8_t dow; } DateTime; /** * Months of year */ enum MONTH : uint8_t { MONTH_JAN = 1, MONTH_FEB = 2, MONTH_MAR = 3, MONTH_APR = 4, MONTH_MAY = 5, MONTH_JUN = 6, MONTH_JUL = 7, MONTH_AUG = 8, MONTH_SET = 9, MONTH_OCT = 10, MONTH_NOV = 11, MONTH_DEC = 12 }; /** * Days of week */ enum DOW : uint8_t { DOW_MON = 1, DOW_TUE = 2, DOW_WED = 3, DOW_THU = 4, DOW_FRI = 5, DOW_SAT = 6, DOW_SUN = 7 }; /** * Constructor (pin configuration). */ Ds1302(uint8_t pin_ena, uint8_t pin_clk, uint8_t pin_dat); /** * Initializes the DW1302 chip. */ void init(); /** * Returns when the oscillator is disabled. */ bool isHalted(); /** * Stops the oscillator. */ void halt(); /** * Returns the current date and time. */ void getDateTime(DateTime* dt);; /** * Sets the current date and time. */ void setDateTime(DateTime* dt); private: uint8_t _pin_ena; uint8_t _pin_clk; uint8_t _pin_dat; void _prepareRead(uint8_t address); void _prepareWrite(uint8_t address); void _end(); int _dat_direction; void _setDirection(int direction); uint8_t _readByte(); void _writeByte(uint8_t value); void _nextBit(); uint8_t _dec2bcd(uint8_t dec); uint8_t _bcd2dec(uint8_t bcd); }; #endif // _DS_1302_H Aquivo Ds1302.cpp /** Ds1302.cpp * * Ds1302 class. * * @version 1.0.3 * @author Rafa Couto <caligari@treboada.net> * @license GNU Affero General Public License v3.0 * @see https://github.com/Treboada/Ds1302 * */ #include "Ds1302.h" #include <Arduino.h> #define REG_SECONDS 0x80 #define REG_MINUTES 0x82 #define REG_HOUR 0x84 #define REG_DATE 0x86 #define REG_MONTH 0x88 #define REG_DAY 0x8A #define REG_YEAR 0x8C #define REG_WP 0x8E #define REG_BURST 0xBE Ds1302::Ds1302(uint8_t pin_ena, uint8_t pin_clk, uint8_t pin_dat) { _pin_ena = pin_ena; _pin_clk = pin_clk; _pin_dat = pin_dat; _dat_direction = INPUT; } void Ds1302::init() { pinMode(_pin_ena, OUTPUT); pinMode(_pin_clk, OUTPUT); pinMode(_pin_dat, _dat_direction); digitalWrite(_pin_ena, LOW); digitalWrite(_pin_clk, LOW); } bool Ds1302::isHalted() { _prepareRead(REG_SECONDS); uint8_t seconds = _readByte(); _end(); return (seconds & 0b10000000); } void Ds1302::getDateTime(DateTime* dt) { _prepareRead(REG_BURST); dt->second = _bcd2dec(_readByte() & 0b01111111); dt->minute = _bcd2dec(_readByte() & 0b01111111); dt->hour = _bcd2dec(_readByte() & 0b00111111); dt->day = _bcd2dec(_readByte() & 0b00111111); dt->month = _bcd2dec(_readByte() & 0b00011111); dt->dow = _bcd2dec(_readByte() & 0b00000111); dt->year = _bcd2dec(_readByte() & 0b01111111); _end(); } void Ds1302::setDateTime(DateTime* dt) { _prepareWrite(REG_WP); _writeByte(0b00000000); _end(); _prepareWrite(REG_BURST); _writeByte(_dec2bcd(dt->second % 60 )); _writeByte(_dec2bcd(dt->minute % 60 )); _writeByte(_dec2bcd(dt->hour % 24 )); _writeByte(_dec2bcd(dt->day % 32 )); _writeByte(_dec2bcd(dt->month % 13 )); _writeByte(_dec2bcd(dt->dow % 8 )); _writeByte(_dec2bcd(dt->year % 100)); _writeByte(0b10000000); _end(); } void Ds1302::halt() { _prepareWrite(REG_SECONDS); _writeByte(0b10000000); _end(); } void Ds1302::_prepareRead(uint8_t address) { _setDirection(OUTPUT); digitalWrite(_pin_ena, HIGH); uint8_t command = 0b10000001 | address; _writeByte(command); _setDirection(INPUT); } void Ds1302::_prepareWrite(uint8_t address) { _setDirection(OUTPUT); digitalWrite(_pin_ena, HIGH); uint8_t command = 0b10000000 | address; _writeByte(command); } void Ds1302::_end() { digitalWrite(_pin_ena, LOW); } uint8_t Ds1302::_readByte() { uint8_t byte = 0; for(uint8_t b = 0; b < 8; b++) { if (digitalRead(_pin_dat) == HIGH) byte |= 0x01 << b; _nextBit(); } return byte; } void Ds1302::_writeByte(uint8_t value) { for(uint8_t b = 0; b < 8; b++) { digitalWrite(_pin_dat, (value & 0x01) ? HIGH : LOW); _nextBit(); value >>= 1; } } void Ds1302::_nextBit() { digitalWrite(_pin_clk, HIGH); delayMicroseconds(1); digitalWrite(_pin_clk, LOW); delayMicroseconds(1); } void Ds1302::_setDirection(int direction) { if (_dat_direction != direction) { _dat_direction = direction; pinMode(_pin_dat, direction); } } uint8_t Ds1302::_dec2bcd(uint8_t dec) { return ((dec / 10 * 16) + (dec % 10)); } uint8_t Ds1302::_bcd2dec(uint8_t bcd) { return ((bcd / 16 * 10) + (bcd % 16)); } Não testei, mas deve funcionar. Flw...
  12. Veja se isso te faz sentido: https://www.blogdarobotica.com/2022/06/30/como-utilizar-o-modulo-relogio-rtc-ds1302-para-exibir-hora-dia-e-data-com-o-arduino/ https://mundoprojetado.com.br/acordar-arduino-rtc/ https://lobodarobotica.com/blog/real-time-clock-com-arduino/ https://projecthub.arduino.cc/SurtrTech/simple-alarm-clock-with-ds1302-rtc-72582d Mais pesquisa sobre o assunto : https://www.google.com/search?q=arduino+ds1302+alarme O que for necessário é só adicionar um código extra. Flw...
  13. O uso de diodos acredito que não vai adiantar, se tiver uma tensão de 5V, não vai ser o suficiente. Além disso, 0V7 é um número para cáclulos, quando vai na vida real, essa queda pode ser menor (tenho diodos smd NXP originais que dão 0V6 e outros que dão 0V5, dependendo do modelo). O mais recomendado seria usar conforme esquema acima! Mais uma vez, o que pode fazer é 'grampear' a tensão para 3V3 através de zener. Mas estou achando que você aferiu algo errado. E ainda não considerou remover o Arduino e usar o circuito correto, eliminando os 5V. Mande uma foto ou vídeo do projeto, com todas as ligações e componentes, inclusive os pontos que foram medidos e estão dando os valores informados! Senão vai ser dificil uma sugestão acertiva. Flw...
  14. Na verdade, o seu resistor está em paralelo com os contatos do relay, não está praticamente fazendo nada! Se o sensor for contato seco, então essas medidas estão erradas, pois não deveria haver tensão alguma, mas como está conectado ao pino do Arduino ou do Wemos, então é provavel que seja deles! A união dos dois GNDs é para que se tornem o mesmo potencial elétrico, ou seja, neste caso o 0V. Mas se você está unindo, se for os dois MCUs, então é a diferença entre os 5V e 3V3 dos pinos. Só lembrando que o Wemos tem também sua propria entrada usb, que pode ser usada para alimentar o MCU, descartando o Arduino. Pode ainda ser alimentado externamente através da injeção de 5V no pino de 5V e GND (representado abaixo pela bateria de 3V7). Mas deverá usar os 3V3 para alimentar os circuitos que farão a leitura de botões e acionamentos de LEDs, por exemplo. Flw...
  15. Essa seria uma abstração de Contato Seco (relay): No caso o resistor de pullup no esquema é o R1. Para quando o MCU ler o pino, não entrar em ponto flutuante, então ele "força" os 3V3 no pino. Neste caso, está tudo isolado, pois só está usando os contatos do relay (essa informação você deverá saber pelo modelo do sensor, se é contato seco (relay) ou se é coletor aberto (transistor)). Abstração com Coletor Aberto (transistor): Neste caso, deverá equalizar o potencial. Flw...
  16. Trabalhei por muitos anos no desenvolvimento de alarmes monitorados e não monitorados, então, digamos que tenho uma certa experiencia. Porém, com a ajuda de um esquema bem elaborado, ajudará outros técnicos a entender o problema e propor soluções! Segue algumas considerações: - Porque não trocar o Arduino por um Wemos já tratado com uma fonte de 3V (pode usar aquele AMS1117 3.3 específico para 3V3, por exemplo)? Sei que é apenas um protótipo, mas já poderia eliminar um problema que provavelmente não existirá, quando fizer certo! - Pode usar (Conversor de Nível Lógico 3.3V-5V Bidirecional - 4 Canais) para trabalhar com as tensões de 3V3 e 5V (caso continue com o Arduino). - Se você só irá alimentar os sensores para que eles possam atuar e o modelo do sensor for de contato seco, não precisaria do GND na protoboard. Agora se estiver usando o contato Comum ou NA para mais alguma coisa, ai sim necessitará do mesmo ai que teremos que ter um cuidado maior. Terá que grampear a tensão com um resistor e um zener ou com opto, conforme dica anteior. Se ele for coletor aberto, então basta de um resistor de pullup com a tensão oferecida pelo Wemos (3V3) e o fio de GND. Flw...
  17. Poderia disponibilizar o esquema, para que possamos entender melhor? Geralmente eu deixo isolado opticamente. Não costumo misturar as coisas, pode ser por meio de opto, um circuito com transistor e coletor aberto, etc... mas nunca diretamente. Flw...
  18. Excelente. Não podemos recomendar uma loja específica, mas pode tentar primeiro nas lojas de componentes do Brasil e posteriormente uma daquelas chinesas de vendas. Flw...
  19. Dica para manutenção! Ao remover os componentes, eu sempre resoldo um dos terminais do componente em um dos pads (exemplo o R2 da figura). Imagine o seguinte cenário: Remover vários capacitores SMD de valores diferentes. Como saber onde realmente cada um deveria estar? Flw...
  20. Em suas medidas, não despreze também os C8, C109 e C110. Pode ainda comparar os pinos 1 de U6 e U10, se estão com as medidas semelhantes. Flw...
  21. Então, te pedi na escala de diodos ou continuidade, senão vira confusão... A resistencia alta não é problema, mas sim se cair muito para próxima de zero! Flw...
  22. Quando você diz, impedância, resistencia, 15K, você está medindo na escala Ohmica? 50K, 1K é um valor normal do circuito! Flw...
  23. Uma forma de medir se há curtos, é com o multimetro na escala de diodos ou de continuidade. Segue exemplo de medições: Resumindo, não pode haver beeps ou valores baixos (muito próximos de zero). Se houver, ou aquele ponto está em curto ou está na mesma malha do GND(ponta vermelha do multimetro). Flw...

SOBRE O ELETRÔNICABR

EletrônicaBR é o melhor fórum técnico online, temos o maior e mais atualizado acervo de Esquemas, Bios e Firmwares da internet. Através de nosso sistema de créditos, usuários participativos têm acesso totalmente gratuito. Os melhores técnicos do mundo estão aqui!
Técnico sem o EletrônicaBR não é um técnico completo! Leia Mais...
×
×
  • Criar Novo...