Pretraži kod

16 kanalni relej modul 5V napon releja fiksni

16 kanalni relej modul 5V napon releja fiksni

Uvod

Ovaj projekat rješava kritičnu grešku u dizajnu koja se nalazi u mnogim 16-kanalnim 5V relejnim modulima. Iako se ovi moduli prodaju kao 5V uređaji, naponski regulator na ploči često napaja regulisanih 5V samo optokaplerska kola, ostavljajući same zavojnice releja da primaju pun, neregulisani ulazni napon. Ako modul napajate naponom većim od 5V—poput napajanja od 9V ili 12V—rizikujete oštećenje releja i svih povezanih uređaja.

16 Channel Relay module
16 Channel Relay Module -2

Ovaj vodič prikazuje jednostavnu i efikasnu hardversku popravku koja osigurava da zavojnice releja uvijek primaju ispravnih 5V, bez obzira na ulazni napon. Ovo je ključna modifikacija za svaki projekat gdje je pouzdanost bitna. Evo nekoliko praktičnih primjena gdje je ova popravka neophodna:

  • Izgradnja kućnog automatizacijskog čvorišta koje kontroliše 16 različitih uređaja (svjetla, ventilatori, grijalice) iz jednog napajanja višeg napona.
  • Kreiranje industrijskog upravljačkog panela gdje se koristi industrijsko napajanje od 24V, ali logika i releji zahtijevaju stabilnih 5V.
  • Nadogradnja postojeće 16-kanalne relejne ploče za rad sa širim rasponom ulaznih napona bez rizika od kvara komponenti.

Pregled hardvera

Srž problema leži u distribuciji napajanja modula. Ulazni napon (npr. 12V) dovodi se do naponskog regulatora (često LM2596) koji ga spušta na čistih 5V. Međutim, ovaj regulisani 5V se usmjerava samo za napajanje optokaplera, koji izoluju upravljačke signale. Zavojnice releja i ULN2003 drajver čipovi su pogrešno povezani direktno na sirovu liniju ulaznog napona. To znači da bi ulaz od 12V napajao zavojnice releja od 5V sa 12V, uzrokujući njihovo pregrijavanje i eventualni kvar.

Video jasno prikazuje ovaj problem. Sa ulazom od 8.72V, zavojnica releja se mjeri da prima 7.75V, što je opasno visoko za komponentu predviđenu za 5V (u videu na 03:17).

Hardver/Komponente

  • 16-kanalni 5V relejni modul
  • Lemilica i lem
  • Rezač za žicu/skidač izolacije
  • Oštar nož ili alat za rezanje
  • Komad spojne žice
  • Multimetar za testiranje
  • Napajanje (npr. 9V ili 12V) za testiranje

Vodič za povezivanje

Popravka uključuje jednostavnu proceduru ponovnog povezivanja. Cilj je prekinuti strujni trag koji napaja ULN2003 čipove i zavojnice releja sa sirovog ulaza i umjesto toga ih povezati na regulisani 5V izlaz. Video pruža detaljnu šemu ispravljenog kola (u videu na 03:45).

Evo procesa korak po korak prikazanog u videu:

  1. Identifikujte strujni trag: Prvo, pratite PCB tragove da pronađete gdje je sirovi ulazni napon usmjeren na ULN2003 drajver čipove. U videu, ovo je trag koji prolazi ispod kondenzatora do pina 1 drajver čipova (u videu na 05:15).
  2. Presjecite trag: Koristeći oštar nož, pažljivo presjecite ovaj strujni trag. Ovo prekida vezu drajver čipova i zavojnica releja sa sirovim ulaznim naponom. Video prikazuje ovaj rez na 05:56.
  3. Provjerite prekid: Koristite multimetar u režimu kontinuiteta da potvrdite da ulazni napon više ne stiže do drajver čipova (u videu na 06:11).
  4. Zalemite novu žicu: Zalemite novu žicu od tačke regulisanog 5V izlaza (koja je prethodno napajala samo optokaplere) do sada prekinute tačke napajanja koja napaja drajver čipove i releje. Video prikazuje provlačenje žice kroz postojeću rupu na ploči kako bi se došlo do zajedničkog pina releja (u videu na 07:06).
  5. Testirajte popravku: Napajajte modul naponom većim od 5V (npr. 15V) i provjerite multimetrom da zavojnice releja sada primaju tačno 5V (u videu na 07:37).

Objašnjenje koda

Priloženi Arduino kod je jednostavan testni program za prolazak kroz svih 16 relejnih kanala. Možete ga koristiti za provjeru da vaša hardverska popravka radi ispravno.

Najvažniji dio koji trebate konfigurisati je controlPin niz. Ovo definiše koji Arduino pinovi su povezani na ulazne pinove relejnog modula.

const int controlPin[16] = {2,3,4,5,6,7,8,9,10,11,12,A0,A1,A2,A3,A4}; // definišite pinove

Izmijenite ovu listu prema vašem stvarnom povezivanju. Kod koristi digitalne pinove 2-12 i analogne pinove A0-A4, ali ih možete promijeniti u bilo koje dostupne digitalne I/O pinove na vašoj ploči.

