Skocz do zawartości

Opinel

Użytkownicy
  • Zawartość

    13
  • Rejestracja

  • Ostatnio

Posty napisane przez Opinel

  1. 13 godzin temu, Gieneq napisał:

    Pewnie chodzi o pobór prądu z pinow cyfrowych Arduino, tam masz limit max 40 mA ale rekomendowane 20 mA. Możliwe że LCD nie pobiera więcej - tu byłaby odpowiedź na poprzednie pytanie - tak. Chyba że mowa o wyprowadzeniach zasilających: 5 V, 3,3 V.

    Tak. Teraz już wiem o co chodzi. Wcześniej mylnie myślałem, że limit 20mA dotyczy wszystkich wyprowadzeń, w tym 5v. Teraz zagłębiłem się w ten temat bardziej i z tego co czytam 20mA to bezpieczny limit dla pinów cyfrowych, a dla 5V ograniczeniem jest 900mA, stąd też ten brak rezystora. Dzięki 🙂

  2. Cześć 🙂

     

    7.2:

    Tekst staje ciężki do odczytania. Przy częstszym odświeżaniu rzędu delay(1) zaczyna wręcz gasnąć.

    7.3

    W zasadzie to samo co przy 7.2 albo nie do końca rozumiem zadanie.

    7.4 - tutaj mam wątpliwości:

    #include <LiquidCrystal.h> // dołączenie biblioteki
    LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //zdefiniowanie wyswietlacza
    
    bool counting = false; // bool "czy jest w trakcie liczenia?"
    
    int timeA = 0 ; // czas
    
    
    void setup() {
      lcd.begin(16, 2); // tryb wyświetlacza
      lcd.setCursor(0, 0); // tekst startowy
      lcd.print("Rozpocznij");
    
    
      pinMode(10, INPUT_PULLUP); // zdefiniowanie przycisków
      pinMode(12, INPUT_PULLUP);
    
    }
    
    
    void loop() {
      while (counting == false) { // kiedy nie liczy
        if (digitalRead(10) == LOW) { //jak przycisk zostanie naciśnięty
          lcd.clear(); // wyczyść ekran
          lcd.setCursor(0, 0); // wyświetl tekst o trwającym liczeniu
          lcd.print("Liczenie"); 
          counting = true; // zmiana bool na "w trakcie liczenia"
          delay(1); //opóźnienie 1 ms
        }
    
      }
      while (counting == true) { // kiedy trwa liczenie
        if (digitalRead(12) == LOW) { //jak drugi przycisk zostanie naciśniety
          counting = false; // bool "nie liczy"
          timeA = timeA / 1000; // zmiana jednostki na sekundy
          lcd.clear(); // wyczyszczenie lcd
          lcd.setCursor(0, 0); // podanie wyniku
          lcd.print("Koniec");
          lcd.setCursor(0, 1);
          lcd.print(timeA);
          delay(150);
        } else {
          timeA = timeA + 1; //zwiększenie czasu o 1ms
          delay(1);
        }
    
      }
    }

    Czy użyta metoda - delay(1) -  jako podstawowy pomiar czasu daje precyzyjne pomiary? Czy czas będzie minimalnie wytracany na "czytanie pętli" ? (nie wiem jak to określić).

     

    I jeszcze pytania dotyczące podświetlania ekranu.

    1. Rozumiem, że mógłbym równie dobrze sterować jasnością podświetlenia za pomocą potencjometru? 🙂

    2. Dlaczego należy uważać na zbyt duży pobór prądu w przypadku podpięcia zasilania bezpośrednio do arduino i użyć rezystora, skoro w podstawowym ustawieniu mam podłączony wyświetlacz do plusa na płytce bez żadnego opornika?

     

     

  3. Dnia 15.01.2021 o 07:52, Gieneq napisał:

    @Opinel możliwe że nie masz konstrukcji else if i wtedy tylko ostatni if ma wpływ na końcowy else.

    Fajnie że kod działa, ale możesz spróbować potraktować zadanie inaczej, bez infów 😉 zadanie z 2 gwiazdkami, ale możesz popróbować 🙂 

    Faktycznie. Dałem konstrukcje if -> else if -> else i teraz działa. Zaczynam rozumieć też dlaczego tak się dzieje. Dzięki!

     

    Próbowałem jeszcze bez Ifów. Zastąpiłem je while, ale wtedy odczyt z potencjometrów zaczytuje się tylko raz, po czym uruchamia się odpowiedni zakres while i wszystko stoi 😕

  4. Hej,

    Zrobiłem zadanie 4.6 w następujący sposób:

    #define leftR A4
    #define rightR A5 //zdefiniowanie czujników
    
    #define greenL 3
    #define yellowL 4 
    #define red 5
    #define yellowR 6
    #define greenR 7 // zdefiniowanie diod
    
    int readingL = 0; //odczyty lewego fotorezystora
    int readingR = 0; // odczyt z prawego fotorezystora
    int diff = 0; // różnica odczytów
    
    
    void setup() {
      Serial.begin(9600);
      
      pinMode(greenL, OUTPUT);
      pinMode(yellowL, OUTPUT);
      pinMode(red, OUTPUT);
      pinMode(yellowR, OUTPUT);
      pinMode(greenR, OUTPUT); // ustawienie diod
      
      
      digitalWrite(greenL, LOW);
      digitalWrite(yellowL, LOW);
      digitalWrite(red, LOW);
      digitalWrite(yellowR, LOW);
      digitalWrite(greenR, LOW); // ustawienie domyślnego trybu diod
    
    }
    
    void loop() {
      readingL = analogRead(leftR);
      readingR = analogRead(rightR); // przypisanie odczytów
      delay(300); // opóźnienie zwiększające płynność.
      diff = readingL - readingR; // przypisanie różnicy
      Serial.println(diff); //wyświetlenie różnicy
    
      if (diff > 100 && diff < 300){ // jeżeli różnica jest z zakresu 100 - 300 zaświeca się lewa żółta
        digitalWrite(greenL, LOW);
        digitalWrite(yellowL, HIGH);
        digitalWrite(red, LOW);
        digitalWrite(yellowR, LOW);
        digitalWrite(greenR, LOW);
        delay(50);
      }
      if (diff > 301) { // jeżeli różnica jest ponad 301 zaświeca się lewa zielona
        digitalWrite(greenL, HIGH);
        digitalWrite(yellowL, LOW);
        digitalWrite(red, LOW);
        digitalWrite(yellowR, LOW);
        digitalWrite(greenR, LOW);
        delay(50);
      }
      if (diff < -100 && diff > -500){ // jeżeli różnica jest pomiędzy -100 - -500 zaświeca się dioda prawa żółta
        digitalWrite(greenL, LOW);
        digitalWrite(yellowL, LOW);
        digitalWrite(red, LOW);
        digitalWrite(yellowR, HIGH);
        digitalWrite(greenR, LOW);
        delay(50);
      }
      if (diff < -501){ // jeżeli różnica jest mniejsza od -501 zaświeca się dioda prawa zielona
        digitalWrite(greenL, LOW);
        digitalWrite(yellowL, LOW);
        digitalWrite(red, LOW);
        digitalWrite(yellowR, LOW);
        digitalWrite(greenR, HIGH);
        delay(50);
      }
      else  { // zaświeca się dioda czerwona
        digitalWrite(greenL, LOW);
        digitalWrite(yellowL, LOW);
        digitalWrite(red, HIGH);
        digitalWrite(yellowR, LOW);
        digitalWrite(greenR, LOW);
        delay(50);
      }
      
    }

    Jednak przy zmianie położenia źródła światła, diody zaczynają mrugać na zmianę z czerwoną (warunek else) nawet wtedy kiedy spełniane są wyłącznie warunki z pozostałych diod.

     

    Przy modyfikacji else na if w taki sposób:

      if (diff < 99 && diff > -99) { // jeżli różnica jest pomiędzy 99 a -99 zaświeca się dioda czerwona
        digitalWrite(greenL, LOW);
        digitalWrite(yellowL, LOW);
        digitalWrite(red, HIGH);
        digitalWrite(yellowR, LOW);
        digitalWrite(greenR, LOW);
        delay(50);
      }

    Wszystko zdaje się działać poprawnie. Nie rozumiem jednak czemu przy else zachowanie jest tak dziwne, skoro przy wyżej wypisanym IFie wsadziłem pozostałe warunki czyli de facto to samo co powinno się wykonywać przy "else"

    • Lubię! 1
  5. Dzięki za tę odpowiedź.

     

    Tak więc po kolei:


    Do czego służy urządzenie

    Projekt zakłada utworzenie podświetlarki (LED + komora dyfuzyjna z ekranem z plexi) dającej rozproszone światło dzięki której będzie możliwe digitalizowanie błon światłoczułych za pomocą aparatu cyfrowego.

    Dodatkowo nie wiedząc jaka temperatura może się wytworzyć w takim małym zamkniętym pudełku, chciałem umieścić dwa wentylatory umożliwiające kontrolowany przepływ powietrza.

     

    Co musi być w tym projekcie spełnione

    Ważne, aby błona była by w ramach potrzeby naświetlana 3-krotnie po 1 zdjęcie na każdy kolor lub 1-krotnie używając wszystkich na raz.

    Źródła światła są podzielone na 3 segmenty,  z których każdy z nich może być uruchamiany niezależnie od siebie. Mamy czerwony (szczyt fali około 660nm), zielony (około 530nm) oraz dwie wersje niebieskiego (około 420 oraz 460nm) – te ostatnie są przełączane między sobą w zależności od zapotrzebowania – stąd przełącznik bistabilny.

    Co ważne, widmo poszczególnych kolorów powinno być jak najwęższe oraz nie nachodzić na siebie. Konieczne jest, aby żadne ze świateł nie nachodziło na 600nm.

    Każdy z 3 segmentów powinien mieć regulacje jasności, tak by przykładowo aparat przy stałych ustawieniach ekspozycji, robiąc trzy naświetlenia (po 1 na każdy kolor) naświetlał niebieski na 100%, zielony na 50% i czerwony na 25%.  Sama wartość nie musi być czytelna z poziomu położenia potencjometru. Może być dokonywana metodą prób i błędów. Ważne tylko, aby parametry były zachowywane w czasie.

     

     

    I odpowiadając na pytania:

     

    1 godzinę temu, marek1707 napisał:

    Przede wszystkim czy światło generowane przez to cudo ma być ciągłe? Z jakiegoś powodu używasz potencjometrów i tranzystorów do analogowej regulacji prądu LEDów a nie modulacji PWM. Dla oka to wszystko jedno, ale już w jakichś eksperymentach fizycznych może to mieć znaczenie. Stosując modulację dwustanową odpadną Ci wszystkie problemy jakie tu wygenerowałeś z ciepłem, radiatorami itp.

    Prawdę mówiąc dlatego, że nie doszedłem jeszcze do PWMów 🙂 Ale domyślam się że ciągłe - chciałbym uniknąć efektu migotania przy ogniskowaniu.

     

    1 godzinę temu, marek1707 napisał:

    Czy strumień światła wychodzący z urządzenia ma być stabilny w czasie? To znaczy, czy jeśli ustawisz sobie ileś, to czy za 5 minut ma być tyle samo a jeśli tak, to jak dokładnie? Bo ten układ tego nie zapewnia. W żaden spsób nie masz sprzężenia zwrotnego od śwaitła a ni nawet od prądu. bazujesz tylko na ch-ce wyjściowej tranzystora i na stałości wielu parametrów tranzystora np. z temperaturą, co nie jest prawdą.

    Najlepiej jakby był stabilny. A jak bardzo? Głupio przyznać ale sam jeszcze dokładnie nie wiem.

    Obliczyłem sobie, że potencjometr P przy ustawieniu zerowym i rezystorze 680o da mi przy najmniejszym możliwym współczynniku Beta(100) napięcie bazy ok 7mA i stan saturacji na tranzystorze pozwalając świecić się diodzie na najjaśniejszym możliwym poziomie ograniczonym przez rezystory znajdujące przy samych LEDach. Z drugiej strony, zakręcając potencjometr i osiągając łącznie 5680o, napięcie bazy będzie wynosiło ok 0.9mA co przy największym możliwym współczynniku Beta(250) da mi maksymalnie trochę ponad 200mA na dwie diody.

    Chciałem w ten sposób uzyskać maksymalny zakres 350-100mA na każdej z diod. Nie przewidziałem jednak, że może się to zmieniać wraz z temperaturą.

     

    1 godzinę temu, marek1707 napisał:

    Jakie diody (niekoniecznie typy, ale chociaż kolory) będa w poszczególnych gałęziach?

    Niebieskie ~ 420 lub ~430nm oraz ~ 460nm

    Zielona ~530nm

    Czerwona ~660nm

    Jeden kolor typ na każdą gałąź. Szerzej opisałem to we wcześniejszej części tej wiadomości.

     

    1 godzinę temu, marek1707 napisał:

    Zasilacz "napięciowy" (taki jak pokazałeś) nie jest więc dedykowany do LEDów, ale rzecz jasna może być użyty w układzie, gdzie ktoś wie co robi i prąd reguluje w jakiś inny sposób.

    Zatem to chyba mam już ogarnięte. Każdy segment diod jest ograniczany poprzez rezystory które obliczyłem na podstawie prawa ohma.

     

    1 godzinę temu, marek1707 napisał:

    Wszystkie diody LED produkowane w warunkach innych niż garaż w Chinach mają swoje karty katalogowe a dominująca długośc fali, wykres widmowy, ch-ka kierunkowa i parametry elektryczne to podstawowe dane. Nie bardzo rozumiem na co narzakasz. Znajdź dobry sklep, gdzie każdy LED ma swój dokument i tyle. Tu masz ponad 100 takich LEDów:

    Wszystkie tam są za wyjątkiem tych 420-430nm, gdzie mam te maleńkie SMD, które nie mam pojęcia jak zamontować, dlatego ich unikam.

    Przykład: https://www.tme.eu/pl/details/pk2n-3lle-l/diody-led-uv/prolight-opto/

    EDIT: widzę, że tę samą znaleźliśmy 🙂

    Ewentualnie coś takiego: https://allegro.pl/oferta/dioda-led-uv-3w-700ma-424nm-45mil-epileds-aktynika-7805773155

     

     

  6. Cześć,

    W zasadzie nie wiem czy napisać tutaj w zupełnie zielonych, czy w sprawdzaniu schematów, ale z racji, że to mój pierwszy projekt wykraczający poza zadania z podstawowego kursu elektroniki który chciałbym okraszyć sporą dawką pytań umieszczam go w tym miejscu. Jeżeli ktoś uważa że jest w złym to prośba o informację – usunę i utworzę w prawidłowym.

    Schemat:

    image.thumb.png.cf1fe729c3a9a07c610833c84da5c0bb.png

     

    Tak więc mam plan zasilenia kilku diod dużej mocy (350mA) połączonych szeregowo i równolegle, tak aby móc wyłączać i przełączać poszczególne segmenty oraz sterować ich jasnością poprzez potencjometry.

    Przykład planowanej LED:

    image.thumb.png.b05b43427bc5ad49abba16db7c168fc3.png

     

     

    Zakładając, że przy zasilaniu 12V na potencjometrach wpiętych bezpośrednio przed diodami może odkładać się duża moc, a te znoszące większą ilość watów są sporo droższe, postanowiłem użyć tranzystorów bipolarnych npn (hFE=100-250) i sterować prądem bazy. Aby zmniejszyć odrobinę zakres potencjometru, zdecydowałem się użyć stabilizatora napięcia 5V, którym po zastosowaniu oporników będzie zasilana baza (zakres 7mA-0.9mA).

    I tu pojawiają się pytania:

    1. Czy moje rozumowanie jest sensowne i zastosowanie tutaj stabilizatora jest poprawne? Ponadto tym samym stabilizatorem chcę zasilać dwa wentylatory – oba pobierają około 140mA.
    2. Jak to jest z tymi zasilaczami? Z tego co widzę są w sprzedaży specjalne do LEDów, ale czy taki jak w tym linku nie wystarczy?
    3. Jak właściwie przymocować podstawkę LED do radiatora? Można to zrobić na cynę czy dla lepszego transportu ciepła użyć jakieś pasty?image.thumb.png.2b0304a00244ec16aaa1b93175cb0c9d.png
    4. Czy znacie dystrybutorów LEDów które byłyby podobnej mocy i montażu jak ta na screenie, a jednocześnie miały bardzo wąski zakres widma i dostępną pełna specyfikacje z wykresem długości fali oraz zachowaniem (czyt: spadek napięcia względem podanego natężenia)? Mi udało się znaleźć tylko dla wybranych kolorów (np. brak 420-430nm) albo dla SMD których dokumentacja montażu mnie przerasta.

     

    Dzięki.

     

     

  7. Cześć!

    Zrobiłem w pełni zadania, ale chciałem się sprawdzić i zmodyfikować ostatni z nich. Z racji, że mimo  puszczeniu przycisku, cała sekwencja musi się skończyć, chciałem:

    1. Ustawić, aby sekwencja świateł kończyła się w miejscu, w którym odrywam palec od przycisku

    2. Po ponownym naciśnięciu pętla zaczynała się od początku.

    Obecnie mam coś takiego:

    void loop()
    {
      while(digitalRead(7) == LOW) { //aktywacja pętli przyciskiem
      digitalWrite(12, LOW); //Czerwona OFF
      digitalWrite(10, LOW); //Żółta OFF
      digitalWrite(8, HIGH); //Zielona ON
    
      delay(500); // Opóźnienie wyłączenia = Długość świecenia zielonej
      
      digitalWrite(12, LOW); //Czerwona OFF
      digitalWrite(10, LOW); //Żółta OFF
      digitalWrite(8, LOW); //Zielona OFF
    
    
        while(digitalRead(7) == HIGH) { //puszczenie przycisku i zatrzymanie pętli
           digitalWrite(12, LOW); //Czerwona OFF
           digitalWrite(10, LOW); //Żółta OFF
           digitalWrite(8, LOW); //Zielona OFF
        }
    
      digitalWrite(12, LOW); //Czerwona OFF
      digitalWrite(10, HIGH); //Zółta ON
      digitalWrite(8, LOW); //Zielona OFF
      
      delay(500); // Długość świecenia Żółtej
      
      digitalWrite(12, LOW); //Czerwona OFF
      digitalWrite(10, LOW); //Żółta OFF
      digitalWrite(8, LOW); //Zielona OFF
    
      
        while(digitalRead(7) == HIGH) { //puszczenie przycisku i zatrzymanie pętli
           digitalWrite(12, LOW); //Czerwona OFF
           digitalWrite(10, LOW); //Żółta OFF
           digitalWrite(8, LOW); //Zielona OFF
        }
    
      digitalWrite(12, HIGH); //Czerwona ON
      digitalWrite(10, LOW); //Żółta OFF
      digitalWrite(8, LOW); //Zielona OFF
      
      delay(500); //Długość świecenia czerwonej
      
      digitalWrite(12, LOW); //Czerwona OFF
      digitalWrite(10, LOW); //Żółta OFF
      digitalWrite(8, LOW); //Zielona OFF
    //Pętla automatycznie zatrzymana bez potrzeby wywoływania while jak wyżej
      }
    }

    I o ile swoje zadanie z punktu pierwszego spełnia, tyle po ponownym naciśnięciu pętla jest kontynuowana.

     

    Czy jest jakiś sposób, aby ustawić by pętla w pewnym momencie, po spełnieniu danego warunku zostałaby przerywana i wracała na początek?

  8. Cześć,

    Jak właściwie wygląda dobór mocy w przypadku rezystorów ustawionych szeregowo?

    Wymyśliłem taki układ z diodami jednokolorowymi dużej mocy: 124490606_1446969525693498_4561717563693918023_n.thumb.jpg.d1af2e21d13c5b2f2aa8fc6342dcec80.jpg

    Dla uproszczenia tylko lewy segment:

    Diody czerwone D1,2,3 mają U= 2.4v i I=350mA.

    R1 ma 15R.

    Z moich wyliczeń na podstawie artykułu wynika, że rezystor powinien mieć (licząc z górką) 2W.

    Co w sytuacji gdzie podpinam do układu jeszcze potencjometr (P1 100R) którym docelowo chcę sterować światłem diody? On też musi być przystosowany na 2W czy może ta moc się sumuje i wystarczy 1/4W?

  9. Cześć,

    Mam małą zagwozdkę. Postanowiłem sprawdzić jak zachowają się 2 diody połączone szeregowo, kiedy wepnę przed każdą z nich kondensatory o różnej pojemności(d1 - 2x 220uF, d2 - 1x 1000uF). Zgodnie z moim przewidywaniem, po odłączeniu zasilania, d1 gasła znacznie szybciej niż d2. Jednak co innego wzbudziło moją ciekawość. Dioda D2 zapaliła się również wyraźnie później niż D1. Z czym ma to związek? Kondensatory muszą się jakoś "napełnić" zanim puszczą napięcie do drugiej diody? Przypuszczałem, że zapalą się w tym samym momencie.

    IMG_20200817_183126.jpg

    IMG_20200817_183719.jpg

  10. Cześć! Jestem zupełnie nowy w temacie elektroniki i chciałbym to zmienić. Obecnie jestem na półmetku pierwszego kursu z podstaw elektroniki. Pojawiły się już pierwsze trudności i zauważyłem, że treści na forum stanowią solidne uzupełnienie i tak już świetnego kursu, stąd pomysł na rejestrację 🙂

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.