microdev.gr




Περιγραφή-Σκοπός της εφαρμογής

Στις περισσότερες πραγματικές εφαρμογές, πρέπει να διαχειριζόμαστε πλήθος από LED. Όταν τα LED είναι αρκετά σε αριθμό (σε κάποιες περιπτώσεις μπορεί να είναι και εκατοντάδες), τότε θα πρέπει να αντιμετωπίσουμε αποτελεσματικά τους αντίστοιχους περιορισμούς του Arduino ή κάποιας παρόμοιας πλατφόρμας. Ο πρώτος περιορισμός είναι το πλήθος των διαθέσιμων ακροδεκτών του Arduino, αφού επιθυμούμε να ελέγχουμε κάθε LED ξεχωριστά, ενώ ο δεύτερος σχετίζεται με το συνολικό ρεύμα το οποίο πρέπει να παρέχεται στο κύκλωμα. Θυμηθείτε ότι το Arduino μπορεί να δώσει μερικές δεκάδες mA ρεύμα μόνο. Ο πρώτος περιορισμός αντιμετωπίζεται με χρήση πρόσθετων κυκλωμάτων (μεταξύ Arduino και LED), τα οποία συναντάμε συνήθως σε έτοιμες πλακέτες που αγοράζουμε. Από την άλλη μεριά, η παροχή ρεύματος γίνεται από κάποια εξωτερική πηγή ή τον ακροδέκτη 5V του Arduino ο οποίος μπορεί να δώσει ρεύμα της τάξης των 500mA. Γενικά όμως, χρησιμοποιούμε εξωτερικές πηγές τάσης, αφού επιθυμούμε τη χρήση πολλών LED (π.χ. κυλιόμενο μήνυμα σε μια πινακίδα LED). Σε αυτή την ενότητα παρουσιάζουμε ένα δικό μας (απλό κύκλωμα με 8 LED στο breadboard) και ένα αγορασμένο κύκλωμα, ενώ συζητάμε το πώς θα τα διαχειριστούμε αναδεικνύοντας και τα χαρακτηριστικά που θα πρέπει να έχει ο αντίστοιχος κώδικας. Υιοθετώντας τη φιλοσοφία του κώδικα για το δικό μας κύκλωμα, την αξιοποιούμε για τη διαχείριση ενός νέου, αγορασμένου αυτή τη φορά κυκλώματος, παρά το γεγονός ότι σε αυτό η ενεργοποίηση γίνεται στο LOW, σύμφωνα με τις οδηγίες του κατασκευαστή. Σε άλλη εφαρμογή, θα βρείτε τη χρήση του ολοκληρωμένου κυκλώματος 74HC595 (Shift Register) για την αποτελεσματική διαχείριση πολλών LED.

Βίντεο

Απλό κύκλωμα στο Breadboard


Δοκιμαστικός κώδικας #1

//LED 5-12
void setup()
{
  int i;
  for(i=5;i<=12;i++)
    pinMode(i,OUTPUT);

}

void loop()
{
  int i;
  for(i=5;i<=12;i++)
    {
      digitalWrite(i,HIGH);
      delay(100);
      digitalWrite(i,LOW);  
      delay(100);
    }
  for(i=12;i>=5;i--)
    {
      digitalWrite(i,HIGH);
      delay(100);
      digitalWrite(i,LOW);  
      delay(100);
    }
    

}

Δοκιμαστικός κώδικας #2

//LED 5-12
int d=100;
void setup()
{
  int i;
  for(i=5;i<=12;i++)
    pinMode(i,OUTPUT);

}

void loop()
{
  int i;
  for(i=5;i<=12;i++)
    {
      digitalWrite(i,HIGH);
      delay(d);
      digitalWrite(i,LOW); 
      delay(d);
    }
  for(i=12;i>=5;i--)
    {
      digitalWrite(i,HIGH);
      delay(d);
      digitalWrite(i,LOW); 
      delay(d);
    }
   

}

Δοκιμαστικός κώδικας #3

//LED 5-12
int d=100;
void setup()
{
  int i;
  for(i=5;i<=12;i++)
    pinMode(i,OUTPUT);

}

void loop()
{
 
 led_up();
 led_down();
   

}

void led_up()
{
  int i;
  for(i=5;i<=12;i++)
    {
      digitalWrite(i,HIGH);
      delay(d);
      digitalWrite(i,LOW); 
      delay(d);
    }
}

void led_down()
{
   int i;
   for(i=12;i>=5;i--)
    {
      digitalWrite(i,HIGH);
      delay(d);
      digitalWrite(i,LOW); 
      delay(d);
    }
}

Έτοιμο κύκλωμα


Δοκιμαστικός κώδικας #1

//2-9 LED
//10-12 COLOR
int red=10;
int green=11;
int blue=12;
void setup()
{
  int i;
  for(i=2;i<=12;i++)
  {
    pinMode(i,OUTPUT);
    digitalWrite(i,HIGH);
    }
}
void loop()
{
  digitalWrite(red,LOW);
  int i;
  for(i=2;i<=9;i++)
  {
    digitalWrite(i,LOW);
    delay(100);
    digitalWrite(i,HIGH);
    delay(100);
    }

}

Δοκιμαστικός κώδικας #2 (με νέα συνάρτηση)

//2-9 LED
//10-12 COLOR
int red=10;
int green=11;
int blue=12;
void setup()
{
  int i;
  for(i=2;i<=12;i++)
  {
    pinMode(i,OUTPUT);
    digitalWrite(i,HIGH);
    }
}
void loop()
{
  run_color(LOW, HIGH, HIGH); //red
  run_color(HIGH, LOW, HIGH); //green
  run_color(HIGH, HIGH, LOW); //blue
 

}

void run_color(int r, int g, int b)
{
  digitalWrite(red,r);
  digitalWrite(green,g);
  digitalWrite(blue,b);
  int i;
  for(i=2;i<=9;i++)
  {
    digitalWrite(i,LOW);
    delay(100);
    digitalWrite(i,HIGH);
    delay(100);
    }

}