Još jedna ključna varijabla je triggerType. Ovo je podrazumijevano postavljeno na LOW, što je uobičajeno za mnoge relejne module.

const int triggerType = LOW;// vaš tip releja

Ako je vaš relejni modul "aktivan na HIGH" (što znači da šaljete HIGH signal za uključivanje), možete ovo promijeniti u HIGH. Funkcija channelControl() upravlja logikom za oba tipa, tako da trebate samo podesiti ovu jednu varijablu.

Konačno, varijabla loopDelay kontroliše pauzu između svakog kanala u testnom ciklusu.

int loopDelay = 1000;// kašnjenje u petlji

Možete je podesiti da test bude brži ili sporiji.

Živi projekat/Demonstracija

Nakon popravke, video prikazuje modul koji radi savršeno sa ulazom od 15V. Multimetar pokazuje ulazni napon od 15V, dok je regulisani napon na zavojnici releja stabilnih i sigurnih 5V (u videu na 08:10). Releji se uključuju i isključuju kliktanjem kako se očekuje, potvrđujući da je popravka uspješna i da modul sada može podnijeti više ulazne napone bez oštećenja.

Poglavlja

  • [00:00] Uvod u problem napona 16-kanalnog releja
  • [00:34] Identifikacija greške u dizajnu
  • [01:56] Demonstracija problema s naponom
  • [03:45] Shema ispravljenog kruga
  • [05:07] Rezanje pogrešnog strujnog traga
  • [06:34] Lemljenje nove 5V veze
  • [07:37] Testiranje popravka s ulazom od 15V
  • [08:24] Zaključak i završne misli

Slike

16 Channel Relay module
16 Channel Relay module
16 Channel Relay Module -3
16 Channel Relay Module -3
16 Channel Relay Module -2
16 Channel Relay Module -2
16 Channel Relay Module size
16 Channel Relay Module size
16 Channel Relay Module IC and Optocouplers
16 Channel Relay Module IC and Optocouplers
16 Channel Relay Module
16 Channel Relay Module
16 Channel Relay module 12V vs 5V difference
16 Channel Relay module 12V vs 5V difference
160-Code to control a 16-channel relay module using Arduino
Jezik: C++
/*
 * Arduino code to control 16 channel relay with Arduino UNO
 * 
 * Written by Ahmad Shamshiri for Robojax.com on Sunday, October 8, 2018 
 * at 10:35 in Ajax, Ontario, Canada
 * Watch video instructions for this code: https://youtu.be/Q9aBI4ELKC4
 * 
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


const int controlPin[16] = {2,3,4,5,6,7,8,9,10,11,12,A0,A1,A2,A3,A4}; // define pins

const int triggerType = LOW;// your relay type
int loopDelay = 1000;// delay in loop
int tmpStat =1;


void setup() {
  for(int i=0; i<16; i++)
  {
    pinMode(controlPin[i], OUTPUT);// set pin as output
    if(triggerType ==LOW){
      digitalWrite(controlPin[i], HIGH); // set initial state OFF for low trigger relay
    }else{
       digitalWrite(controlPin[i], LOW); // set initial state OFF for high trigger relay     
    }
  }
  
  Serial.begin(9600);// initialize serial monitor with 9600 baud
}

void loop() {

  for(int i=0; i<16; i++)
  {

   channelControl(i,tmpStat,200);// turn each relay ON for 200ms

    
  }
  if(tmpStat)
  {
    tmpStat=0;
  }else{
    tmpStat=1;
  }
 Serial.println("===============");
 //channelControl(6,1, 2000); // turn relay 7 ON for 2 seconds
 //channelControl(6,0, 5000); // turn relay 7 OFF for 5 seconds
 //channelControl(9,1, 3000); // turn relay 10 OFF for ever

 delay(loopDelay);// wait for loopDelay ms
          
}

/*
 * funciton: channelControl
 * turns ON or OFF specific relay channel
 * @param relayChannel is integer value channel from 0 to 15
 * @param action is 1 for ON or 0 for OFF
 * @param t is time in milliseconds
 */
void channelControl(int relayChannel, int action, int t)
{
  int state =LOW;
  String statTXT =" ON";
  if(triggerType == LOW)
  {    
    if (action ==0)// if OFF requested
    {
      state = HIGH;
      statTXT = " OFF";
    }
    digitalWrite(controlPin[relayChannel], state);
    if(t >0 )
    {
      delay(t);
    }
       Serial.print ("Channel: ");
       Serial.print(relayChannel); 
       Serial.print(statTXT);
       Serial.print(" - "); 
       Serial.println(t);        
  }else{
    if (action ==1)// if ON requested
    {
      state = HIGH;     
    }else{
      statTXT = " OFF";    
    }
    digitalWrite(controlPin[relayChannel], state);
    if(t >0 )
    {
      delay(t);
    }
       Serial.print ("Channel: ");
       Serial.print(relayChannel); 
       Serial.print(statTXT);
       Serial.print(" - "); 
       Serial.println(t);    
  }

}

Datoteke📁

Šema