poniedziałek, 15 lutego 2016

Projekt: Woltomierz cyfrowy

Woltomierz cyfrowy
Witam!

Przyszedł czas na zamieszczenie kolejnego projektu DIY. Jednym z moich zadań w pracy jest testowanie płytek elektronicznych w dużych ilościach. Nieraz zachodzi potrzeba na sprawdzenie kilku poziomów napięć na różnych podzespołach. Ponadto testując różne prototypy czasem zachodzi potrzeba na monitoring spadków napięć w kilku modułach w tym samym czasie! Przez parę miesięcy wykorzystywałem do takich celów kilka woltomierzy, jakie były dostępne. Postanowiłem ułatwić sobie pracę i zbudować 4 kanałowy woltomierz cyfrowy.


Przyszła potrzeba i zrodził się pomysł. Kiedy natchnęło mnie do działania, od razu przygotowałem czysty dokument (wyciągając lekcję z ostatniego projektu, od początku wszystko zapisywałem na komputerze, zamiast na kartce). Mając już pomysł zacząłem wymyślać funkcjonalności, stworzyłem wstępny spis elementów, a najbardziej to chciałem przysiąść do projektowania (niczym małe dziecko widzące czekoladę), już od razu (jeść czekoladę, bo to dobre i słodkie), ale po kolei... ;)

Pierwszym krokiem było przygotowanie spisu funkcjonalności, założeń projektu (w czasie powstawania, lista zmieniała się nie jednokrotnie, ja przedstawię wam końcowy efekt):
  • Pomiar napięcia w zakresie 0 - 32 V;
  • Wyświetlanie danych na wyświetlaczu od nokii, dodatkowo na telefonie z systemem android;
  • Sygnalizacja wykrycia zwarcia brzęczykiem;
  • Pomiar spadku napięcia;
  • 4 sondy pomiarowe (3 małe, 1 duża);
  • Zasilanie układu z akumulatora Li-Poly 3,7V;
  • Komunikacja urządzenia z androidem przez moduł Wi-Fi lub bluetooth;
  • Odczyt stanu baterii (akumulatorka);
  • Program do obsługi woltomierza zostanie napisany w języku C dla AVR;
  • Program do obsługi androida zostanie napisany w języku Basic for Android;
  • Projekt płytki w programie Altium;
Krótki opis, dla czego tak, a nie inaczej...
Nie potrzebuję większego zakresu napięć niż 32 V, rzadko kiedy przekraczam 20 V. Wyświetlacz od nokii oparty o sterownik PCD8544, od zawsze chciałem zrobić coś na tym wyświetlaczu, a nadarzyła się okazja, więc czemu nie? ;) Oczywiście nie wyobrażam sobie nie-mobilnego woltomierza/miernika, który trzeba było by podłączać do np. gniazdka, stąd bateria. Dodatkowo mając do dyspozycji moduł firmy atnel, który pozwala na ładowanie akumulatorków w bardzo prosty sposób, czemu by nie skorzystać. Jak wiadomo najlepiej uczy się przez praktykę, więc postanowiłem podszkolić się w programowaniu w B4A (Basic for Android), dlatego też zastosowane zostaną moduły Wi-Fi oraz bluetooth.

Mała wskazówka, którą warto zapamiętać - urządzenia DIY projektujemy pod gotową obudowę. Na samym początku mojej przygody z projektowaniem natrafiałem na mur. W większości przypadków nie do przejścia. Mianowicie, wymyślałem projekt, płytkę, wszystko fajnie, a na sam koniec "zrobię", albo "kupię, albo "znajdę" obudowę. Myślę, że większość początkujących napotyka ten problem. Mając wytrawioną płytkę można czasem wyrwać sobie włosy z głowy i nie znaleźć odpowiedniego "opakowania" do naszego gotowego urządzenia. Oczywiście można kombinować, ale efekt nie będzie już do końca taki o jakim myśleliśmy na początku. Dlatego też warto zapamiętać powyższą, wytłuszczoną wskazówkę ;)

Ja tą poradę zastosowałem do kolejnego kroku w moim projekcie - krok drugi, szukanie obudowy:
Zdjęcie 1
Obudowa moim zdaniem wprost idealna do tego przedsięwzięcia, jedynie będzie trzeba ją udoskonalić o kilka otworów: na włącznik, pod moduł ATNEL-AIR (Wi-Fi, albo bluetooth), trzy przyciski i wyjścia na sondy pomiarowe.


Mając spis funkcjonalności i obudowę, pozostało już tylko przygotować listę elementów, głównie w celu uproszczenia rysowania schematu. Przechodzimy do kroku trzeciego, jakim jest -
Sporządzenie listy elementów:
  • ATmega328p - mózg urządzenia;
  • Wyświetlacz oparty o sterownik PCD8544;
  • Stabilizator LM1117 - 3V3 - napięcie potrzebne do zasilania PCD8544;
  • ATB-BOOSTER-LION - przetwornica i ładowarka, 5 V na wyjściu;
  • 2 układy TLC272 - wzmacniacz operacyjny;
  • Kwarc 11,0952 MHz - taktowanie procesora;
  • Podstawka pod moduł Wi-Fi / Bluetooth;
  • Pomniejsze części elektroniczne jak rezystory, kondensatory, dławiki, tranzystory i diody;

