ኮድ ይፈልጉ

16 ቻናል ሪሌይ ሞጁል 5V ሪሌይ ቮልቴጅ ቋሚ

16 ቻናል ሪሌይ ሞጁል 5V ሪሌይ ቮልቴጅ ቋሚ

መግቢያ

ይህ ፕሮጀክት በብዙ ባለ 16-ቻናል 5V ሪሌይ ሞጁሎች ውስጥ የሚገኝ ወሳኝ የንድፍ ጉድለትን ያስተናግዳል። እነዚህ ሞጁሎች እንደ 5V መሣሪያዎች ቢሸጡም፣ በቦርዱ ላይ ያለው የቮልቴጅ መቆጣጠሪያ ብዙውን ጊዜ የተስተካከለውን 5V ለኦፕቶኮፕለር ዑደት ብቻ ያቀርባል፣ ይህም ትክክለኛዎቹን የሪሌይ ጠመዝማዛዎች ሙሉውን ያልተስተካከለ የግቤት ቮልቴጅ እንዲቀበሉ ያደርጋል። ሞጁሉን ከ5V በላይ በሆነ ነገር—እንደ 9V ወይም 12V አቅርቦት—ካቀለሉት፣ ሪሌዮቹን እና የተገናኙ መሣሪያዎችን የመጉዳት አደጋ ይኖርዎታል።

16 Channel Relay module
16 Channel Relay Module -2

ይህ መመሪያ የሪሌይ ጠመዝማዛዎች ሁልጊዜ ትክክለኛውን 5V እንዲቀበሉ ለማረጋገጥ ቀላል እና ውጤታማ የሃርድዌር ጥገናን ያሳያል፣ የግቤት ቮልቴጁ ምንም ይሁን። አስተማማኝነት ቁልፍ ለሆነባቸው ለማንኛውም ፕሮጀክት ይህ ወሳኝ ማሻሻያ ነው። ይህ ጥገና አስፈላጊ የሆነባቸው ጥቂት ተግባራዊ አፕሊኬሽኖች እነዚሁ ናቸው፦

  • 16 የተለያዩ መገልገያዎችን (መብራቶች፣ ማራገቢያዎች፣ ማሞቂያዎች) ከአንድ ከፍተኛ ቮልቴጅ የኃይል አቅርቦት የሚቆጣጠር የቤት አውቶሜሽን ማዕከል መገንባት።
  • የ24V የኢንዱስትሪ አቅርቦት የሚጠቀምበት፣ ነገር ግን ሎጂክ እና ሪሌዮች የተረጋጋ 5V የሚፈልጉበት የኢንዱስትሪ መቆጣጠሪያ ፓነል መፍጠር።
  • ያለ ክፍል ውድቀት ስጋት ሰፊ የግቤት ቮልቴጅ ክልል እንዲይዝ ያለውን ባለ 16-ቻናል ሪሌይ ቦርድ ማሻሻል።

የሃርድዌር አጠቃላይ እይታ

የችግሩ ዋና ነጥብ በሞጁሉ የኃይል ክፍፍል ውስጥ ነው። የግቤት ቮልቴጅ (ለምሳሌ 12V) ወደ ቮልቴጅ መቆጣጠሪያ (ብዙውን ጊዜ LM2596) ይሄዳል፣ እሱም ወደ ንጹህ 5V ይቀንሰዋል። ይሁን እንጂ ይህ የተስተካከለ 5V የሚተላለፈው የመቆጣጠሪያ ምልክቶችን የሚነጣጥሉትን ኦፕቶኮፕለሮች ለማብራት ብቻ ነው። የሪሌይ ጠመዝማዛዎች እና የULN2003 አሽከርካሪ ቺፖች በስህተት በቀጥታ ከጥሬው የግቤት ቮልቴጅ መስመር ጋር ተገናኝተዋል። ይህ ማለት የ12V ግቤት ለ5V ሪሌይ ጠመዝማዛዎች 12V ያቀርባል፣ ይህም እንዲሞቁ እና በመጨረሻም እንዲከሽፉ ያደርጋል።

