60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Igen. Problémafeloldás:
- egyszerre ég az összes LED?
- 2 ég csak?
- mind az 5?

Innentől az átfolyó áram 1 vagy 5 LED-re jut...
Ez fényerőváltozást jelent.

Sőt: A LED-ek gyári szórása miatt a nyitófeszültség is +/- 0.1V elmászása lehet. Ez szintén fényerőváltozásban megjelenik....

Ha egyszerre, biztosan csak 1 LED ég, akkor, talán... De a kreatív megoldás első bosszúja: na jó, fusson a 2 LED-sor egymással szemben :P - páratlan számú LED-del.

Off: ha kínai (tömeg)gyártó lennék, 1 ellenállás kerülne be, mert:
- nem küldöd garanciába vissza,
- megveszi rajtad kívül még 0.1 M ember,
- a leírásban ez feature, nem bug :),
- úgyis hiába reklamálsz...

Na, nálam ezért van benn 5 LED - 5 ellenállás.... :P

"illetve ha ez tenyleg 50mA, akkor az nem tul sok az Arduinonak?"
Nyomás vissza a 4. leckére:)!
Az Arduino lábán max 40 mA jöhet ki. Utána áramgenerátor (40 mA és a feszültséget veszi vissza) vagy sültIC :).
Avatar
glezmen
Bitmanipulátor
Hozzászólások: 139
Csatlakozott: 2012. augusztus 9. csütörtök, 6:00

Hozzászólás Szerző: glezmen »

kimerito valasz, koszonom ismet! :)
Gabka
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2013. július 24. szerda, 10:15

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Gabka »

Nekem olyan problémám lenne, hogy nagyon kezdő vagyok a témában, de viszont a suliban használtunk ilyen panelt (kép lejebb) http://kepfeltoltes.hu/view/130724/WP_2 ... es.hu_.jpg. Ezen szeretném összerakni a kapcsolást, de valahogy nem akar sikerülni, hiába kötöm rá az 5V-t és a földet, világítanak a ledek, csak a programban nem tudom hogyan kellene rájuk hivatkozni, vagy esetleg ha a panelban lévő Analog kimenetekre kötöm rá, akkor sincs siker (AVR-Duino/R3). Remélem tudtok segíteni, előre is köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Robert »

Kimenet -> drót ->panel -> ellenállás -> LED -> +5V közösen.
A kimenet magas/alacsony szintje határozza meg a LED világít/sem állapotát.

A panelen az egyes pontos összekötési rajza előtted van?
Az is lehet hiba, hogy _összevissza_ kötötted be....
Gabka
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2013. július 24. szerda, 10:15

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Gabka »

Ha így van bekötve http://kepfeltoltes.hu/view/130724/WP_2 ... es.hu_.jpg akkor teljesen jó, de amint a gnd-t átkötöm a bementre akkor nem történik semmi, lehet hogy a program a rossz vagy csak egyszerűen rossz helyre kötöm. (a piros az 5V) a program pedig csak ilyen egyszerűség hozzá, hogy megnézzem világít-e egyáltalán.
int led = 4;
void setup() {
pinMode(led, OUTPUT);
}

void loop() {
digitalWrite(led, HIGH);
delay(1000);
}
De sajnos nem történik semmi, tudom most elég butának tűnök, pedig suliban kapcsolási rajz alapján mindent jól össze tudtam rakni magamtól, úgy látszik a hard mode már nem megy :D.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: csabeszq »

Ha a GND-t átkötöd egy kimenetre, ami HIGH, akkor a VCC és a HI egyaránt +5V-on van. Teljesen logikus, hogy nem világít a LED.

Vagy a GND-t kösd át egy LOW állapotú kimenetre, vagy a VCC-t HIGH-ra.
Gabka
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2013. július 24. szerda, 10:15

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Gabka »

Mindig a GND-t kötöttem különböző kimenetekre az eredmény ugyan az volt, mivel logikusnak láttam, hogy a kimenet "pótolja" a földet. A VCC-t nem tudom mit jelent, és honnan tudom, hogy egy kimenet Hi v Low ? Azt nem én adom meg neki azzal a programmal amit írok és feltöltök a lapra ? Tudom, hogy nagyon amatőrnek tűnök, csak szeretném megérteni és megtanulni a fortélyokat, mert ahogy néztem a PLC programozás hasonló az Arduino-hoz és az egész jól jönne és szeretnék amúgy is ilyesmi téren mélyebb tudást szerezni és később talán építeni valami hasznosat. Esetleg hasonló lapon meg tudnátok mutatni, hogy mit csinálok rosszul ?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Robert »

Nem jó a programod!
Ha csak HIGH-t küldesz ki, az folyamatos +5V-t jelent (ha újrakiküldözgeted, akkor is :) )

Kód: Egész kijelölése

int led = 4;
void setup() {
pinMode(led, OUTPUT);
}

