mlodedrwale - arcyciekawy i przewspaniały blog o wszystkim

Archiwum Kategorii: ‘Wszystkie’

433 MHz DIY Wszystkie

W poprzednim wpisie opisałem łamanie protokołu termometru ThermoPro TP-08. W tym umieszczam kawałek kodu, pozwalający skorzystać ze zdobytej wiedzy!

Kod wypróbowałem z odbiornikiem MX-RM-5V, który jest naprawdę słaby, zasięg całości w pomieszczeniu to ledwie kilka metrów, myślę że odbiornik superheterodynowy sprawdził by się lepiej (sprawdzę jak tylko listonosz przyniesie).

Oto schemat podłączenia do Arduino nano:

Schemat połączenia arduino i odbiornika 433MHz

Antena o długości ok 170mm jest konieczna.

Kod korzysta z biblioteki TimerOne, odpowiedzialnej za generowanie przerwań z timera1.

Dane przesyłane są do terminala w następującym formacie:

Temp1: 20.70; Temp2: 20.40
Temp1: 20.60; Temp2: 20.40
Temp1: 20.70; Temp2: 20.40
Temp1: 20.60; Temp2: 20.40
Temp1: 20.70; Temp2: 20.40

Aby z nich wygodnie skorzystać, użyłem terminala RealTerm z opcją logowania do pliku wraz ze znacznikiem czasu, następnie dane wyeksportowałem do Excela i utworzyłem wykres temperatury w funkcji czasu dla przebiegu zacierania mojego Oatmeal Stouta:

Wykres temperatury w funkcji czasu, temperatyre and time chert

I to by było na tyle dzisiaj!

Tymczasem!

 


433 MHz DIY Wszystkie

 

Dzisiaj wpadł mi w ręce termometr ThermoPro TP-08, to bardzo fajne narzędzie z dwoma sondami pomiarowymi oraz co najciekawsze – przesyłaniem mierzonych temperatur z czujnika do „bazy” za pośrednictwem sygnału radiowego 433 MHz. Termometr bezprzewodowy ThermoPro TP-08Niestety baza nie ma ani możliwości podłączenia do komputera ani innego logowania danych, co jest niezmiernie bolesne kiedy uwielbia się różnego rodzaju wykresy, logi itp. Z tego powodu postanowiłem dobrać się do danych wykorzystując dodatkowy odbiornik na 433 MHz, aby to zrobić musiałem poznać protokół komunikacyjny jakim posługuje się termometr i o tym będzie dzisiejszy wpis.

Zacząłem od pozyskania danych do analizy. Większość tanich urządzeń działających na 433MHz działa w modulacji OOK czyli ON – OFF Keying najprostszej z możliwych modulacji polegającej po prostu na włączaniu i wyłączaniu fali nośnej. Odbiornik ma jedną linię „data” która w zależności od tego czy w danym momencie nadawana jest nośna, znajduje się w stanie wysokim bądź niskim.

Jest wiele sposobów na podejrzenie danych do analizy, można to zrobić za pomocą odbiornika SDR, taniego odbiornika 433 MHz podłączonego do karty dźwiękowej itp. Ja skorzystałem z analizatora stanów logicznych, który kupiłem kiedyś z myślą, że może się kiedyś przydać (w końcu się przydał!). Jako software użyłem sigroka z PulseView.

Analizator stanów logicznych, odbiornik 433MHz, płyrka stykowa i termometr bezprzewodowyDo analizatora podłączyłem najtańszy, parszywej jakości odbiornik MX-RM-5V, który akurat w tym zastosowaniu spisał się wyśmienicie. Podłączyłem sondę temperatury do jednego wejścia termometru i uruchomiłem PulseView.

Sigrok PulseView Screenshot