Mając spis flagowych elementów dla naszego urządzenia można przejść do rysowania schematu. Od czasu mojego ostatniego projektu przerzuciłem się na program cadowski - Altium Designer. Projektując biblioteki, tworząc pomniejsze urządzenia, stwierdziłem, że bardzo dobrym pomysłem będzie wykorzystanie mojej wiedzy do stworzenia tego woltomierza.
Zdjęcie 2
Samo projektowanie zajęło mi nieco ponad tydzień. Oczywiście nie siedziałem nad tym dzień w dzień przez 24 godziny. Jednak w związku z decyzja o zamówieniu płytki w zewnętrznej firmie postanowiłem codziennie przez kilka dni sprawdzać, sprawdzać i jeszcze raz sprawdzać czy podczas pracy nie popełniłem błędów. Bardzo przyjemnie jest dostać gotową, wytrawioną płytkę, polutować i programować, niż męczyć się z szukaniem usterek na wytrawionej płytce, przecinać ścieżki, kombinować, majstrować. Płytka traci na wyglądzie przez takie nawet najbardziej kosmetyczne zabiegi ;)

Z powyższego tekstu nasuwa się jeden prosty wniosek - przed wytrawieniem płytki, bądź jej zamówieniem trzeba koniecznie sprawdzić ją kilkanaście, jak nie kilkadziesiąt razy. Taka czasowa inwestycja, na pewno nie będzie stratna.

Wracając do projektu, z przyjemnością podzielę się schematami. Oczywiście jak poprzednio wszystko podzieliłem na odpowiednie bloki, dzięki czemu bardzo przyjemnie i przejrzyście się to ogląda (wersje schematu ulegały zmianom podczas pracy, zamieszczam ostateczną i końcową wersję)

Krok czwarty - schemat:


Zdjęcie 3

Zdjęcie 4

Zdjęcie 5

Zdjęcie 6

Zdjęcie 7

Zdjęcie 8
Jeżeli zrodzą się jakieś pytania odnośnie schematów, zapraszam gorąco do dyskusji w komentarzach.

Kiedy skończyłem rysować schematy, przerzuciłem się na projektowanie płytki.
Zdjęcie 9
Mając obudowę trzeba odpowiednio dostosować urządzenie. Założyłem sobie, że: na spód obudowy położę baterię, która dwoma przewodami będzie podłączona do płytki, sama bateria będzie wspornikiem i stabilizacją dla płytki PCB. Dodatkowo dodam trzy dystanse, których głównym zadaniem będzie unieruchomienie akumulatora, a pobocznym stabilizacja płytki. Wykonałem odpowiednie pomiary, z których wynikało - teoretycznie, że konstrukcja "kanapki":

akumulator + dystanse | płytka PCB | wyświetlacz + goldpiny

po nałożeniu górnej części obudowy będzie idealnie wszystko dociskała. Teoretycznie może troszkę straszni brzmi, ale uwierzcie, praktycznie udało się w 100% ;)

Zanim do składania dojdzie trzeba odpowiednio "przyciąć płytkę", prawdę mówiąc troszkę się nad tym namęczyłem...
Zdjęcie 10
... ale efekt jest moim zdaniem powalający ;)
Zdjęcie 11
Bardzo przyjemnie jest widzieć coś co ma się w głowie na "kartce", w tym przypadku - monitorze. Jeszcze przyjemniej będzie to zobaczyć na żywo... już niebawem :)

Po około tygodniu czekania, kurier zapukał i dostarczył płytki. Z ogniem w oczach rzuciłem się do sprawdzania, lutowania, a najbardziej nie mogłem doczekać się etapu programowania. Zanim jednak do tego dojdziemy, zerknijcie na golasy ;)
Zdjęcie 12

Zdjęcie 13

Polutowana płytka prezentuje się bardzo ładnie, z lutowaniem problemów nie było, poszło jak z płatka.
Zdjęcie 14

Zdjęcie 15

Zdjęcie 16
Zdjęcie 17
W tym momencie mam dwa wyjścia, wykończyć obudowę, albo programować. Oczywiście wybrałem programowanie. Etap programowania zajął mi około 60% czasu tworzenia projektu. Przyznam się szczerze, że łatwo nie było, kilka razy to małe urządzonko doprowadziło mnie do szału, niby wszystko okej, a jednak nie działa. Zawsze tak jest z prototypami, nie ma się co łamać.

To co mi się podoba w pracy elektronika, to możliwość grzebania fizycznie w urządzeniu podczas programowania. W tym wypadku grzebania było sporo, zobaczcie sami.
Zdjęcie 18

Zdjęcie 19

Zdjęcie 20
O ile sama implementacja wyświetlacza, ADC, nie była problemem. To najwięcej czasu zjadłem na odpowiednim wykorzystaniu przerwań, przy czym obsługa klawiszy (typu micro switch) znacznie to utrudniała. Wyświetlanie poszczególnych informacji rozmieściłem na odpowiednich warstwach, które zmieniają się przez przełączenie odpowiedniego klawisza (lewo, prawo). Środkowy micro switch blokuje prace pozostałych klawiszy i odblokowuje przerwania odpowiedzialne za wykrywanie zwarć, co więcej można odczytać spadki napięć. Na tym etapie czekała mnie jeszcze masa optymalizacji. Jednak, chciałem pójść o krok dalej i pobawić się B4A.

