Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 30 gru 2024, o 16:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 16 kwi 2016, o 15:03 
Offline
Nowy

Dołączył(a): 14 kwi 2014
Posty: 21
Pomógł: 0

Witam Wszystkich bardzo serdecznie.

Jako że powoli robi się już ciepło, postanowiłem wykonać pewien projekt (który będzie znajdował się w moim rowerze) oparty o mikrokontroler 8-bit'owy ATmega8A lub ATmega88PA, wyświetlacz od Nokii 3310 (sterownik PCD8544) wraz z czujnikiem temperatury - tutaj mam problem z wyborem - DS18B20 (cyforwy), czy LM35 (analogowy) oraz zegar czasu rzeczywistego DS1307.

Dokładniej mówiąc ten projekt, to taki "mini komputerek"? Nie wiem jak to dokładnie nazwać :D Na wyświetlaczu chciałbym, aby wyświetlany został czas: godziny : minuty : sekundy (00 : 00 : 00), pod tym data: dzień / miesiąc / rok (00 / 00 / 0000), a pod tym wszystkim od lewej strony prędkościomierz - aby wiedzieć ile się jedzie (00.0 km/h) oraz temperatura w *C (00.0*).

00 : 00 : 00
00 / 00 / 0000
00.0 km/h 00.0*

Obrazek

Obrazek

Obecnie zrobiłem projekt wizualny jak to będzie wyglądało na wyświetlaczu w formie mapy bitowej (plik image.bmp) oraz na żywo na wyświetlaczu (zdjęcie).
Jeżeli chodzi o prędkościomierz, chciałbym użyć kontaktronu oraz magnesu neodymowego (umieszczonego na jednej ze szprych), jednak nie wiem czy kontaktron nie będzie gubił impulsów :/
Obudowa oraz wszelkie mocowania (magnesu neodymowego) będą wydrukowane na drukarce 3D.

Koniec części opisu.

Nasuwa mi się pytanie - jak do tego wszystkiego się zabrać? Jakieś rady? (do wyświetlania bitmapy użyłem biblioteki kolegi SunRiver'a).
Czy może najpierw oprogramować wszystko po kolei i potem zaimplementować wszystko do jednego kodu? Proszę o porady oraz opinie o projekcie.

Pozdrawiam!

_________________
Mój kanał Youtube



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2016, o 15:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27322
Lokalizacja: Szczecin
Pomógł: 1041

eVol68 napisał(a):
Nasuwa mi się pytanie - jak do tego wszystkiego się zabrać? Jakieś rady?


Przede wszystkich bardzo dobrze, że na samym początku tworzysz sobie jakąś WIZUALIZACJĘ tego co chcesz osiągnąć na końcu! ... Moim zdaniem to bodajże NAJLEPSZA metoda ;) ... na dosięgnięcie CELU! ... poważnie

Jak się za to zabrać ? .... hmmm to co zwykle - teraz to bym na twoim miejscu podzielił projekt na części i NAJPIERW

1. sprawdził sobie na oddzielnym małym projekcie czy DAJĘ SOBIE RADĘ np z obsługą czujnika temperatury
2. sprawdził sobie na oddzielnym projekcie jak wychodzi mi badanie zliczanych impulsów

3. ..... podobnie pozostałe części projektu

4. Później próba łączenia tego w całość

5. Testowanie... POPRAWKI... Testowanie..... POPRAWKI..... // Testowanie... POPRAWKI...

6. w końcu końcowa wersja ALFA projektu ;)

Te kroki warto zrobić na jakimś zestawie uruchomieniowym albo nawet na stykówce - po prostu przetestować wszystko od strony programowej na początku żeby później nie robić po raz 7-my nowego PCB

7. ..... w końcu stworzyć PCB i uruchamiać już finalny projekt

(przynajmniej ja tak działam) ;) polecam tę drogę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2016, o 23:11 
Offline
Użytkownik

Dołączył(a): 12 mar 2014
Posty: 266
Lokalizacja: Warszawa
Zbananowany użytkownik

Pomógł: 2

eVol68 napisał(a):
Jeżeli chodzi o prędkościomierz, chciałbym użyć kontaktronu oraz magnesu neodymowego (umieszczonego na jednej ze szprych), jednak nie wiem czy kontaktron nie będzie gubił impulsów :/!


Ja w swoim komputerku użyłem czujnika indukcyjnego, a na jednej ze szprzych przykręciłem dużą podkładkę. Sprawuje się bez zarzutu.

