Search Code

16 Kanallı Röle modülü 5V röle voltajı sabit

16 Kanallı Röle modülü 5V röle voltajı sabit

Giriş

Bu proje, birçok 16 kanallı 5V röle modülünde bulunan kritik bir tasarım hatasını ele almaktadır. Bu modüller 5V cihazlar olarak pazarlanmasına rağmen, kart üzerindeki voltaj regülatörü genellikle regüle edilmiş 5V'u yalnızca optokuplör devresine sağlar ve gerçek röle bobinlerini tam, regüle edilmemiş giriş voltajına maruz bırakır. Modüle 5V'dan daha yüksek bir voltajla (örneğin 9V veya 12V güç kaynağı) güç verirseniz, rölelere ve bağlı cihazlara zarar verme riskiyle karşı karşıya kalırsınız.

16 Channel Relay module
16 Channel Relay Module -2

Bu kılavuz, giriş voltajı ne olursa olsun röle bobinlerinin her zaman doğru 5V'u almasını sağlamak için basit ve etkili bir donanım düzeltmesi göstermektedir. Bu, güvenilirliğin anahtar olduğu herhangi bir proje için çok önemli bir değişikliktir. Bu düzeltmenin gerekli olduğu birkaç pratik uygulama şunlardır:

  • Tek bir yüksek voltajlı güç kaynağından 16 farklı cihazı (ışıklar, fanlar, ısıtıcılar) kontrol eden bir ev otomasyon merkezi kurmak.
  • 24V endüstriyel bir güç kaynağının kullanıldığı ancak mantık ve rölelerin kararlı bir 5V gerektirdiği bir endüstriyel kontrol paneli oluşturmak.
  • Mevcut bir 16 kanallı röle kartını, bileşen arızası riski olmadan daha geniş bir giriş voltajı aralığını işleyecek şekilde yükseltmek.

Donanıma Genel Bakış

Sorunun özü, modülün güç dağıtımında yatmaktadır. Giriş voltajı (örneğin 12V), onu temiz bir 5V'a düşüren bir voltaj regülatörüne (genellikle bir LM2596) beslenir. Ancak bu regüle edilmiş 5V, yalnızca kontrol sinyallerini izole eden optokuplörlere güç sağlamak için yönlendirilir. Röle bobinleri ve ULN2003 sürücü çipleri yanlışlıkla doğrudan ham giriş voltajı hattına bağlanır. Bu, 12V'luk bir girişin 5V röle bobinlerine 12V sağlayacağı ve bunların aşırı ısınmasına ve sonunda arızalanmasına neden olacağı anlamına gelir.

Video bu sorunu açıkça göstermektedir. 8.72V'luk bir girişle, röle bobininin 7.75V aldığı ölçülür; bu, 5V dereceli bir bileşen için tehlikeli derecede yüksektir (videoda 03:17'de).

Donanım/Bileşenler

  • 16 Kanallı 5V Röle Modülü
  • Havya ve lehim
  • Tel kesici/sıyırıcı
  • Keskin bir bıçak veya kesme aleti
  • Bir parça bağlantı teli
  • Test için multimetre
  • Test için güç kaynağı (örneğin 9V veya 12V)

Kablolama Kılavuzu