Do tamtej pory miałem: pomiar napięcia na 4 kanałach, wykrywanie zwarć, pomiar spadku napięcia, ekran informacji  o połączeniu z Wi-Fi oraz bluetooth. Dalej mogłem sprawdzać stan baterii, optymalizować kod, szukać błędów i testować, ale poszedłem w obsługę Wi-Fi. 
Zdjęcie 21
Po sprawnym skonfigurowaniu modułu, od razu wskoczyłem do B4A. Zacząłem układać szatę graficzną (która przerabiałem bardzo dużo razy), jako że jestem na prawdę zielony jeśli chodzi o ten język, sporo czasu poświęciłem tej części pracy. Masa nowych zagadnień, masa nowego doświadczenia ;)


Zdjęcie 22
Zdjęcie 23
Chyba największa "inżynierska radość" nastąpiła kiedy zacząłem przesyłać dane odczytane z sond na ekran telefonu (oczywiście żaden ze mnie inżynier, ot takie wesołe określenie). Od razu powiem, że zestawienie komunikacji procesor - android jest banalnie proste, wystarczy poświęcić troszkę czasu na zrozumienie zagadnienia i wszystko staje się jasne. Bardzo przydatne okazały się wideo poradniki użytkownika mirekk36 na youtube, gorąco polecam - Basic4Android kurs - part 01.

Kiedy część programową projektu miałem już za sobą, przyszła pora na obudowę. Suwmiarka poszła w ruch i zaczęło się kreślenie, mazanie, zaznaczanie co gdzie przewiercić jak, wyszlifować, krótko mówiąc nakreśliłem miejsca na otwory.
Zdjęcie 24
Technicznie rzecz ujmując. Do nawiercania / frezowania miałem w dolnej części obudowy:

  • otwór na małe sondy;
  • otwór na podłączenie przewodu od ładowarki;
  • otwór na przełącznik;
  • usunąć prawie wszystkie małe plastikowe dystanse;
  • wyrównać maksymalnie dolną, wewnętrzną powierzchnię;

Jeżeli chodzi o górną część obudowy, przez długi czas myślałem o wywierceniu otworu na wyświetlacz (trochę się obawiałem, że niezbyt dobrze będzie widać wyświetlane dane). Po pierwszych programowych testach przyłożyłem z ciekawości obudowę i rezultat mnie pozytywnie zaskoczył. Widoczność była bardzo zadowalająca, tak też pozbyłem się myśli frezowania ogromnego prostokąta. Mimo to do nawiercenia / frezowania pozostały mi:

  • trzy otwory pod przyciski
  • otwór pod podstawkę do ATNEL-AIR
  • dwa otwory na duże sondy


Zacząłem od dolnej części, konkretnie od otworu na małe sondy. W zasadzie ledwo co zacząłem, bo mój projekt został "sabotowany" :D zapewne słysząc odgłos nowego narzędzia, mirekk36 postanowił spróbować swoich sił i wkroczył do serwisu ze słowami "daj mi spróbować, będzie idealnie równo!";)
Zdjęcie 25
Efektem tego zabiegu są nieco większe wymiary otworu niż miały być. Jednak po szlifowaniu i tak wszystko bardzo ładnie wygląda ;)
Do wiercenia wykorzystałem stojak wiertniczy MB 140/S firmy Proxxon oraz prowadnicę od frezarki Micro MF 70, również firmy Proxxon. Sama frezarka MF70 jest bardziej precyzyjnym narzędziem jednak nie było jak odsunąć frezu na odpowiednią wysokość. Dzięki stojakowi już dałem radę.

Kiedy ruszyłem z frezowaniem i szlifowaniem pozostałych otworów, to zupełnie zapomniałem o aparacie, poniżej przedstawiam nawierconą górną część obudowy. W dalszej części artykułu pokażę całą obudowę oraz wszystkie otwory.
Zdjęcie 26
Podczas tego etapu wszystko szło zgodnie z moim misternym planem, pacjent zachowywał spokój podczas operacji, jednak w pewnym momencie pracy natrafiłem na mały zonk. Mianowicie plastikowe, czarne nasadki na microswitche mają dosyć sporą średnicę, większą niż wiertła, które miałem na stanie. Trzeba było kombinować, do powiększenia otworów wykorzystałem wiertarko-frezarkę Micromot 50/E, również firmy Proxxon.

Chciałbym zrobić na tym poziomie, krótkie podsumowanie z części "praktycznej" - czyli wiercenia obudowy. Takie małe wnioski, które wyciągnąłem ja, błędy jakie popełniłem i na co warto zwrócić uwagę podczas frezowania, wiercenia czy cięcia jakichkolwiek obudów, bądź innych materiałów.

Po pierwsze, za każdym razem kiedy frezowałem lub wierciłem, powinienem był poza samym odrysowaniem linii cięcia nakleić taśmę, by zwiększyć precyzję cięć. Jak wiadomo uczymy się na błędach. Nie naklejałem taśmy przez co miałem o wiele więcej pracy ze szlifowaniem i nerwów, że wychodzi mi dane cięcie krzywo... krzywiej niż powinno być... mam na tym punkcie chyba jakieś zboczenie, bo czasem krzywo wycięta ścianka, czy inna powierzchnia nie daje mi spokoju do końca dnia.

