Skocz do zawartości

Kurs Arduino II - #2 - diody RGB (tradycyjne oraz WS2812)


Pomocna odpowiedź

Dzień Dobry

image.thumb.png.3acac32e9a40373ec8c398329c9194c7.png

Układ z kursu. Czy ktoś mi może powiedzieć dlaczego odłączenie skreślonego połączenia spaliło Arduino 😞

Bo to, że spaliłem to jedno ale to, że nie wiem dlaczego to słabo. Wydawało mi się, że nic się nie może stać.

Pobawiłem się światełkami i wrzuciłem samplowy program "Blink" i wypiąłem podwójną masę z listwy LEDów.

Zaśmierdziało spalenizną i Arduino nie działa, a na 5V wyjściu mam 10V... 

  • 3 tygodnie później...

@Elendil jeśli układ zasilany jest z 5 V USB lub nawet z baterii 9 V to nie jest możliwe, aby na wyjściu było 10 V. Może to być jakiś błąd pomiarowy. Odłączenie masy od modułu z diodami nie może spalić układu, diody po prostu przestaną wtedy świecić. Obawiam się, że problem musiał leżeć gdzieś indziej. Jeśli jeszcze masz układ w niezmienionej formie to wstaw zdjęcie połączenia - sprawdzimy 🙂 

  • 1 miesiąc później...
(edytowany)

Hej. Mam problem z ćwiczeniem odnośnie linijki led. Połączyłem kod z wcześniejszym ćwiczeniem z dwoma diodami RGB. I o dziwo linijka led nie działa prawidłowo. Jak by są zamienione kolory czerwony i zielony. Gdy usuwam kod z diod RGB wszystko wraca do normy. Czym może być to spowodowane?

#include <Adafruit_NeoPixel.h> // Dołączenie biblioteki

//Konfiguracja linijki
Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_RGB + NEO_KHZ800);

//Definicja wyprowadzeń pierwszej diody
#define czerwona 3
#define zielona 5
#define niebieska 6
//Definicja wyprowadzeń drugiej diody
#define czerwona2 9
#define zielona2 10
#define niebieska2 11
void setup() {
  linijka.begin(); //inicjalizacja linijki led
  linijka.show();
  
  linijka.setPixelColor(0, linijka.Color(0, 255, 0)); //Dioda nr 1 świeci na zielono
  linijka.show(); // Wyświetlenie zmian na linijce LED

}
void loop() {

  int zmiana = 0;
  int zmianaLosowa = random(255);
  delay(150);
  for (zmiana = 0; zmiana < 255; zmiana++) { //Płynna zmiana kolorów
    analogWrite(czerwona, zmianaLosowa);  
    analogWrite(zielona, zmiana);
    analogWrite(niebieska, 255 - zmiana);   
    analogWrite(czerwona2, zmiana);  
    analogWrite(zielona2, 255 - zmiana);
    analogWrite(niebieska2, zmianaLosowa);
    delay(10);
  } 
  for (zmiana = 255; zmiana > 0; zmiana--) { //Płynna zmiana kolorów "wstecz"
    analogWrite(czerwona, zmianaLosowa);  
    analogWrite(zielona, zmiana);
    analogWrite(niebieska, 255 - zmiana);   
    analogWrite(czerwona2, zmiana);  
    analogWrite(zielona2, 255 - zmiana);
    analogWrite(niebieska2, zmianaLosowa);
    delay(10);
  } 
}

W tym kodzie dioda w linijce led świeci sie na czerwono. 
Gdy daje   linijka.setPixelColor(0, linijka.Color(255, 0, 0)); wtedy swieci sie na zielono.

EDIT:

Znalazłem bład ale totalnie nie wiem jak to dziala.

Przy zmianie linijki z

Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_RGB + NEO_KHZ800);
Na
Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800);

Zaczyna dzialać prawidłowo. Roznica jest taka ze pierwszą linijkę wpisałem recznie a potem szukajac bledu kopiowalem linijka po linijce kod , wklejalem i przesylalem do arduino. I tutaj jak jest wpisane recznie dioda mi sie swieci na czerwono jak skopiuje z artykułu to swieci na zielono. Tyle że ja nie widze różnicy w tej linijce kodu. O co moze chodzić?

Edytowano przez PanMajster
  • 1 miesiąc później...

Gdyby to były zwyczajne diody LED, to kondensator nie byłby potrzebny.

Ale w każdej diodzie WS2812 jest cyfrowy układ sterujący, dla którego działania spadek napięcia wywołany np. gwałtownym wyłączeniem wielu diod nie byłby korzystny, stąd kondensator jako lokalne źródło energii.

A czy jest on niezbędny? Spróbuj bez niego - nic złego się nie stanie.

 

  • Lubię! 2
  • 4 miesiące później...

Dla mnie i mojego syna ktory czyta juz schematy brakuje wlasnie schematu przy podlaczeniu. Ogladanie tych zdjec plytki jest OK ale schemat pozwala na ominiecie tych zdjec + rozjasnia sytuacje. Dzieki PS. Kursy mega fajne

4 godziny temu, tomaszfr napisał:

