Skocz do zawartości
Mrpatryk

Budowa wyświetlacza RGB 7Segmentowego x4 cyfry arduino

Pomocna odpowiedź

Witam, mam zamiar zbudować sobie zegar na wyświetlaczu 7Segx4 cyfry RGB, wyświetlacz mam zamiar zrobić w wymiarach ok 7/8 cm (cyfra) i nie wiem jak sterować kolorami? Rozumiem ze co do cyfr i jednego koloru mogę sterować to jako 4 anody i np 74hc595 (do wyświetlania cyfr), ale jak zrobić sterowanie np kolorami do tego ? Czy montować np 3 układy 74hc595 i do nich podłączać osobne kolory ? W załączniku przedstawiam rozwiązanie dla jednego koloru, jak zrobić kolejne, a żeby można było je np zmieniać klawiszem.?? Miałby ktoś jakiś pomysł na schemat ?

zegar.jpg

Dobry tok myślenia , czy jednak nie ? Pomyślałem, że może brakować mi wejść cyfrowych dlatego PCF8574 po wejściach analogowych mógłbym podłączyć i rozszerzyć wejścia cyfrowe do 8. podłączyć mógłbym np do tego np Ds18b20 czujnik temperatury itp. Tylko nie wiem jak mam przypisać dany 74HC595 by z niego wysyłał sygnał na wyjścia i zapalał dane kolory ?? Jest takie coś wgl możliwe ? Mój schemat jest poprawny ? 

wyświetlacz.png

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Moim zdaniem zabierasz się do tego od d.. drugiej strony. Zacznij od zaplanowania struktury segmentu. W jakich warunkach chcesz tego używać? Czy będzie to jasno oświetlona ściana czy pokój raczej w cieniu i tylko lampa na suficie? A może wieszasz to na zewnątrz? W Słońcu? Od tego przecież zależy jasność jaką musisz uzyskać a od niej zależy cała reszta elektroniki. Rozważ użycie diod z wbudowanymi sterownikami - są do nich biblioteki, na małe Nano także. Do wszystkich diodek podłączasz GND i 5V a jeden drut wychodzący z procesora idzie przez wszystkie. Masz dowolną liczbę punktów świecących a kolor każdego zadajesz 24-biową liczbą więc w zasadzie może być dowolny. A jeśli pozostajesz przy diodach RGB to zobacz jakie są dostępne w Twojej kategorii cenowej (i czy THT czy SMD) i ile punktów musisz umieścić w każdym segmencie by te paski ładnie świeciły. Jeśli segment będzie miał 4cm a zrobisz jedną diodkę na środku, to całość będzie żałosna bo i ciemno i jasność będzie największa na środku. To samo dotyczy oczywiście diod inteligentnych o których wspomniałem wcześniej, ale tam nie boli tak zwiększanie ich liczby, bo to nadal jest jedno wyjście procesora. Pamięci RAM tylko więcej potrzeba: 3 bajty na każdą diodę. A jak już wybierzesz liczbę diod i ich typ to wtedy popatrz na prądy których potrzebują do jasności jakiej oczekujesz. Rejestry HC595  mają nikłą wydajność, kilka mA to szczyt ich możliwości. To się nadaje do statycznego świecenia jedną diodką z jednego wyjścia lub zrobieniem zabawkowej kostki LED widocznej w ciemności. Multipleksowanie wymaga dużych prądów także z powodu ich "przerywania". Jeśli dajmy na to zdecydujesz się na dwie zwykłe diody RGB w segmencie to masz 6 struktur po 10-20mA każda, co daje 60-120mA na segment gdy zechcesz zapalić to na biało. A to tylko statycznie, tu masz multipleks 1:4 więc to 2-3 razy więcej prądu. Jak to się ma do 5mA z wyjścia układu serii 74HC? Zamiast marnować czas na rysowanie obrazków zacznij liczyć i myśleć.

BTW: Łańcuch rejestrów przesuwających - jakkolwiek długi - podłączasz do procka 3 drutami i nie potrzebujesz więcej pinów. To jak zrobisz połączenia między rejestrami a diodami zupełnie nie ma znaczenia oprócz tego, że w wyprowadzeniach segmentów wyświetlacza muszą znaleźć się rezystory stabilizujące prąd diod a wspólne anody (lub katody) musisz sterować przez tranzystory - tam prądy będą jeszcze większe, bo to będą sumy z całej jednej cyfry wyświetlacza.

