Home › Tag Archives › módulos

Módulo de relê com 1 canal

rele_1canal_DSC00137_automalabs.com.br

Alimentação 5V

Proteção por optoacoplador

Ativado por sinal negativo.

Este módulo opera de forma muito semelhante aos modelos de 2 e 8 relês que forneço.

 

LCD Gráfico 128×64 (12864) compatível com ST7920

Fundo azul e letras cinzentas.

Compatível com o modelo FIT0021 da DFrobot

A visibilidade deste display não é muito boa. A escolha da cor de fundo e cor das letras não oferece um constraste muito bom.

Este display pode ser operado em dois modos: paralelo e serial. O Arduino tem velocidade suficiente para a operação serial, que economiza muitas conexões: apenas três saídas digitas são necessárias.

Compatível com a biblioteca u8glib. Para operação no modo serial, abra o exemplo GraphicsTest  e “descomente” a linha:

//U8GLIB_ST7920_128X64 u8g(18, 16, 17, U8G_PIN_NONE);

O exemplo acima requer um Arduino Mega, mas se quiser usar um Arduino UNO:

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE);                  // E: D3, RS: D8 e R/W:D9

É só um exemplo. Você é livre para escolher que pinos usar

Os exemplos Chess , “F” (sequer compilou) e menu não funcionaram comigo, nem no Duemilanove, nem no Mega.

Exemplos retirados do demo GraphicsTest:

Você também pode usar o demo da DfRobot. Imagem retirada dele:

Ao usar o demo GraphicsTest a imagem parecerá estar “de cabeça para baixo”. É normal.

Abaixo, cópias locais de alguns arquivos (links gerados automaticamente).

Library serial 128x64
Library serial 128x64
LCD12864RSPI.rar
4.4 KiB
612 Downloads
Detalhes...
Datasheet ST7920
Datasheet ST7920
ST7920.pdf
696.9 KiB
1282 Downloads
Detalhes...

Módulo de relês

O consumo de cada relê, de acordo com o datasheet, é de 71mA. Assim, o módulo de oito canais alcança 568mA com todos os relês ligados. Se você ligar apenas um de cada vez, pode operar o módulo sem problemas usando apenas a alimentação do arduino conectado a uma porta USB. Mas estranhos problemas podem acontecer se você tentar ligar vários relês ao mesmo tempo sem providenciar uma fonte adequada. Os problemas variam caso a caso, porque algumas portas USB são capazes de fornecer mais que 500mA e depende também do resto do consumo de seu projeto, mas o sinal mais comum de que você excedeu a capacidade de corrente é não ouvir mais os relês fecharem, ou ouvir apenas um som débil.

De uma forma ou de outra, mesmo que o consumo esteja dentro da capacidade do Arduino, é recomendável separar as fontes, porque o acionamento das bobinas provoca uma perturbação na alimentação que pode afetar de múltiplas maneiras o seu projeto.

Cada módulo de relês tem um header de três pinos para alimentação. A posição do header e do jumper nele depende do módulo, mas sempre são claramente rotulados:

  • Módulo de 8 canais: header do lado direito da placa. Posição correta do jumper: para a direita;
  • Módulo de 2 canais: header do lado esquerdo da placa. Posição correta do jumper: para a esquerda;

O jumper deve ser retirado para usar alimentação externa, mas nunca coloque na outra posição, pois isso deixa a alimentação (VCC e GND) em curto.

  • Sem jumper: Alimentação para os relês (5V) deve ser conectada a GND e JD-VCC. Ou você pode deixar assim para testar o seu programa sem acionar as cargas. Os LEDs acenderão, mas os relês permanecerão desligados;
  • Jumper entre JD-VCC e VCC: Relês alimentados pelo pino VCC do cabo principal (default);
  • Jumper entre GND e VCC: nunca faça isso!

A placa opera por sinal negativo em cada uma das entradas IN. Embora isso possa parecer estranho ou até ilógico para alguns, é muito comum em aplicações industriais. Os sensores de proximidade refletivos e indutivos que vendo, por exemplo, são todos com saída negativa. Esses sensores são chamados de “NPN” no jargão da indústria local.