Dla mnie i mojego syna ktory czyta juz schematy brakuje wlasnie schematu przy podlaczeniu. Ogladanie tych zdjec plytki jest OK ale schemat pozwala na ominiecie tych zdjec + rozjasnia sytuacje. Dzieki PS. Kursy mega fajne

Schemat

rgb_anoda-katoda.thumb.jpg.f4d9213a56c3b457810522c1e5ae6442.jpg

  • Lubię! 1
  • 9 miesiące później...

zrobilem kod z uzyciem ws2812 , odbiornika podczerwieni z podstaw elektroniki poziom II, lm35(z użyciem mojej biblioteki) i wyswietlaczem lcd z i2c(nie ma w zestawie forbot) zalaczam link do pobrania biblioteki LM35:


#include <LM35.h>
#include <Adafruit_NeoPixel.h>
#include <SoftI2CMaster.h>
#include <LiquidCrystal_SoftI2C.h>
#include <IRremote.h>

volatile int for2;
volatile int led;
Adafruit_NeoPixel rgb_display_2 = Adafruit_NeoPixel(8,2,NEO_GRB + NEO_KHZ800);
LiquidCrystal_SoftI2C mylcd(0x27,16,2,A5,A4);
long ir_item;
IRrecv irrecv_3(3);
decode_results results_3;

LM35 sensor(A0);

void setup(){
  for2 = 0;
  led = 1;
  rgb_display_2.begin();
  mylcd.init();
  mylcd.backlight();
  rgb_display_2.setBrightness(10);
  irrecv_3.enableIRIn();
}

void loop(){
  int item = (map(sensor.readC(), 0, 50, 1, 8));
  mylcd.setCursor(1-1, 1-1);
  mylcd.print(String("temp: ") + String(sensor.readC()));
  if (irrecv_3.decode(&results_3)) {
    ir_item=results_3.value;
    String type="UNKNOWN";
    String typelist[18]={"UNUSED", "RC5", "RC6", "NEC", "SONY", "PANASONIC", "JVC", "SAMSUNG", "WHYNTER", "AIWA_RC_T501", "LG", "SANYO", "MITSUBISHI", "DISH", "SHARP", "DENON", "PRONTO", "LEGO_PF"};
    if(results_3.decode_type>=1&&results_3.decode_type<=17){
      type=typelist[results_3.decode_type];
    }
    Serial.println("IR TYPE:"+type+"  ");
    if (ir_item == 0x20DF22DD) { // tutaj zamiencie na swoj identyfikator ale pamietajcie 0x na poczatku!
      if (led == 1) {
        led = 0;
        rgb_display_2.setBrightness(255);
        mylcd.backlight();

      } else {
        led = 1;
        rgb_display_2.setBrightness(10);
        mylcd.noBacklight();

      }

    }
    irrecv_3.resume();
  } else {
  }
  for (int i = 1; i <= 8; i = i + (1)) {
    for2 = i;
    rgb_display_2.show();
    mylcd.backlight();
    if (for2 < item) {
      if (for2 < 3) {
        rgb_display_2.setPixelColor((for2)-1, (0x3366ff));

      } else if (for2 < 5) {
        rgb_display_2.setPixelColor((for2)-1, (0x33cc00));
      } else if (for2 < 7) {
        rgb_display_2.setPixelColor((for2)-1, (0xff6600));
      } else {
        rgb_display_2.setPixelColor((for2)-1, (0xff0000));

      }

    } else {
      rgb_display_2.setPixelColor((for2)-1, (0x000000));

    }
  }

}

https://mega.nz/file/WDYAEToZ#R9o6rNu7bEXdO1PIhXdKhOc_nCynW3aMtE9SQIxDF40

  • Lubię! 1
  • 1 miesiąc później...

Cześć, 

Przy realizacji układu z linijką w jednej płytce przepalił mi się moduł od komunikacji USB a w następnej przegrzał (bez efektów, w każdym razie gniazdo USB w płytce Arduino bardzo się nagrzało i komunikacja przestała działać). Według mnie układ został zmontowany tak jak na fotografiach i układ realizował kod, niestety do pewnego momentu. 

Zanim zamówię następną płytkę, macie może jakieś pomysły co mogło być przyczyną?

@Rafal91 witam na forum! Nie kojarzę podobnych problemów, wygląda na to, jakby diody pobierały zbyt dużo prądu - nie powinno to mieć jednak miejsca przy takich ćwiczeniach (zakładam, że nie świeciłeś na biało z pełną mocą przez długi czas). Najlepiej pokaż jeszcze dla formalności zdjęcie podłączonego układu. Warto zacząć tez od sprawdzenia ile prądu pobierają włączone diody, jeśli nie masz takiej możliwości to zostaw włączony układ na dłużej, gdy diody będą świeciły z małą jasnością. Sprawdzisz wtedy, czy całość działa stabilnie przez dłuższy czas, jeśli problem będzie nadal występował to zgłoś sprawę do Botlandu - na pewno uda się szybko znaleźć rozwiązanie. W skrajnej sytuacji mogła się trafić uszkodzona płytka z diodami, ale z drugiej strony wtedy by raczej nie świeciły poprawnie.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...