Materiał z którego została wykonana obudowa jest bardzo podatny na "rysowanie". Czym bym nie przejechał zostawały rysy. Tak przynajmniej myślałem, kiedy pojawiała się kolejna rysa w miejscu gdzie nie powinno jej być (gdzieniegdzie zszedł mi pilnik, omsknął się śrubokręt itp...). Nie jest to do końca wina materiału, lecz moja. Podczas pracy powinienem dokładnie zabezpieczyć taśmą np. budowlaną czy malarską powierzchnie, które miały być nietknięte. Tak więc na prawdę warto, zabezpieczać miejsca dookoła obszaru roboczego taśmą.

Na koniec dodam, że pomysł z wiertarko-frezarko może i był dobry, jednak kilka razy pilnik zeskoczył mi z toru obrotowego. Następnym razem będę musiał opracować jakiś patent na równe wyszlifowanie otworu w kształcie okręgu (o średnicy 1, 2 lub 3 cm). Może ktoś z was miałby jakiś pomysł, a może zna metodę na taki zabieg.

Mimo błędów, które popełniłem jestem bardzo, ale to bardzo zadowolony z efektu końcowego. Kiedy tylko wsadziłem elektronikę do środka, włączyłem zasilanie, wszystko śmigało bez zarzutów.

Zapraszam do przyjrzenia się zdjęciom efektów mojej pracy.
Zdjęcie 27

Zdjęcie 28

Zdjęcie 29

Zdjęcie 30
Etap pracy związanej z samą obudową został zakończony. Pozostało mi jedynie dokończyć program... czy aby na pewno?

Będąc w trakcie kodowania, celowo nie ładowałem akumulatora, a co więcej zostawiałem urządzenie włączone na długie godziny. Wszystko po to, by sprawdzić jak się zachowa cześć programu odpowiedzialna, za komunikaty o niskim poziomie napięcia na baterii, oraz informacji o potrzebie podłączenia ładowania. Kiedy uporałem z pakowaniem wszystkich danych w odpowiednie stringi, oraz sprawnym przesyłaniu i odbieraniu ich, napięcie na baterii... nie spadło jeszcze nawet do 20%. Tak więc pracowałem dalej i zacząłem testowanie włączania oraz wyłączania opcji brzęczyka z poziomu urządzenia oraz telefonu. Przyznam szczerze, że troszkę się namęczyłem z tym zagadnieniem. Problem polegał na tym, iż po włączeniu funkcji wykrywania zwarć, czyli załączeniu brzęczyka (wyłączając tym samym opcje pomiaru napięcia na jednym kanale - konkretnie pierwszym, z dużą sondą pomiarową - na schemacie, jest on zaznaczony w bloku drugim TLC272) z poziomu urządzenia, a następnie przełączeniu się przez Wi-Fi na odczyt danych z telefonu, w programie nie było widać, że funkcja wykrywania zwarć jest włączona, więc po kliknięciu w tą opcje w telefonie, brzęczyk w urządzeniu się wyłączał, natomiast na ekranie telefonu było widać iż jest on włączony. Do tego doszedł problem z przerwaniami programowymi i kilka innych rzeczy. Troszkę siedziałem nad tym zagadnieniem, jednak w końcu udało mi się wymyślić odpowiednią logikę zapamiętywania stanu jaki był na woltomierzu po skomunikowaniu się z androidem.

Po kolejnej wygranej "bitwie" z programem, poziom baterii... jeszcze się całkiem nieźle trzymał. Postanowiłem więc udoskonalić program na telefon. Założyłem iż, wszystkie główne informacje będą wyświetlane w orientacji pionowej, natomiast obracając telefon do poziomu, będzie można odczytywać wartości napięć z wybranych kanałów. Wielkość czcionki w orientacji poziomej jest odpowiednio większa w stosunku do orientacji pionowej. Jako, że jestem zielony w programowaniu na androidzie, troszkę czasu spędziłem nad tym zagadnieniem. Kiedy zrozumiałem dokładnie na czym polega zmiana orientacji udało mi się uzyskać pożądany efekt :)

Zerknijcie jeszcze na to, jak wygląda sama aplikacja na telefon.
Zdjęcie aplikacji 1

Zdjęcie aplikacji 2

Zdjęcie aplikacji 3

... mniej więcej w tym czasie, zaczęła wyskakiwać informacja o wymaganiu podłączenia zasilania. Przygotowany dużo wcześniej przewód micro USB podłączyłem do ładowarki, niecałe 10 sekund i bateria naładowana na max! Coś niesamowitego... ha. ha.. ha..

Coś tutaj ewidentnie było nie tak. Informacje o stanie baterii w moim urządzeniu wskazywały na prawie maksymalny poziom ładowania, a oddzielny miernik, z którego korzystałem również wskazywał pełen stan baterii. Na początku zacząłem grzebać w kodzie, wykryłem, że w kilku miejscach pomyliłem się w przeliczeniach wartości ADC na procenty. Jednakże nie to było problemem. Jakim cudem akumulator naładował się z poziomu około 2,8 V do 4,2 V?!