Este é o esquema aproximado de cada seção dos módulos:

Como o sinal de ativação é negativo (LOW), cuidados especiais precisam ser tomados no setup e utilização. Exemplo de código:


int Relay = 3; //relê ligado ao pino 3

void setup()
{
/*É necessário que seja feito nesta ordem, ou o rele vai dar
  um "rebote" ao energizar e a cada reset do arduino*/
  digitalWrite(Relay, HIGH);  //Configura o default do pino como HIGH
  pinMode(Relay, OUTPUT);     //Configura o pino como saída
}
void loop()
{

          digitalWrite(Relay, LOW);    //Liga o relê
          delay(2000);
          digitalWrite(Relay, HIGH);   //Desliga o relê
          delay(2000);

}

Problemas comuns

Um ou mais relês não fazem barulho ou fazem um barulho muito mais baixo que o normal ao ligar

Verifique a fonte de alimentação. Ela não está fornecendo corrente suficiente.

O relê só liga quando eu mando desligar e vice-versa

O módulo opera com lógica negativa. Volte, releia o que foi explicado e estude o sketch de teste.

O arduino reseta quando mando ligar vários relês de uma vez, mesmo sem carga

Os relês já ligados desligam quando mando ligar vários relês de uma vez, mesmo sem carga

Você provavelmente está usando a mesma fonte que alimenta o Arduino para alimentar os relês e esta não aguenta o surto repentino de corrente. Alimente o módulo com uma fonte separada.

O arduino reseta quando mando ligar um relê com carga

Os relês já ligados desligam quando mando ligar um relê com carga

Em condições normais isso só ocorre se você está ligando uma carga que gera muito EMI, como um contactor. Você precisa providenciar filtros de EMI para sua carga. Esses filtros geralmente são compostos de um único capacitor ou de um conjunto resistor + capacitor em série (também chamado de filtro “snubber”).

Em anexo, cópia do datasheet do relê

Módulo RTC DS1307 com EEPROM I2C

A imagem abaixo mostra dois módulos iguais. Cada um com uma face da placa para cima.

E aqui está a documentação oficial

O endereço i2c do RTC é 0x68. Isso é definido no chip DS1307 e não pode ser configurado pelo fabricante do módulo, nem pelo usuário. A vantagem disso é que qualquer módulo RTC DS1307 substitui qualquer outro, sem precisar de configuração.

Funciona mesmo sem os resistores.
Funciona com a biblioteca RTCLib da Adafruit.
Para fazer o ajuste de data e hora com esta biblioteca, é preciso dar o seguinte comando no SETUP:

Execute apenas uma vez, depois remova ou comente o comando e grave o sketch de novo.

Equipado com memória I2C 24C32 de 32kbits (4KB). Datasheet.

A operação da EEPROM é independente do RTC. Lembre-se de que o Arduino tem uma EEPROM interna, por isso para usar a EEPROM do módulo é preciso usar rotinas feitas para acesso a EEPROM I2C, como esta.

Neste módulo é possível acrescentar um sensor de temperatura DS18B20. Mas não é lá grande vantagem, porque o DS18B20 não é i2C e vai requerer que você puxe mais um fio para o módulo. Além disso, você fica limitado a medir a temperatura nas proximidades do módulo.

Informações importantes sobre a operação com bateria

Segundo o datasheet do DS1307:

  • O RTC só está completamente funcional quando a tensão VCC é igual a 1.25 * Vbat (a tensão da bateria);
  • Quando VCC é menor que 1.25*Vbat mas ainda é maior que Vbat, o RTC ainda é alimentado por VCC, mas você já não pode ler ou gravar nele;
  • Quando VCC cai abaixo de Vbat+0.2V, o RTC entra em um modo de baixo consumo e passa a ser alimentado pela bateria;
  • Vbat precisa estar entre 2 e 3.5V para operação normal do RTC.

