Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'DIY'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 63 wyników

  1. Swego czasu, kiedy zaczynałem przygodę z elektroniką (6 klasa podstawówki, 2017 rok), zachciało mi się zrobić jakiś "większy" projekt. Padło na dość trudne wyzwanie, zrobienie mini pc z obsługą komend basicopodobnych. Z racji szkoły projektu nie dokończyłem, ale udało mi się zrobić płytkę z atmegą, z wyjściem VGA i wejściem na programator. Urządzenie nazwałem "iNap". Działanie Urządzenie jest podobne do Arduino Pro Mini: "goła" atmega 328 na 16Mhz, na płytce umieszczone zostały umieszczone peryferia takie jak: buzzer podpięty do pinu A0 przez tranzystor, generujący dźwięki diodę led przy pinie 13 (standard) stabilizator 7805 z filtrowaniem wyjście VGA gotowe pod bibliotekę VGAX 5 wyprowadzonych pinów (analogi + pin 2) Całość programujemy za pomocą usbasp z podłączonym zewnętrznym zasilaniem (błąd w pcb, masy są oddzielone). Płytka została zaprojektowana pod bilbiotekę VGAX, dzięki której na Arduino możemy wyświetlać obraz VGA w 4 kolorach (!), w rozdzielczości 120x60px. Na monitorze możemy napisać dowolny tekst, dowolną zmienną czy nawet wyświetlić zdjęcie. Na zdjęciu płytka pracuje z podpiętym zewnętrznym zasilaczem. Na monitorze (od razu przepraszam za bałagan na biurku) możemy zobaczyć przerobiony przykład z biblioteki, który wyświetla 1 kolorowe piksele w losowych miejscach. Samo generowanie VGA zużywa aż 3 timery naszej atmegi, przez co mamy ograniczoną swobodę wykonywania funkcji czasowych, a bufor danych (ramka) zużywa ponad 89% RAMu mikrokontrolera. Budowa Pierwszą płytkę (testową) wykonałem na płytce uniwersalnej (gdzieś ja schowałem, nie wiem gdzie), miała ona uboższe możliwości. Płytkę którą widzicie zaprojektowałem w Eaglu, jeszcze na starym pc, więc plików nie wyślę. Samo PCB wykonałem domowymi sposobami: ścieżki naniosłem metodą termotransferu na laminat, nastepnie wytrawiłem w B327. Nastepnie wiercenie, dopieszczanie i lutowanie. Na końcu zapomniałem pomalować spód lakierem, przez co 2 lata miałem wystawioną gołą miedź. Ale płytka jeszcze dobrze się trzyma Co do peryferiów, buzzer podpiąłem przez tranzystor 2N2222. Same sygnały VGA musiałem ograniczyć rezystorami do odpowiednich napięć (68ohm na vsync i hsync, ok. 220ohm na kolory). Układ stabilizatora wyposażyłem w podwójny przełącznik DIP Switch, który odcina zasilanie i wycisza buzzer. Podsumowanie Był to mój pierwszy tak duży projekt. Moje pierwsze trawienie, pierwsze PCB. Wszystko zadziałało za pierwszym razem, i gdyby nie szkoła, na pewno zrobiłbym coś więcej z tym. Poczułem się deczko zawiedziony, kiedy na instructablesach już ktoś napisał poradnik "jak zrobić mini pc na arduino diy" chyba parę miesięcy temu. Jeżeli ktoś by chciał zrobić podobny projekt, to przede wszystkim na ESP (autor tej biblioteki napisał podobną pod ESP), które oferuje prawdziwe, monochromatyczne 640x480px i dołożyć obsługę klawiatury na PS/2. Życzę szczęścia Pozdrawiam, Leoneq :3
  2. Hej wszystkim, temat może nie dotyka robotyki, ale elektroniki jak najbardziej :). Jestem zapalonym graczem Airsoft, a jako że hobbistycznie bawię się elektroniką, czasem pracuję nad gadżetami które urozmaicaną rozgrywkę. Opracowałem i wykonałem 3 sztuki urządzeń które pozwalają na na zorganizowanie krótkiego scenariusza (30 do 120 minut) dla dwóch drużyn. Celem graczy jest zebranie większej ilości airsoftcoin z urządzeń niż zdobędzie przeciwnik. Każde urządzenie posiada 2 parametry do ustawienia: Ilość Airsoftcoinów do wykopania Czas wykopania pojedynczego Airsoftcoina Urządzenie podczas gry może znajdować się w jednym z trzech stanów: 1) GOTOWY - Urządzenie posiada gotowy do przejęcia Airsoftcoin. Urządzenie jest w tym stanie podczas startu rozgrywki. Świecą się oba przyciski, co 15 sekund słychać piknięcia a urządzenie jest gotowe do interakcji z graczem. Aby zdobyć punkt, gracz musi podbiec i ręką wcisnąć przycisk koloru jego drużyny. Gdy to zrobi z pozostałej puli zdejmowany jest 1 punkt który naliczany jest jego drużynie a urządzenie przechodzi do kolejnego stanu. Jeżeli są jeszcze punkty w puli, przechodzi do stanu (2) KOPANIE. Jeżeli pula jest wyczerpana, przechodzi w stan (3) WYCZERPANY 2) KOPANIE - Urządzenie kopie kolejny Airsoftcoin z bloku. Na wyświetlaczu widać czas który został do zakończenia kopania, przyciski są zgaszone a urządzenie milczy. Gracz nie może wejść w interakcje z urządzeniem. Gdy czas się skończy, urządzanie zapika i ponownie wejdzie w stan (1) GOTOWY 3) WYCZERPANY - Urządzenie rozkopało cały blok Airsoftcoin i nie jest już użyteczne w dalszej części rozgrywki. Przyciski są zgaszone, urządzenie milczy a podświetlenie ekranu miga. Gracz nie może wejść w interakcje z urządzeniem. Po zakończeniu całej rozgrywki można sczytać i podsumować punkty. Filmik opisujący działanie: Link do przykładowego scenariusza: http://www.taktycznyszczecin.pl/viewtopic.php?f=10&t=5615 Filmik z rozgrywki (nie jest mój, ale załączam za zgodą autora. Zawiera kilka niecenzuralnych słów. Polecam obejrzeć na luzie, lub wyłączyć głos i napisy): Budowa mechaniczna: Jeżeli obejrzeliście chociaż część filmiku, to zauważyliście pewnie że urządzenie musi mieć pewną wytrzymałość. Prędzej czy później urządzenie komuś spadnie, ktoś inny się o nie potknie i przyjmie sporo plastikowych kulek. Podstawą jest ta obudowa Kardexowa, i przyznam że nie widzę lepszej alternatywy. Ma idealne wymiary żeby pomieścić zawartość, a co ważniejsze jest idealna na wysokość dla dość długich przycisków. Jej obróbka jest przyjemna, ale sam materiał na tyle mocny że wytrzyma nawet strzał z bliska z repliki o mocy ~2J. Ekran zabezpieczyłem prostokątem z płyty plexi. Ten element nie jest już tak wytrzymały jak sama obudowa, ale myślę że wystarczy. Rykoszet, czy strzał z daleka powinna wytrzymać. Jako przyciski zdecydowałem się użyć ten model i przyznam że tutaj też nie widzę lepszych alternatyw. Po pierwsze, są wystarczająco duże żeby łatwo je było wcisnąć. Po drugie, są na przełącznikach krańcowych, co sprawia że mają wyraźny "klik" i nawet pod wpływem adrenaliny i w rękawiczkach jest się pewnym czy wciśnięcie zaskoczyło czy nie. Po trzecie idealne otwory pod te przyciski robi otwornica pod zawiasy w szafkach. Nie trzeba kombinować czy mierzyć. Szybkie przyłożenie wkrętarki w odpowiednim miejscu i już możemy montować. No i po czwarte, mają wbudowane diody, więc jednocześnie sygnalizują stan. Jedynym minusem jest zasilanie do 12V, więc przylutowałem oporniki tak żeby wyciągało niecałe 20mah przy 5V. Tutaj nawet lekko jaśniejsze świecenie jest na plus, szczególnie na dworze. Ostatnim stricte mechanicznym elementem jest włącznik. W tym momencie muszę nadmienić, że nie jest to pierwsza wersja urządzenia i na zdjęciach widać zalepione kable klejem na gorąco w prototypie. Pierwsze podejście to było zastosowanie zworki i goldpinu. Niestety, ta pierwsza nie raz się zgubiła i było to rozwiązanie bardzo zawodne. Po jeszcze innym, również nieudanym rozwiązaniu w innym urządzeniu, wpadłem na pomysł z włącznikiem kluczykowym i okazało się to strzałęm w dziesiątkę. Oczywiście dla chcącego nie jest trudno przełączyć go nożem, czy śrubokrętem, ale tacy ludzie nie grają. Za to jako zabezpieczenie przeciw przypadkowemu wyłączeniu i wygodnemu włączaniu, wypada rewelacyjnie. Wszystkie elementy zostały przyklejone klejem na gorąco, a wyświetlacz dodatkowo śrubkami. Prawie wszystkie połączenia są lutowane. Wiem że może się to wydać przesadą i problemem z ewentualną naprawą, ale zdarzały się już sytuacje rozłączenia z goldpinów, więc zdecydowałem się na to rozwiązanie jako na najbardziej pewne. Skoro i tak ja to zrobiłem, to z naprawą nie będę miał przecież problemów. Jedynym nielutowanym połączeniem elektrycznym jest podłączenie przetwornicy z resztą zasilania. Skorzystałem ze standardowego portu USB, bo raz że akurat takie przetwornice miałem, a dwa że mogę rozłączyć w ten sposób pierwszą i drugą część obudowy co przydaje się przy majsterkowaniu. Minusem jest brak wodoodporności, ale to zbyt duży problem żebym mógł go amatorsko rozwiązać. Rozwiązaniem jest owijanie urządzeń które mogą zostać wystawione na deszcz w koszulki do dokumentów i zaklejenie taśmą. Obudowa mieści się idealnie, nie blokuje przycisków i widać wyświetlacz. Elektronika: Sercem jest klon arduino nano. Oczywiście arduino uno też jest zgodne i służyło do prototypownia, ale ten model jest tańszy, mniejszy i łatwiejszy w lutowaniu połączeń. 2 wejścia i 2 wyjścia zapewniają mi przyciski omówione w części o mechanice, więc je już tutaj pominę. Kolejnym wyjściem, jest moduł buzzera. Można go śmiało zastąpić zwykłym buzerem z tranzystorem i rezystorem, ale szedłem na łatwiznę. Wyświetlacz to najprostszy 2x16 z konwerterem I2C. Można poradzić sobie bez konwertera kosztem ilości kabli, ale tak jak wspomniałem, idę na łatwiznę i myślę że tak jest też bardziej solidnie. Do ustawiania parametrów urządzenia użyłem prostego odbiornika podczerwieni TSOP31238 i pilota. To rozwiązanie jest o tyle fajne, że pilot jest malutki i można ustawiać 3 urządzenia jednocześnie. Sam odbiornik jest w obudowie zalepiony klejem na gorąco. Klej po wyschnięciu jest biały, ale przepuszcza światło podczerwone. Zasilanie: Generalnie sekcja zasilania składa się z akumulatora jednoogniwowego li-on/li-po i prostownicy 5V z wyjściem USB. Akumulatory pochodzą ze starej komórki i baterii laptopowej. Ładowanie zależy od urządzenia. W pierwszej wersji zastosowałem prosty moduł ładowarki ogniw i ładuje go zwykłą ładowarką do komórkowi. Dwa modele powstałe później, mają wyjście t-deans wyprowadzone na zewnątrz które jest bezpośrednio połączone z ogniwem. Chciałem zastosować też te moduły ładowarek, ale akurat mi się skończyły więc improwizowałem. Ma to tą zaletę że ładuje je tą samą ładowarką co baterie do replik, a dodatkowo wyświetlacz pokazuje mi ile naładowało, przez co mogę określić czy wystarczy na cały dzień rozgrywek. Po 3 godzinach rozgrywki ładowałem je prądem maksymalnym 0.5A i ładowanie zakończyło na 216 mah. Ogniwa z laptopów miały fabrycznie 2800mah, a komórkowa 6000mah, więc spokojnie wystarczą nawet na cały dzień gry w zimę. Programowanie: Programowałem to dość nietypowo w C++. Oryginalny edytor Arduino to bardziej notatnik niż prawdziwe narzędzie, za to w żadnym normalnym IDE nie udało mi się skompilować i wgrać schematu. Zrobiłem więc standardowy projekt arduino, z jedną biblioteką w jego katalogu i sama biblioteka była już w C++. Sam plik .ino odpalał jedynie kod z wejściowy z kodu "biblioteki" którą mogłem edytować w Clion EAP. Kilka zdjęć: Po lewej urządzenie z żeńskim t-deans pozwalającym ładować ładowarką do modelarskich pakietów li-po. Po prawej wejście micro usb i widać zaklejone stare kable z goldpinem, które przedłużone z powrotem wchodzą do środka. Stary klej trzymał zbyt mocno żebym mógł się go pozbyć. Szare przełączniki kluczykowe tworzą połączenie pomiędzy ogniwem a przetwornicą. Zaklejone odbiorniki podczerwieni. Pomimo białego kleju, światło podczerwone świetnie przechodzi. Widok od środka. Po lewej ogniwo z komórki i ładowanie z wbudowanej ładowarki. Po prawej zasilanie z ogniwa z laptopa. Walec otulony koszulką termokurczliwą na połączeniu to kondensator 1000uF. Po lewej wyłączone urządzenie, po prawej uruchomione i w stanie GOTOWY. Urządzenie w stanie KOPANIE, po wciśnięciu czerwonego przycisku. Zielona drużyna ma 0 punktów, czerwona 1 i w puli pozostało 14. Za 2 minuty i 57 sekund ponownie przejdzie w stan GOTOWY. Podsumowanie: Projekt ma 2 główne zalety: Po pierwsze, jest mega prosty. Z gotowym programem i podstawową umiejętnością lutowania myślę że spokojnie może go wykonać osoba która elektroniką się zbytnio nie interesuje. Jest praktyczny. Po zbudowaniu nie stoi na półce, ale jest używany jak na urządzenie użytkowe przystało. Pewnie znajdą się zgryźliwi którzy stwierdzą że to zbyt banalne lub znajdą błędy, ale nie odbierze mi to satysfakcji. Mam nawet w planach dopracować opis wykonania i opublikować razem z kodem źródłowym. Zapraszam do komentowania, dzielenia się uwagami i zadawania pytań. Dodaje uproszczony schemat i kod źródłowy: https://bitbucket.org/krzysiek050/asg_airsoftcounter
  3. Pewnego wieczoru chciałem zrobić zabawkę na arduino. Bez wahania postanowiłem zrobić grę 2048. Zrobiłem to! Teraz chcę pokazać proces. Przed pracą opowiem ci kilka słów na temat gry. Została stworzona przez Gabriele Cirulli - 19-letniego włoskiego dewelopera. Gra została napisana w celu ćwiczenia programowania. Mimo że osiągnęła wielki sukces, facet nie kontynuował tworzenia gier. W oryginale znajduje się pole 4 * 4, na którym z prawdopodobieństwem 91% pojawia się kafelek "2" i 9% liczba "4". Celem gry jest zdobycie kafla 2048, przenoszenie wszystkiego na jedną ze stron. Nasza gra będzie wersją uproszczoną. Będzie tylko dwójka, po osiągnięciu 2048 gra się skończy i nie będziesz mógł prowadzić zapisów. To wszystko - pole dla twoich ulepszeń. Zacznijmy od składników. Sercem zabawki jest płytka arduino nano - tania mała płytka. Aby kontrolować potrzebujesz 5 przycisków. 4 wskazują kierunki boków i jeden do przeładowania. Każdy z nich potrzebuje rezystora na 10 kOm. Informaja będzie wyświetlana na ekranie calowym. Pierwszą częścią pracy jest podłączenie wyświetlacza do arduino. Znajdź adres ekranu i2c. Aby to zrobić, pobierz szkic I2C SCANNER. Podłączamy ekran zgodnie z tabelą. Płyta -> Ekran GND ->GND 5V->VCC SCL->A5 SDA->A4 Szkic jest załadowany, ekran jest podłączony. Otwórz monitor szeregowy. Tutaj widzimy adres i2c ekranu. Radzę napisać czarny znacznik z tyłu ekranu. Teraz przygotuj go do wyświetlania danych. Zainstaluj dwie biblioteki (adafruit ssd1306, adafruit gfx). W folderze z biblioteką znajduje się wspaniały plik Adafruit_SSD1306.h. Otwórz go. Tutaj musisz odkomentować linię z rozmiarem twojego ekranu. Po uporządkowaniu wyświetlacza pobierz i otwórz szkic. Kilka słów o algorytmie. Gra rozpoczyna się i tworzy się kafelek "2". Można go rzucać w dowolnym kierunku. Po każdym ruchu na bok, wszystkie płytki powinny zostać przybite do ściany, po złożeniu razem, należy je ponownie przybić do ściany, a wkońcu w przypadkowym miejscu wyrzucić numer 2. Jeśli nie ma pustych miejsc i nie można ułożyć kilku płytek, pojawia się napis GAMEOVER. Jeśli kafelek 2048 zostanie złożony, pojawi się zwycięski komunikat. W void loop znajduje się spora część skomentowanego kodu. Jest potrzebny do debugowania. Jest odpowiedzialny za uzyskanie liczby od 1 do 4 i przesłanie płytek we właściwym kierunku. Konieczne jest określenie pinów, do których podłączone są przyciski i adres ekranu. Teraz możesz zmontować urządzenie na breadboard'e i wypróbować algorytmy. Jeśli robisz wszystko "zgodnie z twoim rozumem", musisz zamówić produkcję płytki z obwodem drukowanym, na której umieścisz nasze komponenty. Ale w przypadku pierwszego prototypu wystarczy go zmontować na płytce prototypowej. Bierzemy zieloną płytkę makietową 5 * 7 cm jako podstawę. Przylutuj na niej Arduino. Nad nim robimy złącze ekranu. Rozmieść scl, sda na a4, a5 - będzie wygodniej lutować. Przyciski lutujemy z rezystorami. Wstaw ekran. Rysujemy strzałki. Graj Demonstracja
  4. Lampy nixie to chyba najczęściej powracający temat wśród amatorskich projektów elektronicznych. Myśl o skonstruowaniu zegara z takim wyświetlaczem chodziła mi po głowie już wiele lat temu, w tym celu zaopatrzyłem się w zestaw lamp IN-14. Niestety z powodu braku czasu i dużej ilości projektów o wyższym priorytecie zadanie to ciągle było odkładane na później. Może to i lepiej, bo w międzyczasie miłośnicy amatorskiej elektroniki zyskali dostęp do całkiem ciekawych elementów, które mogłem wykorzystać w projekcie. Prezentowany zegar powstał w 2017 roku. Jego głównym elementem jest mikrokontroler Atmega644, który wykonuje wszystkie operacje związane z odmierzaniem czasu i obsługą multipleksowanego wyświetlacza. Dodatkowo zegar został wyposażony w moduł WiFi z układem ESP8266, pracujący pod kontrolą własnego programu. Zadaniem modułu jest cykliczne sprawdzanie czasu na serwerze NTP i korygowanie ustawień lokalnego RTC. Urządzenie posiada też układ scalony FT232, dodający możliwość konfiguracji przez USB. Stałe napięcie około 180V jest generowane za pomocą przetwornicy boost na układzie MC34063A. Oprogramowanie zegara zostało wyposażone w funkcję automatycznego wykrywania czasu letniego i zimowego. Na płycie czołowej znajduje się przełącznik umożliwiający włączenie trybu, w którym wyświetlany jest czas UTC - funkcja ta została dodana w związku z moimi radioamatorskimi i krótkofalarskimi zainteresowaniami. Konstrukcja została zamontowana wewnątrz obudowy ze sklejki wycinanej laserowo. Fizycznie urządzenie składa się z dwóch osobnych płyt, Jedna z nich mieści zestaw lamp nixie, druga elektronikę sterującą.
  5. 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ść. Główne elementy użyte do budowy sterownika to: LCD 2x16 HD44780 ATMEGA8 - zastosowany procesor DS18B20 - czujnik mierzący temperaturę na piecu przekaźnik na 5V taki jak tutaj: przekaźnik 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. 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: 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.
  6. Witam, mój system powstał z praktycznej potrzeby zautomatyzowania systemu podlewania i w celu rozpoczęcia przygody z elektroniką – wyszedłem z założenia, że jak teraz nie zrozumiem, jak działa to wszystko co jest dookoła, to za chwilę będzie to tak złożone, że nie zdążę już tego zrozumieć I generalnie myślę, że się udało – zrobiłem dokładnie to, co zamierzałem i w dodatku działa OPIS DZIAŁANIA SYSTEMU System w założeniu miał być jak najprostszy (tzn. działać przy jak najmniejszej potrzebie ingerencji człowieka w porównaniu do skomplikowanych systemów programowalnych, które są na rynku). Steruje on trzema liniami rozprowadzonymi w ogrodzie: woda w kranach, zraszacze trawników, linie kroplujące. Sterowanie odbywa się za pomocą elektrozaworów zasilanych z przekaźników (moduł 4 przekaźników). Przekaźnikami steruje Arduino na podstawie: włączenia/wyłączenia przełącznika, upłynięcia maksymalnego czasu określonego dla każdej linii (po upłynięciu tego czasu zawór zostaje zamknięty). System jest zasilany wodą z zestawu hydroforowego (żeby było odpowiednie ciśnienie), który pobiera wodę z ze zbiornika na deszczówkę (ZBIORNIK 1). Ponieważ nie jest on zbyt duży (3 m3) to istniała konieczność dopompowywania wody z drugiego zbiornika na deszczówkę (ten już ma 12 m3). Moje rozwiązanie opiera się na zamontowaniu w zbiorniku 1 dwóch czujników poziomu cieczy i pozwala na automatyczne dopompowywanie wody ze zbiornika 2 do zbiornika 1, gdy w tym poziom spadnie poniżej dolnego czujnika. Pompa, która jest w zbiorniku 2 wyłącza się, gdy poziom w zbiorniku 1 podniesie się powyżej górnego czujnika. REALIZACJA Do sterowania zaworami wykorzystałem Arduino. Początkowo plan był taki, żeby wszystko zrobić bez mikrokontrolera. Jednak Arduino jest mi potrzebne w drugiej wersji urządzenia (już się buduje), o której napisze poniżej. Na czystej elektronice (bez programowania) oparłem moduł sygnalizacji poziomu i uzupełniania wody w zbiorniku. Bazując na dwóch czujnikach poziomu wody mogę określić trzy stany wody w zbiorniku: niski, średni, wysoki. Zależało mi, żeby pompa uzupełniająca wodę zaczynała pompować, gdy woda w zbiorniku osiągnie poziom niski, a kończyła, gdy osiągnie stan wysoki. Poprzez umieszczenie czujników jak najdalej od siebie, uzyskałem samoczynne uzupełnianie zbiornika. Do tego wykorzystałem dwa układy scalone: bramkę OR oraz NAND co pozwoliło zastosować trzy diody oznaczające poziom wody. Logika włączania tych diod jest następująca: Bramkę NAND wykorzystałem dodatkowo jako przerzutnik bistabilny, który pamięta czy pompa jest włączona, czy wyłączona. Oto płytka sporządzona samodzielnie na potrzeby projektu: KONSTRUKCJA Całe urządzenie udało się zamknąć w standardowej obudowie hermetycznej z wyprowadzeniem przewodów do zasilania, podłączenia zaworów, czujników poziomu wody i przewodu sterującego pompą. Do wykonanie „wtyczek” do zaworów wykorzystałem tworzywo, które mięknie w 60 stopniach i w ciepłej wodzie robi się plastyczne – można wszystko ulepić. Chodziło o to, że przy zaworach, jak najbliżej, powinny się znaleźć diody prostownicze i dlatego zrobiłem wtyczki z zatopionymi diodami. Jest to bardzo wygodne przy rozmontowywaniu systemu na zimę. Działanie systemu widać na poniższym filmie (na uchwycie wiszą czujniki poziomu wody). System działał już jeden sezon, także jest sprawdzony. PLANY NA PRZYSZŁOŚĆ Druga wersja urządzenia będzie miała dołączone czujniki deszczu i wilgotności gleby, będą pobierane komunikaty pogodowe z lotniska i będzie sterowanie zaworami przez wifi z telefonu. Chcę także dodać obsługę kalendarza do określenia czasu godziny, gdy system ma się włączać. Długość podlewania będzie sterowana czujnikami wilgotności i deszczu a włączenie podlewania uzależnione od przewidywanej pogody. Myślę, że więcej do systemu podlewania nie jest potrzebne. Musze powiedzieć, że budowa tego urządzenia dała mi wiele satysfakcji, bo nie zajmuję się zawodowo elektroniką ani programowaniem. Chciałbym szczególnie podziękować Trekerowi za kursy, dzięki którym było łatwo zacząć przygodę z elektroniką oraz Markowi za cenne uwagi i przekazaną wiedzę.
  7. Amatorską elektroniką zainteresowałem się po raz pierwszy w połowie lat dziewięćdziesiątych, będąc jeszcze dzieciakiem ze szkoły podstawowej. Moja aktywność na tym polu ograniczała się wówczas głównie do składania cudzych konstrukcji z pojedynczych tranzystorów, analogowych układów scalonych czy bramek logicznych. Brakowało mi wiedzy i narzędzi, aby zająć się czymś poważniejszym. Szczególnie wejście w świat mikrokontrolerów nie wchodziło w grę - zakup programatora i podręczników z kieszonkowego nie wchodził w grę, a i same elementy do tanich nie należały. Największą popularnością cieszyła się wówczas rodzina 8051, szczególnie w wykonaniu firmy Atmel (np. AT89C2051 albo AT89C51). Tematem mikrokontrolerów zająłem się wiele lat później, na początku obecnej dekady, standardowo zaczynając od AVR-ów. Kilka lat temu przy okazji zakupów na Allegro zauważyłem jednak w ofercie jednego ze sprzedawców stare układy AT89C51, co spowodowało natychmiastowy "atak" nostalgii. Od razu zamówiłem kilka sztuk. Dopiero potem zorientowałem się, że nie dysponuję programatorem. Na szczęście okazało się, że te można bez większych problemów kupić na najpopularniejszym chińskim serwisie aukcyjnym. Czekając na przesyłkę zorientowałem się w temacie programowania tych mikrokontrolerów w czasach współczesnych, wczytując się w dokumentację kompilatora SDCC. Po kilku tygodniach dysponowałem już podstawami wiedzy i zestawem narzędzi potrzebnych do realizacji projektu. Na tym etapie musiałem odpowiedzieć sobie na pytanie o jego temat. Szukałem czegoś, co byłoby popularną konstrukcją wśród amatorów elektroników w czasach, gdy ja zaczynałem zajmować się tym hobby. Zegar binarny zdawał się być oczywistą odpowiedzią. Urządzenie powstawało głównie wieczorami, w ciągu kilku tygodni. Składają się na nie dwie jednostronne płytki drukowane. Pierwsza zawiera wyświetlacz oparty na LED-ach oraz zestaw przycisków, druga logikę sterującą. Składają się na nią mikrokontroler AT89C51, zegar czasu rzeczywistego DS1307 z gniazdem baterii podtrzymującej, układ zasilania oraz niewielki głośnik piezoelektryczny. Przeznaczenie tego ostatniego jest dość specyficzne - co sekundę, przy odświeżaniu zawartości wyświetlacza generuje on dźwięk przypominający "tykanie" klasycznego zegara mechanicznego. Celem projektu było stworzenie urządzenia w stylu lat dziewięćdziesiątych, bez współczesnych ulepszeń w stylu automatycznej synchronizacji czasu za pomocą łączności sieciowej albo modułu GSM. Zegar nie robi nic poza wyświetlaniem czasu w formie binarnej (a właściwie BCD), a ustawia się go ręcznie. Oprogramowanie sterujące zostało napisane w języku C i skompilowane za pomocą kompilatora SDCC, szczelnie wypełniając dostępne 4kB pamięci flash mikrokontrolera.Obudowa urządzenia została wycięta laserowo. Za pomocą tego samego narzędzia został na niej wygrawerowany rysunek. Obecnie w realizacji (z uwagi na brak czasu i ważniejsze projekty) jest projekt bliźniaczego zegara, który tym razem będzie korzystał ze współczesnej elektroniki, opartej na module ESP8266.
  8. W ramach pracy magisterskiej wykonałem dedykowany sterownik do stacji uzdatniania wody, jako alternatywę dla sterowników PLC. 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 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. Układ wyjściowy jest zrealizowany w oparciu o UDN2987 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 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. 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.
  9. Masz gotowy wspaniały bulbulator oparty na chipie ESP8266 (np na modułach WiFi ESP8266 Wemos NodeMCU V3 32MB, ArduCam ESP8266-12E WiFi IoT, Adafruit Feather Huzzah ESP8266, Adafruit Huzzah ESP8266, SparkFun Thing - Dev Board - moduł WiFi ESP8266). Tworzy on stronę WWW, którą możesz zdalnie doglądać jego pracy. Niestety posiadasz łącze stałe ze zmiennym IP. W jaki sposób możesz więc połączyć się z nim będąc poza domem? Z pomocą przychodzą usługi typu Dynamic DNS. Jedną z nich jest polski serwis https://freedns.42.pl, z którego od lat korzystam. Zapewnia on przykładowy skrypt Pythona do uaktualniania rekordów DNS. Niestety nie skorzystamy z niego bezpośrednio w Arduino. Musimy więc napisać własny szkic. Celem podejrzenia danych wysyłanych do serwera nieco zmodyfikowałem gotowy skrypt Pythona podmieniając server = "https://freedns.42.pl/xmlrpc.php" na adres localhost swojego własnego programu napisanego w C++, który zapisał nagłówek i dane przekazywane do serwera. Tak oto powstał szkic Arduino zawierający trzy funkcje: publicIP() - sprawdzająca aktualne publiczne IP gethostbyname(String host) - sprawdzająca IP przypisane do domeny w rekordach DNS - rekord adresów (A) updateDynDNS() - odpowiedzialna za uaktualnienie wpisu w serwisie FreeDNS Możemy teraz cyklicznie wywoływać w pętli loop polecenia: String myIP = publicIP(); String hostIP = gethostbyname(dnsset.subdomain + "." + dnsset.domain); if (myIP != hostIP) { dnsset.newaddress = myIP; updateDynDNS(); Serial.println("FreeDNS IP: " + hostIP); Serial.println("Public IP: " + myIP); } Sprawdzamy więc nasze aktualne publiczne IP, potem IP przypisane do domeny w DNS. Jeśli się nie zgadzają - wtedy uruchamiamy "machinę" odpowiedzialną za komunikację z FreeDNS. Polecam użyć jakiegoś timera czy skorzystać z funkcji millis(), nie blokującego działanie innych funkcji delay() Cały kod źródłowy programu: #include <ESP8266HTTPClient.h> #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> struct FreeDNSsettings { String domain; String subdomain; String newaddress; String user; String password; String ttl; } dnsset; void setup() { dnsset.domain = "TwojaDomena.pl"; dnsset.subdomain = "Nazwa subdomeny"; dnsset.user = "Uzytkownik w serwisie freedns.42.pl"; dnsset.password = "haslo uzytkownika"; dnsset.ttl = "120"; Serial.begin(9600); //Serial connection WiFi.softAPdisconnect(); WiFi.disconnect(); WiFi.mode(WIFI_STA); WiFi.begin("Siec WiFi", "i haslo do niej"); //WiFi connection while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion delay(500); Serial.println("Waiting for connection"); } } void loop() { if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status String myIP = publicIP(); String hostIP = gethostbyname(dnsset.subdomain + "." + dnsset.domain); if (myIP != hostIP) { dnsset.newaddress = myIP; updateDynDNS(); Serial.println("FreeDNS IP: " + hostIP); Serial.println("Public IP: " + myIP); } } else { Serial.println("Error in WiFi connection"); } delay(15 * 60 * 1000); } String publicIP() { String myIP; HTTPClient http; http.begin("http://ip.42.pl/raw"); //Specify request destination int httpCode = http.GET(); //Send the request if (httpCode > 0) { //Check the returning code myIP = http.getString(); //Get the request response payload } return myIP; } String gethostbyname(String host) { IPAddress ipAddress; WiFi.hostByName(host.c_str(), ipAddress); return String(ipAddress[0]) + String(".") + \ String(ipAddress[1]) + String(".") + \ String(ipAddress[2]) + String(".") + \ String(ipAddress[3]); } void updateDynDNS() { String xml = "<?xml version='1.0'?>\r\n" "<methodCall>\r\n" "<methodName>xname.updateArecord</methodName>\r\n" "<params>\r\n" "<param>\r\n" "<value><struct>\r\n" "<member>\r\n" "<name>name</name>\r\n" "<value><string>" + dnsset.subdomain + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>zone</name>\r\n" "<value><string>" + dnsset.domain + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>newaddress</name>\r\n" "<value><string>" + dnsset.newaddress + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>oldaddress</name>\r\n" "<value><string>*</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>updatereverse</name>\r\n" "<value><string>0</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>user</name>\r\n" "<value><string>" + dnsset.user + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>ttl</name>\r\n" "<value><string>" + dnsset.ttl + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>password</name>\r\n" "<value><string>" + dnsset.password + "</string></value>\r\n" "</member>\r\n" "</struct></value>\r\n" "</param>\r\n" "</params>\r\n" "</methodCall>"; String http = "POST /xmlrpc.php HTTP/1.1\r\n" "Host: freedns.42.pl\r\n" "Accept-Encoding: gzip\r\n" "Content-Type: text/xml\r\n" "User-Agent: Python-xmlrpc/3.5\r\n" "Content-Length: " + String(xml.length()) + "\r\n" "\r\n"; xml = http + xml; WiFiClientSecure client; IPAddress ipAddress; WiFi.hostByName("freedns.42.pl", ipAddress); client.connect(ipAddress, 443); client.print(xml); } Biblioteka WiFiClientSecure występuje w środowisku ESP8266 relatywnie od niedawna. Jeśli macie problemy z kompilacją szkicu właśnie z jej powodu - uaktualnijcie obsługę ESP w Arduino IDE. Po niewielkich modyfikacjach przypuszczalnie (niestety chwilowo nie mogę tego sprawdzić) uaktualniacz DNS działać będzie również z mikrokontrolerem ESP32. Chyba wystarczy podmienić nazwy dołączanych bibliotek na: #include <HTTPClient.h> #include <WiFi.h> #include <WiFiClientSecure.h>
  10. Niewątpliwie procesory, bądź mikroprocesory stanowią ogromną część elektroniki użytkowej. Prawie w każdym urządzeniu, poczynając od najprostszych, a kończąc na najbardziej zaawansowanych komputerach, najważniejsza jest jednostka centralna. Czasy największej świetności ośmiobitowe procesory mają już za sobą, ale nadal stanowią ważną część elektroniki. Wiele urządzeń nadal z nich korzysta. Moją przygodę z elektroniką cyfrową rozpocząłem od programowania mikroprocesorów firmy Atmel były to dokładniej procesory Atmega8 oraz Atmega328. Mimo wielkich możliwości jakie dają mikrokontrolery bardziej interesowała mnie strona hardware’owa tych układów. Na ich podstawie oraz procesorów takich jak Intel 4004, 8080 stopniowo poznawałem budowę oraz działanie mikroprocesorów. W pewnym momencie stwierdziłem że nie jest to takie trudne i sam zbuduję własny procesor. Był to DCE 4 (D-digital, C-computer, E-electronic, 4 ponieważ była to jednostka czterobitowa). Następnie rozpocząłem prace nad ośmiobitowym procesorem DCE 84. Jednak i on z upływem czasu wydał mi się bardzo prosty. Prezentowany mikroprocesor DCE 812 zaprojektowałem korzystając z rozwiązań zastosowanych w DCE 84 bazując na pełnej architekturze harwardzkiej (gdzie pamięć dla programu i danych jest fizycznie rozdzielona). Schemat blokowy układu można znaleźć poniżej. Do budowy zostały użyte podstawowe układy logiczne wykonane w technologii CMOS (przykładowo bramki AND) oraz gotowe układy pamięci RAM (UL6516 2k x 8bit) oraz ROM(dwa układy 28c64 8k x 8bit) , ponieważ budowa własnych pamięci nie była możliwa z powodu braku czasu i środków. Elementy takie jak ALU, układ sterowania, zegar, oraz obsługa pamięci i poszczególnych rejestrów roboczych została zaprojektowana przeze mnie od podstaw. Fizycznie układ powstał stosunkowo niedawno i nie obyło się bez komplikacji. Zmiana układu obsługującego pamięć RAM sprawiła, że układ działa zgodnie z założeniami. Pozwala on na wykonywanie podstawowych działań matematycznych oraz prostych programów stworzonych w języku C++ i przekonwertowanych na polecenia dla tego procesora. Najbardziej zaawansowanym programem, który udało mi się uruchomić było generowanie kolejnych liczb z ciągu Fibonacciego. Praca mikroprocesora zostaje rozpoczęta od wciśnięcia fizycznego przycisku RESET, który ustawia stan "0" na wyjściach wszystkich wewnętrznych rejestrów. Uzyskujemy poprzez to adres zero na wyjściu licznika rozkazów co powoduje rozpoczęcie pracy od pierwszego wprowadzonego rozkazu (lista rozkazów widoczna na zdjęciu poniżej). Następnie układ zaczyna liczyć od 0 do 15 wewnątrz układu sterowania do każdej z tych mikrooperacji przypisane jest odpowiednie działanie zgodne z rozkazem wprowadzonym do pamięci ROM może to być np. zapis do rejestru B, reset licznika rozkazów. Po wykonaniu wszystkich mikrooperacji licznik rozkazów zwiększa swoją wartość o jeden co skutkuje przejściem do kolejnego rozkazu i cały cykl wykonywany jest ponownie. Programowanie procesora realizowane jest poprzez odpowiednie przełączniki które umożliwiają przełączanie układu między stanem pracy a programowaniem. Wprowadzanie danych oraz wybieranie adresów również realizowane jest w ten sposób. Odpowiednie przełączniki służą również do sterowania zegarem procesora. Generowanie impulsów może odbywać się automatycznie z częstotliwością ok. 10Hz lub manualnie poprzez wciśnięcie przycisku. Obecnie projektuje kolejną wersje własnego procesora tym razem staram się wszystko umieścić w jednym układzie FPGA (Korzystam z tej płytki). Postępy w pracach można obserwować na moim blogu https://rafal-bartoszak.blogspot.com/ Dodatkowo wstawiam też link do filmu gdzie można zobaczyć działanie układu.
  11. Witam forumowiczów, na wstępie wspomnę iż dopiero rozpoczynam swoją przygodę z elektroniką toteż proszę o wyrozumiałość jeśli pojawi się taka potrzeba. Mam do przygotowania urządzenie którego opis przygotowałem poniżej. Urządzenie ma posiadać wbudowaną pamięć w której przechowywane będą pliki audio oraz pliki tekstowe (.txt, .xlsx, .csv, itp.) które powinny mieć możliwość łatwej aktualizacji (np. podłączenie tabletu lub telefonu przez bluetooth lub usb / wifi / wbudowany slot na kartę SIM i aktualizacja przez internet (preferowane jeśli cena nie okaże się zaporowa)). Pamięć nie powinna być potrzebna większa niż 100 megabajtów. Urządzenie ma być zamknięte w niesprecyzowanej jeszcze obudowie z jednym przyciskiem zewnętrznym po naciśnięciu którego na podstawie zawartości plików tekstowych oraz aktualnej godziny odtwarzany ma być wybrany przez algorytm plik audio. Urządzenie powinno być dostosowane do działania w warunkach zewnętrznych. Zasilanie urządzenia ma pochodzić z sieci energetycznej, ewentualnie z baterii połączonej z panelem fotowoltaicznym. W pierwszej kolejności muszę ustalić platformę która będzie najlepsza (najtańsza ze spełniających założenia). Po wstępnym sprawdzeniu rozwiązań doszedłem do wniosku, że najlepszą platformą do realizacji powyższego zadania będzie Arduino ewentualnie Raspberry pi‎. Oba rozwiązania wydają się oferować wszystko czego potrzebuję. Czy mam rację i powinienem wybrać jedno z tych rozwiązań? Może coś przeoczyłem i wspomniane rozwiązania uniemożliwiają realizację któregoś z opisanych wymagań? Czy może jest jakieś inne które spełni wymagania a w realizacji okaże się tańsze? Z góry dziękuję za zainteresowanie i odpowiedź. W przypadku zainteresowania wątkiem chętnie będę go kontynuować ponieważ wybór rozwiązania to dopiero pierwszy krok na długiej drodze do powstania prototypu.
  12. Jednym z moich pierwszych "poważniejszych" projektów, jakie zrealizowałem w ramach nauki programowania mikrokontrolerów był EtherGeiger - sieciowy detektor promieniowania jonizującego. Projekt stworzony w 2014 roku miał być swoistym żartem, nawiązującym swoją tematyką do Fallouta i post-apokaliptycznych filmów science-fiction. Wszystko zaczęło się od zakupionego na Allegro radzieckiego detektora Geigera typu STS-5. Przyrząd ten wymaga do działania wysokiego napięcia, w okolicy 400V. Jest ono wytwarzane przez przetwornicę typu flyback, pracującą na popularnym układzie MC34063A. Sercem pierwszej wersji urządzenia był mikrokontroler Atmega328, a za komunikację ze światem zewnętrznym odpowiadał układ ENC28J60, zwykle stosowany w popularnych modułach, tutaj przylutowany bezpośrednio do płytki urządzenia. Oprogramowanie sterujące pracą urządzenia zostało napisane w języku C, przy pomocy środowiska Atmel Studio. Poza pomiarem promieniowania tła urządzenie zbierało także informacje o temperaturze otoczenia, ciśnieniu atmosferycznym i wilgotności względnej. Wykorzystane zostały w tym celu moduły BMP280 oraz DHT11/DHT22. Wyniki pomiarów były przekazywane do serwera odpalonego na Raspberry Pi, który był odpowiedzialny za ich zapisywanie. W przypadku wykrycia wartości przekraczającej ustaloną wcześniej normę, oprogramowanie wysłałoby powiadomienie na telefon, za pośrednictwem serwisu Pushover. Projekt będący w zamierzeniach jedynie żartem (o pewnej wartości dydaktycznej) dwukrotnie okazał się być bardzo przydatny, gdy do mediów społecznościowych zaczęły trafiać fake newsy mówiące o awariach elektrowni atomowych i chmurze radioaktywnego pyłu, zmierzającego rzekomo nad Polskę. W ubiegłym roku projekt doczekał się nowej wersji, opartej na mikrokontrolerze PIC32MX270F265B. Pozwoliło to na dodanie nowych funkcji, m.in. wyposażenie urządzenia w PenDrive'a do lokalnego zapisywania pomiarów (w przypadku jego braku dane są zapisywane we wbudowanej pamięci SPI Flash). Zastosowany został także pojedynczy czujnik temperatury, ciśnienia i wilgotności, typu BME280. Planowana jest także rozbudowa tej wersji o dodatkową płytkę z wyświetlaczem LCD.
  13. Historia tego projektu sięga kilka lat wstecz, kiedy to zetknąłem się z tematem wykorzystania routerów na OpenWRT do budowy odbiorników internetowej radiofonii (link, link, link). Początkowo planowałem wykonanie własnej wersji takiego urządzenia w oparciu o przerobiony router i kartę dźwiękową na USB, w międzyczasie jednak pojawiło się pierwsze Raspberry Pi. W oparciu o "Malinę" powstał niezbyt elegancki prototyp, wykorzystujący płytkę stykową, wyświetlacz HD44780 oraz kilka przycisków. Zdjęcia tej wersji niestety nie zachowały się. Radio pracowało w oparciu o Raspbiana Wheezy oraz program MPD. Odtwarzaniem można było sterować za pomocą przycisków, interfejsu WWW albo z poziomu telefonu z Androidem, za pomocą klienta MPD. Niestety dały o sobie znać problemy wynikające z kiepskiej jakości sygnału na wyjściu audio RasPi - szczególnie przy niskim poziomie głośności słyszalne były "artefakty" w postaci wysokich, przerywanych pisków. Stało się dla mnie jasne, że w finalnej wersji projektu konieczne będzie zastosowanie lepszego układu DAC. W tym momencie projekt został na jakiś czas odłożony na półkę. W międzyczasie w moim domu na rynku pojawił się Chromecast audio, co spowodowało dodatkowy spadek motywacji do skończenia projektu, który utracił sporo praktycznej użyteczności. Wraz z premierą Raspberry Pi Zero zero postanowiłem mimo wszystko dokończyć go, z myślą o efekcie "dydaktycznym". W efekcie powstała płytka wyposażona w złącze do podłączenia RasPi Zero oraz kolorowego ekranu LCD na magistrali SPI. Ponieważ pierwsza wersja RasPi Zero nie była wyposażona w moduł WiFi, na PCB zostało przewidziane miejsce pod gniazdko ethernetowe oraz kontroler ENC28J60. Po premierze RPi Zero W płytka została podmieniona, dzięki czemu obecnie urządzenie może korzystać z łączności bezprzewodowej. W roli przetwornika audio wykorzystany został układ WM8731. Na płytce znalazło się także miejsce dla odbiornika podczerwieni, dzięki czemu możliwe jest sterowanie za pomocą pilota. Nazwa eMPeDocles jest oczywiście nawiązaniem do programu MPD, który odpowiada za odtwarzanie internetowych streamów oraz plików muzycznych z lokalnego dysku sieciowego. Na chwilę obecną do zrobienia pozostało już tylko wykonanie obudowy (skłaniam się ku wycinanej laserowo z pleksi) oraz napisanie prostego interfejsu graficznego w Qt. W planach jest także dodanie funkcji prostego menadżera podcastów.
×
×
  • Utwórz nowe...