- Descrição: O Módulo Transceptor Wireless NRF24L01 2.4GHz é um dispositivo produzido…
Como usar com Arduino – Módulo Relé 5V de 16 Canais
– Descrição:
Os relés são componentes eletromecânicos capazes de controlar circuitos externos de grandes correntes a partir de pequenas correntes ou tensões, ou seja, acionando um relé com uma pilha podemos controlar um motor que esteja ligado em 110 ou 220 volts, por exemplo.
O Módulo Relé 5V de 16 Canais permite que a partir de uma plataforma microcontrolada seja possível controlar cargas AC (alternada) de forma simples e prática. Por ter 16 canais, é possível controlar até dezesseis cargas AC de até 10A. Comumente é utilizado em projetos de automação residencial para controle de lâmpadas, ventiladores e outras saídas que possam ser acionadas através de relé.
– Especificações e características:
– Tensão de operação: 5VDC
– Corrente de operação: 60 ~ 80mA
– Capacidade do relé: 30VDC/10A e 250VAC/10A
– 16 canais
– LED indicador para acionamento do relé
– Tempo de resposta: 5 ~ 10ms
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário fazer o controle de cargas AC. Caso o módulo seja utilizado junto a uma plataforma que esteja conectada à internet, torna-se possível controlar cargas AC através de uma página web, smartphone ou tablet.
– Proposta da prática:
Utilizar o Módulo Relé 5V de 16 Canais em conjunto com o Arduino para controlar dezesseis lâmpadas através do envio de comandos pelo monitor serial do ambiente de programação do Arduino.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Módulo Relé 5V de 16 Canais
17 – Cabos Jumper macho-fêmea
01 – Fonte 5V 1A (5V 4A)
01 – Cabo Adaptador Conector Jack P4 Fêmea 5.5×2.1mm
16 – Lâmpada
16 – Receptáculo (boquilha)
– Cabo paralelo de 1,5mm ou 2,5mm
– Tomada (Rede alternada de 127V)
1) Por ter uma quantidade maior de canais, você deverá utilizar uma fonte externa que fornaça 5V e pelo menos 1A (REAL) para alimentar o módulo relé. Com todos os canais do módulo ligados, a tensão da fonte chega a cair 450mV. Cada canal do módulo quando ligado, consome aproximadamente 60mA.
2) Lembre-se de comutar / juntar o GND da fonte externa com o GND do Arduino. Além disso, fique atento ao esquema de ligação, pois são muitas conexões e uma falta de atenção pode comprometer o seu circuito.
3) O acionamento (ligar / desligar) de cada canal será feito através do envio de uma letra pelo monitor serial do IDE do Arduino. Basta digitar no monitor serial a letra correspondente a cada canal (vide código mais abaixo) e em seguida clicar em ENVIAR ou pressionar ENTER.
4) Após a montagem desta prática, caso em seus testes apenas uma quantidade pequena de canais do módulo forem ligados e os demais que você tentar acionar apenas acenderem o LED referente o canal, mas não acenderem a lâmpada, recomendo que troque a sua fonte de 5V por uma de melhor qualidade, pois esta que estiver utilizando não está fornecendo tensão / corrente suficiente.
– Esquema de ligação da prática:
ATENÇÃO: MUITO CUIDADO AO EXECUTAR PRÁTICAS QUE ENVOLVAM TENSÃO / CORRENTE ALTERNADA! FAÇA TODAS AS LIGAÇÕES COM O CIRCUITO COMPLETAMENTE DESLIGADO E ANTES DE FAZER OS TESTES VERIFIQUE CADA UMA DAS LIGAÇÕES PARA ELIMINAR A POSSIBILIDADE DE CURTO ENTRE FASE / NEUTRO OU FASE / FASE.
(Clique na imagem para ampliar)
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
//ARRAY DE PINOS UTILIZADOS PELOS CANAIS DO MÓDULO RELÉ (LEMBRE-SE QUE A PRIMEIRA POSIÇÃO DO VETOR É 0) const int releChPos[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, A0, A1, A2, A3, A4}; int statusCh01 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh02 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh03 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh04 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh05 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh06 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh07 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh08 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh09 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh10 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh11 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh12 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh13 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh14 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh15 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) int statusCh16 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO CANAL (LIGADO / DESLIGADO) void setup(){ Serial.begin(9600); //INICIALIZA A SERIAL for(int i=0; i<16; i++){ //PARA i IGUAL A 0, ENQUANTO i MENOR QUE 16, INCREMENTA i pinMode(releChPos[i], OUTPUT); //DEFINE TODOS OS CANAIS COMO SAÍDA digitalWrite(releChPos[i], HIGH); //TODOS OS CANAIS INICIAM DESLIGADOS } } void loop() { char c = Serial.read(); //VARIÁVEL RESPONSÁVEL POR RECEBER O CARACTERE DIGITADO NO MONITOR SERIAL /* TRATAMENTO DO CANAL 01 */ if (c == 'a'){ //SE CARACTER DIGITADO FOR IGUAL A "a", FAZ if(statusCh01 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[0], LOW); //RELÉ ACIONADO (LIGADO) statusCh01 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[0], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh01 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 01 */ /* TRATAMENTO DO CANAL 02 */ if (c == 'b'){ //SE CARACTER DIGITADO FOR IGUAL A "b", FAZ if(statusCh02 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[1], LOW); //RELÉ ACIONADO (LIGADO) statusCh02 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[1], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh02 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 02 */ /* TRATAMENTO DO CANAL 03 */ if (c == 'c'){ //SE CARACTER DIGITADO FOR IGUAL A "c", FAZ if(statusCh03 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[2], LOW); //RELÉ ACIONADO (LIGADO) statusCh03 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[2], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh03 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 03 */ /* TRATAMENTO DO CANAL 04 */ if (c == 'd'){ //SE CARACTER DIGITADO FOR IGUAL A "d", FAZ if(statusCh04 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[3], LOW); //RELÉ ACIONADO (LIGADO) statusCh04 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[3], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh04 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 04 */ /* TRATAMENTO DO CANAL 05 */ if (c == 'e'){ //SE CARACTER DIGITADO FOR IGUAL A "e", FAZ if(statusCh05 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[4], LOW); //RELÉ ACIONADO (LIGADO) statusCh05 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[4], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh05 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 05 */ /* TRATAMENTO DO CANAL 06 */ if (c == 'f'){ //SE CARACTER DIGITADO FOR IGUAL A "f", FAZ if(statusCh06 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[5], LOW); //RELÉ ACIONADO (LIGADO) statusCh06 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[5], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh06 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 06 */ /* TRATAMENTO DO CANAL 07 */ if (c == 'g'){ //SE CARACTER DIGITADO FOR IGUAL A "g", FAZ if(statusCh07 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[6], LOW); //RELÉ ACIONADO (LIGADO) statusCh07 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[6], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh07 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 07 */ /* TRATAMENTO DO CANAL 08 */ if (c == 'h'){ //SE CARACTER DIGITADO FOR IGUAL A "h", FAZ if(statusCh08 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[7], LOW); //RELÉ ACIONADO (LIGADO) statusCh08 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[7], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh08 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 08 */ /* TRATAMENTO DO CANAL 09 */ if (c == 'i'){ //SE CARACTER DIGITADO FOR IGUAL A "i", FAZ if(statusCh09 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[8], LOW); //RELÉ ACIONADO (LIGADO) statusCh09 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[8], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh09 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 09 */ /* TRATAMENTO DO CANAL 10 */ if (c == 'j'){ //SE CARACTER DIGITADO FOR IGUAL A "j", FAZ if(statusCh10 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[9], LOW); //RELÉ ACIONADO (LIGADO) statusCh10 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[9], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh10 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 10 */ /* TRATAMENTO DO CANAL 11 */ if (c == 'k'){ //SE CARACTER DIGITADO FOR IGUAL A "k", FAZ if(statusCh11 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[10], LOW); //RELÉ ACIONADO (LIGADO) statusCh11 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[10], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh11 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 11 */ /* TRATAMENTO DO CANAL 12 */ if (c == 'l'){ //SE CARACTER DIGITADO FOR IGUAL A "l", FAZ if(statusCh12 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[11], LOW); //RELÉ ACIONADO (LIGADO) statusCh12 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[11], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh12 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 12*/ /* TRATAMENTO DO CANAL 13 */ if (c == 'm'){ //SE CARACTER DIGITADO FOR IGUAL A "m", FAZ if(statusCh13 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[12], LOW); //RELÉ ACIONADO (LIGADO) statusCh13 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[12], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh13 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 13 */ /* TRATAMENTO DO CANAL 14 */ if (c == 'n'){ //SE CARACTER DIGITADO FOR IGUAL A "n", FAZ if(statusCh14 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[13], LOW); //RELÉ ACIONADO (LIGADO) statusCh14 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[13], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh14 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 14 */ /* TRATAMENTO DO CANAL 15 */ if (c == 'o'){ //SE CARACTER DIGITADO FOR IGUAL A "o", FAZ if(statusCh15 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[14], LOW); //RELÉ ACIONADO (LIGADO) statusCh15 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[14], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh15 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 15 */ /* TRATAMENTO DO CANAL 16 */ if (c == 'p'){ //SE CARACTER DIGITADO FOR IGUAL A "p", FAZ if(statusCh16 == 0){ //SE VARIÁVEL FOR IGUAL A 0, FAZ digitalWrite(releChPos[15], LOW); //RELÉ ACIONADO (LIGADO) statusCh16 = 1; //VARIÁVEL RECEBE O VALOR 1 }else{ //SENÃO, FAZ digitalWrite(releChPos[15], HIGH); //RELÉ ACIONADO (DESLIGADO) statusCh16 = 0; //VARIÁVEL RECEBE O VALOR 0 } } /* TRATAMENTO DO CANAL 16 */ } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Blynk – Utilizando com o Módulo Relé WiFi IoT ESP8266 ESP-01
Próxima postagem: Como usar com Arduino – Sensor Indutivo NPN de Proximidade Fotek PL-05N
Bom dia amigo.
Muito bom seu projeto, bem explicativo e pratico. Parabéns.
Vc poderia me dar um auxilio?
Tenho um módulo de 8 relés e um rtc ds1307.
Programei um horário para ligar o módulo, porem gostaria de ligar cada um dos relés em 1 minuto após o outro. Tipo ligo todos juntos as 12:00 e desligo um por minutos tipo 13:00, 13:01, 13:02, 13:03, 13:04, 13:05, 13:06, 13:07, 13:08.
Teria como me dar um auxilio? Agradeço desde ja
Olá amigo obrigado por nos mostrar como faz isso com os relés.
E se possível me da um ajuda ai como fazer ao invés de por letra para ligar e desligar ele utilizar exemplo: quando tem um ciclo = 1° liga relé 1 ch 1 até quando um fim de curso for acionado e se não ele continuar outro passo
Olá, gostaria de usar um sistema parecido, porém para abrir ou fechar som em autofalantes…
tenho 12 salas, um falante em cada, através do celular quero abrir ou fechar cada sala ed forma individual…
Outra pergunta eu posso, tbm colocar alarmes, de forma que o arduino nos horarios determinados, abra todos os falantes e toque um alarme de horario?
Boa tader. Tem como fazer foncionar pela rede de enternt ?
Boa Noite… Gostaria de utilizar este modelo para decoração de Natal em vezes das lâmpadas utilizaria pisca pisca, aqui onde moro a tensão é 220v caso eu poderia utilizar fio 1,5mm ou 2,5mm seria mesmo esquema com 16 piscas.
ola amigo gostei desse projeto sou leigo no Arduíno comecei agora a trabalhar com Arduíno nesse seu projeto eu vi que se vc mandar a letra (a) ele tanto liga como desliga teria como colocar um valor tipo (a0 liga a1 desliga) ?
Olá Maicon.
Agradeço pelo comentário!
Sim, é possível.