Este módulo foi projetado para usar uma bateria recarregável LIR2032, que completamente carregada chega a 4.2V e assim além de estar acima da tensão máxima de bateria para o DS1307, normalmente você precisaria fazer VCC ser 1.25*4.2= 5.25V para que ele funcionasse, o que é uma tensão “alta” e difícil de garantir. Para contornar esses problemas o projetista colocou um divisor de tensão entre a bateria e a entrada Vbat do DS1307 para que ele enxergue uma tensão menor. Com a bateria completamente carregada (4.2V) a tensão em Vbat, que você pode ler no terminal BAT de P1, é de cerca de 2.9V. Assim você precisa de um VCC de apenas 1.25*3 = 3,75V para operação total do RTC. Entretanto é recomendado alimentar o módulo sempre com 5V por causa dos componentes extras.

Um segundo problema criado por esse design é que se você quiser alimentar o módulo com uma bateria não-recarregável como a CR2032, com a bateria a 3V a tensão em Vbat será de 2.14V. Perigosamente perto do mínimo. Para fazer com que o módulo opere com a CR2032 você precisará eliminar o circuito de carga da bateria (basta remover D1) e o divisor de tensão (remova R4 e coloque um fio no lugar de R6).

O diagrama abaixo facilita a compreensão do que expliquei:

ds1307_module_TinyRTC_schematic_automalabs.com.br

A durabilidade estimada de uma bateria CR2032 decente alimentando sozinha o DS1307 é de mais de 10 anos. Segundo o datasheet do DS1307 são necessários 48mAh para isso e uma Energizer CR2032 alcança 240mAh. Isso torna a decisão de usar uma bateria recarregável no módulo bastante questionável, principalmente porque esses módulos costumam vir da China com baterias LIR2032 de baixíssima qualidade que descarregam completamente em alguns meses e depois não conseguem ser carregadas.  Eu comprei cerca de 130 módulos destes e só consegui salvar duas baterias.

Se você tiver uma fonte confiável de baterias CR2032 (que também costumam ser muito falsificadas) é melhor fazer a alteração no módulo para usá-las.

Dicas diversas

Relógio atrasando em grandes intervalos de uma vez

Talvez você tenha esquecido ativo no setup do sketch uma linha de código para inicializar a hora do RTC. Por exemplo, este é o método usado nos exemplos da RTClib:

rtc.adjust(DateTime(__DATE__, __TIME__));

__DATE__ e __TIME__ são substituídas automaticamente pela data e hora do seu computador no momento da compilação do programa e esses valores ficarão gravados no Arduino. O relógio parecerá funcionar bem enquanto energizado mas toda vez que o arduino conectado ao módulo for ligado ou resetado vai reconfigurar o relógio para esses valores. Se você estiver presente e observando a cada reset verá o relógio voltar sempre ao mesmo dia e horário e desconfiará da causa, mas se não estiver não perceberá o padrão e vai ficar propenso a confundir com um defeito.

Relógio congelado

Pode ter ocorrido o mesmo esquecimento do item anterior, mas em loop.

Módulo Ethernet Baseado em ENC28J60

O módulo deve ser conectado conforme este diagrama:

Os pinos mudam porque trata-se da porta SPI, que está associada a pinos diferentes no mega.

Não é realmente necessário usar o pino ENC-INT. A Biblioteca Ethershield só usa interrupções em um dos exemplos. E nos meus testes programas simples funcionaram sem qualquer problema com esse pino desconectado.

Os pinos de entrada do ENC28J60 são tolerantes a 5V. Você deve alimentar com 3.3V, mas não há problema se o I/O for 5V, como é o caso do Arduino (exceto DUE).

Para download da biblioteca, que já vem com vários exemplos de uso, siga as instruções deste link.

Limitações