Nie wiem, może poszukaj  schematów podobnych samorobnych wyświetlaczy i zastanów się dlaczego ludzie robią to tak jak robią a nie tak  naiwnie jak rysujesz. Przez ekspander I2C nie podłączysz czujników na szynie 1-wire (np. DS18B20), to nie jest do tego więc nie zmyślaj tylko skup się na tym co na tę chwilę ważne: na odpowiedziach na pytania które zadałem. Przemyśl sobie jak to ma wyglądać, z czego to zrobisz (jakieś szybki na segmenty? coś matowego?), ile i jakich diod chcesz użyć.I zapoznaj się z tym:

https://www.tme.eu/pl/Document/6ea29838e05beac06400c47a846319d2/WS2812D-F5.pdf

https://learn.adafruit.com/adafruit-neopixel-uberguide/the-magic-of-neopixels

Edytowano przez marek1707
literówki
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dzieki za odpowiedz. Co do diodek to beda to matowe 5mm rgb ThT. Chce na segment dac po 3 diody. Segmenty nie beda niczym okryte . Powiedzmy ze beda to gole diody ktore przykryje plexa dymiona. Chce by liczby byly widoczne w dzien i w nocy.

Udostępnij ten post


Link to post
Share on other sites

No i... ? Jakieś wnioski z tego co napisałem o prądach? Ile tego będzie na segment/kolor? Ile w sumie? Masz jakieś liczby? Co myślisz o diodach z wbudowanym sterownikiem, np. WS2811/12? Nie są wiele droższe niż typowe RGB chyba że kupisz jakieś badziewie. Fajne to czy bez sensu? A jeśli, już to dlaczego? Oglądałeś schematy innych wyświetlaczy? Jak tam zrobiono sterowanie segmentami a jak anodami? Jak chcesz połączyć 3 diody ze wspólną anodą w jednym segmencie? Zamiast słabiutkich rejestrów HC możesz użyć specjalnie do tego przeznaczonych układów serii SCT2xxx. Niektóre mają po 8, a jest parę takich po 16 wyjść. Mają regulowaną jednym opornikiem wydajność prądową, są łączone szeregowo do szyny SPI, nie wymagają oporników ograniczających prąd segmentów:

https://www.tme.eu/pl/katalog/#search=sct&s_field=accuracy&s_order=DESC&id_category=100283&page=1

Pytałem właśnie o to jak chcesz zrobić segment. Już wiemy, że mają być 3 diody i "powiedzmy" plexi. Jeśli chcesz widzieć to w dzień z dobrym kontrastem od reszty, potrzebujesz sporej jasności. Pojedyncza dioda, nawet taka dobra RGB może mieć i 1000mcd, ale wtedy świeci w wąskim kącie np. 30 stopni, jest przezroczysta i w sumie mała. Wtedy jest łatwo być jasnym. Wszystkie matowe LEDy mają już sporo mniej a przecież Twój segment będzie miał powierzchnię pewnie z 20 razy większa niż te trzy diodki jakie w niego wepchniesz. To oznacza 20 razy mniejszą jasność i z 3x200mcd robi się 30 a to już słaby wynik. Wbrew pozorom duże rzeczy widoczne dobrze świetle dnia muszą być zaskakująco jasne i są prądożerne. Walczysz ze Słońcem, które bez problemu rzuca nam w południe 1000W/m2  - tym mało co może wygrać. Dlatego tak ważne jest ukrywanie wyświetlaczy pod dachem. W pokoju, w dziennym świetle rozproszonym warunki mogą być 10 razy lepsze. Z kolei w nocy to samo sterowanie będzie za jasne, koniecznie musisz z robić regulację średniego prądu LEDów np. przez zmianę wypełnienia.

No i spróbuj być bardziej komunikatywny. To nie mi zależy na zrobieniu tego wyświetlacza. Napisz dokładnie jakiej pomocy potrzebujesz, o rzecz nie jest trudan, ale trzeba się do tego dobrze przygotować. Inaczej narobisz się bez sensu a wynik będzie taki sobie. Dlaczego to ma być RGB? Jak widzisz to znacznie komplikuje konstrukcję (chyba że pójdziesz w diody "inteligentne"). Robisz jedną sztukę i nie wiesz jaki kolor Ci się podoba?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