_________________
Wysłane z Nokii 3310



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2016, o 19:31 
Offline
Nowy

Dołączył(a): 14 kwi 2014
Posty: 21
Pomógł: 0

mirekk36 napisał(a):
Przede wszystkich bardzo dobrze, że na samym początku tworzysz sobie jakąś WIZUALIZACJĘ tego co chcesz osiągnąć na końcu! ... Moim zdaniem to bodajże NAJLEPSZA metoda ;) ... na dosięgnięcie CELU! ... poważnie

Dziękuję Panie Mirku (nie wiem, czy tu na Forum trzeba PANować :), lecz z szacunku napisałem "...Panie Mirku..."), naprawdę - daje to otuchę i lepszego kopa do pracy :)

Radziu napisał(a):
Ja w swoim komputerku użyłem czujnika indukcyjnego, a na jednej ze szprzych przykręciłem dużą podkładkę. Sprawuje się bez zarzutu.

Masz tu na Forum opisany swój projekt, czy nie? Ewentualnie mógłbyś pokazać jakieś zdjęcia swojego projektu :)

...

18.04.2016 r.

Podjąłem próbę okiełznania zegarka DS1307 i się udało! Szczerze mówiąc jak udało mi się dopiero dzisiaj ogarnąć komunikację z tym układem i wysłanie do niego odpowiednio ustawionych bitów, zaczął generować na swoim wyjściu SQWE, przebieg prostokątny o f = 1Hz z czego byłem (i jestem :)) dumny. Później obejrzałem filmik dotyczący zegarka DS3231 i tak powstał mój zegarek, z którego jestem obecnie zadowolony, jednakże jest to faza testów :)

*Pierwsze próby zabawy z DS1307 i udana komunikacja oraz przebieg o f = 1Hz.
Obrazek

*Następna próba już po obejrzeniu filmiku.
Obrazek

Pozdrawiam!

_________________
Mój kanał Youtube



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2016, o 11:24 
Offline
Użytkownik

Dołączył(a): 12 mar 2014
Posty: 266
Lokalizacja: Warszawa
Zbananowany użytkownik

Pomógł: 2

Tak, mój projekt był tutaj prezentowany: topic13121.html

_________________
Wysłane z Nokii 3310



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 kwi 2016, o 20:49 
Offline
Nowy

Dołączył(a): 14 kwi 2014
Posty: 21
Pomógł: 0

20.04.2016 r.

Dzisiaj wzięło mnie na przemyślenia dotyczące czujnika temperatury DS18B20. Jako, że obecnie mam uruchomiony zegar na układzie DS1307 i uruchomionym oscylatorze 1Hz, to w pętli głównej mam flagę (przerwania INTF0), która przy pomocy if'a jest sprawdzana, czy jest "jedynką" (podczas zbocza narastającego) - jest realizowana co 1 sekundę, a następnie kasowana. I tak sobie pomyślałem, aby to "odświeżanie" zegarka co 1 sekundę wykorzystać też do odczytu temperatury (co 1 sekundę) z czujnika DS18B20, czy jednak musiałbym wykorzystać jakiś timer w uC? Co o tym sądzicie? Ewentualnie rzućcie jakiś inny pomysł :)

Tak przy okazji, mógłbym użyć układu DS3231, który ma już w sobie czujnik temperatury, lecz o tym dopiero później pomyślałem, a na stanie mam DS18B20.

Niestety nie posiadam BB, jednak widziałem w Internecie, że Mirek do obsługi DS18B20 korzystał z biblioteki pewnej osoby (która (ta biblioteka) jest w Internecie, lecz bez zmian, które wprowadził Mirek). I niestety nie mogę jakoś ugryźć tej biblioteki do obsługi DS18B20 na interfejsie 1wire.

http://siwawi.bauing.uni-kl.de/avr_projects/tempsensor/

_________________
Mój kanał Youtube



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2016, o 11:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam.
Tak mi przyszło do głowy.
Możesz powołać zmienną np. Flaga_ds i ustawiać na jeden w funkcji po sprawdzeniu poprzedniej flagi.- czyli co sekundę. A w funkcji sprawdzającej Flaga_ds kasować pi wykonaniu pomiaru.
Pozdrawiam.Darek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2016, o 16:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
I tak sobie pomyślałem, aby to "odświeżanie" zegarka co 1 sekundę wykorzystać też do odczytu temperatury (co 1 sekundę) z czujnika DS18B20, czy jednak musiałbym wykorzystać jakiś timer w uC? Co o tym sądzicie? Ewentualnie rzućcie jakiś inny pomysł :)

