Skocz do zawartości

dkradke

Użytkownicy
  • Zawartość

    32
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    2

Posty napisane przez dkradke


  1. 1 godzinę temu, ethanak napisał:

    Mam pytanko: na schemacie masz przycisk S1 podłączony do GPIO16 bez rezystora podciągającego (GPIO16 jako jedyny nie ma wewnętrznego PULLUP). Działa Ci to dobrze?

    Dodatkowo - zostawianie wiszących GPIO0 i GPIO2 to nie jest specjalnie dobry pomysł - oba powinny być podciągnięte rezystorami do Vcc.

    A poza tym fajne - czasem żałuję że nie mam kota 🙂

     

    Zgadza się, masz rację. Wrzucone schematy nie były zaktualizowane, poprawiłem je w poście. Dopiero w praniu wyłapałem brak rezystora na GPIO16. Co do GPIO0 i GPIO2 też się z Tobą zgodzę, że powinny być pull-upy, ale z w praktyce jeszcze nigdy mi się nie zdarzyło, żeby nie wystartował z flasha bez nich, jestem świadomy, że wystawiam się tym na potencjalne problemy 😉 w Rev.2 już je dodam 🙂

    Btw. dzięki za zwrócenie uwagi na to i przypomnienie mi o problemach z GPIO16 😉

    • Lubię! 1

  2. To co ja napisałem, czyli pliki js, css itp trzymam w pamięci SPIFFS, aby zajmowały mniej miejsca użyłem różnych optymalizacji typu html compressor. Natomiast użyte frameworki mam jako linki do servera cdnjs.

    Co do odtwarzania dźwięku to użyłbym dedykowanego modułu np taki jak użyłem tutaj: Sterownik ogrzewania

    • Lubię! 1

  3. Wykorzystałem bootstrapa. Frameworki są podlinkowane z cdnjs, natomiast główna zawartość jest hostowana na ESP w postaci plików htm, js, css itd. Możliwa jest bardzo prosta podmiana wyglądu strony, wchodząc na http://IP/upload mamy prosty file system.

    UI do aktualizowania softu (również przez www http://IP/update) jest kompilowane z kodem, takie zabezpieczenie jakby wyparowały wszystkie pliki z pamięci SPIFF 😉 

    • Lubię! 1

  4. Ciekawe rozwiązanie, też stawiam dokładnie na takie połączenie CAN + HA. Mam rozprowadzone okablowanie więc jest baza, no i CAN pozwala uniknąć problemu 'single point of failure' gdzie pada nam RPI i nawet światła nie włączymy w łazience 😉 Możesz opisać trochę jak zorganizowałeś protokół komunikacyjny po CAN-ie? No i bajką by było jakbyś podzielił się skryptem CAN <->MQTT,  albo chociaż jego opisem 🙂

    • Lubię! 1

  5. Jest to zwykły spadek napięcia na diodzie co pozwala zasilić transoptor. Jeśli podłączyłbyś transoptor bez tamtych diod, to spaliłby się. Musiałbyś dać rezystor szeregowo z transoptorem, żeby ograniczyć prąd, ale wtedy miałbyś rezystor również w szeregu z roletą 😉
    Co do kondensatora to on nie jest zwierany do masy, należy go potraktować jako odbiornik, a tutaj pełni funkcje wygładzania przebiegu, który trafia do uC.


  6. Jeszcze nie doszedłem do tego jak ustawić, aby domyślnie rozmawiał z moją aplikacją, bez wypowiadania wcześniej "Porozmawiaj z 'nazwa aplikacji'". Dopiero wypowiedzenie tego sprawi, że mogę sterować swoim urządzeniem.

    • Lubię! 1

  7. Aplikacja ma inny głos aby odróżnić go od ogólnego asystenta google, można wtedy łatwo stwierdzić czy rozmawiamy z naszą aplikacją. Mamy do wyboru dwa męskie i dwa żeńskie głosy.

    • Lubię! 1

  8. Dodałem schemat, nic tam odkrywczego nie ma, zebrałem do kupy kilka komponentów.

    Program napisałem w oparciu o Arduino Core w PlatformIO, projekt jest dosyć duży i nie chcę go tutaj zamieszczać, jak masz jakieś konkretne pytania lub problemy z czymś to chętnie pomogę. Część arduinowych bibliotek użyłem (bo po co odkrywać koło na nowo), część napisałem sam, a część przerobiłem tak, żeby pracowały z wykorzystaniem ekspandera.

    ESP-12 to dokładnie taki jak z linku w temacie, czyli ESP8266. Użyłem tego bo mam ich kilka w szufladzie, a większość testów robię na NodeMCU, a tam właśnie jest ESP-12.

    Obudowa to rzeźba podstawowymi narzędziami jak brzeszczot i dremel 😉 Korpus wycięty ze sklejki, a front to pleksa mocowana na magnesy, aby ukryć mocowanie do ściany, bardzo dobrze sprawdził się ten pomysł. Dwa boczne przyciski to też pleksa, osadziłem na niej diodę led.

    Całość jest pomalowana czarną farbą podkładową, jest ona trwała, daje fajną fakturę i głęboki mat. Przyciski wcześniej pomalowałem białą farbą, aby lepiej rozchodziło się światło, a ranty zeszlifowałem pilnikiem.

    IMG_20190119_145857.thumb.jpg.9687e0f87fdce9a186d37f02860618d7.jpgIMG_20190120_140157.thumb.jpg.e448f056e4035e5417883e3428c4de07.jpg

    • Lubię! 1

  9. Na zdjęciu gdzie jest LCD widać wystające śruby M3, przykleiłem je do przedniego panelu jakimś mocniejszym klejem. Płytkę można zdemontować odkręcając nakrętki. Wszystko jest w pełni rozbieralne. Przedni panel to zwykły wydruk na papierze i zalaminowane, przyciski wystają minimalnie ponad plastik obudowy, tak że ten nadruk fajnie się opiera o nie, efekt trochę jak przy membranowych przyciskach.

    • Lubię! 2

  10. Gratuluje projektu. W czym projektowałeś obudowę? Zabierałeś np. 1mm na bocznej ściance pojedynczego zęba, aby dało się wcisnąć jedno w drugie? Czy może wymiary są idealnie spasowane, a to co laser zabrał wystarczyło, żeby weszły dwa elementy na siebie? Kolejna sprawa, możesz podesłać info gdzie zamawiałeś usługę cięcia i grawerki? Możesz puścić tą informację na PW, żeby nie robić tu żadnych reklam 😉 Pozdrawiam

    • Lubię! 1

  11. Co do krańcówek przy roletach, nie było takiej możliwości, żeby je dołożyć, dodatkowo nie miałem doprowadzonych przewodów pod to. Z samej rolety wystają tylko przewody zasilania, więc też nie było możliwości podłączyć się pod krańcówki wbudowane w roletę, a swoją drogą to zamiast krańcówek mam system przeciążeniowy w nich.

    Chciałem zrobić pomiar prądu jak najmniej inwazyjny i odseparować część wysokiego napięcia od niskiego, stąd spadek napięcia na rezystorze odpadł. ACS711 to czujnik magnetyczny więc fizycznie odseparowana strona pomiarowa, ale różnice w prądzie były zbyt małe, żeby sensownie interpretować wyniki. ACS711 trochę się wzbudza nawet jak nie płynie przez niego prąd.

    Rozwiązanie z diodami jest najprostsze, w momencie jak podaje napięcie na roletę to odkłada się na nich trochę ponad 1V, co aktywuje transoptor, a elektronika w rolecie nawet nie poczuje braku tego 1V 😉 Dwie diody w szereg, żeby spadek był większy, a przeciwstawnie bo jest tutaj napięcie AC i chciałem mieć detekcję w obu połówkach przebiegu napięcia.

    • Lubię! 1

  12. Kolega modernizując u siebie w mieszkaniu system ogrzewania poprosił mnie o wykonanie jakiegoś sterownika do pieca CO wraz ze sterowaniem dmuchawy. Tak powstał niewielki regulator, który miał mieć na celu prostotę i czytelność.

    P1300006.thumb.JPG.849c11b1077b6603b08ad70ebc5ec9fe.JPG

    Główne elementy użyte do budowy sterownika to:

    Głównym zadaniem jest uruchamianie pompy obiegowej na podstawie zadanej temperatury na piecu. Dodatkową funkcją jest tryb rozpalania, który w początkowej fazie uruchamia dmuchawę. Jest to bardzo przydatna opcja, przyspieszająca proces rozpalania w piecu.

    Sterowanie jest bardzo proste, odbywa się z wykorzystaniem tylko trzech przycisków. W podstawowym widoku regulujemy zadaną temperaturę na piecu, która decyduje o tym czy pompa ma zacząć pracować czy nie. Regulator jest prostą nastawą z histerezą.

    Po wejściu w menu możemy dodatkowo zmienić:

    • temperaturę wyłączenia dmuchawy. Jeżeli piec jest zimny i włączymy opcję rozpalania to po osiągnięciu już stosunkowo niewielkiej temperatury dmuchawa zostanie wyłączona
    • histerezę pracy regulatora
    • maksymalne czasy pracy pompy i dmuchawy

    Wszystko zostało zamknięte w obudowie natynkowej, a sterownik umieszczony obok pieca w pomieszczeniu gospodarczym.

    Układ składa się z dwóch płytek rozdzielając część wysokiego napięcia i sterowania.

    P1290003.thumb.JPG.1f61494bbf7820c458c8c04e915a35c3.JPGP1290002.thumb.JPG.c4a22d088c7f67745bf1cff71572b4dd.JPGP1290004.thumb.JPG.4a6e1d8c6a3ca2071d9804091220f4a6.JPG

    Zdecydowałem się na umieszczenie kompletnego zasilania w urządzeniu, transformator, bezpiecznik i kilka dodatkowych elementów. Powodem tego było to, że sterownik jest używany przez kogoś innego a dołączany zasilacz może się zgubić i wtedy nie mam kontroli na tym jaki zamiennik zostanie użyty.

    Tutaj jest pokazany schemat i wzór płytki:

    sterownikCO.thumb.png.2291c5f5ebffcfdb2a3fbd17ae6e7dc8.pngsterownikCObrd.thumb.png.1cabcee771f16ea5c24d50f81ca58217.png

    Płytka została wykonana w domowych warunkach metodą żelazkową. Dla poprawy czytelności wykorzystałem możliwość definiowania własnych znaków co pozwoliło uzyskać duże cyfry widoczne z daleka. Niżej pokazuje jak uzyskać takie efekt.

    - najpierw musimy zdefiniować poszczególne elementy cyfr i ładujemy je do pamięci wyświetlacza

    uint8_t BigDigitDefChar[][8] = {
                    {15,7,32,32,32,32,3,7},
                    {32,32,32,32,32,32,7,15},
                    {28,30,30,30,30,30,30,28},
                    {7,15,15,15,15,15,15,7},
                    {31,31,32,32,32,32,32,32},
                    {32,32,32,32,32,32,31,31},
                    {31,31,32,32,32,32,31,31},
                    {30,28,32,32,32,32,24,28}
    };
    
    for(uint8_t i=0;i<8;i++) lcd_defchar(i,BigDigitDefChar[i]);

    - następnie tworzymy tablicę która poskleja nam te segmenty w cyfry

    char* BigDigit[][2]={
                    {"\x83\x84\x82","\x83\x85\x82"},        //0
                    {"  \x82","  \x82"},                    //1
                    {"\x80\x86\x82","\x83\x85\x85"},        //2
                    {"\x80\x86\x82","\x81\x85\x82"},        //3
                    {"\x83\x85\x82","  \x82"},              //4
                    {"\x83\x86\x87","\x81\x85\x82"},        //5
                    {"\x83\x86\x87","\x83\x85\x82"},        //6
                    {"\x83\x84\x82","  \x82"},              //7
                    {"\x83\x86\x82","\x83\x85\x82"},        //8
                    {"\x83\x86\x82","\x81\x85\x82"}         //9
     
    };

    - teraz już tylko wystarczy użyć odpowiedniej funkcji do wyświetlania. Funkcja ta korzysta z obsługi R/W i odczytuje stan busy flag co pozwala na odczytanie pozycji kursora. Jeśli ktoś będzie chciał podłączyć R/W do GND to musi przerobić tą funkcję tak aby przekazać do niej pozycję kursora

    void lcd_big_int(int val)
    {
            uint8_t pp,x,y;
     
            char bufor[17];
            char *wsk=itoa(val, bufor, 10);  //zamieniamy całą liczbę na pojedyncze znaki ACSII np. 1234 -> '1','2','3','4'
     
            register uint8_t znak;
            while ( (znak=*(wsk++)) )    //pętla jest powtarzana po wszystkich indeksach tablicy bufor, aż napotka '\0'
            {
                    pp = check_BF() & 0b01111111;  //odczytujemy aktualną pozycję kursora - busy flag wyświetlacza
     
                    y = pp & 0xF0;    //wyodrębniamy nr wiersza
                    x = pp & 0x0F;    //wyodrębniamy pozycję x
     
                    znak -= 0x30;    //zamieniamy kod ascii na rzeczywistą wartość dziesiętną np '7' -> 7; będzie to nasz indeks do tablicy
                    lcd_str(BigDigit[znak][0]);     //ładujemy na wyświetlacz górną część cyfry
                    lcd_write_cmd( (0x80 + y + 0x40 + x) );   //wracamy kursorem na domyślną pozycję x, ale o jeden wiersz niżej
                   
                    lcd_str(BigDigit[znak][1]);   //ładujemy na wyświetlacz dolną część cyfry
                    lcd_write_cmd( (0x80 + y + x + 0x03) );  //ustawiamy kursor zaraz za cyfrą w wierszu domyślnym, czyli takim w którym wywołano funkcję
            }
    }
    
    uint8_t check_BF(void)
    {
            CLR_RS;
            return _lcd_read_byte();
    }

    Jest to prosty sposób na bardzo fajne wyświetlanie liczb, które są widoczne z daleka.

    • Lubię! 1

  13. W ramach pracy magisterskiej wykonałem dedykowany sterownik do stacji uzdatniania wody, jako alternatywę dla sterowników PLC. 

    makieta_foto.thumb.jpg.93119d9f0fb6997290473603ae72fa79.jpg

    Sam temat pracy został zaproponowany przeze mnie dlatego, że lubię robić coś bardziej kreatywnego niż pisanie suchego tekstu. Promotorowi bardzo się to spodobało i nie było żadnego problemu aby przystąpić do tego zagadnienia.

    Pewnie niektórzy się zastanowią dlaczego akurat stacja uzdatniania wody? W tamtym czasie pracowałem w automatyce przemysłowej i głównie robiliśmy właśnie takie obiekty. Zawsze były one robione na sterownikach PLC, są to drogie zabawki. Pomyślałem, że można zrobić prototyp takiego dedykowanego sterownika do tego rodzaju pracy, a w przyszłości dostosować go do różnych obiektów, gdzie jest różna ilość zaworów, pomp, zbiorników itp, ale zawsze jest ta sama część wspólna czyli sterowanie samym procesem uzdatniania.

    Sterownik został oparty o procesor Atmega128, a wszystko zostało dopasowane do obudowy na szynę DIN Z104J.

    Podstawowe cechy to:

    • 32 wejścia cyfrowe
    • 16 wyjść cyfrowych
    • 5 wejść analogowych
    • zegar RTC
    • RS485
    • zdalny dostęp przez przeglądarkę www

    P5190515.thumb.JPG.1e99a8cdf8b0ac041bb8c10b2255dcbf.JPGP5190508.thumb.JPG.7ecf90be0a24c1c54f04ef4d8d0c01c0.JPGP5260518.thumb.JPG.6b8cfa5621dce23ae5ec8863c9379411.JPG

    Sam procesor ma zbyt małą ilość wyprowadzeń aby obsłużyć wszystkie sygnały sterujące. Aby zwiększyć ilości wejść/wyjść wykorzystałem ekspandery na I2C - PCF8574. Podzieliłem całość na logiczne moduły, podobnie jak to jest w sterownikach PLC:

    • 4 moduły DI - cyfrowe sygnały wejściowe
    • 2 moduły DO - cyfrowe sygnały wyjściowe
    • 1 moduł AI - analogowe sygnały wejściowe
    • moduł RS485

    Na wejściach cyfrowych do zabezpieczenia zastosowałem optoizolatory takie jak są wykorzystane np. tutaj TLP281. Na poniższym schemacie przedstawiony jest jeden taki blok. Masy są rozdzielone, co może w prost nie wynika ze schematu.

    suw_dio.thumb.png.ae25568425d0b180e039a03ca9bb31e7.png

    Układ wyjściowy jest zrealizowany w oparciu o UDN2987

    suw_do.thumb.png.f597a98403c86f2ed727720985abdbb1.png

    Moduł Analogowy został skonstruowany tak aby przyjmować sygnały prądowe 4..20mA. Jest to przemysłowy standard najczęściej wykorzystywany w czujnikach. Cechuje go prostota obsługi i uniwersalność, a fakt, że dolny zakres pomiarowy to 4mA ułatwia to detekcję wadliwego czujnika.

    W celu pokazania całego procesu uzdatniania wody wykonałem model o wymiarach 100cm x 50cm ukazujący różne etapy pracy takiej stacji, jak:

    • uzdatnianie
    • płukanie zbiorników ze złożem uzdatniającym
    • napowietrzanie zbiorników
    • napełnianie zbiornika retencyjnego
    • chlorowanie układu w celu dezynfekcji
    • dostarczanie uzdatnionej wody do odbiorców

    P5260534.thumb.JPG.2c087b01160c2532b2aa38d864e8456c.JPG

    Na makiecie umieszczone zostały diody sygnalizujące otwarcie poszczególnych zaworów, co pozwala w łatwy sposób zaobserwować jak zachodzi cały proces pracy takiej stacji. Zamontowane są również potencjometry przy przepływomierzach, są one wpięte w pętle prądową aby zachować zgodność z prawdziwymi czujnikami przepływu. Na tej podstawie można zliczać ile wody zostało uzdatnionej, dobierać interwały pracy i wyznaczać potrzebę płukania filtrów. Całe sterowanie wykonałem w oparciu o web serwer z wykorzystaniem ASP.NET, tworząc taką mini SCADe. Wizualizacja wiernie odzwierciedla cały model.

    ASP_NET.thumb.jpg.65813500646c7dcbe95c15b295c020df.jpg

    Serwer to aplikacja na system Windows, do którego podpięty jest moduł USB <-> RS485 zapewniający komunikację ze sterownikiem. Mamy podgląd na żywo całego procesu, dane są odświeżane automatycznie na bieżąco. W aplikacji możemy ustawić wszystkie parametry pracy sterownika, podglądać alarmy i włączać na żądanie wybrane etapy takie jak płukanie filtrów czy pobieranie wody ze studni głębinowej.

    Sam proces uzdatniania wody może nie jest technologicznie skomplikowany, ale jest bardzo ciekawy od strony automatyki. Jako ciekawostkę dodam, że złoże które znajduje się w zbiornikach filtrujących to po prostu odpowiednie kruszywo wiążące konkretne cząsteczki z wody, najczęściej jest to odżelaziacz i odmanganiacz.

    • Lubię! 2
×
×
  • Utwórz nowe...