Düzeltme, basit bir yeniden kablolama prosedürünü içerir. Amaç, ULN2003 çiplerine ve röle bobinlerine ham girişten güç sağlayan izi kesmek ve bunun yerine bunları regüle edilmiş 5V çıkışına bağlamaktır. Video, düzeltilmiş devrenin ayrıntılı bir şemasını sağlar (videoda 03:45'te).

Videoda gösterilen adım adım süreç şu şekildedir:

  1. Güç İzini Tanımlayın: İlk olarak, ham giriş voltajının ULN2003 sürücü çiplerine nereye yönlendirildiğini bulmak için PCB izlerini takip edin. Videoda bu, bir kapasitörün altından sürücü çiplerinin pin 1'ine uzanan bir izdir (videoda 05:15'te).
  2. İzi Kesin: Keskin bir bıçak kullanarak bu güç izini dikkatlice kesin. Bu, sürücü çiplerini ve röle bobinlerini ham giriş voltajından ayırır. Video bu kesimin 05:56'da yapıldığını gösterir.
  3. Bağlantının Kesildiğini Doğrulayın: Giriş voltajının artık sürücü çiplerine ulaşmadığını doğrulamak için süreklilik modunda bir multimetre kullanın (videoda 06:11'de).
  4. Yeni Bir Tel Lehimleyin: Daha önce yalnızca optokuplörleri besleyen regüle edilmiş 5V çıkış noktasından, sürücü çiplerini ve röleleri besleyen artık bağlantısı kesilmiş güç noktasına yeni bir tel lehimleyin. Video, rölelerin ortak pinine ulaşmak için telin kart üzerindeki mevcut bir delikten geçirildiğini gösterir (videoda 07:06'da).
  5. Düzeltmeyi Test Edin: Modüle 5V'dan daha yüksek bir voltajla (örneğin 15V) güç verin ve röle bobinlerinin artık tam olarak 5V aldığını bir multimetre ile doğrulayın (videoda 07:37'de).

Kod Açıklaması

Sağlanan Arduino kodu, 16 röle kanalının tamamında döngü yapan basit bir test programıdır. Donanım düzeltmenizin doğru çalıştığını doğrulamak için kullanabilirsiniz.

Sizin için yapılandırmanız gereken en önemli kısım controlPin dizisidir. Bu, Arduino pinlerinden hangilerinin röle modülünün giriş pinlerine bağlı olduğunu tanımlar.

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

Bu listeyi gerçek kablolamanıza uyacak şekilde değiştirin. Kod, dijital pinler 2-12 ve analog pinler A0-A4'ü kullanır, ancak bunları kartınızdaki mevcut herhangi bir dijital G/Ç pinine değiştirebilirsiniz.

Bir diğer önemli değişken triggerType değişkenidir. Bu, birçok röle modülü için yaygın olan varsayılan olarak LOW olarak ayarlanmıştır.

const int triggerType = LOW;// röle tipiniz

Röle modülünüz "aktif YÜKSEK" ise (açmak için YÜKSEK bir sinyal gönderdiğiniz anlamına gelir), bunu HIGH olarak değiştirebilirsiniz. channelControl() işlevi her iki tip için de mantığı işler, bu nedenle yalnızca bu tek değişkeni ayarlamanız gerekir.

Son olarak, loopDelay değişkeni test döngüsündeki her kanal arasındaki beklemeyi kontrol eder.

int loopDelay = 1000;// döngüdeki gecikme

Testi daha hızlı veya daha yavaş yapmak için bunu ayarlayabilirsiniz.

Canlı Proje/Gösterim

Düzeltmeden sonra video, modülün 15V girişle mükemmel şekilde çalıştığını gösterir. Multimetre, giriş voltajını 15V olarak gösterirken, röle bobinindeki regüle edilmiş voltaj kararlı ve güvenli bir 5V'dur (videoda 08:10'da). Röleler beklendiği gibi açılıp kapanır ve düzeltmenin başarılı olduğunu ve modülün artık hasar görmeden daha yüksek giriş voltajlarını işleyebileceğini doğrular.

Bölümler

  • [00:00] 16 Kanallı Röle Voltaj Sorununa Giriş
  • [00:34] Tasarım Hatasının Belirlenmesi
  • [01:56] Voltaj Sorununun Gösterilmesi
  • [03:45] Düzeltilmiş Devrenin Şeması
  • [05:07] Hatalı Güç İzinin Kesilmesi
  • [06:34] Yeni 5V Bağlantısının Lehimlenmesi
  • [07:37] 15V Giriş ile Onarımın Test Edilmesi
  • [08:24] Sonuç ve Son Düşünceler

Görseller

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
Dil: 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);    
  }

}

Dosyalar📁

Şematik