na segment liczyłem o ile dobrze wgl liczyłem ok 60 mA na kolor biały jak by miała świecić więc na kolor będzie to np 7x3x4 co daje nam 334*20 mA na cały wyświetlacz .Diody które mam to F5 RGB LED podobno pisze ze pobieraja 20mA więc na tym sie wzoruje. Wychodzi ok 6680mA wiec bardzo duzo, co do samego wyświetlacza to mam zamiar zrobić wszystko w obudowie z plexy dymionej tak by diody był rozproszone i punkt najmocniejszego swiatła padał na cienka 2/3 mm plexe. podrzuce rysunek w załaczniku. Nie ma jakis układów ktorę po podłaczeniu hc595 mozna by było podłaczyc do nich i zwiekszyc mA na wyjsciach układu hc ?

Bez tytułu.png

A odnośnie tych inteligentnych diod to robię je szeregowo i jak zapalać poszczególne ? 

Udostępnij ten post


Link to post
Share on other sites

O, świetnie, to już są jakieś konkrety. Pudełeczko na pewno będzie ładne i w ogóle, ale od razu powiem, że nie będzie to czytelne. Popatrz, tych 7 segmentów musi ułożyć się w mózgu w cyfrę. I tak jest ich mało i słabo przypomina to prawdziwe znaki do jakich nasze zmysły są przyzwyczajone - wystarczy spojrzeć na pierwszy lepszy krój pisma lub odręcznie napisaną datę. Prawdziwe cyfry są "wdrukowane" w oczy i rozpoznajemy je bez zastanawiania co to za zestaw plamek. A Twój wyświetlacz tak właśnie będzie wyglądał. Jeśli segmenty zrobione są z wąskich kresek, jak w elementach produkowanych fabrycznie:

https://www.tme.eu/pl/details/kw1-4003asa/wyswietlacze-led-pojedyncze/lucky-light/

to znacznie poprawia to czytelność. To jest akurat wyświetlacz 100mm wiec podobny do Twojego, ale zauważ, że wokół każdego segmentu (zrobionego z matowego tworzywa podświetlanego aż ośmioma LEDami każdy po to by zachować równomierną jasność całego paska) jest nieprzezroczysty materiał. To zapobiega "rozlewaniu " się światła wokół. U Ciebie każda dioda będzie świeciła jak duży okrąg, bo niby dlaczego światło miało układać się wzdłuż kierunku danego segmentu? No i masz trzy kółka, każde najjaśniejsze w środku (bo plexi jest cienka) i coraz ciemniejsze im dalej od diody, które słabo tworzą (w mózgu) podłużny segment. To na pewno da się przeczytać, ale moim zdaniem wygląda kiepsko. Jeśli chcesz wejść w mleczną maskownicę koniecznie musisz paski tego materiału otoczyć czymś nieprzezroczystym, np. sklejką lub czarnym/szarym plexi. Od biedy można oddzielić nawet wsuniętym między segmenty czarnym kartonem. Każdy segment musi mieć wyraźną granicę za którą światło nie wychodzi. Obecnie skrajna LEDa jednego segmentu będzie z powodzeniem podświetlała także początek sąsiedniego segmentu. To będzie bardzo przeszkadzało w nocy, kiedy to "zasięg" każdej plamy będzie spory. Tu masz przykład takiej konstrukcji, zwróć uwagę na ściany oddzielające segmenty - to jest kluczowe dla efektu:

https://www.sparkfun.com/products/8530

A tak to wygląda (beznadziejnie, prawda?) gdy dasz za mało diodek i słabe rozpraszanie/wyrównywanie jasności:

https://hackaday.com/2013/12/03/fabricate-your-own-7-segment-displays/

Tak więc albo osobno wycinane i odseparowane segmenty albo segmenty z dużej liczby małych diodek widocznych jako kropki układające się w kreskę, ale wtedy już bez maskownicy albo z bardzo cienką, prawie nie rozpraszającą:

https://www.elektronika.ba/698/spi-interfaced-large-7-seg-led-display/

https://www.instructables.com/id/Build-a-huge-7-segments-8-digits-red-LED-display/

Dobra, a teraz sprawa elektroniki. Oczywiście możesz podłączyć do każdego rejestru wzmacniacz prądu, choćby zwykły tranzystor albo tani driver typu 2803:

https://www.tme.eu/pl/details/uln2803a/drivery-uklady-scalone/st-microelectronics/

Tak się też robi, choć sporo to komplikuje drutologię całości.