void loop() {
digitalWrite(led, HIGH); 
delay(1000);
digitalWrite(led, LOW); 
delay(1000);
}
Az utolsó 2 utasítás hiányzik.

A Vcc - Tápfeszültség, 5V
GND: A "-" ág , de pontosabban a referencia, amihez viszonyítunk. A tápoldal mínusza: szimpla táp esetén!

Kimenet: alapban LOW, de ha nem állítpod hogy kimenet legyen: minden láb bemenet!
Ha kimenetre állítasz egy lábat, akkor LOW lesz.

LOW szint: 0...1.8V, HIGH: 2,5...5V (5V tápfesz esetén. De pontosan az AVR adatlapban van (ha jól emlékszem: LOW: 0...0,3*Vcc; HIGH: 0,7*Vcc...Vcc)

A nulladik lépés: a processzor bekapcsolási állapotában: minden láb _bemenet_.
És a belső felhúzóellenállás is ki van kapcsolva.

Tipp: Lesd meg, hogy a lábnak _nem_ mondod meg hogy kimenet legyen (vagy akár _deklarálod_ hogy INPUT legyen) és a LEDvillogtatót küld rá. A LED halványan villog. Ennek az az oka, hogy a _bemenet_ is folyat magán át áramot, ha alacsony v. magas szinten van. Csak persze _nagyon_ keveset és éppen parázslik a LED. Töksötét kell hozzá + a tápvisszajelző LED-et is takard le.

Érdemes meglesni a http://www.tavir.hu oldalon a Könyvek -> egyszerű elektronika gyűjteményt....
Gabka
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2013. július 24. szerda, 10:15

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Gabka »

Köszönöm a segítséget és a türelmet, így már minden világos és működik is. :)
Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: macsek »

Freddy22 írta:a mai leckének elegánsabb megoldása:

Kód: Egész kijelölése


// Knight rider futofeny

void setup()
{
  int i;
  
   for (i = 0; i < 8; i++)
   {
     pinMode(i, OUTPUT); 
   }
}

void loop()
{
  int i;

  for (i = 0; i < 8; i++)
  {
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(50);
  }  
    for (i = 6; i >= 0; i--)
  {
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(50);
  }  
}
de gondolom a teljesen kezdők miatt nem lettek ciklusok használva

Az arduino.cc oldalon a for ciklus demonstrálására van egy (elég egyszerű) "Kinght Rider" futófény program, ugyanezzel a felépitéssel.
Mivel egyrészt logikai hibás volt, másrészt nem volt szépen megvalósítva ezért kijavítottam.
Ime:
/*
   For Loop Iteration
 
 Demonstrates the use of a for() loop. 
 Lights multiple LEDs in sequence, then in reverse.
 
 The circuit:
 * LEDs from pins 2 through 7 to ground
 
 created 2006
 by David A. Mellis
 modified 30 Aug 2011
 by Tom Igoe 
 modified by Macsek 16 Dec 2013 
 (corrected for loops, made thisPin global, created constants FIRST_PIN and LAST_PIN, capitalized TIMER)
 
 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/ForLoop
 */

int TIMER = 100; // The higher the number, the slower the timing.
int thisPin; // actual pin number
int FIRST_PIN = 2; // 1st led pin
int LAST_PIN = 7; // last led pin

void setup() {
    // use a for loop to initialize each pin as an output:
    for (thisPin = FIRST_PIN; thisPin <= LAST_PIN; thisPin++) {
        pinMode(thisPin, OUTPUT);
    }
}

void loop() {
    // loop from the lowest pin to the highest:
    for (thisPin = FIRST_PIN; thisPin <= LAST_PIN; thisPin++) {
        // turn the pin on:
        digitalWrite(thisPin, HIGH);
        delay(TIMER);
        // turn the pin off:
        digitalWrite(thisPin, LOW);
    }

    // loop from the highest pin to the lowest:
    // but we don't need the two limits as they are done by the other for loop
    for (thisPin = LAST_PIN-1; thisPin > FIRST_PIN; thisPin--) {
        // turn the pin on:
        digitalWrite(thisPin, HIGH);
        delay(TIMER);
        // turn the pin off:
        digitalWrite(thisPin, LOW);
    }
}
Keszon
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2014. február 20. csütörtök, 21:23

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Keszon »

Kedves Róbert!

A Knight Rider feladaton hamar túl tettem magam, mert egy kicsit bonyolítani akartam rajta.
A módosítással így már mindjárt egy mondjuk rendőrségi villogót kaptam. De nem tökéletes. Egy kis csalafinta elektronikai trükkel megoldottam, de mégiscsak programban lenne az igazi.
Azt hogy tudom megoldani, hogy az 5-ös kimenetem vezérlése független legyen a 0-4-ig kimenettől?
Illetve még tovább gondolva az 5-ös és 6-os egy időben működjön:

Vagy túl előre ugrottam? :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Robert »

Mit jelent a független?
Önálló villogásként?

Előreugrottál.
- Timer és megszakítás (belső hardware időzítés)
- millis(), microsecond() és itt összehasonlítás (if eljárás)