Jak widać pulsogram (chrome podświetla uparcie słowo „pulsogram” na czerwono, czyli pewnie takie nie istnieje) jest bardzo czytelny, widać preambułę, składającą się z bardzo krótkiego impulsu i następującej po nim dłuższej przerwy. Następnie przesyłane są trzykrotnie te same dane oddzielone dłuższą przerwą.

Po przybliżeniu łatwo zorientować się jak są zakodowane bity:

Stan wysoki ma zawsze ~500 us i oddziela krótkie (500us) lub długie (1500us) przedziały stanu niskiego. Przyjąłem jak się później okazało całkiem słusznie, że krótsze niskie impulsy to „1” a dłuższe to „0”. Mając tą wiedzę zabrałem się do transkrypcji pulsogramów na zapis zerojedynkowy. Zrobiłem kilka różnych pomiarów dla różnych temperatur – im więcej danych tym lepiej, przynajmniej do pewnego momentu.

I wygląda to tak:

Na pierwszy rzut oka widać, że pierwszy bajt, jest zawsze niezmienny, kierując się wrodzoną intuicją, uznałem go za adres urządzenia nadawczego. Drugi bajt zmienia się. trzeci i czwarty pozostają niezmienne. A piąty znowu się zmienia, ale piąty bajt jako że jest na końcu uznałem za jakąś sumę kontrolną i postanowiłem skupić się na początku na trzech środkowych bajtach.

Najpierw sprawdziłem czy jest jakaś korelacja między drugim bajtem a temperaturą wskazywaną przez termometr:

10000110 = 134 // 19st
10001100 = 140 // 20st
10011011 = 100 // 21st
10100010 = 155 // 22st
10110101 = 181 // 24

No i widać że im wyższa temperatura tym drugi bajt ma większą wartość. Na razie jest nieźle.

Termometr obsługuje temperatury od 0 do 300 stopni z rozdzielczością jednego stopnia, to się oczywiście w jednym bajcie nie zmieści, pora odkryć który bajt to dalsza część danych. Odłączyłem sondę od wejścia nr 1 i podłączyłem do wejścia 2:

01010011 10000110 00011101 01001000 00111011 // 19st - podłączony tylko pierwszy termometr
01010011 01001000 11010001 10000110 11011011 // 19st - podłączony tylko drugi termometr

Teraz widać, że miejscami zamieniły się bajt drugi z czwartym oraz pierwsza połowa trzeciego bajtu zamieniła się z drugą jego połową!

Temperatury, które zmierzyłem zbierając dane do analizy niewiele się od siebie różniły (19 – 24 st dla termometru o skali do 300 stopni) a pierwsza połowa trzeciego bajtu jest niezmienna dla wszystkich pomiarów uznałem więc, że to raczej będą najstarsze bity 12 bitowej liczby oznaczającej temperaturę:

000110000110 = 390 // 19st
000110001100 = 396 // 20st
000110011011 = 411 // 21st
000110100010 = 418 // 22st
000110110101 = 437 // 24

Tutaj zajęło mi chwilę wpatrywanie siew te liczby, dzieliłem je przez siebie, mnożyłem przez siebie szukając rozwiązania aż w końcu znalazłem!

390 / 10 - 20 = 19   // 19st
396 / 10 - 20 = 19,6 // 20st
411 / 10 - 20 = 21,1 // 21st
418 / 10 - 20 = 21,8 // 22st
437 / 10 - 20 = 23,7 // 24

Wygląda przekonująco 🙂 Wygląda na to, że nie tylko wiem już kal odczytać temperatury, to jeszcze przesyłane są one z większą rozdzielczością, niż można się było spodziewać – oryginalny odbiornik ma rozdzielczość jednego stopnia C.

Oczywiście to nie wszystko. Nadal nie sprawdziłem, czy pierwszy bajt to rzeczywiście adres urządzenia, nie rozszyfrowałem też jak wyliczana jest suma kontrolna w piątym bajcie (jeśli to rzeczywiście suma kontrolna). Próbowałem chwilę różnymi popularnymi algorytmami wyliczania tej sumy ale mi się nie udało. Na szczęście do zwykłego sniffowania przesyłania danych nie jest to potrzebne!

