Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Raspberry Pi'.

  • 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 67 wyników

  1. Cześć To mój pierwszy wpis na forum, rok temu zaczęłam studia na politechnice, naukę rozpoczęłam od mikrokontrolerow AVR. Dziś już wiem, że chce kontynuować naukę polegajac na raspberry niestety nie mam o nich kompletnie żadnej wiedzy. Mam plan wykonać projekt obrony pracy w oparciu o ten minikomputer dlatego chciałabym przez najbliższy rok poznać go dość dobrze ☺moim planem jest stworzenie programu zaawansowanego graficznie który będzie się otwierał automatycznie po uruchomieniu malinki. Zaawansowany graficznie czyli program wspierający obsługę wysokiej rozdzielczosci animacji. Stosowanie wlasnych obiektow takich jak progres bar, przyciski itp. ( nie chce korzystac z default'owych ze wzgledu na bardzo nieatrakcyjny wyglad ). Wiem tez ze konieczna bedzie wspolpraca malinki z UARTem. ponieważ wielu z Was ma wielkie doświadczenie proszę na początek o poradę w kilku kwestiach: 1. Czy lepiej kupić mailnke wersji 4 czy 3 ? Pomijając koszty, osobiście myślę że lepiej kupić bardziej przyszlosciowa płytkę wiec skłaniam się ku najnowszej wersji. Niestety większość informacji na forach dotyczy wersji 3 i obawiam się czy oby na pewno wszystkie informacje będą kompatybilne z najnowszym projektem. 2. Jaki system operacyjny zastosować do swojego projektu i jakie są ich plusy /minusy. Początkowo myślałam o windowsie chociaż Internet mówi tylko o wadach tego systemu. Szkoda bo dość dobrze radzę sobie w Visual studio i znam ten system dość dobrze. Mimo wszystko chętnie uczę się nowych rzeczy wiec jeśli waszym zdaniem Windows się nie nadaje to proszę mówić o tym wprost 3. Najważniejsze... w jakim programie / środowisku należy pisać programy na raspberry Tak aby idealnie nadawały się do mojego projektu. Jak wspomnialam wcześniej dobrze czuje się w Visual studio, mam też trochę wiedzy na temat języka C, C#. Może da się to jakoś wykorzystać? z góry dziękuję za waszą pomoc i jestem wdzięczna za zaangażowanie
  2. Mam w domu licznik prądu starego typu. Kiedy rachunki za prąd wzrosły powyżej 150 zł / mieś stwierdziłem, że czas na poszukiwanie przyczyn tego stanu rzeczy. Zacząłem od chińskiego watomierza, który doprowadził mnie do amplitunera Technics który w trybie standby zżera 30W. Byłem jednak ciekaw ile pobiera cały system monitoringu, lampy ogrodowe, NAS i kocioł itp. w rozkładzie godzinowym. Rozważałem zmianę taryfy z G11 na G12 lub G12W. Potrzebowałem danych. Ręczne spisywanie stanów licznika jest nużące i nudne. Przyszedł czas na emeocv - Electric meter with OpenCV. To darmowa biblioteka udostępniona na github. Pozwala na odczyt licznik na podstawie analizy zdjęć i zapis do RRD (Round Robin Database). Program napisany jest w C++ i korzysta ze znanej biblioteki OpenCV. Uruchomienie odczytów zajęło mi sporo czasu i nie dawało satysfakcjonujących wyników z uwagi na potrzebę dostosowania wielu zmiennych i rekalibracji po nawet delikatnej zmianie położenia kamerki. Przyszedł czas na instalację IDE pod C++ i wydanie własnej wersji programu. Krótka lista ficzerów: analiza zdjęć licznika dostarczanych z kamerki trening algorytmu poprzez ręczną klasyfikację przykładowego materiału zapis danych do CSV wewnętrzna kontrola jakości danych możliwość zapisu zdjęć do plików i późniejszą analizę statystyki Przejdźmy do rzeczy. Potrzebujesz: Raspberry PI (Zero, Zero W, testowałem też na RPI4b) z kartą pamięci. Alternatywnie: wystarczy dowolny komputer z pochodną Debiana (np. Ubuntu albo Linux Mint) oraz telefon komórkowy z Androidem. Kamerki (ja korzystałem z ArduCam OV5647 5Mpx) Uchwytu do kamerki - ja skorzystałem z połamanego uchwytu do telefonu (można kupić na allegro za 5-10 zł) Źródła światła (np.Lampka LED za mniej niż 5 zł) - musiałem dodać do niej rezystor bo świeciła zbyt mocno ja potrzebowałem hub'a USB żeby zasilić lampkę i malinkę z jednego zasilacza (koszt ok 10zł) Kolorowych karteczek samoprzylepnych Aplikacji Emeocv2 (moja własna wersja aplikacji wspomnianej powyżej) Dobrego nastroju i trochę czasu Wersja dla Raspberry PI Przygotowanie sprzętu: zamocuj kamerkę na statyw lub uchwyt, podłącz do malinki, ustaw światło tak aby niezależnie od światła dziennego licznik był równomiernie oświetlony. Ważne żeby nie świecić na wprost na szybkę licznika, bo pojawią się silne refleksy które utrudnią odczyt. Potem przyklej do licznika dwa kolorowe (najlepiej niebieskie) markery z karteczek samoprzylepnych (jeśli będą odpadać - użyj taśmy dwustronnej). Dzięki nim pogram bedzie w stanie ustalić obszar na którym znajdują się cyfry do analizy. Na zdjęciu poniżej widać przykładowy setup. Nie jest to za piękne ale to nie dzieło sztuki Instalacja: 1. Zainstaluj czystego Raspbiana na swoje malince 2. Podłącz kamerkę do Raspberry PI i włącz poprzez komendę raspi-config 3. Połącz się z RPI przez SSH (lub VNC) i pobierz Emeocv2 z https://github.com/wof2/emeocv2 4. Wejdź do katalogu głównego Emeocv2 i uruchom: ./debian_ubuntu_dependencies.sh Skrypt pobierze potrzebne zależności (przede wszystkim OpenCV) 5. Zbuduj make RELEASE=true 6. Wejdź do katalogu Release chmod +x emeocv 7. Zrób trochę zdjęć z kamerki aplikacją raspistill i zapisz pliki .png do wybranego katalogu. Hint: jeśli twój licznik znajduje się w pomieszczeniu gdzie zmieniają się warunki oświetlenia to jak będziesz wygładzał parametry najlepiej skorzystaj z trybu timelapse żeby zebrać zdjęcia z całej doby (np. co 15 min.). Najlepiej rób zdjęcia w rozdzielności nie większej niż 800x600. 8. Uruchom aplikację w trybie 'adjust' (najlepiej przeczytaj help do komendy - opal ją bez parametrów: ./emeocv) wskazując katalog w którym zapisałeś wcześniej zdjęcia. Pewnie analiza zakończy się błędem - musisz dostosować kilka parametrów - w katalogu Release edytuj plik config.yml. Najważniejsze parametry to: rotationDegrees: 0 #obraca obraz przed analizą cannyThreshold1: 120 # dolna granica dla algorytmu znajdowania konturów dostosuj metodą prób i błędów. Możesz zapisywać plik yml w trakcie analizy w trybie 'adjust' - co zdjęcie konfiguracja wczytywana jest ponownie. cannyThreshold2: 260 # górna granica znajdowania konturów. digitYAlignment: 20 # maksymalne różnie z położeniu kolejnych cyfr w osi Y mierzone w pikselach. counterMarkerHLOW: 85 # kolor markera (karteczki) w skali HSL (poczytaj w necie). Domyślne wartości ustawione są na detekcję niebieskiego. Wartość H (Hue) min. counterMarkerHHI: 110 # jak wyżej tylko max counterMarkerSLOW: 120 # wartość minimalnego nasycenia (Saturation) counterMarkerVLOW: 120 # minimalne V (Value) koloru karteczki. maxImageHeight: 600 # automatyczne przeskalowanie w dół - ustaw jeśli karmisz program dużymi obrazkami. digitCount: 7 # Łączna liczba cyfr na liczniku (łącznie z tą po przecinku) 9. Kiedy będziesz miał satysfakcjonujące wyniki z wcześniej zapisanych zdjęć to pora na trening naszego algorytmu. Uruchom emeocv z opcją -l (Learn). Teraz program będzie pokazywał serię zdjęć i pytał cię o klasyfikację zdjęć poszczególnych cyfr do skali 0-9. Potrzebujesz z grubsza tyle samo próbek dla każdej z cyfr. Możesz skorzystać z opcji emeocv -p żeby pokazać statystyki nauki. ./emeocv -p OCR stats: Trained responses: 1094 Trained responses histogram: Digit '0'->167 Digit '1'->184 Digit '2'->152 Digit '3'->148 Digit '4'->64 Digit '5'->60 Digit '6'->60 Digit '7'->112 Digit '8'->73 Digit '9'->74 10. Pora na automatyczne rozpoznanie cyfr na całym zbiorze zdjęć i pokazanie wyników ./emeocv -t -i obrazki/ -vDEBUG -s 10 11. Jeśli wyniki są ok to produkcyjnie odpalamy robienie zdjęć (np. co 2 minuty), analizę i wyplucie wyników do CSV. Służy do tego opcja -w (Write). Dla kamerki raspberry PI polecam wykorzystanie operacji -k, która pobiera zdjęcia z wyniku działania komendy w pliku config.yml. Domyślnie jest to raspistill czyli miniprogram na raspbianie do robienia zdjęć: cliCaptureCommand: raspistill -w 800 -h 600 -n -o Teoretycznie możesz tu nawet wsadzić pobieranie zdjęć z innego urządzenia. Alternatywnie użyj operacji -c (czyli Camera, podaj nr kamery np. -c0). Opcja wykorzystuje API openCV do odczytu z kamery. Mnie się ta opcja nie sprawdziła bo zdjęcia wychodziły albo za ciemne, albo poszczególne odczyty bardzo różniły się od siebie. 12. Wyniki będą się pojawiać w pliku emeocv.csv w katalogu Release. Patrz w logi emeocv.log i nie przejmuj się jeśli po kilkunastu przeanalizowanych zdjęciach plik jest pusty. Program cache'uje wyniki z ostatnich chyba 12 wyników i dopiero kiedy uzyska sensowną niemalejącą serię odczytów to dokonuje zapisu do pliku. Plik CSV możesz potem wciągnąć gdzie chcesz np. do arkuszy Google. Skorzystaj z mojego. Więcej informacji znajdziesz na https://github.com/wof2/emeocv2 Wersja z wykorzystaniem telefonu komórkowego - wkrótce
  3. Idea działania Komora jonizacyjna, to urządzenie składające się z dwóch elektrod do których doprowadzane jest stałe napięcie, co powoduje powstanie pola elektrycznego w jej środku. Gdy kwant promieniowania "uderzy" w atom gazu znajdującego się w komorze, "rozbija" go na dwa jony (dodatni i ujemny), które są przyciągane do elektrod (dodatni do ujemnej i vice versa). Mierząc prąd płynący między dodatnią, a ujemną elektrodą, będzie on proporcjonalny do ilości tych jonów, zaś to będzie proporcjonalne do mierzonego promieniowania. Utrudnieniem jest, że wspomniane prądy są małe, więc wymagają dużego wzmocnienia, co zaś wymaga m.in. starannego filtrowania zasilania, oraz ekranowania, by urządzenie się nie wzbudzało. Poniżej znajduje się schemat blokowy prezentowanego rozwiązania. Część elektroniczna Pierwotnie do wytworzenia napięcia polaryzującego, miałem w planach użycie przetwornicy, jednak okazało się, że napięcie 12V z baterii jest wystarczające. Sygnał z komory trafia do wzmacniacza transimpedancyjnego, w pętli sprzężenia znajdują się szeregowo dwa rezystory o wartości aż 50G. Połączenie owych rezystorów, elektrody komory jonizacyjnej i nóżki wzmacniacza musi być wykonane w powietrzu, by uniknąć pasożytniczych rezystancji. Poniżej znajduje się render w KiCADie, oraz rzeczywiste urządzenie (wiem, fotka jest dość niskiej jakości). Część programistyczna Sygnał analogowy trafia do przetwornika ADC, i jest zbierany przez procek - tu użyłem dość mało popularnego STM8. Zaskoczeniem było dla mnie, że GCC nie obsługuje tych procesorów, zaś poświęcony im SDCC nie umie wycinać z binarki funkcji, które nie są używane! Do komunikacji z hardwarem użyłem stdperiph. Komunikacja z światem zewnętrznym jest jednokierunkowa (urządzenie wysyła pomiary co kilka sekund) za pomocą UARTa. Założeniem było, by urządzenie można było pozostawić same sobie i zdalnie je flashować, czy też pobierać z niego dane. W skrócie, wolę programować leżąc w łóżku, niż garbiąc się nad stołem pełnym kabli :) Zostało to zrealizowane przez dodanie Raspberry Pi, do której podpięty jest zarówno programator, jak i przelotka UART/USB. Soft na procka napisałem w C. Pobieranie danych po stronie maliny jest wykonywane przez skrypt w Pythonie, dane są wizualizowane skryptem w R. Użyłem R, mimo, że Python też ma biblioteki do tworzenia wykresów, bo bardzo podobają mi się wykresy w R. Dokumentacja powstała w LATEXie. Całość dostępna jest na GitHubie - zapraszam do odwiedzenia Wyniki Poniżej znajdują się dane pomiarowe zebrane za pomocą urządzenia.
  4. Czujnik poprawnie wykrywa odległości na dystansie 6 - 100 cm. Przy przeszkodzie znajdującej się 2-5 cm od czujnika, otrzymywana wartość utrzymuje się na 6cm. Czy ktoś spotkał się kiedyś z podobnym problemem ? Czujnik: https://botland.com.pl/pl/ultradzwiekowe-czujniki-odleglosci/1420-ultradzwiekowy-czujnik-odleglosci-hc-sr04-2-200cm-5903351241366.html Sposób podłączenia: https://tutorials-raspberrypi.com/raspberry-pi-ultrasonic-sensor-hc-sr04/ Kod programu: import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO_TRIGGER = 2 GPIO_ECHO = 3 GPIO.setup(GPIO_TRIGGER, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) def distance(): GPIO.output(GPIO_TRIGGER, False) time.sleep(0.1) GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO.output(GPIO_TRIGGER, False) while GPIO.input(GPIO_ECHO) == 0: pulse_start = time.time() while GPIO.input(GPIO_ECHO) == 1: pulse_end = time.time() pulse_duration = pulse_end - pulse_start distance = round(pulse_duration * 17150, 2) return distance if __name__ == '__main__': try: while True: dist = distance() print(dist) except KeyboardInterrupt: print("Measurement stopped by User") GPIO.cleanup()
  5. Stawiam Pi-Hole na Raspberry Pi Zero W i postanowiłem w ramach ćwiczeń własnoręcznie stworzyć adapter USB w oparciu o dostępne na rynku rozwiązania. Znajdzie się ktoś, kto rzuci okiem, czy płytka jest zaprojektowana zgodnie ze sztuką? Poniżej załączam materiały, na których się opierałem podczas projektowania.
  6. Zaczynam z Raspberry Pi zakupiłem wersję 4b 4gb ramu chciałbym się dowiedzieć: (pytanie może i głupie ale może uchronić przed ewentualnym uszkodzeniem) -Jak unikać uszkodzeń (różnych typów) -Jak zadbać o malinkę -Czego nie powinniśmy robić Mile widziane historie kiedy zepsuło wam się Raspberry Pi chodzi o warunki coś podpięliście źle czy coś
  7. Cześć, kupiłem w Botland: 1) Raspberry Pi 3B+ oraz: 2) oryginalną kamerkę Raspberry Pi Camera HD v2 8MPx mając nadzieje, że bezproblemowo uda mi się uruchomić kamerkę na malince, okazało się, że nic bardziej mylnego. Zainstalowałem najnowszego Raspbina, włączyłem kamerkę, a nagrywanie nie działa?! Zarówno Komenda: $ raspivid -o - jak i komenda: $ raspistill -o - zwracają te same komunikaty o błędach: mmal: mmal_vc_component_enable: failed to enable component: ENOSPC mmal: camera component couldn't be enabled mmal: main: Failed to create camera component mmal: Failed to run camera app. Please check for firmware updates Przeczytałem tuzin artykułów próbujących rozwiązać ten problem, ale żaden nie okazał się pomocny. Na sam początek polecano sprawdzić czy system wykrywa kamerkę: $ vcgencmd get_camera supported=1 detected=1 więc wykrywa. Potem polecono zwiększyć pamięć GPU z 128 MB (domyślna) do 256 MB co zrobiłem, poniżej sprawdzenie: $ vcgencmd get_mem gpu gpu=256M ale kamerka wciąż nie działa. W końcu zaktualizowałem system (czyli paczki): $ uname -a Linux raspberrypi 4.19.80-v7+ #1274 SMP Mon Oct 21 16:23:10 BST 2019 armv7l GNU/Linux a potem firmware za pomocą komendy: # sudo rpi-update co również nie przyniosło żadnej poprawy. Dlatego podejrzewam, że: 1) kamerka jest zepsuta, ale to jest nówka kupiona w Botland? 2) taśma łącząca kamerę z RPi jest zepsuta, ale to też nówka z Botland 3) jakiś nieznany proces cały czas korzysta z kamery W niektórych artykułach pisano, że z kamery może korzystać w danej chwili tylko jeden proces. Zazwyczaj ludzie orientowali się, że mają włączonego jakiegoś demona co korzysta z kamery i po wyłączeniu tego demona, od razu mogli korzystać z kamerki (raspivid & raspistill). Wyświetliłem drzewko procesów pracujących w Raspbianie, ale nie byłem w stanie dostrzec ani jednego procesu, który z nawy wskazywałby, że może korzystać z kamerki. Przypomnę, że to jest świeża instalacja Raspbiana, więc nie instalowałem tam żadnych demonów do kamery. Poniżej wrzucam listing procesów: $ pstre -p systemd(1)-+-alsactl(333) |-avahi-daemon(354)---avahi-daemon(388) |-bluealsa(721)-+-{bluealsa}(726) | `-{bluealsa}(727) |-bluetoothd(711) |-cron(336) |-dbus-daemon(372) |-dhcpcd(400) |-hciattach(706) |-lightdm(453)-+-Xorg(480)-+-{Xorg}(494) | | |-{Xorg}(495) | | |-{Xorg}(496) | | |-{Xorg}(497) | | `-{Xorg}(500) | |-lightdm(506)-+-lxsession(528)-+-lxpanel(594)-+-lxterminal(848)-+-bash(858)---sudo(863)---su(868)---bash+ | | | | | |-bash(883) | | | | | |-{lxterminal}(849) | | | | | |-{lxterminal}(850) | | | | | |-{lxterminal}(851) | | | | | |-{lxterminal}(852) | | | | | |-{lxterminal}(856) | | | | | `-{lxterminal}(857) | | | | |-{lxpanel}(625) | | | | |-{lxpanel}(626) | | | | `-{lxpanel}(801) | | | |-lxpolkit(591)-+-{lxpolkit}(606) | | | | `-{lxpolkit}(607) | | | |-openbox(586) | | | |-pcmanfm(596)-+-{pcmanfm}(622) | | | | `-{pcmanfm}(623) | | | |-ssh-agent(561) | | | |-{lxsession}(569) | | | `-{lxsession}(570) | | |-{lightdm}(509) | | `-{lightdm}(510) | |-{lightdm}(466) | `-{lightdm}(469) |-login(481)---bash(646) |-menu-cached(715)-+-{menu-cached}(717) | `-{menu-cached}(718) |-mount.ntfs(829) |-mount.ntfs(843) |-polkitd(442)-+-{polkitd}(445) | `-{polkitd}(448) |-rngd(346)-+-{rngd}(348) | |-{rngd}(349) | `-{rngd}(350) |-rsyslogd(362)-+-{rsyslogd}(404) | |-{rsyslogd}(405) | `-{rsyslogd}(406) |-ssh-agent(603) |-systemd(514)-+-(sd-pam)(517) | |-dbus-daemon(537) | |-gvfs-afc-volume(735)-+-{gvfs-afc-volume}(736) | | |-{gvfs-afc-volume}(737) | | `-{gvfs-afc-volume}(739) | |-gvfs-goa-volume(750)-+-{gvfs-goa-volume}(751) | | `-{gvfs-goa-volume}(752) | |-gvfs-gphoto2-vo(740)-+-{gvfs-gphoto2-vo}(741) | | `-{gvfs-gphoto2-vo}(743) | |-gvfs-mtp-volume(744)-+-{gvfs-mtp-volume}(747) | | `-{gvfs-mtp-volume}(749) | |-gvfs-udisks2-vo(731)-+-{gvfs-udisks2-vo}(732) | | `-{gvfs-udisks2-vo}(733) | |-gvfsd(571)-+-gvfsd-trash(799)-+-{gvfsd-trash}(803) | | | `-{gvfsd-trash}(804) | | |-{gvfsd}(572) | | `-{gvfsd}(573) | |-gvfsd-fuse(576)-+-{gvfsd-fuse}(587) | | |-{gvfsd-fuse}(588) | | |-{gvfsd-fuse}(589) | | |-{gvfsd-fuse}(592) | | `-{gvfsd-fuse}(598) | `-gvfsd-metadata(835)-+-{gvfsd-metadata}(837) | `-{gvfsd-metadata}(838) |-systemd-journal(125) |-systemd-logind(326) |-systemd-timesyn(288)---{systemd-timesyn}(325) |-systemd-udevd(146) |-thd(371) |-udisksd(343)-+-{udisksd}(407) | |-{udisksd}(435) | |-{udisksd}(482) | `-{udisksd}(492) |-wpa_supplicant(377) `-wpa_supplicant(455) Na sam koniec rzuciłem jeszcze okiem w logi kernela szukając informacji dotyczących kamery (szukałem ciągu znaków vid), znalazłem tylko takie wpisy świadczące raczej o tym, że kamera została wykryta: dmesg | grep -i vid [ 5.213247] videodev: Linux video capture interface: v2.00 ... [ 5.213247] bcm2835-codec bcm2835-codec: Device registered as /dev/video10 [ 5.882880] bcm2835-codec bcm2835-codec: Loaded V4L2 decode [ 5.888860] bcm2835-codec bcm2835-codec: Device registered as /dev/video11 [ 5.889013] bcm2835-codec bcm2835-codec: Loaded V4L2 encode [ 5.898020] bcm2835-codec bcm2835-codec: Device registered as /dev/video12 [ 5.898082] bcm2835-codec bcm2835-codec: Loaded V4L2 isp [ 5.899817] bcm2835-v4l2: scene mode selected 0, was 0 [ 5.900240] bcm2835-v4l2: V4L2 device registered as video0 - stills mode > 1280x720 [ 5.905487] bcm2835-v4l2: Broadcom 2835 MMAL video capture ver 0.0.2 loaded. Proszę bardziej doświadczonych kolegów o pomoc w uruchomieniu kamerki, bo jedyne co mi teraz przychodzi do głowy to zgłosić reklamacje kamerki do Botland. Pozdrawiam, Wojciech
  8. Stacja meteorologiczna służy do przeprowadza dokładnych pomiarów pogody oraz sprawdzania jakości powietrza. Urządzenie pobiera dane z czujników, następnie zapisuje je do bazy danych po czym zostają wyświetlone na stronie internetowej. Całe urządzenie zostało zamknięte w obudowie wydrukowanej w drukarce 3D. Czujniki zainstalowane w urządzeniu pobierają dokładne dane pogodowe. Stacja posiada zaawansowaną metodę pomiaru prędkości wiatru przy użyciu ultradźwiękowych czujników ruchu. Stacja działa na Raspberry PI 3+, obsługuje również starsze modele (z wbudowanym wifi) oraz na Raspberry PI ZERO (W). System operacyjny to Linux wersja Raspbian STRETCH LITE bez interfejsu graficznego. Kod źródłowy czujników został napisany w Python’ie. Dane z czujników zapisywane są przy użyciu Raspberry PI do bazy danych MySQL. Następnie zostają wyświetlone w aplikacji internetowej, która napisana została w PHP. Urządzenie wymaga połączenia z Internetem. Aktualnie wykorzystywane jest połączenie poprzez WIFI. Komunikacja pomiędzy urządzeniem a administratorem przeprowadzana jest poprzez protokół SSH i FTP. Stacja jest zbudowana w taki sposób, żeby użytkownik mógł w łatwy sposób ją obsługiwać. Aby włączyć stację należy podłączyć ją do prądu. Działanie urządzenia zostanie zasygnalizowane świeceniem diody (czerwonej) oraz miganiem diody zielonej, która świeci przy wysyłaniu danych do bazy. Oprócz graficznego przedstawienia danych aplikacja posiada skrypty do obliczenia m. in. wschodu i zachodu słońca w danej lokalizacji. Oprogramowania posiada opcje, w których m. in. możemy ustawić czas pomiaru pogody i zapisu do bazy danych. Jest to ważne ponieważ możemy sami ustalać jak często stacja ma sprawdzać stan pogody Projekt obudowy Obudowa została zaprojektowana w programie FreeCAD. Składa się ona z 9 elementów. Została wydrukowana w drukarce 3D – Anet A8 (moja własna drukarka). Materiał wykorzystany podczas druku to PLA, temperatura druku 205°C. Łączny czas druku wynosi 19 godzin, zużywa 174 gram materiału przy wysokości warstwy 0.2mm. Projekt obudowy został wykonany w taki sposób, aby urządzenie było odporne na deszcz i wiatr. Opływowość stacji pozwala na wykonywania dokładnych pomiarów prędkości wiatru. Na samej górze stacji zamontowany został czujnik opadów deszczu oraz czujnik natężenia światła. Następnie pod nimi umieszczone są ultradźwiękowe czujniki prędkości wiatru. Kolejny element to obudowa chroniąca RB PI i elektronikę. Obudowa posiada specjalne mocowanie na RP PI, które sztywno trzyma urządzenie. Następnym elementem jest rdzeń, do którego przymocowane są pozostałe czujniki. Obudowę zamyka podstawka, w której znajduję się główny przewód zasilający oraz diody sygnalizujące działanie. Czujniki Urządzenie w czasie rzeczywistym pobiera dane z 7 czujników, następnie są one w odpowiedni sposób przekazywane do modułu detektorów i mikrokontrolerów, które zwracają dane do Raspberry PI. Lista czujników: Czujnik opadów Czujnik pomiaru opadów atmosferycznych składa się z dwóch części: sondy pomiarowej „YL-83” oraz modułu detektora „LM393”, który posiada wyjście analogowe umożliwiające pomiar deszczu. Moduł zasilany jest napięciem 5V. Czujnik natężenia światła Czujnik światła bazuje na fotorezystorze „GL5537-1”. Jest to opornik fotoelektryczny, który zmienia swoją rezystancję pod wpływem padającego światła. Prędkość wiatru Pomiar prędkości wiatru bazuje na ultradźwiękowym czujniku odległości „HC-SR04”. Ultradźwiękowy pomiar prędkości polega na zmierzeniu różnicy czasu przejścia impulsów ultradźwiękowych propagujących w kierunku przeciwnym do kierunku przepływu. Temperatura i wilgotność Do wykonywania pomiaru temperatury i wilgotności powietrza został wykorzystany popularny moduł „DHT11”. Moduł składa się z czujnika oraz niezbędnego do poprawnego działania układu: rezystora i kondensatora filtrującego napięcie zasilania. Ciśnienie Moduł z cyfrowym barometrem „BMP180” wykonuje pomiar ciśnienia w zakresie od 200hPa do 1100hPa. Układ komunikuje się przy użyciu interfejsu IC2, co zapewnia wysoką dokładność i stabilność wykonywanych pomiarów. Jakoś powietrza Moduł jakości powietrza „MQ-135” wykrywa w atmosferze: benzen, amoniak (NH3) oraz dwutlenek węgla (CO2). Inne: Przetwornik A/C i C/A 8-bitowy I2C Głównym układem przetwarzania danych w tej pracy jest przetwornik PCF8591. Moduł posiada czterokanałowy przetwornik analogowo-cyfrowy działający w oparciu o 8-bitowy systemem akwizycji danych. Komunikacja opiera się na szeregowej wysyłce danych za pomocą dwukierunkowej magistrali I2C.
  9. Tak to jest, jak się najpierw ustala nazwę, a potem dopiero traktuje jako akronim i szuka jakiegoś sensownego określenia Ale jeśli ktoś czytał "Cieplarnię" Aldissa powinien już w tym momencie domyślać się, do czego służy SMARDZ (a jeśli nie to warto przeczytać). Kilka słów wyjaśnienia: bardzo lubię Arduino Pro Mini (choćby ze względu na cenę klonów i brak jakichkolwiek niepotrzebnych wodotrysków - ot, po prostu atmega z kwarcem i pinami na zgrabnej płytce). Niestety - o ile programowanie różnych mniej lub bardziej stacjonarnych urządzeń typu automatyka domowa jest całkiem wygodne (o ile się zadba o odpowiedni konwerter) - o tyle przy robotach, które jeżdżą, szwendają się po podłodze i ogólnie starają się usilnie zerwać wszystkie możliwe kable, sprawa staje się bardziej skomplikowana. Próbowałem jakichś wariackich rozwiązań na ESP8266 (coś w stylu "Serial over IP"), ale rezultaty były raczej mało interesujące. Postanowiłem więc przestać bawić się w oszczędzanie i użyć Raspberry Pi Zero W. Rozwiązanie (oprócz tego że działa bezproblemowo) ma jeszcze jedną zaletę: wszystkie pliki trzymane są na karcie pamięci malinki, układ katalogów zgodny jest z oryginalnym układem Arduino, a do komunikacji z malinką możemy użyć dowolnego komputera z zainstalowanym jakimś klientem SSH (np. PuTTY). I tu uwaga: mimo że opisuję dość dokładnie jak takie coś można sobie zrobić - zakładam u potencjalnego użytkownika podstawową wiedzę na temat Linuksa, Arduino i ogólnie elektroniki. Tak że proszę - bez pytań typu "a jak się przegrywa pliki na RPi" i "po co tam Arduino IDE jeśli go nie używam" Jak zwykle postanowiłem użyć elementów "wyciągniętych z szuflady". Co prawda jest mało prawdopodobne, aby wiele osób miało w szufladzie jakieś niepotrzebne malinki, ale ponieważ wymagania SMARDZa są bardzo małe, można po prostu na chwilę wyjąć ją z innego urządzenia. Nawet zakup RPi specjalnie do tego celu nie będzie niepotrzebnym wydatkiem - albo posłuży do programowania, albo znajdzie zastosowanie w innym urządzeniu (np. kamerze, serwerze octoprinta co tam sobie wymyślimy). Co do wymagań - potrzeba niewiele. Wystarczy stały adres IP w domowej sieci WiFi, dostępny interfejs Serial na ttyS0 i wolny pin BCM17. Co do malinki - można kupić wersję z wlutowanymi pinami, ale to chyba szczyt lenistwa, SMARDZ jest przeznaczony dla osób, które potrafią się lutownicą posługiwać i wlutowanie czterdziestopinowego gniazda nie powinno stanowić problemu. Zaoszczędzić też możemy na karcie SD, wcale nie musimy kupować najdroższej, wystarczy taka za kilkanaście złotych. Potrzebny będzie jeszcze konwerter napięć i jakieś drobne elementy montażowe. Tak więc mamy już malinkę (z pinami). Zakładam, że większość z tych, którzy chcieliby sobie coś takiego zrobić ma jakiś zasilacz (wystarczy mocniejsza ładowarka od komórki) - ja trafiłem w Tesco ostatnio ładowarkę 2.5A za niecałą dychę przy okazji kupowania jakichś bułeczek Instalacja jest prosta, chociaż trochę potrwa. Należy zacząć od skonfigurowania systemu tak, aby otrzymywał stały adres IP w sieci wewnętrznej. Ponieważ sposobów na to jest wiele i wybór ściśle zależy od warunków technicznych - odsyłam do oficjalnych instrukcji konfiguracji RPi. Potrzeba również, aby malinka miała dostęp do Internetu. Również pamiętajmy, że będzie nam potrzebny UART, czyli konfigurujemy malinkę tak, aby UART był aktywny, ale konsola serial wyłączona. W tym celu łączymy się z malinką przez SSH, wydajemy polecenie: sudo raspi-config i kolejno: Wybieramy punkt "Interfacing options" Z nastpnego menu wybieramy "Serial" Na pytanie "Would you like a login shell to be accessible over serial?" odpowiadamy "Nie" Na pytanie "Would you like the serial port hardware to be enabled?" odpowiadamy "Tak" Jako że najprawdopodobniej konfigurować to będziemy w trybie headless (nie bardzo sobie wyobrażam po co komu graficzne środowisko na komputerze bez podłączonego monitora - ale może ktoś ma takie upodobania) - na komputerze z którego przeprowadzamy instalację potrzebny będzie jeszcze vncviewer. I tu znów odsyłam do materiałów dotyczących używanego systemu operacyjnego - w przypadku Ubuntu czy Debiana najprostszy będzie xtightvncviewer. Oczywiście, jeśli mamy graficzne środowisko i podłączony monitor możemy z tego skorzystać! Zaczynamy od instalacji najpotrzebniejszych programów. Jeśli używamy otoczenia graficznego, wystarczy WiringPi i pyserial: sudo apt install wiringpi python-serial Jeśli instalujemy w trybie headless, potrzebne będą dodatkowe programy: sudo apt install wiringpi python-serial x11vnc xserver-xorg-video-dummy Teraz musimy zainstalować Arduino IDE. Tu znów w przypadku graficznego środowiska postępujemy zgodnie z oficjalnymi instrukcjami - Arduino IDE należy co najmniej raz uruchomić! Zajmijmy się więc wersją headless. Należy do katalogu domowego wgrać najnowszą wersję Arduiono IDE dla Linuxa ARM 32-bity (w chwili pisania jest to wersja 1.8.9) i rozpakować poleceniem: tar -xJf arduino-1.8.9-linuxarm.tar.xz Utworzony zostanie katalog arduino-1.8.9 zawierający wszystko, co potrzebne do pracy. Teraz należałoby uruchomić Arduino IDE - niestety, bez grafiki się nie da... trzeba więc nieco oszukać Javę żeby myślała, że wszystko jest w porządku. Najprostszym sposobem jest uruchomienie IDE w symulowanym środowisku graficznym. W tym celu wydajemy polecenie: xvfb-run arduinio-1.8.9/arduino i po odczekaniu dłuższej chwili (IDE musi wystartować, a tego nie widać) zatrzymanie programu przez ctrl-c. Powinny zostać utworzone katalogi ~/Arduino zawierający katalog libraries oraz ~/.arduino15 z (między innymi) plikiem preferences.txt. Jednak lepiej jest widzieć co się dzieje, poza tym nie wszyscy lubią zabawy z zipami i ściąganie bibliotek z githuba, w większości przypadków użycie okienkowego interfejsu jest po prostu wygodniejsze. A więc aby ujrzeć (teraz i następnym razem) interfejs Arduino IDE należy postąpić nieco inaczej. Wydajemy kolejno polecenia: Xvfb -display :20 & x11vnc -display :20 & DISPLAY=:20 arduino-1.8.9/arduino a na komputerze na którym pracujemy uruchamiamy przeglądarkę VNC i łączymy się z naszą malinką. Należy pamiętać, że x11vnc uruchomiony w ten sposób pozwala tylko na jedną sesję! Teraz po prostu po pokazaniu się właściwego interfejsu IDE możemy go zamknąć, a na konsoli malinki wydać polecenie: killall Xvfb Spowoduje to wyłączenie graficznego środowiska oraz serwera VNC. Tak więc nasza malinka jest już gotowa, możemy przystąpić do instalacji plików SMARDZa. Tu już jest to wręcz trywialne. Z załącznika do posta (smardz.zip) trzeba wyciągnąć plik smardz.tgz, przegrać go na naszą malinkę do katalogu domowego i rozpakować poleceniem: tar -xzf smardz.tgz Powinien zostać utworzony katalog bin, a w nim pliki wykonywalne: ardureset arducomp.py ardupload.py arduserial.py Możemy teraz sprawdzić, czy wersja Arduino IDE w pliku ardupload.py zgadza się z wersją zainstalowaną, ew. poprawić linijkę: aversion='1.8.9' zgodnie z zainstalowaną wersją Arduino IDE. Należy pamiętać, że w przypadku wgrania nowej wersji IDE trzeba będzie tę linijkę poprawić ponownie! Jeśli nie stosujemy malinki do innych celów lub żaden zainstalowany program nie używa pinu BCM17 możemy do /etc/rc.local dopisać: /usr/bin/gpio -g mode 17 output /usr/bin/gpio -g write 17 1 Jeśli tego nie zrobimy, może okazać się konieczne wydanie polecenia ardureset zaraz po uruchomieniu systemu. Mamy więc wszystko zainstalowane... ale jakoś to trzeba z naszym Arduino połączyć! Tu już wszystko zależy od inwencji użytkownika. Schemat połączeń będzie oczywiście podobny w każdym przypadku, zworka w obwodzie zasilania jest opcjonalna i służy do rozdzielenia zasilanie, jeśli chcemy oddzielnie zasilać Arduino i SMARDZa. Połączenia między Arduino a RPi powinny przechodzić poprzez konwerter napięć (wykorzystane trzy z czterech par), a więc sprowadzą się do: DTR/1 - GPIO17/11 TxD/2 - RxD/10 RxD/3 - TxD/8 Ja w swoim rozwiązaniu użyłem kawałka dwustronnej płytki uniwersalnej, gniazda zostały wycięte z jednej 40-pinowej pojedynczej listwy żeńskiej, ale to już zależy od własnych potrzeb i możliwości, każdy ma inne. Pozostaje jeszcze kwestia obudowy. Początkowo użyłem wersji z Thingiverse (nota bene bardzo wygodnej), postanowiłem jednak nieco ją zmodyfikować. Pliki STL oraz SCAD w załączniku! No i pora na testy. Potrzebne jest Arduino Pro Mini z wlutowanymi kątowymi pinami do programowania (ja stosuję zawsze pięć). Podłączamy Arduino do SMARDZa, podłączamy zasilanie do RPi, powinna zaświecić się dioda zasilania w Arduino. Teraz łączymy się przez SSH z naszą malinką. Potrzebny jest jakiś dowolny szkic (np. blink) umieszczony w katalogu Arduino (możemy go przegrać choćby z ~/arduino-1.8.9/examples/01.Basics/Blink). Wchodzimy do katalogu Arduino/Blink: cd ~/Arduino/Blink i wydajemy polecenie arducomp.py Program powinien się skompilować, zostać przesłany na Arduino i po chwili powinniśmy zobaczyć migającą diodę. Kolej na użycie monitora serial. W tym celu otwieramy drugie połączenie z malinką i wpisujemy polecenie arduserial.py Powinniśmy zobaczyć ekran monitora. Obsługa jest intuicyjna, wspomnę tylko że wpisanie czegokolwiek jest możliwe tylko przy aktywnym monitorze (przełączanym klawiszem F2), a prędkości przełącza się klawiszami kursora po wciśnięciu F3 przy nieaktywnym monitorze. Na pierwszej konsoli musimy skompilować jakiś program używający seriala. Jeśli nie macie nic takiego pod ręką, przygotowałem taki bardzo krótki test pozwalający sprawdzić zarówno nadawanie, jak i odbiór: void setup(void) { Serial.begin(9600); Serial.println("Program wystartował"); } void loop() { if (Serial.available()) { Serial.println((int)Serial.read()); } } Jeśli wszystko będzie w porządku - możemy już zająć się prawdziwą pracą z naszym robotem. Należy tylko zadbać o to, aby piny interfejsu Arduino zwrócone były w stronę umożliwiającą podłączenie SMARDZa bez konieczności użycia dodatkowych kabli: ...a następnie przystąpić do programowania i monitorowania naszego robota (robot na zdjęciu jest wersją próbną w trakcie powstawania, zrzut ekranu monitora pochodzi z tego właśnie robota). Wszystkie pliki potrzebne do odtworzenia SMARDZa w załączniku: smardz.zip Jak zwykle w przypadku pytań pozostaję do dyspozycji.
  10. Witam Od około półtora roku interesuję się sztuczną inteligencją, zwłaszcza zastosowaną w robotyce. Jest to dla mnie niezwykle ciekawy temat Kilka miesięcy temu zacząłem pracować nad moim prywatnym projektem, który cały czas jest w fazie rozwoju. Pewne elementy, takie jak uczenie się poprzez rozmowę z człowiekiem są gotowe, więc postanowiłem nagrać poniższe filmy: AgeBot podłączony jest do internetu. Platforma to gotowa konstrukcja - AlphaBot-PI. Użyłem jej, aby szybciej skupić się na oprogramowaniu. W ostatnim czasie domykałem widoczne na filmach możliwości robota i w międzyczasie zacząłem pracę nad wykorzystaniem kamery (aktualny stan to ~30%). W bliskiej przyszłości platformę mam zamiar wymienić na coś bardziej zaawansowanego lub zbudować swoją, ponieważ ta zaczyna mnie powoli ograniczać (pod względem hardware'u). Jej specyfikacja dostępna jest w internecie (np. na stronie firmy Waveshare), więc nie będę kopiował Jak już zauważyliście - używam Raspberry PI. Oprogramowanie na malinkę napisałem w C++, pozostała część to C++ oraz Python. Systemem jest Raspbian. Do zautomatyzowania instalacji niektórych zależności w systemie (akurat w przypadku samej malinki) używam narzędzia Ansible, a o te krytyczne dla działania aplikacji dba manager pakietów (apt, buduję paczki .deb). Do przetwarzania tekstu użyłem biblioteki Tensorflow, natomiast w procesie uczenia się, robotowi asystuje wnioskowanie. Kamera i przetwarzanie obrazu otworzy wiele nowych drzwi, ułatwi również pracę przy kolejnej domenie - planowaniu zadań. Sam robot jest stosunkowo małą częścią projektu, ale o tym... w przyszłości Każdy feedback mile widziany Pozdrawiam PS: W ciągu kilku dni napiszę posta z trochę bardziej szczegółowymi informacjami odnośnie przetwarzania tekstu - czatowania z robotem
  11. Już słyszę głosy: O, staremu ethanakowi coś się chyba pokręciło... Post jest o jakimś Kedrigernie w dziale DIY - a na zdjęciu mamy coś przypominającego robota z dumnym napisem "Ciapek"... Spieszę z wyjaśnieniami. To nie pomyłka. Post jest na temat serwera mowy Kedrigern, a Ciapek to żaden robot. Po prostu dość trudno zrobić zdjęcie programu, poza tym wypadałoby raczej pokazać ów program w działaniu - a ten wymaga jednak czegoś co będzie gadać (czyli jakiejś bardziej fikuśnej obudowy na głośnik). A ponieważ ostatnio zapatrzyłem się w rysunki Daniela Mroza... cóż, Ciapek z ludzkimi dłońmi, stopami i uszkami wyszedł tak jak wyszedł Zacznę możę od opisu elektroniki (jako że jest to najprostsze, a użytkownik może sobie ją skomponować z zupełnie innych elementów). Sercem całego układu jest Raspberry Pi. Można zastosować dowolny model (chociaż ze starymi, krótkimi GPIO mogą być lekkie problemy), ja użyłem w swoim egzemplarzu Raspberry Pi Zero W. Oprócz tego potzebny jest jakikolwiek układ odtwarzania dźwięku. "Duże" (pełnpowymiarowe) malinki jak popularny 3B+ mają już wyprowadzone wyjście audio, potrzebny jest tylko jakiś niewielki wzmacniacz. Dla wersji Zero potrzebny jest jednak układ zewnętrzny. Prawdopodobnie doskonale spisałby się opisywany ostatnio moduł z wyjściem audio do Raspberry Pi Zero, ja zastosowałem jednak moduł i2s. Jest on dość wygodny w użyciu jako że zawiera w sobie wzmacniacz mono o całkiem sporej (do 3 W) mocy, poza tym początkujący elektronicy nie muszą się martwić o jakieś dziwne masy audio, filtrowane zasilania i tym podobne dziwactwa interesujące tylko "analogowców" - moduł podłącza się pięcioma przewodami do malinki, z drugiej strony dwoma do głośnika i już gra Ponieważ nasz "robocik" musi potrafić poruszać ustami, zastosowałem najprostsze (i najprawdopodobniej najtańsze) rozwiązanie - czyli matrycę LED 8x8 ze sterownikiem, na której rysowane będą kształty ust. Od razu uprzedzę pytanie: owszem, próbowałem zrobić bardziej skomplikowany mechanizm używający serw. Niestety - oprócz trudności mechanicznych (te są do przezwyciężenia) natrafiłem na rzecz, której nie da się przeskoczyć: prędkość serwa. Typowe serwo potrzebuje 0.1 sekundy na przekręcenie orczyka o 60° - a nawet zakładając, że owe 60° wystarczy (w co osobiście wątpię), jest to co najmniej dwa razy za wolno (przy czym owe "dwa" mogłoby się w rzeczywistych układach rozrosnąć do trzech czy czterech). Będę jeszcze próbować rozwiązania z solenoidami - jeśli mi się uda to opublikuję wyniki. Ale może w międzyczasie ktoś inny napisze moduł "solenoid"? Zresztą - chciałem, aby każdy mógł sobie w domu wypróbować Kedrigerna ponosząc jak najmniejsze koszty, a opisywany układ można (mając RPi z wyjściem audio) zmontować kosztem klikunastu złotych (matryca) bez żadnych płytek - po prostu łącząc matrycę przewodami z GPIO malinki. Jako głośnika użyłem leżącego gdzieś w szufladzie zakurzonego głośniczka od starego telefonu z sekretarką, pasować jednak będzie dowolny pod warunkiem dopasowania mocy głośnika do posiadanego wzmacniacza. I to cała wielce skomplikowana elektronika. Jak widać na zdjęciu - nie ma tam nic skomplikowanego. Przejdę więc do opisu programu. Kilka lat temu udało mi się zmusić Mbrolę do w miarę prawidłowego gadania po polsku (do tego stopnia, że można ją było wykorzystać np. do tworzenia audiobooków). System TTS Milena (tak się nazywa ten "zmuszacz" do Mbroli - czyli bardziej fachowo NLP) bardzo dobrze sprawdził się na pecetowym Linuksie, wersja na Windows była raczej ciekawostką ale również działała - postanowiłem więc przystosować ją do malinki. Po przezwyciężeniu pewnych trudności z kompilacją (np. "char" dla architerktury Intel to w GCC domyślnie signed, w ARM z jakichś przyczyn unsigned) okazało się, że co prawda Milena działa, ale "rozruch" ma straszliwie powolny. Nic dziwnego - pliki tekstowe słowników wymowy i translacji fonetycznej muszą być kompilowane przy załadowaniu programu, a malinka ze swoją wolniutką kartą pamięci i nieszczególnie silnym procesorkiem potrzebuje zbyt dużo czasu, zanim wydobędzie z siebie jakieś zdanie. Postanowiłem więc zrobić inaczej: serwer wczytuje wszystkie pliki raz przy starcie systemu, a prosty program klienta przekazuje mu tylko treść komunikatów. Takie rozwiązanie ma również inne zalety: uruchomiony na sockecie TCP serwer może być na zupełnie innej fizycznej maszynie niż klient. I w ten sposób powstał program Kedrigern (nazwany na cześć pewnego czarodzieja, który postanowił odczarować księżniczkę z zaklęcia odbierającego głos). Jak mi to wyszło - oceńcie sami. Oto filmik ukazujący Kedrigerna w działaniu: Nie będę tu rozpisywał się o wszystkich zasadach działania i możliwościach Kedrigerna i Mileny (to w końcu ma byc post na forum a nie książka z dokumentacją), zacznę więc od instalacji Kedrigerna na malince. Wszystkie konieczne komponenty (z wyjątkiem głosu pl1) są w załączonym pliku tgz. Rozpakujmy go w dowolnym katalogu (np. w głównym katalogu użytkownika malinki) i instalujemy mbrolę wraz z polskim głosem: sudo dpkg -i mbrola3.0.1h_armhf.deb sudo apt install mbrola-pl1 Teraz możemy zainstalować Milenę. I tu uwaga: jeśli ktoś miał starszą wersję Mileny niż 0.2.92 musi ją przeinstalować na tę właśnie wersję - inaczej nie będzie działać moduł ruchu ust Kedrigerna! sudo dpkg -i milena*.deb Po zainstalowaniu wszystkiego powinno działać już polecenie milena_say, czyli musimy wypróbować: milena_say dzień dobry kolego I znów uwaga: jeśli wyjściem audio jest HDMI, polecenie może nie działać prawidłowo! Należy spróbować dodać parametr -d opóżniający generację mowy do czasu "załapania" HDMI, czyli najprościej: milena_say -d 2000 dzień dobry kolego Niestety, przy użyciu wyjścia HDMI mogą pojawić się problemy z późniejszym działaniem Kedrigerna, ale po pierwsze nie jest to miejsce na omawianie problemów z audio, po drugie wcale nie czuję się mistrzem w tym zakresie i prawdopodobnie ktoś tu wie lepiej ode mnie jak tym problemom zaradzić. W każdym razie mając uruchomiona Milenę i Mbrolę możemy przystąpić do instalacji Kedrigerna. Zaczynamy od instalacji serwera, czyli sudo dpkg -i kedrigern_0.2.0-1_armhf.deb Jeśli mamy podłąćzoną matrycę LED (8x8, MAX7219) możemy użyć jej jako wyświetlacz ust: sudo dpkg -i kedrigern-matrix_0.2.0-1_armhf.deb No i oczywiście coś co pozwoli nam korzystać z serwera, czyli: sudo dpkg -i libkedrigern_0.1.2-1_armhf.deb Teraz możemy sprawdzić, co potrafi nasz serwer: kedrigern -h lub (jeśli mamy zainstalowany moduł matrix) kedrigern -M matrix -h W odpowiedzi dostaniemy wykaz opcji, z którymi możemy uruchomić serwer. Aby je przetestować, należy otworzyć drugi terminal; w pierwszym uruchamiamy serwer poleceniem "kedrigern" z różnymi opcjami, w drugim testujemy poleceniem kdr-say. Po ustaleniu opcji należy zedytować plik /etc/default/kedrigern i w nim ustawić domyślne parametry. Po przetestowaniu poleceniem kedrigern -C /etc/default/kedrigern możemy już uruchomić nasz serwer w tle: sudo systemctl start kedrigern Jeśli chcemy, aby serwer startował od razu przy starcie systemu, należy wydać polecenie: sudo systemctl enable kedrigern Do komunikacji z serwerem służą polecenia kdr-say, kdr-stop i kdr-speaking. Moduł matrix pozwala na wyświetlanie ust zsynchronizowane z głosem syntezatora. Oto przykładowe obrazy ust dla różnych fonemów: Fonem A Fonem I Fonem O Fonem U Fonemy M, P i B Wybrałem do pokazania kilka najbardziej charakterystycznych kształtów. Jeśli komuś nie odpowiadają stworzone przeze mnie kształty może w prosty sposób dorobić własne lub poprawić moje na bazie pliku /usr/share/kedrigern/demo.shape i podłączyć go do Kedrigerna, np. za pomocą opcji "-m matrix:shape" lub wprowadzając odpowiednie zmiany w pliku konfiguracyjnym. Protokół komunikacyjny jest bardzo prosty. Nie wnikając w szczegóły - załączony moduł w Pythonie (działa w wersji 2 i 3 Pythona) pozwala na sterowanie serwerem, a jednocześnie stanowi przykład sposobu komunikacji. I to wszystko... A nie, nie wszystko. Bo zaraz ktoś powie że to tylko zabawka, że komu potrzebne gadające roboty... Przede wszystkim: Kedrigern może generować komunikaty diagnostyczne w czasie testowania/programowania robota. Jakie to ma znacze nie nie muszę chyba mówić nikomu, kto choć raz ustawiał np. regulatory silników czy zakres ruchu serw w warunkach polowych. Poza robotyką może być bardzo dobrym rozwiązaniem do urządzeń typu headless - ja np. stosuję podobne (poprzednika Kedrigerna) rozwiązanie do obsługi sterownika pieca CO (podanie np. godzin nieobecności w mieszkaniu) czy jako wygodnego interfejsu do wpisywania wyników pomiaru ciśnienia krwi i poziomu cukru z małej przenośnej klawiaturki. A to już nie są zabawki A w ogóle przypominam, że Roomba też gada (tyle że Ciapek ładniej) Zdaję sobie sprawę z tego, że opis jest bardzo pobieżny. Z chęcią odpowiem na wszystkie pytania - o ile kogoś to będzie interesować... W każdym razie wypróbowanie Kedrigerna nawet bez modułu ust posiadacza RPi z wyjściem audio nic nie kosztuje, a może się przyda? Kody źródłowe Mileny i Kedrigerna są dostępne na stronie http://milena.polip.com A, i ostatnie wyjaśnienie: Ciapek to mały troll, wychowanek czarodzieja Kedrigerna w książce Johna Morressy'ego "Głos dla księżniczki". Nawet trochę podobny Przy okazji: @Treker, czemu pliki zip są cacy a tgz są be? kedrigern.zip pykedrigern.zip
  12. Cześć! Chciałbym zlecić wykonanie oprogramowania pod fajny projekt. Prototyp urządzenia jest na Śląsku, stąd niestety potrzebna jest osoba z tego regionu. Temat obejmuje kilka składników. Chodzi o system składający się z: - aplikacji klienckiej która zarządza automatyką (zawór, przepływomierz) na podstawie danych z karty rfid, komunikując się z serwerem SQL - docelowo uruchamiana na Raspberry Pi - aplikacji zarządzającej kartami rfid (tworzenie / edycja kart / wybór asortymentu dla aplikacji klienckiej), przy użyciu interfejsu z ekranem dotykowym, komunikując się z serwerem SQL - docelowo uruchamiana na Raspberry Pi - baza SQL przechowująca dane dotyczące kart klientów, dostępnego asortymentu do sprzedaży oraz dane dotyczące samej sprzedaży - docelowo uruchamiana na komputerze PC z Linuxem - front-end do SQL - pozwalający na przyjazny dostęp do bazy SQL celem edycji asortymentu, wyciągania danych dotyczących sprzedaży, edycji kart klientów, etc. Wykorzystane będą komputery RaspberryPi pracujące na OS Raspbian z elementami automatyki (czytnik RFID na SPI, elektrozawór sterowany sygnałem z RPi, przepływomierz generujący impulsy zliczane przez RPi) do której istnieją gotowe biblioteki, Wybór dystrybucji oraz serwera SQL - na ten moment do podjęcia, najlepiej żeby to było jakieś popularne środowisko. Front-end do SQL - najprościej będzie napisać w PHP, Oprogramowania na RPi do wyboru Python lub Java - programy mają mieć graficzny interfejs, aplikacja kliencka tylko wyświetla odpowiednią zawartość, aplikacja zarządzająca musi pozwalać na interakcję z operatorem. To zarys tematu, szczegóły do dogadania osobiście.
  13. Witam i wielka prośba o pomoc. Planuję przetestować współpracę mojej malinki (Pi 2 B) z kamerą podłączoną przez USB. Znalazłem wiele pozytywnych informacji nt. programu fswebcam, ale niestety utknąłem na samym początku tj. na jego instalacji. Mianowicie polecenie sudo apt-get install fswebcam informuje o problemach z repozytorium http://mirrordirector.raspbian.org W związku z tym znalazłem źródło na GitHub i próbowałem postępować zgodnie ze wskazówką autora (Philip Heron). Dodam, że pobrane pliki w formie ZIP rozpakowałem i cały folder fswebcam-master umieściłem w /home/pi. Następnie z poziomu folderu fswebcam-master wprowadziłem polecenie ./configure --prefix=/usr Niestety tym razem dowiedziałem się, że -bash: ./configure: Permission denied Próba wpisania przed tym "sudo" zmienia tyle, że sudo: ./configure: command not found Wprawdzie nie jest to czysty system, ale zbyt wiele modyfikacji nie wprowadzałem i działam na standardowym koncie "pi". Próbowałem jeszcze kilku innym możliwości włącznie z przypisaniem do /usr dodatkowych uprawnień, wszystko bez pozytywnego rezultatu. Wielka prośba o pomoc, niestety ja dopiero zaczynam i moja wiedza pozostawia jeszcze wiele do życzenia ;-)
  14. AJAX umożliwia przekazywanie danych pomiędzy klientem a serwerem WWW bez konieczności przeładowania strony. Dodając do tego timer w JavaScript możemy uzyskać świeże dane na stronie generowanej przez ESP8266. Na początek stwórzmy w PHP najprostszą stronę WWW prezentującą aktualną godzinę pobieraną z serwera (nie "JavaScriptovy" czas z przeglądarki - w końcu docelowo chcemy pobierać dane z czujników podłączonych do "serwera WWW" postawionego na ESP8266): <? if ($_REQUEST["time"]) { echo date("G:i:s"); exit; } ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>AJAX test</title> </head> <body> <span id="time"></span> <script> myTimer(); var myVar = setInterval(myTimer, 1000); function myTimer() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("time").innerHTML = this.responseText; } }; xhttp.open("GET", "test.php?time=1", true); xhttp.send(); } </script> </body> </html> Timer co sekundę przywołuje funkcję myTimer(); var myVar = setInterval(myTimer, 1000); a ta pobiera zawartość podstrony test.php?time=1 i wstawia ją do elementu o nazwie "time" (document.getElementById("time").innerHTML = this.responseText;). Mamy tu tylko jeden przekazywany parametr. Co zrobić, by aktualizować kilka różnych wartości? Przywykłem do podstrony przekazującej parametry rozdzielone znakiem ; (odczyt1;odczyt2;odczyt3). Dzięki JavaScriptowej funkcji split możemy podzielić taki ciąg znaków na tablice, a potem przydzielić jej części do elementów SPAN o określonym ID. <? if ($_REQUEST["time"]) { echo date("d.m.y;G:i:s"); exit; } ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>AJAX test</title> </head> <body> Date: <span id="date"></span><br> Time: <span id="time"></span> <script> myTimer(); var myVar = setInterval(myTimer, 1000); function myTimer() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var str = this.responseText; var values = str.split(";"); document.getElementById("date").innerHTML = values[0]; document.getElementById("time").innerHTML = values[1]; } }; xhttp.open("GET", "test.php?time=1", true); xhttp.send(); } </script> </body> </html> Działa! PHP po zainstalowania serwera np NGINX możemy uruchomić na Raspberry Pi. W połączeniu (komenda system()) z zewnętrznym skryptem Python lub programem w C korzystającym z WiringPi otrzymamy stronę z odczytami czujników hostowaną na Raspberry Pi! Spróbujmy wreszcie zaprogramować mikrokontroler ESP8266. Podłączmy najpierw czujnik BME280. /* I2C D4 - SCL D3 - SDA */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> char* ssid = "Weather"; //const char *password = ""; ESP8266WebServer server(80); Adafruit_BME280 bme; void setup() { Serial.begin(9600); Wire.begin(D3, D4); Wire.setClock(100000); if (!bme.begin(0x76)) //changed from default I2C adress 0x77 { Serial.println("Nie odnaleziono czujnika BMP085 / BMP180"); while (1) { } } IPAddress apIP(192, 168, 1, 1); WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // WiFi.softAP(ssid, password); WiFi.softAP(ssid); server.on("/", handleRoot); server.on("/sensors", handleSensors); server.begin(); } void loop() { server.handleClient(); } void handleRoot() { String content = "<html> <head><title>Weather</title></head><body>"; content += "<DIV style=\"display:table; font-size: large;\"><DIV style=\"border-style: solid;\">BME280:<BR>Temperature: <span id=\"tempBME\"></span>C<br>Humidity: <span id=\"humBME\"></span>%<br>Pressure: <span id=\"presBME\"></span>Pa<br></DIV>"; content += "<script>myTimer();var myVar = setInterval(myTimer, 1000);function myTimer() {var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var str = this.responseText; var values = str.split(\";\"); document.getElementById(\"tempBME\").innerHTML = values[0]; document.getElementById(\"humBME\").innerHTML = values[1]; document.getElementById(\"presBME\").innerHTML = values[2];} }; xhttp.open(\"GET\", \"sensors\", true); xhttp.send();}</script>"; content += "</body></html>"; server.send(200, "text/html", content); } void handleSensors() { String content = String(bme.readTemperature()) + ";" + String(bme.readHumidity()) + ";" + String((int)bme.readPressure()) + ";"; server.send(200, "text/html", content); } Rozdzielanie danych przecinkiem czy średnikiem nie jest sposobem "zbyt profesjonalnym". Przy dużej ilości zmiennych łatwo też o pomyłkę. Dlatego lepiej wtedy stosować bardziej odpowiednie formaty danych: JSON czy XML. Ze względu na "bliskość" JSON z JavaScript skupię się tylko na nim. Gotowa biblioteka ArduinoJson wygeneruje dane za nas. Więcej informacji znajdziemy w rozdziale Serialize with ArduinoJson dokumentacji technicznej. /* I2C D4 - SCL D3 - SDA */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson char* ssid = "Weather"; //const char *password = ""; ESP8266WebServer server(80); Adafruit_BME280 bme; void setup() { Serial.begin(9600); Wire.begin(D3, D4); Wire.setClock(100000); if (!bme.begin(0x76)) //changed from default I2C adress 0x77 { Serial.println("Nie odnaleziono czujnika BMP085 / BMP180"); while (1) { } } IPAddress apIP(192, 168, 1, 1); WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // WiFi.softAP(ssid, password); WiFi.softAP(ssid); server.on("/", handleRoot); server.on("/sensors", handleSensors); server.begin(); } void loop() { server.handleClient(); } void handleRoot() { String content = "<html> <head><title>Weather</title></head><body>"; content += "<DIV style=\"display:table; font-size: large;\"><DIV style=\"border-style: solid;\">BME280:<BR>Temperature: <span id=\"tempBME\"></span>C<br>Humidity: <span id=\"humBME\"></span>%<br>Pressure: <span id=\"presBME\"></span>Pa<br></DIV>"; content += "<script>myTimer();var myVar = setInterval(myTimer, 1000);function myTimer() {var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var str = this.responseText; var values = JSON.parse(str); document.getElementById(\"tempBME\").innerHTML = values.temp; document.getElementById(\"humBME\").innerHTML = values.hum; document.getElementById(\"presBME\").innerHTML = values.press;} }; xhttp.open(\"GET\", \"sensors\", true); xhttp.send();}</script>"; content += "</body></html>"; server.send(200, "text/html", content); } void handleSensors() { String content; StaticJsonBuffer<400> jsonBuffer; JsonObject& root = jsonBuffer.createObject(); root["temp"] = bme.readTemperature(); root["hum"] = bme.readHumidity(); root["press"] = (int)bme.readPressure(); root.printTo(content); server.send(200, "text/html", content); } Strona prezentować się będzie tak samo jak poprzednio. Zyskamy za to wygodny i czytelny sposób dopisywania nowych danych root["temp"] = bme.readTemperature(); oraz ich odczytywania w kodzie źródłowym strony: document.getElementById(\"tempBME\").innerHTML = values.temp; Nie przejmujemy się już numeracją elementów długiej tablicy. Sytuację możemy też odwrócić tworząc stronę WWW, której formularz sterować będzie pracą naszego fizycznego urządzenia. Oczywiście nadal niekonieczne będzie przeładowanie strony, by wysłać dane. #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> char* ssid = "Weather"; //const char *password = ""; int ledValue = 0; ESP8266WebServer server(80); void setup() { Serial.begin(9600); IPAddress apIP(192, 168, 1, 1); WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // WiFi.softAP(ssid, password); WiFi.softAP(ssid); server.on("/", handleRoot); server.begin(); pinMode(D1, OUTPUT); analogWriteRange(100); //http://esp8266.github.io/Arduino/versions/2.0.0/doc/reference.html analogWriteFreq(500); } void loop() { server.handleClient(); analogWrite(D1, ledValue); } void handleRoot() { if (server.hasArg("ledVal") && server.arg("ledVal").toInt() >= 0 && server.arg("ledVal").toInt() <= 100) { ledValue = server.arg("ledVal").toInt(); Serial.print("ledVal "); Serial.println(ledValue); server.send(200, "text/html", ""); return; } //https://www.w3schools.com/howto/howto_js_rangeslider.asp //https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest String content = "<!DOCTYPE html>" "<html>" "<head>" "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" "<title>Luminosity setter</title>" "<style>" ".slidecontainer {" "width: 1024px;" "margin: 0 auto;" "text-align: center;" "}" ".slider {" " -webkit-appearance: none;" " width: 100%;" " height: 25px;" " background: #d3d3d3;" " outline: none;" " opacity: 0.7;" " -webkit-transition: .2s;" " transition: opacity .2s;" // " margin-left: 20px;" // " margin-right: 20px;" "}" ".slider:hover {" " opacity: 1;" "}" ".slider::-webkit-slider-thumb {" " -webkit-appearance: none;" " appearance: none;" " width: 25px;" " height: 25px;" " background: #4CAF50;" " cursor: pointer;" "}" ".slider::-moz-range-thumb {" " width: 25px;" " height: 25px;" " background: #4CAF50;" " cursor: pointer;" "}" "</style>" "</head>" "<body>" "<div class=\"slidecontainer\">" " <input type=\"range\" min=\"0\" max=\"100\" value=\"" + String(ledValue) + "\" class=\"slider\" id=\"myRange\">" " <p>Value: <span id=\"demo\"></span>%</p>" "</div>" "<script>" "document.getElementById(\"demo\").innerHTML = document.getElementById(\"myRange\").value;" "document.getElementById(\"myRange\").oninput = function() {" " document.getElementById(\"demo\").innerHTML = this.value;" "var data = new FormData();" "data.append('ledVal', this.value);" "var xhr = new XMLHttpRequest();" "xhr.open('POST', '/', true);" "xhr.onload = function () {" " console.log(this.responseText);" "};" "xhr.send(data);" "}" "</script>" "</body>" "</html>"; server.send(200, "text/html", content); } W tym przypadku przesunięcie suwaka na stronie sterującej wywoła natychmiastową zmianę jasności diody LED podłączonej odpowiednim rezystorem do pinu D1.
  15. Mam do sprzedania kartę dźwiękową do Raspberry Pi, którą właśnie wygrałem w konkursie organizowanym przez czasopisma The MagPi. Jest to karta HiFiBerry z dodatkowym 24-bitowym przetwornikiem A/C. Dokładnie taka jak tutaj: https://botland.com.pl/pl/raspberry-pi-karty-dzwiekowe-i-hifiberry/13374-hifiberry-dac-adc-karta-dzwiekowa-do-raspberry-pi-4b3b32ba-4260439550583.html Karta jest oryginalnie zapakowana, nie mam zamiaru jej nawet wyjmować z pudełeczka. Cena jaka mnie interesuje to 180 zł + koszty wysyłki, czyli ok. 2/3 ceny sklepowej. Jestem otwarty na propozycje zainteresowanych zakupem.
  16. Raspberry Pi jest często używane jako kontroler automatyki domowej. Inteligentne sterowanie roletami i oświetleniem to mały wycinek tego co potrafi malinka z Domoticzem. Na początku warto zacząć od ustawień systemu, podłączenia czujników temperatury (DS18B20) oraz konfiguracji powiadomień. [blog]https://forbot.pl/blog/kurs-raspberry-pi-projekty-domoticz-ds18b20-maile-id27526[/blog]
  17. Witam. Buduje prostego robota w oparciu o raspberry pi. Mam jednak problem z doborem zasilania. Potrzebuje zasilać 2 silniki DC takie jak te https://botland.com.pl/pl/silniki-dc-katowe-z-przekladnia/3696-kolo-silnik-65x26mm-5v-z-przekladnia-481.html?gclid=CjwKCAjw44jrBRAHEiwAZ9igKMMfJOrrwR5y_ZYuCCrQwjapiS6siamgHvAAKlLFejbmxRnYjZc6dBoCKNMQAvD_BwE, oraz dwa micro serwomechanizmy sg90. Postanowiłem że wykorzystam akumulator li-pol. I teraz mam pytanie czy li-pol 2C nie spali silników DC gdy podłącze je przez ten sterownik https://botland.com.pl/pl/sterowniki-silnikow-moduly/3164-l298n-dwukanalowy-sterownik-silnikow-modul-12v2a.html ? Kolejne pytanie dotyczy serwomechanizmów, czy napięcie 7.4V z li-pola nie będzie dla nich za duże? Czy użycie takiego stabilizatora https://botland.com.pl/pl/regulatory-napiecia/3092-stabilizator-5v-l7805cv-tht-to220.html pomogło by w dostarczeniu odpowiedniego napięcia? Czy jest w ogóle możliwość aby silniki DC zasilać z 7.4v bezpośrednio, natomiast serwa z wyjścia tego stabilizatora? Dodam jeszcze że raspberry pi jest zasilane osobno z powerbanka. Z góry dziękuję za wszelką pomoc.
  18. Witam, jestem nowy w temacie Raspberry Pi i elektroniki ogólnie, ostatnio zamówiłem moduły: DFRobot MP2636 i DFRobot Gravity. Chciałem ich użyć do zasilania mini-komputerka i mierzenia poziomu rozładowania baterii li-pol jednocześnie. Napotkałem dziwny jak dla mnie problem, a mianowicie: gdy podłączam baterię do modułu ładowania/power-booster'a przez krótsze przewody (+ i -) Raspberry Pi włącza się tak jak powinien, ale gdy użyję dłuższych przewodów, albo spróbuję podłączyć baterię przez płytkę prototypową Raspberry Pi włącza się, ale się nie boot'uje. Nic nie pokazuje się na ekranie, serwer ssh się nie aktywuje, ale napięcie na pinach jest bliskie 5V - tak jak powinno. Poza tym byłbym bardzo wdzięczny, gdyby ktoś wytłumaczył mi jak podłączyć baterię do obu modułów jednocześnie, by całość po prostu działała - bateria zasilała Raspberry Pi przez moduł zasilania, miernik rozładowania mierzył poziom rozładowania baterii. :)
  19. Podczas ostatniej akcji kuponowo-rabatowej stałem się posiadaczem RaspberryPi 3B+. Od początku w planach miałem wykorzystanie tego mini komputerka jako serce konsoli retro. W pierwszej chwili chciałem stworzyć duży, stacjonarny automat Arcade. W porę doszedłem jednak do wniosku, iż nie mam za bardzo miejsca na taki "mebel". Dlatego też wizja się zmieniła. Postanowiłem zbudować przenośne urządzenie, podpinane do dowolnego Tv za pomocą kabla HDMI o długości 5m. Tak oto zrodziły się pierwsze plany. Zrobiłem jak zwykle przegląd rynku, sprawdziłem ceny poszczególnych elementów, analizowałem swoje możliwości wykonania obudowy. Ten etap trwał dość długo, ponieważ nie ukrywam, iż mam mało czasu na takie zabawy. Jednak w maju w końcu zabrałem się do budowy. Na początek musiała powstać przemyślana obudowa. Zdecydowałem się na zestaw przycisków i joystików z Aliexpress (nie spieszyło mi się, a za zaoszczędzone pieniądze można kupić coś dodatkowo). I tak oto w czerwcu stałem się posiadaczem zestawu jak poniżej: Oczywiście na tym etapie wybrałem już sposób rozmieszczenia przycisków i dokupiłem dodatkowo przyciski COIN oraz 1GRACZ i 2GRACZY (dolny rząd): Obudowa została wykonana ze starych paneli, narożniki wzmocnione kantówką 2x3cm i 2x2cm (wszystko z posiadanych ścinków). Rozplanowałem też umieszczenie wentylatora nawiewowego oraz kratki wentylacyjnej, co by zapewnić naszej konsoli dobre warunki pracy (wentylator z PC na 12V). Panele są różne, więc po wykonaniu pudła całość została przeciągnięta szpachlą samochodową z włóknami wzmacniającymi oraz przeszlifowana. Tak wykonana obudowa została oklejona folią carbon zakupioną na allegro. Skoro przyjąłem, że konsola będzie przenośna to trzeba było wzmocnić narożniki. Zrobiłem to z wykorzystaniem kątowników aluminiowych oraz narożników. Pozostało wykonanie połączeń elektrycznych. Przyciski są podświetlane, więc szkoda było tego nie wykorzystać. Stąd mamy po 4 przewody do każdego przycisku. Wykorzystałem posiadany zasilacz 5V 4A i zasiliłem z niego całość: poprzez przejściówki adapter gniazda 5.5/2.1-microUSB RaspPi, podświetlenie przycisków, wentylator. Na potrzeby wentylatora od PC dołożyłem małą przetwornicę StepUp ustawioną na 12V. Trzeba było rozplanować wyprowadzenie HDMI, USB i gniazdo zasilania z obudowy. W tym celu wyfrezowałem sobie płytkę z aluminium i umieściłem w niej takie oto przedłużki: Oczywiście serce naszej konsoli również znalazło się w środku wraz z oprogramowaniem RetroPie 4.5 i kartą SD 64GB zapełniona grami. Przy pierwszej konfiguracji korzystałem ze standardowej klawiatury PC ale w późniejszym etapie dla wygody wykorzystuję klawiaturę MT08 oraz dorywczo pad Tracer Recon PC. Nie opisuję procesu instalacji i konfiguracji RetroPie, ponieważ najlepiej w tym celu korzystać z internetu i strony projektu; https://retropie.org.uk/ Całość działa od kilku dni. Miałem sporo problemów z konfiguracją joysticków. Początkowo dobrze działały tylko w menu RetroPie a w grach osie i przyciski były pozamieniane. Poradziłem sobie z tym ręcznie edytując pliki konfiguracyjne i w nich dokonałem odpowiednich zmian. Dłuższe testy pokażą co należy zmienić. Już na wstępie planuję dodanie przycisku do zał/wył malinki: Do dopełnienia całości - od spodu znajduje się 6 gumowych nóżek, by nie rysować stołu/ławy itp. Wszystkie zdjęcia pochodzą z różnych etapów budowy i nie koniecznie odzwierciedlają w pełni gotowe urządzenie. Jednak już w takiej formie przechodziło wstępne testy. RaspPi jest podczepione do dolnej płyty. Wszystko w środku zamocowane by nic nie latało. Wentylator wraz z przeciwległą kratką zapewniają bardzo dobre chłodzenie wszystkich urządzeń. Na razie z niedogodności to w razie problemów z kartą sd trzeba rozkręcić dół (8 śrubek w narożnikach). Przydałaby się jakaś mała klapka rewizyjna, ale na razie nie mam pomysłu na jej wykonanie. Ostatecznie dodam chyba również oznaczenia na przyciskach.
  20. Witam, chciałbym zrobić domowy Webserver na Raspberry Pi Zero W, napisany w Node.js. O ile potrafię pobrać dane z bazy danych za pomocą Node'a, nie wiem w jaki sposób miałbym przekazać dane z czujników podłączonych do Arduino, do RPi. Przykład: Mam czujnik tempratury Dallas, Arduino, oraz moduł WIFI (ESP8266), lub też Ethernet (Enc28j60). Bez problemu umiem pobrać dane z czujników i wyświetlić je klasycznie w monitorze portu szeregowego, ale jak przekazać je do RaspberryPi, tak aby dało się je pobrać za pomocą Node'a (konkretnie). Preferuję komunikację bezprzewodową, ale jakikolwiek sposób na start naprawdę by mnie zadowolił. Jestem również bardzo otwarty na propozycje, jedyna rzecz przy której się trzymam to Webserver napisany w Node.js Byłbym bardzo wdzięczny za podanie bibliotek, różnych sposobów komunikacji, oraz gotowych przykładów.
  21. Cześć, Ostatnio zaciekawił mnie temat związany z minikomputerem Raspberry Pi. Możecie mi polecić jakieś książki dla początkujących godne uwagi? Ewentualnie jakieś kursy/ poradniki z przykładowymi projektami?
  22. Cześć wszystkim, Chciałbym przetestować pewien program który znalazłem na internecie, niestety pojawia się problem przy instalacji biblioteki na Raspberry Pi , czy ktoś jest w stanie pomóc?
  23. Cześć wszystkim. To mój pierwszy temat na tym forum, Więc przy okazji witam wszystkich Pokaże wam dzisiaj bardzo prosty sposób wykorzystania Raspberry Pi jako konsoli do gier, ja osobiście dzięki temu projektowi zacząłem interesować się elektroniką. O ile sama elektronika nie jest tutaj zbyt zaawansowana to będziemy potrzebować minimalnych umiejętności posługiwania się elektronarzędziami. Zaczynamy. Na początku potrzebujemy Raspberry Pi, Ja osobiście użyłem Raspberry Pi 3 B+ ponieważ pozwala nam zagrać w gry z lepszą grafiką, nawet niektóre tytuły z PSP, jak i w miarę wygodnie korzystać z przeglądarki internetowej. Możecie jednak bez problemu korzystać ze słabszych wersji. Oprogramowanie naszej konsoli znajdziecie w tym linku Retropie możecie też użyć podobnej wersji oferującej praktycznie to samo z tego linku Recalbox Jednak w tym poradniku skupię się na tej pierwszej. Porównanie obu znajdziecie na Youtube. Na temat instalacji samego oprogramowania nie będę pisał bo jest to dość proste i wszystko znajdziecie w tym linku instalacja Powiem jedynie żeby oprócz konsoli nie zapomnieć o możliwości przejścia do Rasbiana, znajdziecie też filmy jak uruchomić dodatkowe konsole i wgrać kodi. O ile tutaj wszystko jest jasne, to trudniejsza częścią jest zabudowa naszej konsoli. Osobiście użyłem Starego automatu który znalazłem na śmietnisku .Nie była to maszyna do gier arcade, a tak zwany jednoręki bandyta, taki jak jak na zdjęciu numer 2 (niestety nie mam zdjęcia jak wyglądał przed). Jednak nie każdy ma do takiego dostęp dlatego wrzucam wymiary mojej, byście mogli wyciąć taką np ze sklejki i poskładać samemu. Jeśli jest to dla was za duży kawał mebla to znajdziecie w na Youtube czy w Google projekty trochę bardziej poręcznych, ale już nie robiących takiego wrażenia. Jako że ja swoją przerabiałem musiałem najpierw zrobić w naklejce na szybie wycięcie na monitor (17cali od starego komputera) i pozbyć się pozostałych w środku resztek starego systemu. Później musimy zamontować przyciski i joystick, są w pełni kompatybilne z konsolą. W moim przypadku zostawiłem 2 działające przyciski Start i Payout z oryginału. Mała rada by przedni panel zrobić otwierany, w przypadku drobnych modyfikacji nie musimy odsuwać szafy od ściany. Trzeba zadbać teraz o audio, u mnie sprawę załatwia mała wieża podłączona pod Raspberry, z oddzielnym wyjściem aux by podłączyć telefon. Otwory na głośniki należy wyciąć w płycie. Nie zapomnij o wnetylatorach i otworach wentylacyjnych. Ponieważ w zamkniętej obudowie potrafi się zrobić gorąco. Ładnie pochowaj, wyprowadź kable i zamontuj raspberry. W przednim panelu zamontowałem atrapę komputera dla wyglądu. Wyprowadź też kable usb by można było podłączyć pady. Ja schowałem je w miejscu na wypłatę monet. W schowku na dole jest szuflada na różne rzeczy jak i mała schładzarka do napojów. Do tego użyłem podobnego zestawu zestawu chłodzącego. Daję radę, ale bardziej do podtrzymywania zimnej temperatury, max udało mi się osiągnąć 13 stopni dlatego polecam użyć większego, trochę droższego zestawu. Schładzarkę należy czymś wyłożyć by zapewnić izolację i w miarę szczelnie zamknąć by nie uciekała nam temperatura. Ja użyłem starej karimaty ale są na pewno lepsze sposoby. Naszą szafę dobrze jest wyłożyć matami głuszącymi dla cichej pracy. Na końcu montujemy Ledy. Projekt można rozwijać o np. licznik monet, panel dotykowy i co tylko przyjdzie do głowy. W przyszłości mam zamiar poprawić lodówkę by działała lepiej, zmienić monitor i dodać trochę więcej przycisków. Mam nadzieję że projekt wam się podoba. Czekam na wasze sprzęty grające.
  24. Napiszę na wstępie IPhone ma swoich zwolenników i przeciwników, bardzo proszę by ten temat nie stał się polem dyskusji "Dlaczego Apple to zło a Android jest super". Posiadam Iphone i mam swoje przemyślenia ale nigdzie ich nie ujawnię by nie rozpętać burzy . A teraz przechodzimy do sedna Aplikacji do zarządzania smarthomem na system android jest mnóstwo, ale co jest dostępne dla użytkowników iOS? Apple udostępniło protokół HAP (HomeKit Accessory Protocol) aby móc połączyć urządzenia trzecich firm do aplikacji dom. Można samemu stworzyć odpowiedni kod który połączy nasze esp z aplikacją ale można wykorzystać tak zwany mostek który to zrobi za nas. Mostek komunikuje się z naszymi urządzeniami na esp za pomocą protokołu HTTP oraz z urządzeniam firmy Apple za pomocą HAP. Połączenie to jest od początku do końca szyfrowane. Ja przedstawię instalację, krótką konfigurację mostku oraz coś jeszcze Zapewne znacie sterownik rolety lub sterownik oświetlenia wykonany przeze mnie na popularnym module ESP8266. Postanowiłem lekko zmienić w nich oprogramowanie żeby były zgodne z homebridge. Ale nie będę opisywał tutaj zmian jakie dokonałem tylko sposób instalacji tak zwanego mostku na Raspberry PI Zero W. Wybrałem model z końcówką W po to żeby nie być ograniczonym kablem Ethernet. Dodatkowo dokupiłem sobie radiator i wiatraczek. Zapewne zastanawiacie się po co mi sam wentylator bez uchwytu, ale o tym w dalszej części . Aby uruchomić malinkę potrzebujemy karty micro sd (ja wybrałem wersje 32 gb), dobrej klasy gdyż to z niej będzie uruchamiany system więc im wolniejsza karta tym wolniej będzie się ładował system. Najnowszą wersję oprogramowania pobieramy ze strony Raspberry Pi dodatkowo potrzebujemy program Etcher aby nagrać system na kartę pamięci. Po wszystkim wkładamy kartę do malinki i podłączamy zasilanie. O tym jak skonfigurować możliwość połączenia ssh możecie przeczytać tutaj. Gdy mamy skonfigurowane ssh logujemy się na naszą malinkę. ssh pi@192.168.0.3 i podajemy hasło użytkownika pi (pamiętajcie że to jest adres ip raspberry pi u mnie Wy będziecie mieli inny , aby połączyć się z systemu windows potrzebny jest program putty). Teraz warto najpierw zaaktualizować system sudo apt-get update sudo apt-get upgrade Następnie możemy zająć się instalacją homebridge Sudo apt-get install curl curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs sudo apt-get install libavahi-compat-libdnssd-dev sudo npm install -g --unsafe-perm homebridge Homebridge powinien nam wystartować i powinniśmy dostać kod QR wraz z pinem używamy ich do połączenia. Teraz możemy zająć się instalacją pakietów. Możemy je znaleźć na tej stronie. Na przykład plugin do sterowania żarówką znajduje się pod tym linkiem. Przedstawiona jest również komenda za pomocą której należy zainstalować pakiet sudo npm install -g homebridge-http-lightbulb Dodatkowo jest opisana konfiguracja pliku config.json który znajduje się w katalogu ~/.homebridge/ Dzięki przykładowej konfiguracji widzimy jakie zapytania powinien realizować nasz sterownik. Dla żarówki są to Status Turn on Turn off Po skonfigurowaniu pliku config.json należy zresetować homebridge. Ja używam komendy sudo systemctl restart homebridge Za każdym razem kiedy wyłączymy malinkę i ją uruchomimy homebridge sam wystartuje. Zaraz po instalacji homebridge zainstalowałem plugin, który wystawia stronę dzięki której mamy dostęp do pliku config.json bez potrzeby używania terminala. Dodatkowo możemy dokonać aktualizacji oprogramowania, zresetować system czy zobaczyć aktualne wykorzystanie procesora. Źródło https://www.npmjs.com/package/homebridge-config-ui-x Możemy również skonfigurować sobie podgląd logów. Źródło https://www.npmjs.com/package/homebridge-config-ui-x Dodatkowo jest tam wyszukiwarka pakietów NPN do instalacji. Źródło https://www.npmjs.com/package/homebridge-config-ui-x A teraz czas na sposób montażu wentylatora Z racji tego że w końcu zakupiłem sobie wymarzoną Anetkę to zaprojektowałem obudowę do RPI zero. Dodatkowo nie chciałem podpinać wtyku usb gdyż zajmuje ono dużo miejsca pod długości oraz łatwo bym mógł uszkodzić gniazdo. Sprawdziłem że pod gniazdem na RPI są dwa pady jeden z nich to minus a drugi to plus przylutowałem w to miejsce dwa kabelki które następnie poprowadziłem do wtyku dc. Następnie zrobiłem sobie kabelek usb typ A na wtyk dc i takim kabelkiem zasilam malinkę. Jeśli macie jakieś problemy z instalacją albo pytania to piszcie śmiało będę starał się pomagać Aha i jeśli dodacie nowe urządzenie to wystarczy, że zrestartujecie homebridge i pojawi się ono w aplikacji dom w iOs.
  25. Witam, bardzo fajny poradnik. Dołożyłem sobie do mojego domoticza 4 czujniki DS18B20, jednak wszystkie 4 zawyżają temperaturę o około 2-3 stopnie. Czy jest jakaś szansa żeby to skorygować w domoticzu?
×
×
  • Utwórz nowe...