kb. 4-6 lecke mulva :)
FaBRiK
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2014. február 7. péntek, 9:11

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: FaBRiK »

Én csak most fogtam neki a tanfolyásnak (meg az Arduinonak is).
2 gondom volt ezzel a leckével:

1. Alapból nem működött. Csak a 2. LED világított. Az ok egyszerű, 0 és az 1 lábak az RX és a TX. Összeraktam az áramkört, rádugtam a gépre az Arduinot és már a sketch feltöltésénél hibaüzenet várt, annak ellenére, hogy ellenőrzésnél még minden OK volt. Persze, hiszen nem örült az 1-es lábon a LED-nek.
A megoldás, hogy eltoltam 2 lábbal az egészet. Így jó.

2. Ebben az esetben kicsit pazarlásnak tartom a 8 ellenállást. Én 1 db ellenállattal oldottam meg, amit a GND felöl kötöttem közösen a LED-ek lábára. Úgyis csak 1 LED világít egyszerre.

És egy kis plusz lehetne, hogy a 13-as PIT-t kikapcsoljuk, hogy feleslegesen ne világítson az Arduinon :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Robert »

1, Ha a Tx/Rx bekavart: kicsi volt a LED előtti ellenállás.
2, A feltöltés a LEDtől nem függ, ha a LED+ellenállás nem zavar a kommunikációba. Lsd 1. pont
3, Az egy ellenállás csak akkor igaz, ha egyszerre 1 LED ég. A valódi KnightRider esetén átúszás van a LED-ek közt. Ekkor az egy ellenállás teória megdől.
"Kici, occo kinai" módon is lehet fejleszteni. Hasonlóan tartós, és átgondolt eszközöket :)
Izeka
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2014. július 17. csütörtök, 16:43

Re: 60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

Hozzászólás Szerző: Izeka »

Üdv!
Kb 1 hónapja már Én is tanulom az arduino-t, bár sok időm sajnos nincs rá. A mai napon sikerül összehoznom egy futófényt, 6 led-el és pwm-el.

Kód: Egész kijelölése

/*
  HardPWM
  hardver alapú impulzusszelesseg-modulacio
  60 nap alatt arduino tanfolyam
  (c) TavIR http://www.tavir.hu
 */
 
byte pwm=0;     // indulasi alap
 
void setup() {                
  analogWrite(11, pwm);
  analogWrite(10, pwm);  
  analogWrite(9, pwm);
  analogWrite(6, pwm);
  analogWrite(5, pwm);
  analogWrite(3, pwm);
     //3, 5, 6, 9, 10, 11 lehet
}
 
 void tizenegy(){
      for(int pwm = 0 ; pwm <= 255; pwm +=5) { 
        analogWrite(11, pwm);         
          delay(15);                            
  }  
  
   for(int pwm = 255 ; pwm >= 0; pwm -=5) { 
        analogWrite(11, pwm);         
            delay(15);                            
  }}
 
void tiz(){
  for(int pwm = 0 ; pwm <= 255; pwm +=5) { 
        analogWrite(10, pwm);         
          delay(15);                            
  }  
  
   for(int pwm = 255 ; pwm >= 0; pwm -=5) { 
        analogWrite(10, pwm);         
          delay(15);                            
  }} 
  
  void kilenc(){
      for(int pwm = 0 ; pwm <= 255; pwm +=5) { 
        analogWrite(9, pwm);         
         delay(15);                            
  }  
  
   for(int pwm = 255 ; pwm >= 0; pwm -=5) { 
       analogWrite(9, pwm);         
         delay(15);                            
  }}
  
  void hat(){
      for(int pwm = 0 ; pwm <= 255; pwm +=5) { 
       analogWrite(6, pwm);         
        delay(15);                            
  }  
  
   for(int pwm = 255 ; pwm >= 0; pwm -=5) { 
     analogWrite(6, pwm);         
        delay(15);                            
  }}
  
  void ot(){
      for(int pwm = 0 ; pwm <= 255; pwm +=5) { 
      analogWrite(5, pwm);         
        delay(15);                            
  }  
  
   for(int pwm = 255 ; pwm >= 0; pwm -=5) { 
     analogWrite(5, pwm);         
        delay(15);                            
  }}
  
  void harom(){
      for(int pwm = 0 ; pwm <= 255; pwm +=5) { 
        analogWrite(3, pwm);         
          delay(15);                            
  }  
  
   for(int pwm = 255 ; pwm >= 0; pwm -=5) { 
       analogWrite(3, pwm);         
         delay(15);                            
  }}
   
  void loop() {
  
  tizenegy();
  tiz();
  kilenc();
  hat();
  ot();
  harom();
  ot();
  hat();
  kilenc(); 
  tiz();
  
 }
És akkor ezzel kapcsolatban lenne is egy kérdésem. Valahogy megoldható az, hogy miközben az egyik led halványodik a következő már kezdjen világosodni?
Válasz küldése