Tymczasem!

[Tutaj kolejna część zawierająca kod arduino do odbioru danych]


Wszystkie

Dzisiaj w krótkim wpisie chciałbym przedstawić mały, acz przydatny programik dla posiadaczy zegarków z pomiarem pulsu/tempa – Kalenji CW500 SD.
Zegarek ten, mimo wielu zalet (naprawdę polecam urządzenie) ma jedną zasadniczą wadę – po zgraniu treningów otrzymujemy pliki *.fitlog, które są otwierane tylko przez program „Geonaute software”, możemy zapomnieć o imporcie treningów do Endomondo czy innych programów, które jak jeden mąż używają plików typu *.tcx! I właśnie dlatego powstał programik FitlogTcxConverter.

Program oprócz prostej konwersji umożliwia poprawienie daty i godziny rozpoczęcia treningu, zmianę odległości przebytej w czasie treningu oraz jego nazwy i opisu. Dodatkowo dodałem kalkulator kalibracji footpada.

Fitlog to tcx converter

Pobierz FitlogTcxConverter


DIY Foto Wszystkie

Dzisiaj chciałbym przedstawić urządzenie do robienia sekwencji zdjęć obiektów umieszczonych na specjalnej obrotowej platformie. Po wykonaniu każdego zdjęcia maszynka obraca platformę, zatrzymuje ją, czeka aż drgania platformy ustąpią i robi kolejne zdjęcie.

Proste urządzenie diy do zdjęć 360d

 

Jak widać obudowa została wykonana niespecjalnie starannie dlatego że po pierwszych próbach okazało się, ze nie działa do końca tak jak powinno!
Założyłem, że elementem wykonawczym maszynki będzie silnik krokowy na którego osi będzie umieszczona platforma (swoją wyciąłem laserem z białej plexi 5mm w zakładzie produkującym reklamy).

Mocowanie silnika krokowego do obudowy maszynki

Silnik zamocowany jest bezpośrednio w górnej ściance obudowy.
Niestety, żeby chcąc wykonać urządzenie jak najniższym kosztem zamiast wykorzystać scalony sterownik silnika krokowego zrobiłem prosty sterownik na tranzystorach sterowany półkrokowo. I właśnie tutaj jest pogrzebany pies! Niestety przy 400 półkrokach platforma nie kręci się płynnie, tylko szarpie za każdym krokiem. Początek i koniec ruchu to dość mocne zrywy, które mogą powodować przesuwanie się przedmiotów na platformie, a próba spowolnienia obrotów nie przynosi zamierzonych efektów, a wręcz przeciwnie – platforma przy każdym kroku wpada w rezonanse i nieprzyklejone przedmioty zsuwają się z platformy 🙁
Czytaj dalej!


DIY Wszystkie

Dziś chciałbym przedstawić bardzo prosty sterownik 12 serwomechanizmów modelarskich oparty na mikrokontrolerze AtMega8 (AtMega8a).

Sterownik serwomechanizmow bluetooth

 

Głównym założeniem projektu była jego maksymalna prostota: jak najmniej części i prosta do wykonania płytka drukowana. Sterownik odbiera sygnały podawane na jego port USART, parametry portu to:  9600 baud, jeden bit stopu oraz brak bitu parzystości.

Schemat jest bardzo prosty, składa się dosłownie z paru elementów:

Schemat sterownika serwomechanizmów

 

Płytka drukowana ma wymiary 30x55mm i jest raczej prosta do wykonania samodzielnie, chociaż zawiera jedną ścieżkę przechodzącą między nogami procesora. Płytkę zaprojektowałem tak, by wejście sygnałów sterujących oraz linie zasilające były pinowo zgodne z tanim modułem bluetooth jaki posiadam.

Czytaj dalej!