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

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...