W przypadku diodek WS2811/12 komunikacja idzie po jednym drucie. Wysyłasz długi ciąg impulsów z czego pierwsza diodka w szeregu "łyka" pierwszych 24 a resztę przepuszcza dalej. Następna robi to samo i każda kolejna także. Mając np. 3 diodki w segmencie i 28 segmentów, wstawiasz w łańcuch 84 takie diodki plus dwie na dwukropek, w sumie 86. Wysyłasz zatem z procesora 86 x 24 = 2064 impulsów a każdy "pakiet" 24 kolejno po sobie następujących trafia to kolejnej diodki. Ponieważ impulsy sa krótkie (ok. 1.2us) to całość transmisji zajmuje programowi poniżej 2.5ms - szybciej niż mrugniesz okiem. Szczegółami się nie zajmujesz, dołączasz gotową biliotekę, ustawiasz kolor i jasność każdego punktu w specjalnej tablicy w pamięci RAM i wołasz funkcję "No to teraz to pokaż" i z głowy. Do czasu wysłania następnego strumienia danych (np. za minutę) diodki świecą w zadany  sposób. Proste, nie?  Dobudowując czujnik oświetlenia, przed wysłaniem danych do diodek ustawiasz ich jasność wg aktualnych wskazań czujnika i masz za darmo przygasanie w nocy i rozjaśnianie w słoneczny dzień 🙂

Tu masz przykład czegoś takiego, drutologia jest powalająco prosta:

https://all3dp.com/weekend-project-3d-print-a-sleek-7-segment-led-clock/

Niestety jedna diodka na segment oznacza konieczność bardzo grubego/wysokiego, matowego klocka rozpraszającego by wyrównać jasność od czoła. Tutaj plexi 2mm się nie sprawdzi. Jeśli wyświetlacz miałby być cienki, musi być dużo punktów na segment. Jeśli może być gruby, można dać po jednej diodce inteligentnej (są dość jasne) na segment i wycinać klocki z 2-3cm plexi, ale moim zdaniem to bieda-rozwiązanie. No i nie masz jednak wtedy zapasu jasności.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

te inteligentne diody moge wsadzic w szereg i zapalic kilka np tylko te co chce ? nawet w środku szeregu ?? A co do tych segmentów to nie chce ich wycinać , poprostu chce "gołe" diody za plexe wstawic 

 

Ta dioda mogła by być "Dioda RGB APA106 f5" ?? 

Udostępnij ten post


Link to post
Share on other sites
35 minut temu, Mrpatryk napisał:

te inteligentne diody moge wsadzic w szereg i zapalic kilka np tylko te co chce ? nawet w środku szeregu ??

Tak, dokładnie. To jest jedna z głównych zalet tego rozwiązania. Sprawdź przykłady opisane w kursie Arduino: Kurs Arduino II – #2 – diody RGB (tradycyjne oraz WS2812)

Udostępnij ten post


Link to post
Share on other sites

Zamówiłem na alliexpress diody własnie, "APA106-F5" 4/6V  przyjdą za 2 tyg i zaczne zabawe, mogłby ktoś podrzucić kod jak podzielic cyfre zegara RTC  na poszczególne liczby ? I teraz nasuwa się pytanie czy kazda z cyfr tzn te 7 segmentów łączyc ze soba w sensie 7+7+7+7 i z tego wybierac cyfry ktore maja sie wyświetlac  podpiać do jednego wejscia? czy lepiej 7 segmentów i podpiac to do pinu, co da to 4 piny na arduino ? 

Udostępnij ten post


Link to post
Share on other sites

Teraz tak mysle ilu amperowy zasilacz potrzebuje do tego i czy osobno zasilac diody i arduino czy mogłbym razem je zasilacz 5V??

Podpowiedział by ktoś jak napsiać skrypt np kilku diod nawet na wyświetlacz 7 segmentowy, tzn do tych "inteligentnych" diodek dajmy ze segment A to diody 1,2,3 i teraz:

linijka.setPixelColor(1, linijka.Color(0, 255, 0));
linijka.setPixelColor(2, linijka.Color(0, 255, 0));
linijka.setPixelColor(3, linijka.Color(0, 255, 0));

mamy trzy diody, świecą na zielono i jak to przypisać by użyć jako cyfry tzn przypisać np do cyfry, jak podzielę z zegarka godziny np" na dwa osobne wyświetlacze żeby było wiadomo ze to np jest jedynka czy inna tam liczba ?

Udostępnij ten post


Link to post
Share on other sites

czytałem ale ja mam 84 ledy połączone szeregowo i jak mam niby podzielic je na 4 wyświetlacze 7 segmentowe ?? i wyswietlac nimi cos ? 

Udostępnij ten post


Link to post
Share on other sites

No to pewnie i ten artykuł czytałeś - zobacz