Po etapie walenia głową w biurko, zobaczyłem istne perpetuum mobile, napięcie na akumulatorze wskazywało ponad 5 V!... W tym momencie spostrzegłem, iż na ekranie miernika firmy METEX, z którego korzystałem miga ikonka rozładowanej baterii...

Zaraz po wymianie baterii w mierniku uniwersalnym odczyt napięcia napięcia z akumulatora mojego woltomierza wskazał około 2,9V, czyli wszystko w normie. Okazało się, że mój woltomierz pokazywał stan naładowania baterii w postaci 105%. Zgłupiałem do reszty. Grzebałem w kodzie, kombinowałem, aż w końcu przerzuciłem się na schemat, być może źródło problemu leżało gdzie indziej.

Mam taką zasadę, którą stosuję od dawna i dobrze na tym wychodzę, polecam spróbować szczególnie początkującym zastosować się do niej, mianowicie - jeżeli nie działa własne urządzenie, najpierw szukaj usterki w programie (tyczy się to oczywiście konkretnie projektów, w których mamy wkład programistyczny. Nie raz na zwykłej literówce, braku nawiasu czy złej definicji zmiennej można stracić wiele czasu). Tak swoją drogą, staram się do tej zasady stosować, przekładając ja na inne dziedziny w życiu - jeżeli masz z czymś problem, w pierwszej kolejności podejrzewaj siebie o zrobienie błędu. Ponieważ przez szukanie, co zrobiliśmy źle można się na prawdę dużo nauczyć, a przy tym nie wyjść na marudę, która obwinia wszystkich o wszystko dookoła, tylko nie siebie.

Wracając do szukania błędu. Na poziomie rysowania schematu został on popełniony. W bloku Battery - Supply 5V, zwarłem wyjścia: sygnału, ładowania i pracy, podczas gdy do prawidłowego działania wymagane jest połączenie sygnału z ładowaniem, a wyjście pracy pozostawić osobno (na schemacie zamieszczonym na stronie, wszystko jest poprawione i sprawdzone). Trzeba było więc rozbierać obudowę i nanieść kilka poprawek, tak jak już to bywa przy prototypowaniu.

Zdjęcie 31

Zdjęcie 32

Zdjęcie 33
Przerwałem ścieżkę pomiędzy wyjściem pracy, a wyjściem sygnałowym. Następnie dodałem, krótki przewód od wyjścia WORK, do przełącznika ON/OFF. Pomimo takiego zabiegu, całość i tak wygląda estetycznie. Jedynie podczas dobierania się do wnętrza woltomierza, trzeba mieć na uwadze fakt odlutowania kabelka z jednej strony.

Kolejna usterka naprawiona, w takim razie można się brać za wykańczanie programu. Ha! Nie tak prędko, pomiar napięcia na baterii dalej wskazuje ponad 100%, a po odłączeniu ładowarki nie wskazuje prawidłowej wartości napięcia. Teraz jednak byłem pewien, że wina leży po mojej stronie. Na pewno coś źle przemyślałem podczas programowania. Nieco czasu upłynęło, a ja znalazłem kolejny błąd i opracowałem nowe, poprawne rozwiązanie. Tym razem chodziło o zły zakres przeliczania wartości ADC na wartość procentową. Zagwozdką był fakt, iż dolna granica napięcia czyli 0,0 V (wartość ADC 0) nie mogła tyle wynosić, ponieważ akumulatory, z których korzystam uległy by uszkodzeniu, jeżeli poziom napięcia na nich spadłby poniżej około 2,5 V. Tak więc naszą wartość ADC 0 trzeba było przenieść na poziom wartości napięcia około 2,7 V (tak z zapasem dla bezpieczeństwa, oczywiście sam akumulator ma wbudowane zabezpieczenie, jednak chciałem dodatkowo zwiększyć środki ostrożności). Kilka przeliczeń czysto matematycznych i zmiana zakresu przeliczeń wartość ADC na procenty została zmieniona. Kiedy wartość ADC wynosi 0 (tak naprawdę około 300 bitów) mamy napięcie graniczne dolne czyli jak ustawiłem około 2,7 V.

Podczas programowania podobnych niuansów była cała masa. Jednak chciałem dojść do niemalże perfekcji w napisanym kodzie. Liczne optymalizacje i jasno opisane funkcje, to jest to do czego zawsze dążę podczas pisania.

Tymczasem zerknijcie na efekt końcowy.
Zdjęcie 34

Zdjęcie 35

Zdjęcie 36

Zdjęcie 37

Zdjęcie 38

Może jeszcze rozbiorę woltomierz i pokażę, jak wygląda cały zestaw ;)
Zdjęcie 39

Zdjęcie 40

Zdjęcie 41
Jak można zauważyć, wykonanie takiego z pozoru "niewielkiego" projektu może zabrać trochę czasu. Jednakże ten czas poświęcony na realizację takiego przedsięwzięcia poza ogromną satysfakcją przekłada się na zdobycie naprawdę dużej wiedzy oraz nowych doświadczeń. Przechodząc przez poszczególne etapy nauczyłem się nowych zagadnień w języku C, podszkoliłem w projektowaniu w Altiumie, ponadto zdobyłem sporą dawkę wiedzy jeśli chodzi o B4A, nie wspominając już o doświadczeniu płynącym z obrabiania obudowy. Podsumowując jestem zadowolony z błędów, które popełniłem podczas mojej pracy, ponieważ dzięki temu na prawdę dużo się nauczyłem i więcej ich nie popełnię, przynajmniej mam taką nadzieję... ;)