Co sekundę jak masz wyzwalanie z układu zegarka, to możesz po kolei wykonać operację:
- odczytać wartość temperatury z DS18B20
- wystartować nowy pomiar temperatury na DS18B20
- odświeżyć informacje ekranie
Powtarzasz to w kółko co 1 sekundę. Pomiar temperatury w DS18B20 robi się max. ok. 750 ms, więc odczytujesz zawsze nową wartość.
Mirek chyba tak pokazywał w swoich poradnikach o układach zegarkowych.

Najlepiej po operacji odświeżenia danych na ekranie przechodź do sleep mode z którego będzie Cię budzić przerwanie z timera (te co 1 s). Dzięki temu oszczędzisz trochę baterii :)


--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2016, o 15:57 
Offline
Nowy

Dołączył(a): 14 kwi 2014
Posty: 21
Pomógł: 0

rskup napisał(a):
Co sekundę jak masz wyzwalanie z układu zegarka, to możesz po kolei wykonać operację:
- odczytać wartość temperatury z DS18B20
- wystartować nowy pomiar temperatury na DS18B20
- odświeżyć informacje ekranie
Powtarzasz to w kółko co 1 sekundę.


Dokładnie o tym też myślałem :) Aby wykorzystać do czegoś (dokładnie do odczytu zegarka - czasu, daty, czujnika temperatury oraz odczytu prędkości) sprawdzanie flagi co 1 sekundę :)

...

23.04.2016 r.

Po lekkiej batalii z czujnikiem temperatury DS18B20 doszedłem do ładu i ładnie "upchnąłem" w jednym kodzie odczyt z zegarka daty i czasu oraz obecną temperaturę, która odświeżana jest co 1 sekundę na ekranie (tymczasowo) LCD'ka HD44780.

Obrazek

Teraz zostało tylko oprogramować odczyt prędkości obrotowej koła oraz konwersja na km/h :) Do tego chyba musiałbym powołać jakiś timer do życia :P a później przekonwertowany wynik odświeżać na wyświetlaczu (podczas testów) LCD HD44780.

PS: Na zdjęciu widać taką kostkę, do której podłączam UsbAsp - proszę nie patrzcie na luty, bo kiedy ją robiłem byłem młodym adeptem elektroniki :D (w sumie ostatnio miałem chęć ją zmienić, ale coś nie wyszło - muszę to zrobic! :P).

...

Edit:
25.04.2016 r.


Tak myślę i myślę nad tym odczytem prędkości, czytałem o tym w Internecie i jakoś nie mogę tego ogarnąć :/
Gdzieś wyczytałem, że potrzebuję obwód koła wraz z oponą, tak więc zmierzyłem to i wyszło mi 2.063m (2m 6cm 3mm).
Aby obliczyć prędkość potrzebuję znać przebytą drogę oraz czas, w którym przebyłem daną drogę (v = s / t)
A do celów późniejszych (bądź edukacyjnych), jakbym chciał obliczyć przebytą drogę będę potrzebował prędkość i czas (s = v * t).

Mój czas, to czas pomiędzy impulsami, prawda? oraz przebyta droga w tym czasie to obwód mojego koła, czyli musiałbym do tego użyć jakiegoś timer'a, tak? Może Timer1 i ICP1 (PB0 - ATmega8) i pomiar czasu zacząć od pojawienia się stanu wysokiego na ICP1 (zbocze narastające), a kończyć pomiar czasu po ponownym pojawieniu się stanu stanu wysokiego na ICP1 - czyli jeden pełny obrót koła.

Na obecną chwilę tyle mi przyszło do głowy. Macie jakieś ewentualnie inne pomysły?

_________________
Mój kanał Youtube



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 10:28 
Offline
Użytkownik

Dołączył(a): 12 mar 2014
Posty: 266
Lokalizacja: Warszawa
Zbananowany użytkownik

Pomógł: 2

Pomiar drogi wystarczy ilość zliczonych impulsów * obwód koła. A to podzielić tak żeby uzyskać przebieg w Km.

_________________
Wysłane z Nokii 3310



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 14:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Pomiar drogi wystarczy ilość zliczonych impulsów * obwód koła. A to podzielić tak żeby uzyskać przebieg w Km.
To nie jest tak prosto :( Jak wolno obraca się koło to musisz mierzyć czas miedzy impulsami, bo możesz mieć np. jeden impuls na 3 sekundy.
Dlatego musi być mechanizm liczący liczbę impulsów w zadanym czasie i czas między impulsami. Logika musi wybierać odpowiedni w zależności od prędkości obracanie się koła.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 1 minucie ]

