Skocz do zawartości

Przeszukaj forum

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

  • 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 - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY 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

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

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


Imię


Strona

Znaleziono 8 wyników

  1. Witam wszystkich konstruktorów, robotyków, majsterkowiczów. Pierwszy raz za swoją "karierę" elektronika-hobbysta zdecydowałem wziąć udział w konkursie walk robotów minisumo, zacząwszy od analizy projektów z zawodów zauważyłem że większość robotów posiada analogowe czujniki firmy Sharp. Z doświadczenia wiem że są inne czujniki odległościowe takie jak laserowe VL53l0x albo ultradźwiękowe HC-SR04 i chyba są nawet tańsze od sharpów. Z jakiego powodu konstruktorzy decydują się na użycie sharpów? Domyślam się że analiza danych z analogowych czujników jest prostsza od cyfrowych, krótszy czas reakcji. Próbowałem znaleźć dyskusję na ten temat na forumach ale nic ciekawego nie znalazłem. Za wcześnie dziękuję za zaangażowanie w temat.
  2. Stacja pogodowa GB521 pokazuje mi 20% wilgotności powietrza, gdy czujnik BME280 używany z różnymi bibliotekami pokazuje mi wartość większą o 10-15%. BME280 był kupiony na Aliexpress i obecnie mam tylko jedną jego sztukę. Nie wiem czy mógłby być az tak kiepski/wadliwy, że pokazywałby mi tak zawyżone wartości. Rozkręciłem stację pogodową w celu zobaczenia co tam za czujniki siedzą w środku. Być może one są po prostu kiepskie. Jak się domyślam - czujnik wilgotności to ten biały z literką L, a temperatury na lewo od niego. Nie posiadam żadnego innego czujnika/miernika/stacji pogodowej, aby móc porównać pomiary. Jak myślicie - czy to stacja pogodowa ma kiepski czujnik wilgotności czy może mam wadliwy BME280? // Dodam, że mieszkam w bloku dość wysoko i ogólnie jest tu dość sucho.
  3. ciekawostka elektronika w służbie badania pogody witajcie chciałem bam pokazać jak wyglądają pomiary (w uproszczeniu ) temperatury i innych parametrów atmosfery codziennie w Polsce obecnie na dzień pisania postu codziennie 2 loty podstawowe 12:00utc i 24:00utc i koło 6-8:00 LT i koło 18:00 LT dodatkowe loty tak zwane burzowe przy jakiś np mocniejszych i gwałtowniejszych zjawiskach meto z 3 miejsc + wojsko + inne miejsca na świecie i Europie są poszczane balony stratosferyczne z tak zwaną sondą pomiarową zazwyczaj posiadające czujnik temperatury i wilgotności ale czasem np Niemcy mają dodatkowy moduł ciśnienia atmosferycznego a czasami są puszczane sondy nazwijmy to specjalne np z czujnikiem pomiaru ozonu lub z miejscowości Lindenberg w Niemczech jest wysyłana sonda nazwijmy to testowa (krowa) za którą jedzie zazwyczaj pracownik odpowiednika niemieckiego instytutu meteorologii tak zwana krowa to jest bliżej nie określona konstrukcja składająca się np z wielu sond lub czujników w fazie badań testowych balon zazwyczaj osiąga górną wartość wznoszenia wynoszącą 32km +- kilka set metrów po czym pęnka i spada w Polsce nie posiada spadochronu lecz czasem balon się tylko roszczeni i powoduje bycie spadochronem a np Niemcy wszystkie sondy zaopatrują w spadochron polska po skończonym radio sondażu traktuje traktuje sondę jako odpad i nie interesuje ich to co się z tym dzieje jest grupa osób co je zbiera np ja przykład ja wygląda sonda w tym przypadku VAISALA RS41-SG za jakiś czas może uzupełnię ten post o więcej typów sond np RS92 lub M20 które od nowego roku w Polsce zastąpią RS41 ewentualnie o wojskowe sondy (polskie) z serii pilosonde lub niemieckie z serii FDM ja z upolowaną sondą z wrocławskiego instytutu meteorologii 2 minuty po upadku
  4. Arduino i dźwięki? Nic prostszego! Ten projekt jest idealny dla osób, które dopiero rozpoczynają swoją przygodę z Arduino. Nie pomoże on raczej w życiu i nie jest rzeczą bez której nie można się obejść, ale z pewnością pomoże zrozumieć działanie czujnika odległości oraz dźwięków w tej popularnej płytce. Będziemy potrzebować: Arduino UNO Rev3 Płytka prototypowa Czujnik odległości Kable połączeniowe Potencjometr obrotowy 1kΩ (do regulowania głośności) Głośnik lub buzzer (lepiej działa na głośniku) Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » UWAGA! Jeżeli program nie działa ci prawidłowo skopiuj cały kod do Worda, a następnie sprawdź czy nie ma jakiś np. twardych spacji. Czujnik-------------------------------------------------------------------------------------------------------------------------- Zacznijmy od najważniejszej rzeczy czyli zamontowania czujnika odległości na płytkę prototypową. Tak powinno to wyglądać. Większej filozofii w tym nie ma podłączamy masę czujnika (GND) do masy na płytce (GND), Vcc do +5V, trig do pinu nr. 12, ,a echo do pinu nr. 11. Teraz zaprogramujmy odczytywanie odległości, będziemy ją wyświetlać na monitorze portu szeregowego. Najpierw musimy zdefiniować numery pinów które połączone są z trig i echo na czujniku. #define trigPin 12 #define echoPin 11 Można to zrobić tak lub tak: const int trigPin= 12; const int echoPin= 11; Ja wybiorę pierwszą opcję zapisu. Kolejna rzeczą jaka powinniśmy zrobić jest zdefiniowanie trigPin i echoPin jako wyjście i wejście w funkcji setup(). void setup() { Serial.begin(9600); //rozpoczęcie wyświetlania na porcie szeregowym pinMode(trigPin, OUTPUT); //wyjście pinMode(echoPin, INPUT); //wejście } Okej, mamy już wszystko zdefiniowane więc nie ma co przedłużać i czas zabrać się za nasz czujnik. Stwórzmy więc funkcję która będzie obsługiwać czujnik. Nazwiemy ją odleglosc(). Co powinna ta funkcja zawierać? Przede wszystkim odczyt odległości w cm, na pewno przyda też się wypisywanie na port szeregowy już zamienionej na cm odległości. Coś jeszcze? Na razie to tyle. A więc zabierzmy się do pracy! Pierwsze co musimy zrobić- stworzyć funkcję odleglosc(), w której będziemy sprawdzać odległość od najbliższego obiektu który jest w zasięgu czujnika: int odleglosc() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); } W taki prosty sposób możemy odczytać odległość z naszego czujnika. Teraz czas zamienić nasze wyniki na cm, na razie nigdzie ich nie widzimy ale wkrótce to zrobimy. Aby zamienić wynik naszego pomiaru na cm musimy podzielić ten wynik przez pewną liczbę, nie musimy teraz zagłębiać się jak ta liczba dokładnie działa ani co to za liczba, wystarczy, że zapiszemy poniższy kod w funkcji odleglosc(). czas = pulseIn(echoPin, HIGH); dystans = czas / 58; Teoretycznie nasz program działa, ale nie widzimy wyników, nie możemy być pewni, że działa, a więc dopiszmy do naszej funkcji fragment programu, dzięki któremu nasze pomiary wypiszemy na monitorze portu szeregowego. Serial.print(dystans); Serial.println(" cm"); Cała funkcja powinna prezentować się tak: int odleglosc() { long czas, dystans; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); dystans = czas / 58; Serial.print(dystans); Serial.println(" cm"); } No i już ostatni krok przy czujniku, czyli w funkcji loop wywołanie naszej funkcji odleglosc(): void loop() { odleglosc(); delay(500); } Muzyka-------------------------------------------------------------------------------------------------------------------------- No to tak jak ostatnio zacznijmy od połączenia wszystkiego na płytce stykowej. Najpierw na płytkę dodam potencjometr, ja mam już w obudowie, ale można użyć też takiego zwykłego tag wygląda po podłączeniu: Teraz przylutujmy przewody połączeniowe do przejściówki od głośnika. Jeśli nie masz umiejętności lutowania najlepiej użyj buzzera. Niebieski kabel to masa (GND) czyli jak już się pewnie domyślacie wpinamy go do GND na płytce Arduino nad pinem 13, biały kabel natomiast podłączamy do pomarańczowego kabla odprowadzonego od buzzera. Kolejny kabel łączymy z drugim kablem od buzzera i pinu numer 9. No to czas napisać funkcję która będzie puszczać muzykę piratów z Karaibów. Nuty oczywiście wzięłam ze strony Arduino, ale muzykę napisałam sama, co jest w zasadzie bardzo proste jeśli kiedykolwiek grało się na jakimś instrumencie, a nawet jeśli nie to na internecine znajdziecie masę piosenek z nutami literowymi które wystarczy odpowiednio zapisać w programie. Napiszmy więc funkcję muzyka() która będzie przyjmowała argument odleglosc czyli zapiszemy to następująco: void muzyka(int odleglosc){ } Okej, co dalej, przypomnijmy sobie co ma robić ta funkcja- puszczać muzykę. Żeby to zrobić musimy najpierw zrozumieć działanie biblioteki pitches.h której będziemy używać. A więc biblioteka ta działa następująco- definiujemy każdą nutę (a raczej mamy już zdefiniowaną) poprzez numer np. #define NOTE_E6 1319. Przejdźmy teraz do najważniejszej rzeczy czyli jak jej używać. Pod ikonką monitora portu szeregowego w Arduino IDE widzimy trójkąt zwrócony w dół, klikamy w niego, a następnie wypieramy 'nowa zakładka' i nadajemy jej nazwę pitches.h. Teraz jak już utworzy nam się nowa zakładka, wchodzimy na stronę: https://gist.github.com/mikeputnam/2820675 i kopiujemy to, co znajduje się w programie pitches.h. Wklejamy to do naszej nowej zakładki, teraz wystarczy na górze naszego głównego programu napisać #include "pitches.h". Teraz zdefiniujmy sobie kilka ważnych zmiennych czyli nuty a, c, d, e, f, g. int a = 440; int c = 262; int d = 294; int e = 330; int f = 349; int g = 392; Dźwięki mogą być krótkie lub dugite więc zdefiniujmy także zmienne k- krótkie i dl- długie. int k = 125; int dl = 250; Okej, przejdźmy do pisania muzyki. Będziemy potrzebować funkcji tone(). Wydaje ona dźwięk na pinie którego numer zapiszemy na pierwszym miejscu za nawiasem, żeby jednak wydał jakiś dźwięk, na drugim, miejscu za nawiasem musi być zapisana nuta którą zdefiniowaliśmy np. tone(9,a). Najpierw jednak, chcemy, żeby muzyka grała tylko wtedy kiedy drzwi są w odległości 18cm od czujnika, czyli są otwarte, potrzebujemy więc operatora if. void muzyka(int odleglosc){ if (odleglosc > 1 && odleglosc < 18) { //tu będzie muzyka } noTone(9); // zatrzymanie muzyki } Jeśli odległość będzie większa od 1 i mniejsza od 15 to puść muzykę, jeśli nie, nie graj nic lub jeśli muzyka właśnie była grana przestań ją grać. Teraz wystarczy wkleić w w miejsce gdzie będzie muzyka, właśnie muzykę. Ja już to zrobiłam, i nie ma co tego tłumaczyć ponieważ wystarczy tak jak już wcześniej pisałam używać funkcji tone() i delay()- w delay wpisujemy trwanie krótkie lub długie czyli k lub dl. void muzyka(int odleglosc){ if (odleglosc > 1 && odleglosc < 18) { tone(9, a); delay(k); tone(9, c); delay(k); tone(9, d); delay(dl); tone(9, d); delay(dl); tone(9, d); delay(k); tone(9, e); delay(k); tone(9, f); delay(d); tone(9, f); delay(k); tone(9, f); delay(k); tone(9, g); delay(k); tone(9, e); delay(dl); tone(9, e); delay(dl); tone(9, d); delay(dl); tone(9, c); delay(k - 25); tone(9, c); delay(k - 25); tone(9, d); delay(dl); tone(9, a); delay(k); tone(9, c); delay(k); tone(9, d); delay(dl); tone(9, d); delay(dl); tone(9, d); delay(k); tone(9, f); delay(k); tone(9, g); delay(dl); tone(9, g); delay(dl); tone(9, g); delay(k); tone(9, a); delay(k); tone(9, 466); delay(dl); tone(9, 466); delay(dl); tone(9, a); delay(k); tone(9, g); delay(k); tone(9, a); delay(k); tone(9, d); delay(dl); tone(9, d); delay(k); tone(9, e); delay(k); tone(9, f); delay(dl); tone(9, f); delay(dl); tone(9, g); delay(dl); tone(9, a); delay(k); tone(9, d); delay(k); tone(9, f); delay(k); tone(9, e); delay(dl); tone(9, e); delay(dl); tone(9, f); delay(k); tone(9, d); delay(k); tone(9, e); delay(dl); } noTone(9); } Już końcówka, wystarczy, że do funkcji setup() dodamy fragment kodu ustawiający pin numer 9 (ten do którego podpięliśmy głośnik) jako wyjście: void setup() { pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście pinMode(echoPin, INPUT); //a echo, jako wejście pinMode(9, OUTPUT);//<====== } Ostatnia rzecz, czyli wywołanie funkcji muzyka w funkcji odleglosc() muzyka(dystans); Tak prezentuje się wykonany projekt: #define trigPin 12 #define echoPin 11 #include "pitches.h"; int a = 440; int c = 262; int d = 294; int e = 330; int f = 349; int g = 392; int k = 125; int dl = 250; void setup() { pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście pinMode(echoPin, INPUT); //a echo, jako wejście pinMode(9, OUTPUT); } int odleglosc() { long czas, dystans; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); dystans = czas / 58; Serial.print(dystans); Serial.println(" cm"); muzyka(dystans); } void muzyka(int odleglosc){ if (odleglosc > 1 && odleglosc < 18) { tone(9, a); delay(k); tone(9, c); delay(k); tone(9, d); delay(dl); tone(9, d); delay(dl); tone(9, d); delay(k); tone(9, e); delay(k); tone(9, f); delay(d); tone(9, f); delay(k); tone(9, f); delay(k); tone(9, g); delay(k); tone(9, e); delay(dl); tone(9, e); delay(dl); tone(9, d); delay(dl); tone(9, c); delay(k - 25); tone(9, c); delay(k - 25); tone(9, d); delay(dl); tone(9, a); delay(k); tone(9, c); delay(k); tone(9, d); delay(dl); tone(9, d); delay(dl); tone(9, d); delay(k); tone(9, f); delay(k); tone(9, g); delay(dl); tone(9, g); delay(dl); tone(9, g); delay(k); tone(9, a); delay(k); tone(9, 466); delay(dl); tone(9, 466); delay(dl); tone(9, a); delay(k); tone(9, g); delay(k); tone(9, a); delay(k); tone(9, d); delay(dl); tone(9, d); delay(k); tone(9, e); delay(k); tone(9, f); delay(dl); tone(9, f); delay(dl); tone(9, g); delay(dl); tone(9, a); delay(k); tone(9, d); delay(k); tone(9, f); delay(k); tone(9, e); delay(dl); tone(9, e); delay(dl); tone(9, f); delay(k); tone(9, d); delay(k); tone(9, e); delay(dl); } noTone(9); } void loop() { odleglosc(); delay(100); } Program gotowy, wszystko gotowe, no prawie wszystko zostało tylko podłączenie głośnika: i zrobione! przetestuj najpierw z ręką, a potem połóż przy drzwiach. Ja podłączam Arduino do telefonu, przez przejściówkę, ale wy możecie użyć czegoś innego. Tak powinien działać gotowy projekt: Mam nadzieję, że poradnik się przydał!
  5. Witam, Zastanawiam się czy można gdzieś nabyć drogą kupna Soniczny Sensor 3D (Qualcomm 3D Sonic Sensor: ultrasonic security solution I Qualcomm) Drugie pytanie to: Gdzie kupujecie elementy elektryczne? (ja; Sklep Texas Instrument i TME) Zaznaczam, iź nie jestem doświadczonym elektronikiem. Jestem po kursach na Forbocie. Jestem na wylocie z technikum informatycznego.
  6. 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.
  7. Witam, jaki jest najlepszy sposób na przesłanie danych z czujnika (załóżmy temperatury, Dallas) do Arduino. Chciałbym bezprzewodowo wysłać dane z czujnika do Arduino żeby później przekazać je Raspberry Pi. Czy mógłby mi ktoś konkretnie wytłumaczyć jak mógłbym zrobić to z ESP8266, lub NRF24l01?
  8. Elektroniczny Multitool Jak się zaczęło? Ano zaczęło się od tego, że zanabyłem sobie hulajnogę elektryczną. Długo i sumiennie przeglądałem różne recenzje, opisy, wertowałem informacje, aż w końcu zdecydowałem się na Airwheel Z5 Strong, którą na marginesie polecam. Pomimo wielu zalet - w tym kilku rozwiązań unikalnych w tym segmencie urządzeń, jak na przykład wygodne podesty albo łatwo wymienny akumulator - ma jednak pewną niewielką wadę: brak wyświetlacza informującego na przykład o bieżącej prędkości czy o przejechanej drodze. Ponieważ od jakiegoś czasu bawię się Arduino, stwierdziłem, że stosunkowo łatwo powinno dać się skonstruować taki licznik samodzielnie - wystarczy przecież zastosować GPS, który uniezależnia mnie od rozwiązań zastosowanych w hulajnodze. Zacząłem więc powoli kolekcjonować wszystkie niezbędne komponenty. Wyświetlacz Zacząłem trochę nietypowo, bo od wyświetlacza. Zrobiłem już kilka projektów na wyświetlaczach znakowych, ale - oczywiście - nie dają one takich możliwości, jak solidny, kolorowy, a najlepiej dotykowy wyświetlacz. Mój wybór padł na dotykowy wyświetlacz 2.4", pracujący z rozdzielczością 320x240 i komunikujący się przez popularny protokół SPI. Mój wygląda nieco inaczej niż ten w sklepie, ale różnią się płytką z kontrolerem, wyświetlacz jest ten sam. Kontroler Obejrzałem sobie sporo filmików dotyczących podłączania wyświetlaczy do Arduino i uderzyło mnie to, że w większości przypadków liczba klatek na sekundę osiągała bardzo często wartości jednocyfrowe. Jest to zrozumiałe - wszelkie Uno, Leonardo, Micro i tak dalej są taktowane ze stosunkowo małymi częstotliwościami, a przynajmniej zbyt małymi, by osiągnąć zadowalające rezultaty graficzne. Dlatego tym razem porzuciłem całę rodzinę *ino na rzecz chyba nieco mniej znanego kontrolera, Teensy 3.5. Kosztuje swoje, ale dostajemy naprawdę ciężką artylerię: 120 Mhz, 512 kB Flash, 192 kB RAMu, 62 piny, zintegrowany zegar czasu rzeczywistego (trzeba go tylko zasilić bateryjką CR2032), czytnik kart microSD i oczywiście możliwość programowania przez micro USB, bez konieczności stosowania programatorów. Polecam, korzystanie z takiego kombajnu to naprawdę czysta przyjemność. GPS Ta decyzja była stosunkowo prosta, zdecydowałem się na rozwiązanie ekonomiczne i kupiłem prosty GPS komunikujący się przez UART (szeregowo). Przyznam szczerze, że po zakupie Teensy trochę szkoda było mi poświęcić taki świetny kontroler li tylko na licznik do hulajnogi. Dlatego zanabyłem jeszcze popularny czujnik pogodowy BME280 i stwierdziłem, że w czasie, gdy nie będę korzystał z urządzenia jako licznika, zrobię z niego małą stację pogodową. Na wyposażeniu urządzenia znalazł się również czujnik położenia MPU9250, bo zamierzałem napisać rejestrator pochyłości podłoża (i ewentualnie również jego jakości), ale w końcu z tego pomysłu zrezygnowałem. Być może za jakiś czas dopiszę sobie do urządzenia cyfrową poziomicę. Konstrukcja Zacząłem od płytki prototypowej, która błyskawicznie zamieniła się na totalnie zagmatwaną pajęczą sieć przewodów kydexowych. Myślałem na początku, że poprzestanę na niej, ale plątanina ta wyglądała tak dramatycznie, że z pomysłu w końcu zrezygnowałem, traktując go tylko jako prototyp. Sprawdziłem, czy wszystkie urządzenia będą pracowały prawidłowo i generalnie każdy moduł udało mi się uruchomić i pobrać z niego dane, z tym wyjątkiem, że BME280 i MPU9250 odmawiały współpracy podłączone do jednej szyny I2C. Szczęśliwie Teensy oferuje tych szyn chyba z pięć, więc przepiąłem BME na inną i wszystko wstało bez problemu. Kiedy wszystko działało, siadłem do Eagle'a i zaprojektowałem PCB, który miał zastąpić tę nieszczęsną płytkę prototypową. W Polsce jest kilka firm, które wykonują nawet pojedyncze sztuki takich płytek, a moją zamówiłem w firmie Satland Prototype. Musiałem poczekać dwa tygodnie, ale w końcu płytka doszła pocztą i mogłem zacząć lutować. Jakiś czas temu wyposażyłem się w drukarkę 3D, więc po zlutowaniu (i uruchomieniu) wszystkiego siadłem do Fusion 360 i zaprojektowałem obudowę na całe urządzenie. Zadbałem o to, żeby BME został odseparowany wewnętrzną ścianką od reszty urządzenia, bo ekran LCD potrafi się grzać i zafałszowuje odczyty. GPS zamocowałem w osobnym miejscu, wsunięty w odpowiedni slot i zabezpieczony ścianką z drugiej strony, ponieważ niestety wersja, którą kupiłem, nie posiadała żadnych otworów montażowych. Płytka z komponentami siedzi w przygotowanym na jej wymiary wgłębieniu i jest ściśnięta pomiędzy dwiema częściami obudowy, więc nie ma możliwości się przesunąć. Do tego otwór na wyświetlacz, siateczka w przedniej ściance przepuszczająca powietrze do czujnika pogodowego i tyle. Słowo komentarza, bo pewnie padnie takie pytanie: schemat dotyczy nowej wersji płytki z usuniętym radyjkiem NRF, na zdjęciu jest starsza wersja - szczegóły na końcu artykułu. Programowanie Proces programowania musiałem rozłożyć w czasie, ale projekt szedł powoli do przodu. Zacząłem od części pogodowej, ogrom miejsca w programowalnej pamięci kontrolera pozwolił mi poszaleć, więc przygotowałem sobie w C++ klasy odpowiedzialne za obsługę interfejsu użytkownika, spięcie różnych modułów w jedną całość, wyświetlanie grafiki i tak dalej. Również i tym razem dałem się ponieść - nie mogłem znaleźć w Internecie dobrego programu do generowania czcionek w formacie zrozumiałym dla biblioteki ILI9341_t3 przygotowanej przez twórcę Teensy (działa ona szybciej od regularnej biblioteki), a zależało mi na czcionce siedmiosegmentowej - takiej trochę "retro" (widać na screenach). Zapytałem więc Paula o kilka rzeczy, siadłem któregoś wieczoru i wyrzeźbiłem edytor czcionek dla ILI9341_t3. Mój prosty programik może się podobać lub nie, ale najlepszą alternatywą jaką znalazłem jest gigantyczne makro w Excelu, więc sami rozumiecie... Dużym odkryciem było dla mnie, że na platformę Arduino można już programować w Visual Studio Code - Arduino Studio jest wciąż wymagane (bo zawiera wszystkie narzędzia potrzebne do zbudowania programu dla kontrolerka), ale tak naprawdę wszystkie operacje - budowanie, wrzucanie na płytkę, monitor portu szeregowego - można już obsłużyć bezpośrednio w tym świetnym środowisku. Tylko że... niestety Teensy nie jest całkowicie zgodne z Arduino i do budowania na tę platformę potrzebny jest dodatkowy programik, Teensyduino, który nieco modyfikuje Arduino Studio i nie jest kompatybilny z VS Code. Tym niemniej, większość developmentu zrealizowałem w tym ostatnim, jedynie budując i wrzucając aplikację na urządzenie przy pomocy AS. Zastosowałem też własny mechanizm podwójnego buforowania: cały obraz buduję w RAMie i wyświetlam go hurtem w jednym kroku. Ogranicza to trochę lag związany z wyświetlaniem poszczególnych elementów, opóźnienie wciąż jest, ale jest znacznie mniej zauważalne. Kosztowało mnie to prawie połowę pamięci RAM, ale z uwagi na to, że pozostałe komponenty aplikacji prawie go nie zużywają, mogłem sobie na to pozwolić. Źródła trzymam na Gitlabie, chcecie obejrzeć - sklonujcie sobie repo. Efekt W chwili obecnej płytka w trybie stacji pogodowej wyświetla klasycznie: temperaturę, ciśnienie i wilgotność, a także wykresy: bieżący (jasna linia - jeden piksel to 15 sekund) i historia - 1h, 8h lub 24h wstecz.Tryby można przełączać po dotknięciu ekranu - pojawia się wtedy proste menu. Aplikacja wyposażona jest w wygaszacz ekranu, który zapobiega wypaleniu pikseli - szczególnie, że w trybie stacji pogodowej bardzo dużo z nich mogłoby być na to narażone. Po 30 sekundach ekran się wyłącza (wygasza), a włącza ponownie po dotknięciu. Niestety nie udało mi się wyłączyć jego podświetlenia - doczytałem, że w tym ekranie programowo nie da się tego zrobić. Szkoda. W trybie GPS wyświetlane są na razie podstawowe informacje wczytane z odbiornika: prędkość, wysokość n.p.m., kierunek jazdy, liczba satelit, z których odczytywane są dane oraz położenie geograficzne - długość i szerokość. Za jakiś czas dopiszę pewnie tryb "rowerowy", czyli przebyta droga, średnia i maksymalna prędkość i tak dalej. Aplikację mam napisaną na tyle modularnie, że teraz taki moduł mogę już sobie praktycznie niewielkim kosztem poskładać "z klocków". Problemy Człowiek uczy się na błędach, a mądry człowiek na błędach innych. Podczas rozwijania tego projektu nadziałem się na mnóstwo problemów, więc podzielę się moimi rozwiązaniami - być może komuś oszczędzi to czasu i nerwów. Po pierwsze, zasilanie - w dwóch odsłonach. Pierwsza odsłona - pierwotnie na płytce znajdowało się jeszcze radyjko NRF24, ponieważ jakiś czas temu zbudowałem sobie "satelitę" - małą płytkę z czujnikiem temperatury i wilgotności zasilaną z bateryjki CR2032: miałem nadzieję, że w trybie stacji pogodowej urządzenie będzie również ściągało informacje z tego źródła. Testy bez GPSu wypadły pozytywnie - to widać na zdjęciach - ale po podłączeniu wszystkiego i włączeniu zasilania, ekran rozbłysł na chwilę, a potem powolutku przygasł i zgasł całkowicie. Podejrzewałem od razu NRF, chciałem go rozlutować, ale w trakcie tego procesu oderwałem jeden pad na płytce, więc nie miałem już możliwości łatwego sprawdzenia, czy to on jest winien. Żeby uniknąć dalszych uszkodzeń, podrzuciłem płytkę ojcu, który w pracy ma wysokiej klasy rozlutownicę, a ja zaprojektowałem w międzyczasie drugą, tym razem już bez NRFa. Warto zawsze sprawdzić, czy uda się zasilić wszystkie komponenty - ja leniwie pociągnąłem zasilanie wszystkiego z płytki, a mogłem przecież wstawić na płytkę port microSD i pociągnąć dodatkowe ścieżki bezpośrednio z niego - wtedy obciążyłbym zasilacz (który pewnie nawet by nie sapnął), a nie samą płytkę. Druga kwestia - hulajnoga, którą kupiłem, ma w baterii wyjście USB - można (według instrukcji) doładowywać sobie na przykład komórkę (traktować akumulator jako powerbank). Również do tego portu podłączana jest latareczka, którą można sobie włączyć podczas jazdy. Niestety podczas prób terenowych okazało się, że przysiad napięcia podczas rozpędzania jest tak duży, że płytka gaśnie albo się zawiesza. Musiałem więc zasilić ją z osobnego powerbanku, w przyszłości pomyślę nad zasileniem płytki z osobnego akumulatora albo po prostu baterii. Teraz BME280 - małe ostrzeżenie. Układzik jest rewelacyjny, malutki i stosunkowo dokładny... ale się grzeje! Potrafi rozgrzać się na tyle, że zafałszowuje informacje o temperaturze o 1.5-2 stopnie. Rozwiązanie (proponowane nawet przez Boscha) polega na zmniejszeniu dokładności pomiaru (urządzenie może działać w trybie oversampling, czyli robi np. 8 pomiarów i uśrednia - należy to wyłączyć), wyłączeniu filtrowania (które również poprawia jakość pomiarów), przełączyć się w tryb "forced" - wtedy płytka robi pomiar tylko na życzenie - i ograniczyć pomiary do jednego na minutę (!). Ja nie ograniczyłem się tak bardzo, pomiary mam co 15 sekund, ale mimo wszystko układ się grzeje i na początku na wykresie widać delikatny skok temperatury, który po chwili się stabilizuje. Jest również prawdopodobne, że grzeje się nie tyle BME, co wyświetlacz - podobny problem miałem w innej stacji pogodowej z wyświetlaczem znakowym. Tam temperatura skakała do góry o kilka stopniu po uruchomieniu. Kwestia estetyki - nie zadbałem o to, żeby schować obramowanie ekranu z widocznymi ścieżkami panelu dotykowego. W innych projektach nie popełniam już tego błędu, widoczny jest sam ekran (wygląda to o niebo lepiej). Ogólnie jednak jestem zadowolony, płytka jest rozwojowa, a nowe funkcjonalności mogę dodawać programowo, więc podejrzewam, że wzbogacę ją jeszcze o kilka dodatkowych trybów pracy.
×
×
  • Utwórz nowe...

Ważne informacje

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