Tak czytam o tych diodach APA106 i wydaje mi się, że druga część tego artykułu dot. diód WS2812 jak znalazł pasuje do Twojej konstrukcji. Tylko jak ty to oprogramujesz? Biblioteka Adafruit NeoPixel umożliwia sterowanie takimi diodami. Z pewnością ten cały zbiór LED musisz "zorganizować, podzielić". Każda dioda obsługiwana przez NeoPixel ma swój numer (coś jak adres)  więc każda cyfra i każdy w niej segment to określone diody o nr od - do. Tak bym na szybko kombinował, no i poczytałbym o tej bibliotece. No ale może zbytnio komplikuję ...?

Udostępnij ten post


Link to post
Share on other sites
#include <Adafruit_NeoPixel.h> 

Adafruit_NeoPixel linijka = Adafruit_NeoPixel(86, D4, NEO_GRB + NEO_KHZ800);

void setup() {
  linijka.begin(); //Inicjalizacja
  linijka.show(); 
}
void loop() {
 wyswietlacz(0)
}
void wyswietlacz(int cyfra) {

  switch (cyfra) {
    case 0:
        linijka.setPixelColor(0, linijka.Color(0, 255, 0));
       linijka.setPixelColor(1, linijka.Color(0, 255, 0));
       linijka.setPixelColor(2, linijka.Color(0, 255, 0));
       linijka.setPixelColor(3, linijka.Color(0, 255, 0));
       linijka.setPixelColor(4, linijka.Color(0, 255, 0));
       linijka.setPixelColor(5, linijka.Color(0, 255, 0));
            linijka.setPixelColor(6, linijka.Color(0, 255, 0));
       linijka.setPixelColor(7, linijka.Color(0, 255, 0));
       linijka.setPixelColor(8, linijka.Color(0, 255, 0));
       linijka.setPixelColor(9, linijka.Color(0, 255, 0));
       linijka.setPixelColor(10, linijka.Color(0, 255, 0));
       linijka.setPixelColor(11, linijka.Color(0, 255, 0));
       linijka.setPixelColor(12, linijka.Color(0, 255, 0));
            linijka.setPixelColor(13, linijka.Color(0, 255, 0));
       linijka.setPixelColor(14, linijka.Color(0, 255, 0));
       linijka.setPixelColor(15, linijka.Color(0, 255, 0));
       linijka.setPixelColor(16, linijka.Color(0, 255, 0));
       linijka.setPixelColor(17, linijka.Color(0, 255, 0));
     

    break; }}

To powinno wyświetlic mi liczbę 0, na 1 wyświetlaczu ? wiec jak bedzie by drugie zero wyświetlilo mi na drugim wyświetlaczu ?? 

Czytałem ten wpis Co podałeś , kolega wyżej go tez wrzucił, zastanawiam sie poprostu czy będe musiał na kazdy "ekran" robic osobną funkcje z case 0-9 liczbowymi i poprostu dzielic np odczyt z zegarka na tablice albo jakos zapisywac do inta a potem wyświetlac to co w int czy jakos tak kombinowac. : D

linijka.setPixelColor(10, linijka.Color(a, b, c));

Też mam pytanie czy np moge tak wstawic wartosci kolorow , że po wysłaniu np a/b/c=255 ustawi mi tam kolor niebieski czy tez czerwony ?? 

Tutaj pytanie do kolegi Marka jak ustawić jasność świecenia tych diod'ek o której pisales? 

Udostępnij ten post


Link to post
Share on other sites

Przy założeniu, że te APA106 będą z tą biblioteką dobrze współpracowały. Jeśli Twój "wyświetlacz nr 0" to 21 diód o adresach 0 - 20 to "wyświetlacz nr 1 będą tworzyły diody 21 - 41 i tak dalej. Ja bym zrobił sobie taką tablicę znaków 0 - 9, w której zapisałbym co należy wysłać do tych 21 diód wyświetlacza (począwszy od diody 0 do diody 20) by wyświetlić określony znak. Każdy kolejny wyświetlacz miałby identyczną budowę (kolejność led). Adres konkretnej diody mógłbym sobie np. wyliczać tak:

ADRES_DIODY=NUMER_DIODY+NUMER_WYSWIETLACZA*ILE_DIOD_NA_WYSWIETLACZ

gdzie:

NUMER_DIODY od 0 do 20

NUMER_WYSWIETLACZA od 0 do 3

ILE_DIOD_NA_WYSWIETLACZ 21

Teraz piszesz sobie funkcję która pobierze z "tablicy znaków" i wyśle do określonego wyświetlacza dane.

Udostępnij ten post


Link to post
Share on other sites

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ę »

×