ቪዲዮው ይህንን ችግር በግልጽ ያሳያል። በ8.72V ግቤት፣ የሪሌይ ጠመዝማዛው 7.75V ሲቀበል ይለካል፣ ይህም ለ5V ደረጃ ላለው ክፍል በአደገኛ ሁኔታ ከፍተኛ ነው (በቪዲዮው 03:17 ላይ)።

ሃርድዌር/ክፍሎች

  • ባለ 16-ቻናል 5V ሪሌይ ሞጁል
  • የመሸጫ ብረት እና ሽያጭ
  • የሽቦ መቁረጫ/መፈልፈያ
  • ስለት ቢላዋ ወይም የመቁረጫ መሣሪያ
  • አንድ ቁራጭ የማገናኛ ሽቦ
  • ለመሞከር መልቲሜትር
  • ለመሞከር የኃይል አቅርቦት (ለምሳሌ 9V ወይም 12V)

የሽቦ አገናኝ መመሪያ

ጥገናው ቀላል የሽቦ መለወጥ ሂደትን ያካትታል። ግቡ ULN2003 ቺፖችን እና የሪሌይ ጠመዝማዛዎችን ከሚያቀርበው የኃይል መስመር ከጥሬው ግቤት መቋረጥ እና በምትኩ ከተስተካከለው 5V ውጤት ጋር መገናኘት ነው። ቪዲዮው የተስተካከለውን ዑደት ዝርዝር ንድፍ ያቀርባል (በቪዲዮው 03:45 ላይ)።

በቪዲዮው ውስጥ የታየው የደረጃ በደረጃ ሂደት እነዚሁ ናቸው፦

  1. የኃይል መስመሩን መለየት፦ በመጀመሪያ፣ ጥሬው የግቤት ቮልቴጅ ወደ ULN2003 አሽከርካሪ ቺፖች የሚተላለፍበትን የPCB መስመሮችን ይከታተሉ። በቪዲዮው ውስጥ፣ ይህ ከአንድ ካፓሲተር ስር ወደ አሽከርካሪ ቺፖች ፒን 1 የሚሄድ መስመር ነው (በቪዲዮው 05:15 ላይ)።
  2. መስመሩን መቁረጥ፦ ስለት ቢላዋ በመጠቀም፣ ይህንን የኃይል መስመር በጥንቃቄ ይቁረጡ። ይህ አሽከርካሪ ቺፖችን እና የሪሌይ ጠመዝማዛዎችን ከጥሬው የግቤት ቮልቴጅ ያላቅቃል። ቪዲዮው ይህ ቁረጥ በ05:56 ላይ ሲደረግ ያሳያል።
  3. መቋረጡን ማረጋገጥ፦ የግቤት ቮልቴጅ ከእንግዲህ ወደ አሽከርካሪ ቺፖች እንደማይደርስ ለማረጋገጥ መልቲሜትርን በቀጣይነት ሁነታ ይጠቀሙ (በቪዲዮው 06:11 ላይ)።
  4. አዲስ ሽቦ መሸጥ፦ ከተስተካከለው 5V ውጤት ነጥብ (ቀደም ሲል ኦፕቶኮፕለሮችን ብቻ የሚያቀርበው) አሁን ወደተቋረጠው የኃይል ነጥብ አዲስ ሽቦ ይሽጡ፣ ይህም አሽከርካሪ ቺፖችን እና ሪሌዮችን ያቀርባል። ቪዲዮው የሪሌዮችን የጋራ ፒን ለመድረስ ሽቦውን በቦርዱ ላይ ባለው ነባር ቀዳዳ ሲያስተላልፍ ያሳያል (በቪዲዮው 07:06 ላይ)።
  5. ጥገናውን መሞከር፦ ሞጁሉን ከ5V በላይ በሆነ ቮልቴጅ (ለምሳሌ 15V) ያብሩ እና የሪሌይ ጠመዝማዛዎች አሁን በትክክል 5V እንደሚቀበሉ በመልቲሜትር ያረጋግጡ (በቪዲዮው 07:37 ላይ)።

የኮድ ማብራሪያ

የቀረበው የአርዱኖ ኮድ በሁሉም 16 የሪሌይ ቻናሎች ውስጥ የሚዞር ቀላል የሙከራ ፕሮግራም ነው። የሃርድዌር ጥገናዎ በትክክል እንደሚሰራ ለማረጋገጥ ሊጠቀሙበት ይችላሉ።

ሊያዋቅሩት የሚገባው በጣም አስፈላጊው ክፍል የcontrolPin ድርድር ነው። ይህ የትኞቹ የአርዱኖ ፒኖች ከሪሌይ ሞጁሉ የግቤት ፒኖች ጋር እንደተገናኙ ይገልጻል።

const int controlPin[16] = {2,3,4,5,6,7,8,9,10,11,12,A0,A1,A2,A3,A4}; // ፒኖችን ይግለጹ

ይህንን ዝርዝር ከትክክለኛው የሽቦ አገናኝዎ ጋር እንዲዛመድ ያሻሽሉት። ኮዱ ዲጂታል ፒኖች 2-12 እና አናሎግ ፒኖች A0-A4 ይጠቀማል፣ ነገር ግን እነዚህን በቦርድዎ ላይ ወደሚገኙ ማናቸውም ዲጂታል I/O ፒኖች መቀየር ይችላሉ።

ሌላ ቁልፍ ተለዋዋጭ triggerType ነው። ይህ በነባሪነት ወደ LOW ተዋቅሯል፣ ይህም ለብዙ የሪሌይ ሞጁሎች የተለመደ ነው።

const int triggerType = LOW;// የእርስዎ የሪሌይ አይነት

የእርስዎ የሪሌይ ሞጁል "ንቁ HIGH" ከሆነ (ማለትም ለማብራት HIGH ምልክት ይልካሉ)፣ ይህንን ወደ HIGH መቀየር ይችላሉ። የchannelControl() ተግባር ለሁለቱም አይነቶች ሎጂክን ያስተናግዳል፣ ስለዚህ ይህንን አንድ ተለዋዋጭ ብቻ ማስተካከል ያስፈልግዎታል።

በመጨረሻም፣ የloopDelay ተለዋዋጭ በሙከራ ዑደት ውስጥ በእ প্রতিটি ቻናል መካከል ያለውን ቆም ይቆጣጠራል።

int loopDelay = 1000;// በ loop ውስጥ መዘግየት

ሙከራውን ፈጣን ወይም ቀርፋፋ ለማድረግ ይህንን ማስተካከል ይችላሉ።

የቀጥታ ፕሮጀክት/ማሳያ

ከጥገናው በኋላ፣ ቪዲዮው ሞጁሉ በ15V ግቤት በትክክል ሲሰራ ያሳያል። መልቲሜትሩ የግቤት ቮልቴጅ 15V ሲያሳይ፣ በሪሌይ ጠመዝማዛው ላይ ያለው የተስተካከለ ቮልቴጅ ደግሞ የተረጋጋ እና ደህንነቱ የተጠበቀ 5V ነው (በቪዲዮው 08:10 ላይ)። ሪሌዮቹ እንደተጠበቀው ይጫኑና ይከፈታሉ፣ ይህም ጥገናው የተሳካ መሆኑን እና ሞጁሉ አሁን ያለ ጉዳት ከፍተኛ የግቤት ቮልቴጅ መቆጣጠር እንደሚችል ያረጋግጣል።

ምዕራፎች

  • [00:00] የ16-ቻናል ሪሌይ የቮልቴጅ ችግር መግቢያ
  • [00:34] የንድፍ ጉድለቱን መለየት
  • [01:56] የቮልቴጅ ችግሩን ማሳየት
  • [03:45] የተስተካከለው የወረዳ ስዕላዊ መግለጫ
  • [05:07] የተሳሳተውን የኃይል መስመር መቁረጥ
  • [06:34] አዲሱን የ5V ግንኙነት መሸጥ
  • [07:37] ጥገናውን በ15V ግብዓት መሞከር
  • [08:24] ማጠቃለያ እና የመጨረሻ ሐሳቦች

ምስሎች

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

}

እንደሚያስፈልግዎት ይችላል

ፋይሎች📁

ስኬማቲክ