Ao rodar os exemplos de webserver da biblioteca, verá que são bem simples. Sem graça mesmo. Mas isso parece ser inevitável. Entre as limitações do ENC28J60 está o fato de que ele não pode lidar com múltiplos pacotes TCP-IP, então ele tem que mandar toda a página de uma vez, em um único pacote. Porém o tamanho de um pacote TCP-IP está limitado por padrão a algo em torno de 1500 bytes já contando com o overhead; então por segurança os exemplos usam buffers limitados a 500 bytes (não deveria ser tão drástico, mas talvez a biblioteca tenha outra limitação). Ou seja: o webserver não pode dar nenhuma resposta cujo HTML tenha mais que 500 bytes no total, mas código HTML não é nada “econômico” nesse sentido. O sintoma é que o webserver deixa de responder, ficando travado.

O tamanho desse buffer é definido nesta linha dos exemplos:

#define BUFFER_SIZE 500

Para complicar, o Arduino UNO/Duemilanove (ATMEGA328) tem apenas 2KB de RAM (o ATMEGA168 só tem 1KB) para ser usado por todo o seu sketch. Por isso, ao tentar contornar o problema aumentando o tamanho do buffer você corre o risco de travar todo o seu programa.

Veja bem: isso significa que não dá para fazer algo bonito como a GUI de um modem ADSL moderno com um ENC28J60 e um Arduino, porém não é esse o único propósito de uma conexão ethernet. O ENC28J60 é perfeitamente capaz como um meio de enviar comandos simples (por GET, por exemplo) e receber status via rede. Com 500 bytes por comando ou resposta dá para fazer muita coisa. Se você realmente não pode viver com essa limitação, precisa de um shield baseado em um chip com mais recursos, como o Wiznet W5100.

Nota: o ENC28J60 tem outras limitações. Eu só estou citando uma porque foi nessa que eu esbarrei.

 

Biblioteca Ethercard

O próprio autor da biblioteca ethershield anunciou que não atualizará mais a biblioteca e recomenda o uso da biblioteca Ethercard. Essa biblioteca é compatível com o módulo sem problemas, mas o pino CS precisa ser ligado ao pino D8 do Arduino UNO. Essa é a única diferença de conexão. Mas a biblioteca permite a escolha fácil do CS, que agora é definido na inicialização que é feita no sketch.

Por exemplo, para mudar o pino CS para 10, troque nos exemplos:

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) //sem o parâmetro opcional, é usado D8.

por

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) // define D10 como CS

 

 

Módulo de comunicação sem fio NRF24L01+

Também chamado de NRF24L01P. Esse módulo é usado em pares, mas pode ser vendido por unidade.

  • Worldwide 2.4GHz ISM band operation
  • 250kbps, 1Mbps and 2Mbps on air data
  • Ultra low power operation
  • 11.3mA TX at 0dBm output power
  • 13.5mA RX at 2Mbps air data rate
  • 900nA in power down
  • 26µA in standby-I
  • On chip voltage regulator
  • 1.9 to 3.6V supply range
  • Enhanced ShockBurst™
  • Automatic packet handling
  • Auto packet transaction handling
  • 6 data pipe MultiCeiver™
  • Drop-in compatibility with nRF24L01
  • On-air compatible in 250kbps and 1Mbps with nRF2401A, nRF2402, nRF24E1 and nRF24E2
  • Low cost BOM
  • ±60ppm 16MHz crystal
  • 5V tolerant inputs
  • Compact 20-pin 4x4mm QFN package

Note que esse é a versão “plus” do NRF24L01. Note também que o pinout é muito diferente. Para começar, o módulo NRF24L01 tem 10 pinos, enquanto o NRF24L01+ tem apenas 8.
Todos os meus módulos são testados com este demo (versão software SPI) ou com este (versão hardware SPI). Antes de testar com outros, teste com eles. Notar que as duas versões tem uma ligeira diferença na ligação (pinos D10 e D13 são trocados), mas elas são equivalentes. O arduino configurado com uma versão TX se comunica com um arduino configurado com qualquer das versões RX. Não é preciso instalar bibliotecas para rodar os demos.
Os exemplos da biblioteca RF24 parecem ser muito superiores, mas não consegui colocar para funcionar.