Oczywiście przejechana odległość to liczba impulsów x obwód koła.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 15:28 
Offline
Użytkownik

Dołączył(a): 12 mar 2014
Posty: 266
Lokalizacja: Warszawa
Zbananowany użytkownik

Pomógł: 2

Czas między impulsami musisz liczyć tylko do pomiaru prędkości, tak zrobiłem w swoim komputerku. Ale do pomiaru drogi po co?

_________________
Wysłane z Nokii 3310



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 16:18 
Offline
Nowy

Dołączył(a): 14 kwi 2014
Posty: 21
Pomógł: 0

Okej, czyli pokonany dystans to: liczba impulsów * obwód koła; => W sumie logiczne, bo na jeden impuls przypada jeden obwód koła.

Radziu napisał(a):
Czas między impulsami musisz liczyć tylko do pomiaru prędkości

A z kolei prędkość to: czas między impulsami * (?) => Jak obliczać prędkość znając czas między impulsami?

Radziu napisał(a):
Ale do pomiaru drogi po co?

Już tłumaczę po co. Jeżeli chciałbym później na innym wyświetlaczu (może troszkę większym niż od Nokii 3310) umieścić informację o pokonanym dystansie, to będę miał już to opanowane, a obecnie tego nie mam, ale chciałbym wiedzieć jak to zrobić.

rskup napisał(a):
Jak wolno obraca się koło to musisz mierzyć czas miedzy impulsami, bo możesz mieć np. jeden impuls na 3 sekundy.
Tak, zgadza się, bo np. jakbym jechał pod górkę, to koło obraca się wolniej i czas pomiędzy impulsami będzie większy niż przy zjeżdżaniu z górki.

Jakiego timera musiałbym użyć do liczenia impulsów i czasu między tymi impulsami? (może Timer1 i ICP1, jak pisałem 25.04.2016 r.).

_________________
Mój kanał Youtube



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 19:29 
Offline
Użytkownik

Dołączył(a): 12 mar 2014
Posty: 266
Lokalizacja: Warszawa
Zbananowany użytkownik

Pomógł: 2

eVol68 napisał(a):
Radziu napisał(a):
Czas między impulsami musisz liczyć tylko do pomiaru prędkości

A z kolei prędkość to: czas między impulsami * (?) => Jak obliczać prędkość znając czas między impulsami?


Ja swój program napisałem w Arduino, wykorzystałem do tego funkcję milis(), w C tego nie ma, trzeba jakoś inaczej pokombinować.

_________________
Wysłane z Nokii 3310



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 21:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Pamiętaj, że dla wolnego obracania ważne jest uśrednianie. Bo jadąc z prędkością 1.5 obrotu koła na sekundę, to bez uśredniania będziesz miał odczyt co sekundę - raz 1 impuls a następnym razem 2 impulsy. Czyli skoki o 100% :(

Prędkość obliczasz korzystając ze wzorów:
V [m/s] = (L [mm] / 1000) * x / t [s]
V [km/h] = (L [mm] / 1000) * (3600 / 1000) * x / t [s]
gdzie: x - liczba impulsów
t - czas pomiaru w s
L - obwód opony w mm

Wzór jest prawdziwy zarówno dla stałego czasu np. 1 sekunda jak i dla zmiennego (czekanie na na wystąpienia impulsu np. 1 impuls na 2.5 sekundy).

Średnicy koła L nie mierz, bo tego tak łatwo dokładnie nie da się zrobić. Lepiej skorzystać z tabel mapujących typ opony na obwód - np.: https://velo.pl/sites/default/files/pli ... u_kola.pdf

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2016, o 22:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

A może jakoś tak.?

1) timer co 100_ms zwiększa licznik. ( 0,1 sek)
- jeżeli licznik dojdzie do np. 6000, to znaczy że przez 10min. brak ruchu. (coś można zadziałać np. sygnał wyłącz mnie).

2) czujnik obrotów dodaje 2,063 m do dystansu,
- zapisuje licznik do np. zebrane_impulsy,
- resetuje licznik,
- oblicza prędkość na podstawie zebranych danych.
V_m_s = 2,063 / (zebrane_impulsy * 0,1) /* ułatwienie dla procesora V_m_s = 2063 / (zebrane_impulsy * 100) */
a w km/h V_km_h = V_m_s * 3,6

Pozdrawiam, Darek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO