Play Video

11 - CONTROLLING THOUSANDS OF LEDS | SHIFT REGISTERS | 74HC595

Arduino බෝඩ් එකක ඇති සීමිත පින් ප්‍රමානයෙන් ඔබ්බට ගොස් විශාල බාහිර උපකරණ සවි කිරීම පිලිබඳ මෙයින් කතා කිරීමට බලාපොරොත්තු වේ.
Shift Registers කුමක්ද? කොහොමද ඒව වැඩ කරන්නෙ? කියන එක ගැන මේ වීඩියෝවේදී කතා කරනවා.

Task 1 - Using shift registers with arduino

❒ Components

Circuit and Code

74HC595 IC සඳහා 3.7v දෙනවානම් පහත පරිපථ සැකසුම භාවිත කරන්න. 5v හෝ ඊට වැඩි වෝල්ටේජ් එකක් ICසඳහා ලභා දෙනවානම්. සෑම LED එකක් සඳහාම 180-330 ohms අතර අගයකින් යුත් Resistors 8ක් භාවිත කරන්න.

Arduino Code එක පහතින් ලබාගන්න.

/*
  by Dileepa Jayawardena
  ii.lk
*/

int SER_Pin = 8;   //pin 14 on the 75HC595
int RCLK_Pin = 9;  //pin 12 on the 75HC595
int SRCLK_Pin = 10; //pin 11 on the 75HC595

//How many of the shift registers - change this ***
#define number_of_74hc595s 1

//numOfRegisterPins Counting number of pins
#define numOfRegisterPins number_of_74hc595s * 8

boolean registers[numOfRegisterPins];

void setup() {
  pinMode(SER_Pin, OUTPUT);
  pinMode(RCLK_Pin, OUTPUT);
  pinMode(SRCLK_Pin, OUTPUT);


  //reset all register pins
  clearRegisters();
  writeRegisters();
}


//set all register pins to LOW
void clearRegisters() {
  for (int i = numOfRegisterPins - 1; i >=  0; i--) {
    registers[i] = LOW;
  }
}

void writeRegisters() {

  digitalWrite(RCLK_Pin, LOW);

  for (int i = numOfRegisterPins - 1; i >=  0; i--) {
    digitalWrite(SRCLK_Pin, LOW);

    int val = registers[i];

    digitalWrite(SER_Pin, val);
    digitalWrite(SRCLK_Pin, HIGH);

  }
  digitalWrite(RCLK_Pin, HIGH);

}

void setRegisterPin(int index, int value) {
  registers[index] = value;
}


void loop() {
for(int i=0;i< numOfRegisterPins;i++){
  setRegisterPin(i, HIGH);
  writeRegisters();
  setRegisterPin(i, LOW);
  delay(100);
  }

for(int i=numOfRegisterPins-2;i>0;i--){
  setRegisterPin(i, HIGH);
  writeRegisters();
  setRegisterPin(i, LOW);
  delay(100);
  }
  
}

Task 2 - Shift Registers කීපයක සම්බන්දයෙන් විශාල ප්‍රමාණයක් භාවිතා කිරීමට

❒ Components

Circuit and Code

74HC595 IC සඳහා 3.7v දෙනවානම් පහත පරිපථ සැකසුම භාවිත කරන්න. 5v හෝ ඊට වැඩි වෝල්ටේජ් එකක් ICසඳහා ලභා දෙනවානම්. සෑම LED එකක් සඳහාම 180-330 ohms අතර අගයකින් යුත් Resistors 8ක් භාවිත කරන්න.
ආර්ඩුයිනෝ බෝඩ් එකේ I/O pin එකකින් ලභාගත හැකි උපරිම 5v 40 mA ක් පමණි. නමුත් 5v පින් එකෙන් IC සඳහා විදුලිය ලභා දෙන බැවින් LED 50ක් පමණ **එක වර දැල්වීම කල හැක.

ඊටත් වඩා වැඩි ප්‍රමානයක් සම්බන්ද කරනවානම්, බාහිරින් 5v වැඩි ඇම්පියර් ගනනක් IC වලට ලබා දෙන්න පුලුවන්. එවිට Arduino board එකේ Ground pin එක හා භාහිර විදුලියේ Ground (-) එක හා සම්බන්ද කරන්න.

Arduino Code එක පහතින් ලබාගන්න.

/*
  by Dileepa Jayawardena
  ii.lk
*/

int SER_Pin = 8;   //pin 14 on the 75HC595
int RCLK_Pin = 9;  //pin 12 on the 75HC595
int SRCLK_Pin = 10; //pin 11 on the 75HC595

//How many of the shift registers - change this ***
#define number_of_74hc595s 5

//numOfRegisterPins Counting number of pins
#define numOfRegisterPins number_of_74hc595s * 8

boolean registers[numOfRegisterPins];

void setup() {
  pinMode(SER_Pin, OUTPUT);
  pinMode(RCLK_Pin, OUTPUT);
  pinMode(SRCLK_Pin, OUTPUT);


  //reset all register pins
  clearRegisters();
  writeRegisters();
}


//set all register pins to LOW
void clearRegisters() {
  for (int i = numOfRegisterPins - 1; i >=  0; i--) {
    registers[i] = LOW;
  }
}

void writeRegisters() {

  digitalWrite(RCLK_Pin, LOW);

  for (int i = numOfRegisterPins - 1; i >=  0; i--) {
    digitalWrite(SRCLK_Pin, LOW);

    int val = registers[i];

    digitalWrite(SER_Pin, val);
    digitalWrite(SRCLK_Pin, HIGH);

  }
  digitalWrite(RCLK_Pin, HIGH);

}

void setRegisterPin(int index, int value) {
  registers[index] = value;
}


void loop() {

  setPattern(4);
  /*
    1-one led left to right right to left
    2-2 Leds runnig two ways
    3-Fill and empty LED list
    4-Fire Fill
  */
}

void setPattern(int pt) {
  if (pt == 1) {
    runLeftRight();
  } else if (pt == 2) {
    runTwoWay();
  } else if (pt == 3) {
    setFillAndEmpty();
  } else if (pt == 4) {
    runFireFill();
  }
}

void runLeftRight() {
  for (int i = 0; i < numOfRegisterPins; i++) {
    setRegisterPin(i, HIGH);
    writeRegisters();
    setRegisterPin(i, LOW);
    delay(5);
  }
  for (int i = numOfRegisterPins - 2; i > 0; i--) {
    setRegisterPin(i, HIGH);
    writeRegisters();
    setRegisterPin(i, LOW);
    delay(5);
  }
}


void runTwoWay() {

  for (int i = 0; i < numOfRegisterPins; i++) {
    setRegisterPin(i, HIGH);//LEft Side LED
    setRegisterPin(numOfRegisterPins - i, HIGH); //Right Side LED
    writeRegisters();
    setRegisterPin(i, LOW);
    setRegisterPin(numOfRegisterPins - i, LOW);
    delay(15);
  }
}

void setFillAndEmpty() {
  for (int i = 0; i < numOfRegisterPins/2; i++) {
    setRegisterPin(i, HIGH);//LEft Side LED
    setRegisterPin(numOfRegisterPins - i, HIGH); //Right Side LED
    writeRegisters();
    delay(15);
  }
  for (int i = 0; i < numOfRegisterPins/2; i++) {
    setRegisterPin(i, LOW);//LEft Side LED
    setRegisterPin(numOfRegisterPins - i,LOW); //Right Side LED
    writeRegisters();
    delay(15);
  }

  for (int i = ( numOfRegisterPins/2)-1; i >-1; i--) {
    setRegisterPin(i, HIGH);//LEft Side LED
    setRegisterPin(numOfRegisterPins - i, HIGH); //Right Side LED
    writeRegisters();
    delay(15);
  }
  for (int i = ( numOfRegisterPins/2)-1; i >-1; i--) {
    setRegisterPin(i, LOW);//LEft Side LED
    setRegisterPin(numOfRegisterPins - i,LOW); //Right Side LED
    writeRegisters();
    delay(15);
  }
  
}

int firecount=0;
void runFireFill(){

  if(firecount==0){
     firecount=numOfRegisterPins;
    }
     firecount--;
  
   for (int i = 0; i < firecount; i++) {
    setRegisterPin(i, HIGH);

     for (int ii = numOfRegisterPins-1; ii > firecount; ii--) {
      setRegisterPin(ii, HIGH);
      }
    
    writeRegisters();
    setRegisterPin(i, LOW);
    
    delay(20);
  }
 
  }

වැඩිදුර:

74HC595 IC එකක පින් එකකට IED වැඩි ප්‍රමාණයක් Parallel ලෙස සම්බන්ද කිරීමට බලාපොරොත්තු වෙනවාන. ලබා දෙන වෝල්ටීයතාවයට අනුරූප ඇම්පියර් ප්‍රමාණ පහතින් දක්වා ඇත.
ඊටත් වඩා වැඩි LED ප්‍රමාණයක් එක් පින් එකකට Parallel ලෙස සම්බන්ද කිරීමට අදහස් කරනවානම් ට්‍රන්සිස්ටරයක් හරහා සෑම පින් එකකටම විදුලිය ලබාදීමට සැලකිලිමත් වන්න.

01 – ARDUINO INTRODUCTION

Play Video 01 – Arduino Introduction මෙම වීඩියෝ මාලාව ලංකාවේ ලක්ශ සංක්්‍ාත පිරිසක් නරභා ඇති වීඩියෝ මාලාවකි. Arduino මූලික දැනීම සම්පූර්ණ කරගැනීමට එම වීඩියෝ මාලාවෙන් හැකි වේ. එසේම නව...

02 – Arduino Boards Review

Play Video 02 – Arduino Boards Review විවිද වර්ගයේ ආර්ඩුයිනෝ බෝඩ් වර්ග වෙලඳපොලේ දකින්නට ලැබෙනවා. අපගේ නිර්මාණ වලට ගැලපෙන සේ අපට අවැසි බෝඩ් තෝරෑ ගැනීමට හැකි වන සේ ඒවාගේ...

03 – Start Programming / Digital Write / Blink LED

Play Video 03 – Start Programming / Digital Write / Blink LED ආර්ඩුයිනෝ ප්‍රොග්‍රැමින්ග් හා පරිපථ නිර්මාණය සඳහා මූලික පියවර තැබීමට මේ වීඩියෝවෙන් බලාපොරොත්තු වෙනවා. ❒ Download Arduino IDE...

0
Would love your thoughts, please comment.x
()
x