Zanim zakończę artykuł, chciałbym wspomnieć, że nie jest to moje pierwsze podejście do tematu zbudowania woltomierza. Konkretnie to drugie... Za pierwszym razem, poddałem się na etapie programowania, nie mając jeszcze przygotowanej obudowy. Wszystko dlatego iż, nie spisałem konkretnych założeń, nie przygotowałem jakiegokolwiek planu działania, leciałem na żywioł jak to się mówi, a przy takich projektach wypadało by po układać sobie schemat działania ;)

Oto jak wyglądała pierwsza wersja woltomierza...
Zdjęcie 42
 w porównaniu z obecną wersją ;)
Zdjęcie 43

Na sam koniec, zapraszam do obejrzenia, krótkiego materiału wideo, będącego prezentacją powstałego projektu.


Chciałbym jeszcze podzielić się z wami "materiałami", które w dużym stopniu przyczyniły się do sukcesu programowego, mianowicie kilka kursów wideo i troszkę poradników w formie tekstowej:

Zapraszam do komentowania i zadawania pytań, oraz do polubienia mojego kanału na youtube, oraz fanpage na facebooku. Bądźcie zawsze na bieżąco ;)

34 komentarze:

  1. Świetny projekt i świetne wykonanie :) Aż miło patrzeć :)

    OdpowiedzUsuń
  2. Super!:-)
    Świetna robota, gratuluję!
    Widzę, że zapowiada nam się świetny inżynier!

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki za słowa uznania, a co do inżyniera to jeszcze niecałe 3 lata.

      Usuń
  3. Gdzie można zamówić produkcję płytki na podstawie projektu i jaki to mniej więcej koszt?

    OdpowiedzUsuń
    Odpowiedzi
    1. Jeśli chodzi o zaprojektowanie płytki PCB - trzeba przysiąść i popracować samemu ;)

      Jeżeli masz na myśli zlecenie na wyprodukowanie płyty PCB, trzeba poszukać w internecie firmy zewnętrznej. Jeżeli chodzi o ten projekt, to zleciłem wyprodukowanie kilku sztuk firmie Eurocircuits, z jakości wykonanych płytek jestem bardzo zadowolony.

      Usuń
  4. Super Ci wyszedł projekt.

    Mam kilka pytań dot. Twojego projektu:

    Jaką osiągnąłeś dokładność pomiaru napięcia w tym układzie? Czy zastosowanie dzielnika napięcia nie obciąża bardzo badanego układu?
    Zastanawiałeś się nad zastosowaniem układu różnicowego na WO do pomiaru spadku napięcia na danym elemencie w badanym układzie? (taka moja ewentualna sugestia).

    Jaki masz czas odświeżania wyników pomiarów?
    Zakładam, że użyłeś wew. napięcia odniesienia 2.56V?

    Do takiego układu przydałby się jeszcze pomiar temperatury na termoparze (żeby zniwelować obudową jako dodatkowy środek izolacyjny) do pomiaru wydzielanego ciepła z badanego elementu - taka wisienka na torcie;)

    Wraz z wi-fi i bluetooth można stworzyć sieć czujników - projekt po prostu uniwersalny.
    Ogromne gratulacje za wykonany projekt.

    Pozdrawiam.

    OdpowiedzUsuń
    Odpowiedzi
    1. ad.1. Błąd pomiarowy występuje na poziomie około +- 50 mV.

      ad.2. Zastosowanie dzielników napięć w żadnym wypadku nie obciąża układów badanych przeze mnie, ponieważ nie zajmowałem się badaniem napięć na np. bocznikach rezystorowych. Zbudowany przeze mnie woltomierz służy głównie do logowania napięć w jakimś okresie czasu na poziomie od 0 do max 32 V.

      ad.3. Pisząc o spadkach napięć nie miałem na myśli badań spadków takich jak przy pomiarze prądu, dlatego nie potrzebowałem pomiarów różnicowych. Masz jednak rację, że w takim wypadku warto było by z tego skorzystać. Co więcej, do takich celów można by użyć dedykowanych procków, w których są lepsze pomiary różnicowe jak np. ATtiny26 czy ATtiny261.

      ad.4. Czas odświeżania mam ustawiony na pół sekundy, jednak mogę dowolnie ustawiać ten czas programowo.

      ad.5. Użyłem procesora ATmeg88/168/328p z wewnętrznym źródłem odniesienia 1,1 V

      Można dodać jak mówisz pomiar temperatury, ja sam miałem pomysł na zaimplementowanie oscyloskopu. Możliwości rozbudowy urządzenia zależą już tylko od naszej wyobraźni ;)

      Apropos sieci czujników, program na androida, który napisałem można zmodyfikować by odczytywał pomiary z różnych urządzeń na bieżąco, przez co powstała by niezła "sieć pomiarowa".

      Mógłbym się pokusić o dalsze rozwijanie tego projektu, jednak obecnie jestem w trakcie pracy nad kolejnym urządzeniem... Może w przyszłości jak czasu starczy ;)

      Usuń
    2. Witam.

      Mam jeszcze takie pytania dot. programu:
      - ile pamięci uC zajmuje Twój program. Pamięci flash, ram, oraz EEPROM.
      - obsługę wyświetlacza z nokii sam robiłeś, czy skorzystałeś z bibliotek gotowych?
      - pisałeś, że za pierwszym razem z marszu tworzyłeś kod, dopiero za drugim razem określiłeś konkretne założenia - czy narysowałeś/wykonałeś jakiś algorytm działania programu, czy tylko w kilku żołnierskich zdaniach określiłeś zakres swojego programu?

      Jeszcze raz gratulacje za taką dobrą konstrukcję;)

      Usuń
    3. ad. 1. Pamięci flash 6962 bajtów, pamięci RAM 1208 bajtów, a EEPROM 0 bajtów. Dodatkowo podpowiem, że firma atnel wydała bardzo przyjemny program - eclipse gadget, dzięki któremu wygodnie można odczytywać na bieżąco stan zajętości pamięci, jakie mamy taktowanie oraz procesor. Zerknij w link do programu: link

      ad. 2. Wykorzystany przeze mnie wyświetlacz obsłużyłem dzięki bibliotekom wstawionym przez użytkownika SunRiver na forum atnel. Przy okazji, zajrzyj na forum ;) forum atnel

      ad. 3. Długo siedziałem i wymyślałem funkcjonalności, oraz zapisywałem założenia projektu. Układałem sobie w głowie mniej więcej plan działania, oraz algorytm. Więc tym razem jak to określiłeś, no może nie do końca, bo nie w kilku, a w "kilkunastu żołnierskich" zasadach określiłem zakres programu. Jednak następnym razem postaram się wszystko przenieść na "papier", łącznie z algorytmem ;)

      Jeszcze raz dziękuję i zachęcam do własnej próby podjęcia pracy nad jakimś projektem ;)

      Usuń
    4. Ooooo, bardzo mało pamięci flash i ram wziął ten program. Myślałem, że będzie co najmniej 10k we flashu. Dobrze zoptymalizowany, Twój kod jak i pewnie biblioteki od SunRivera (dzięki za przypomnienia o nich bo zapomniałem;) ).
      A co do Eclipse Gadget, to używam i jestem bardzo zadowolony.

      Ja przeważnie po określeniu wstępnego algorytmu i założeń, piszę w punktach kolejność pisania programu - dzięki temu, po dłuższym okresie bezczynności jak wracam do rozpoczętego programu, to wiem co mam skończone, a co muszę jeszcze zrobić.

      Usuń
    5. Właśnie między innymi o to chodzi, żeby po dłuższej przerwie móc spokojnie wrócić do pisania programu i nie główkować, co autor miał na myśli... :D

      Co do samego wymyślenia algorytmu, to uważam, że naprawdę warto go opracować i zapisać. Bo nieraz przy bardziej złożonym projekcie można się pogubić. Przy mniejszych projektach jakoś przejdzie, ale przy większych bardzo wskazane jest zrobić taki schemat blokowy.

      Usuń
  5. Choć szukałem, to nie znalazłem - jaki jest symbol tej super obudowy?

    Świetny projekt.

    OdpowiedzUsuń
    Odpowiedzi
    1. W linku na zdjęciu 10 jest słowo *HAMMOND*. Poszukaj pod tym hasłem. Wygląda na obudowę typ 1591.

      Usuń
    2. Kolega Dariusz trafił w 10 ;) Konkretnie jest to obudowa firmy hammond manufacturing, model 1591B.

      Usuń
  6. Świetny projekt :) i ten battery pack :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki ;)
      Przyznam, że "battery pack" świetnie się trzyma, pod względem mocowania oraz poziomu napięcia na akumulatorze. Po około miesiącu użytkowania napięcie trzyma się na poziomie około 4 V, podczas gdy w pełni naładowana bateria miała około 4,2 V.

      Usuń
  7. Witam!

    Do powiększania otworów można zastosować wiertło stożkowe/stopniowane, tylko nie wiem jak się będzie zachowywało w tworzywie (chociaż w niektórych opisach pisze, że się nadaje do tworzyw sztucznych):
    http://www.weldi.pl/wiertla-stozkowe-i-stopniowe.html
    np:
    http://allegro.pl/wiertlo-stozkowe-stopniowe-hss-tytan-4-20mm-i5535205722.html

    I takie pytanie jeszcze, dot. zastosowanej baterii:
    - można wiedzieć gdzie ją zakupiłeś?

    OdpowiedzUsuń
    Odpowiedzi
    1. Dobry pomysł z takimi wiertłami. Szkoda, że nie miałem pod ręką takich :/

      Odnośnie zakupu akumulatorka, to był prawdopodobnie sklep internetowy TME, lub allegro. Nie pamiętam dokładnie, gdyż dawno kupowałem, jednak na obu stronach można znaleźć takie bateryjki.

      Usuń
    2. W kwestii wiercenia w miękkich blachach, tworzywach itp.
      można spróbować wierteł do drewna zarówno tych
      okrągłych jak i piórowych stosując oczywiście
      odpowiednią prędkość, czyli taką, która nie spali
      tworzywa. W przypadku piórowych można sprecyzować
      średnicę szlifując boki wiertła.


      To tylko sugestia zachęcająca do takiej próby,
      może być ciężko przy tworzywach bardzo kruchych
      ale przy pleksi powinno się sprawdzić zwłaszcza
      przy większych średnicach.

      A tak w ogóle wiercenie należy zaczynać od
      bardzo małego wiertła a potem wiercić już
      właściwą średnicą bo większe średnice przy
      rozpoczynaniu wiercenia mają niespokojne ruchy
      w miejscu napunktowania.

      Andrzej.

      Usuń
    3. Najważniejsze co trzeba mieć na uwadze podczas obrabiania materiałów typu plexi, czy plastikowych (jak np. obudowa do wyżej opisanego urządzenia) to, tak jak piszesz dobranie odpowiedniej prędkości obrotów, bo nie raz przez przypadek stopiłem troszkę materiału i efekt końcowy zdecydowanie był mniej zadowalający.

      Podczas wiercenia trzeba też pamiętać, jak piszesz o rozpoczęciu wiercenia od najmniejszych wierteł.

      Usuń
  8. Trafna uwaga co do obudowy - też nieraz starałem się dopasować obudowę do projektu albo działać na zasadzie "przecież coś na pewno się dopasuje" - szkoda zachodu. Teraz działam tak samo - pierwsza obudowa, później projekt płytki do niej pasujący.

    OdpowiedzUsuń
    Odpowiedzi
    1. Słyszałem o tej zasadzie zanim zacząłem tworzyć urządzenia. Jednak jako zielony "wiedziałem lepiej" :D to moje "wiedzenie lepiej" przełożyło się na niepotrzebne nerwy, stresy i nieraz rezygnację z projektów. Najlepiej polecać początkującym od razu takie podejście do sprawy :D Wiadomo, że jeżeli miało by się dostęp do zewnętrznej firmy, która by się zajęła zrobieniem obudowy pod gotowe urządzenie i to jeszcze za niewielkie pieniądze można by korzystać. Ale jeszcze nie mamy takich możliwości, a szczególnie początkujący, jak min. ja ;)

      Usuń
  9. Bardzo fajny projekt :)
    Czy jest szansa na udostępnienie kodu aplikacji na androida?
    Nie ukrywam, że przydałaby się do mojego projektu :)
    Pozdrawiam

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki :)

      Jeżeli chodzi o kod do aplikacji na androida, to jest on niemalże gotowy jeżeli chodzi najważniejszą część - czyli komunikację z AVR, w serii poradników pod tym linkiem: link

      Co więcej, polecam gorąco obejrzeć tą mini serię. Bo jeżeli tylko raz obejrzysz, to poza samym pozyskaniem kodu, gwarantuję, że zrozumiesz jak działa ten program i w przyszłości sam będziesz mógł pisać nawet bardziej rozbudowane aplikacje, w oparciu o to co już sam umiesz i potrafisz napisać :)

      Usuń
    2. Faktycznie chyba będę musiał się zabrać za tego B4A..próbowałem zrobić to w AppInventorze, ale wygląda to tak jakby tablica mi się przepełniała. Przychodzące dane dziele po znaku "?". Być może błąd leży w samym programie na avr :/
      Jestem początkującym w programowaniu tak btw. ;)

      Usuń
    3. Muszę Ci potruć jeszcze trochę ;)
      Możesz wskazać w materiałach na YT w poradnich o B4A, jak zrobić to mniej więcej w taki sposób jak u Ciebie?
      Na razie jestem na Part 9 poradnika o B4A.
      Czy dane wysyłane z uC wysyłasz przez funkcję uart_puts? Czy odbierasz i dzielisz dane ADC oraz przeliczasz do wartości napięcia już w telefonie? Niestety w AppInventorze wszystkie te korygujące dane kodowania ANSI zwyczajnie się wyświetlały, nie dając żadnego rezultatu.
      Pozdrawiam ;)

      Usuń
    4. Nie jestem pewien czy chodzi Ci o sam wygląd aplikacji czy raczej o programowe rozwiązanie.

      W uC wykonuję wszystkie przeliczenia wartości ADC, uśredniania itd. następnie "gotowy do wyświetlenia wynik" zamieniam na string i dopiero wtedy go wysyłam przez funkcję uart_puts.

      Usuń
  10. Jeszcze takie pytanie dot. zastosowanego pakietu li-poly, oraz atb-lion. Czy zastosowany pakiet li-poly zawiera wewnątrz układ kontrolujący stan ładowania i rozładowywania ogniw? Jeżeli tak to jak wygląda współpraca takiego pakietu ogniw z modułem ATB-lion (bądź z innymi modułami ładująco-kontrolującymi te ogniwa)?
    Bo z tego co się zorientowałem to większość dostępnych pakietów posiada wewnątrz (pakietu) układ kontrolujący stan naładowania. Jestem ciekaw czy są jakieś problemy gdy taki pakiet zostanie podłączony do zewnętrznego modułu kontrolującego.

    OdpowiedzUsuń
    Odpowiedzi
    1. Akumulator, który wykorzystałem w mierniku - Li-poly posiada układ zabezpieczający o jakim napisałeś, a co do "współpracy" z modułem (jest to na chwile obecną już stara wersja) ATB-lion to na odpowiednio wyprowadzonych pinach sprawdzam wartości ADC.

      Co do drugiej części pytania, to polecam przeczytać informacje o najnowszej wersji modułu ATB-lion link ;)

      Usuń