Skocz do zawartości

Zegar widmowy - porady


zaslon

Pomocna odpowiedź

Witam,

mam zamiar skonstruować zegar widmowy w oparciu o płytkę Discovery VL (STM32VLDISCOVERY). Mam już wstępną koncepcję, ale chciałbym rozwiać niektóre z moich wątpliwości. Niektórzy mogliby się zastanowić, dlaczego akurat STM32 - jestem zainspirowany kursem STM-ów, który pojawił się na Forbocie.

Koncepcja:

- budowa zegara widmowego opartego na obracającym się śmigle.

- płytka Discovery VL przymocowana do obracającego się śmigła (bardzo mi zależy na wykorzystaniu tej płytki)

- wykorzystanie silnika bezszczotkowego (lub wiatraczka komputerowego) do obracania śmigła

- dioda IR wykorzystywana do obliczania częstotliwości obrotu śmigła w celu poprawnego sterowania diodami

- 24 (lub 32) diody LED na śmigle (wstępna koncepcja przedstawiona na rysunku dołączonym do posta)

- wykorzystanie rejestru przesuwnego 74HC595 do obsługi diod LED

- wykorzystanie modułu bluetooth do obsługi dwóch "wirtualnych przycisków" służących do zdalnego ustawiania godziny (aplikacja w komputerze).

- zasilanie bateryjne płytki Discovery, modułu bluetooth oraz diod LED

- osobne zasilanie (sieciowe) do silnika

Wątpliwości:

1. Rozmieszczenie elementów na płytce - która z przedstawionych koncepcji (rysunek dołączony do posta) byłaby optymalna? (ad. koncepcja "d": bateria umieszczona jest nad lub pod płytką)

2. Jakie zastosować źródło zasilania mikrokontrolera, bluetooth oraz diod:

a) bateria czy szczotka umieszczona na osi silnika (mam wrażenie, że z baterią będzie mniej kłopotu, gdyż nie ma problemu iskrzenia szczotek oraz przerw w zasilaniu)

b) jeśli bateria, to li-pol (np. Redox 3.7V 700mAh) czy wystarczy Duracell 9V 6F22 (450mAh)? Duracell jest mniejszy, lecz nie wiem, czy nie będzie wytrzymał zbyt krótko przy ciągłym miganiu 24 (lub 32) diodami...

3. Jaki silnik (moment obrotowy, przekładnia) dobrać, aby móc obracać śmigłem z prędkością wystarczającą do komfortowego oglądania obrazu?

4. Czy moduł bluetooth przymocowany do bardzo szybko obracającego się śmigła będzie poprawnie działał? (zamontowany tak, jak na rysunku dołączonym do posta)

5. Czy potrzeba drugiego mikrokontrolelera, który będzie sterował obrotami silnika przy starcie (łagodny start silnika)?

Koncepcje rozmieszczenia elementów:

Link do komentarza
Share on other sites

1. To trochę jakbyś projektował samolot. Ponieważ konstrukcja musi być wyważona statycznie a wiesz już przecież gdzie ma być środek ciężkości, musisz wziąć wszystkie docelowe elementy razem ze złączami, kabelkami itp, umieścić je na kawałku laminatu i przesuwać do tej pory aż układ będzie w równowadze. Tutaj nasze zdanie nie ma nic do rzeczy.

2. Skoro znasz pojemności źródeł to jaki problem policzyć długotrwałość pracy? Załóż sobie prądy diodek (np. stale świeci ich 50%), procesora, i całej reszty, zsumuj i tyle. Jeśli prąd wyjdzie większy niż 50mA, to o baterii 6F22 raczej zapomnij.

3. Telewizja kineskopowa miała 50Hz, monitory komputerowe mają od 60Hz w górę. Raczej będzie trudno osiągnąć takie obroty, bo po prostu zegar będzie szumiał i przeszkadzał chyba, że zrobisz opływową obudowę "śmigła" lub zamkniesz go w szklanym słoiku. Myślę, że 20Hz (1200 obr/min) to minimum. I tak nie da się na to patrzeć ciągle, a przez chwilę to da się wytrzymać i przy 20Hz.

4. Będzie działał, ale pomyśl o odbiorniku podczerwieni. Zapewni łączność jednokierunkową z "bazą" (pilot TV?) a jest dużo prostszy i oszczędniejszy mocowo.

5. Wszystko zależy od tego jak tę konstrukcję zrobisz. Jeśli wszystko będzie na ślinę, to coś się przesunie, zaburzy wyważenie i całość odleci przez okno. Pytanie jest jak rozumiem inne: czy w ogóle potrzebny jest soft start? Moim zdaniem użycie zwykłego silniczka DC bez przekładni uprości konstrukcję a docelowe obroty (>1000obr/min) już łapią się w sensownym zakresie prędkości takich silników. No i regulacja jest trywialna a soft start - przy odpowiednio słabym silniczku - niepotrzebny. Przekładnia jest głośna.

Link do komentarza
Share on other sites

Ja bym przemyślał jeszcze raz użycie zestawu discovery. On jest baardzo ciężki, nie będzie prosto go zbalansować, rozpędzić, a nawet utrzymać przymocowanego przy siłach odśrodkowych jakie się pojawią. Nie bez powodu 99% takich wyświetlaczy jest na 1 płytce.

Link do komentarza
Share on other sites

Tak sobie jeszcze pomyślałem, że może warto byłoby zrobić coś ciekawszego - jakiś szczegół konstrukcyjny który odróżniałby ten jeden zegar/wyświetlacz od innych publikowanych w sieci. Np. zasilanie. Bateria lub akumulator to oczywisty pomysł. Jest jednak ciężka, starcza w sumie na niewiele i trzeba kupować nowe lub w ostateczności ładować. A gdyby na obracający się dysk przenieść zasilanie bezprzewodowo?

Najprostszy sposób jaki mi się nasuwa, to taka konstrukcja:

1. Z tyłu, na słupku montujemy silnik napędowy, np. zwykły DC ew. wyposażony w prosty regulator obrotów na 555 i tranzystorze MOSFET.

2. Na jego osi osadzamy dysk/śmigło zawierające elektronikę, diodki itd.

3. Na przedniej ścianie dysku, dokładnie w osi osadzamy kolejny silnik, np. DC albo 3-fazowy, ale tym razem jego obudowę/stojan montujemy do dysku.

4. Wystającą oś silnika mocujemy na sztywno do słupka podpierającego dysk z przodu.

Dzięki takiej konstrukcji, dysk obracając się kręci silnikiem przednim a ponieważ jego wirnik stoi w miejscu, na zaciskach silnika dostajemy energię potrzebną do działania elektroniki. Oczywiście w przypadku silnika DC będzie potrzebny jakiś kondensator i stabilizator napięcia a w przypadku silnika 3-F również jakiś prostownik, ale to szczegóły. Elektronikę wypada wyposażyć w zegarek RTC z malutką baterią pastylkową lub kondensatorem do podtrzymania czasu w przypadku przerw w zasilaniu, ale każdy zegarek mieć to powinien. Warro zauważyć, że wirujący dysk - podobnie jak wirnik śmigłowca - stanowi potężny magazyn energii i odcięcie zasilania silnika głównego nawet na kilka sekund nie powinno skutkować przerwą w pracy elektroniki i LEDów. Moim zdaniem to fajne.

Drugi pomysł to umieszczenie na obwodzie dysku (lub na końcach ramion śmigła - zależnie od wykonania) cewek. W stojanie, gdzieś przy podstawie urządzenia powinien znajdować się silny magnes (lub kilka umieszczonych przeciwsobnie, w osobnych obwodach magnetycznych) indukujący podczas przejścia cewki impuls elektryczny. Cewki, odpowiednio ze sobą połączone stanowiłyby odpowiednik stojana silnika w wersji poprzedniej. Dodanie prostownika pełnookresowego, kondensatora umożliwiającego podtrzymanie pracy między aktywnością kolejnej cewki i stabilizatora dopełniłoby tę część projektu. Niestety nic za darmo. Żeby przepchnąć obciążoną prostownikiem cewkę przez pole magnetyczne i dostać energię elektryczną trzeba wykonać pewną pracę a więc będzie opór mechaniczny. Dysk dostawałby "kopniaki" hamujące w chwilach przechodzenia cewek przez magnesy, ale gdyby jego masa była odpowiednio duża, być może układ nie drgałby jakoś strasznie.

Oczywiście energetycznie oba układy są równoważne. Jeśli potrzebujemy ileś energii elektrycznej "na pokładzie" dysku, to musimy ją dostarczyć i przekazać, więc silnikowi napędowemu będzie o tyle ciężej. Najlepszą sprawność uzyskamy zapewne, gdy jako "tunelu energetycznego" użyjemy silnika 3F, komutator silnika DC wprowadza straty zarówno mechaniczne jaki i elektryczne, a rozwiązanie z samodzielnie robionymi cewkami jakoś najmniej do mnie przemawia...

Kolejnym pomysłem jest transformator ze sprzężeniem powietrznym. Cewka "nadawcza" mogłaby mieć formę pierścienia osadzonego osiowo wokół tylnego silnika napędowego a podobna cewka odbiorcza umieszczona na dysku odbierałaby energię. Potem już tylko prostownik, no wiadomo, typowy zasilacz. Zaletą tego pomysłu jest brak jakichkolwiek części (i koniecznego podparcia) z przodu. Robiłem takie systemy i temat jest jak najbardziej do ogarnięcia.

Co o tym myślicie? Może jakieś inne pomysły? Co prawda to nie robot, ale tym bardziej można puścić wodze fantazji 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Aby znacznie poprawić komfort oglądania LEDowych napisów warto pomyśleć o zrobieniu więcej niż jednego rzędu rysującego obraz. Np. wiatrak składający się z 4 linii LED da w rezultacie 4-krotną poprawę częstotliwości odświeżania. Dwa rzędy to też już coś. Wtedy można obniżyć prędkość wirowania i zmniejszyć hałas zachowując (a nawet podnosząc) frame rate. Oczywiście kolejne rzędy LED muszą trafiać ze swoimi pixelami w te same miejsca przestrzeni, ale to już zwykłe programistyczne rzemiosło. Dodatkowym atutem jest zmniejszenie prądu impulsowego driverów. Ten sam punkt w przestrzeni będzie "odwiedzany" przez diodkę kilka razy częściej niż przy jednej linii rysującej więc aby zachować tę samą jasność, wystarczą mniejsze jasności LEDów i mniejsze prądy. To zmniejsza zakłócenia na zasilaniu no i umożliwia sterowanie LEDów ze zwykłych układów HCMOS bez uciekania się do driverów tranzystorowych czy zamęczania biednych HC594 obciążaniem po 50mA na pin. Oczywiście globalnie oszczędności prądu nie ma żadnej, bo ten zależy jedynie od liczby jednocześnie świecących pixeli i ich jasności.

Link do komentarza
Share on other sites

Dzięki wielkie za wszystkie odpowiedzi i wskazówki.

Płytka Discovery VL moim zdaniem wcale nie jest taka ciężka, a jej wymiary to 4,3 na 8,5 cm. Nie zmienia to faktu, że umieszczenie jej na obracającym skrzydle jest dość ryzykownym rozwiązaniem dlatego przemyślałem jeszcze raz koncepcję z rozmieszczeniem elementów i wpadłem na pomysł aby elementy rozłożyć na dwóch warstwach. (płytkę discovery, baterię - dolna warstwa, diody LED oraz moduł bluetooth na śmigle - górna warstwa)

Rysunek poglądowy.

Pomysł z komunikacją za pomocą IR jest całkiem fajny ale oprócz godziny chciałbym jeszcze wysyłać różne wiadomości / komunikaty, które miałyby się wyświetlić. Dlatego raczej myślę tutaj o bluetoothie, który będzie komunikował się z laptopem, a dokładniej zamierzam napisać aplikację do ustawiania daty, godziny i wysyłania wiadomości.

W kwestii zasilania: te pomysły są bardzo ciekawe ale niestety nigdy wcześniej nie robiłem zegara widmowego, nie mam aż tak wiele doświadczenia. Na tym etapie wolałbym uzyskać główną funkcjonalność, a później gdy już zdobędę doświadczenie i wykonam jeden taki zegar, pomyślę o drugiej wersji, która będzie udoskonalona i w której chciałbym zastosować, któraś z Twoich propozycji.

Silnik:

Co myślicie o tym modelu? Czy będzie on odpowiedni do tego projektu?

Silnik Graupner SPEED 280 6V,

Obroty : 14,000 obr./min.

Max. pobór prądu : 1,6 A

Średnica wału : 2 mm

Link do komentarza
Share on other sites

Jasne, zrobisz jak uważasz.

Co do "pójścia" projektu w grubość: gdy wirująca rzecz dostaje trzeciego wymiaru i nie można już rozpatrywać jej jako płaskiej, dwuwymiarowej figury, musisz nowy wymiar także wziąć pod uwagę podczas projektowania i wyważania. Gdy popatrzysz na ostatni, dolny swój rysunek i przetniesz go pionową linią wzdłuż osi silnika, to obie połówki - lewa i prawa - powinny mieć swoje środki ciężkości umieszczone nie tylko w tej samej odległości od osi obrotu, ale także na tej samej wysokości czyli być równo odległe od tej jasnoniebieskiej podstawy na której stoi silnik. Inaczej wytworzą się siły próbujące przechylać wirujący dysk co spowoduje - poprzez silnik - drgania całości. Z tego powodu wyważanie kół samochodowych następuje w dwóch etapach, a ciężarki doważające montowane są zarówno po wewnętrznej jak i zewnętrznej stronie felgi. Ty możesz ostatecznie wyważać swoje śmigło przez nawiercanie laminatu po obwodzie.

Co do samej konstrukcji: pamiętaj o oporach aerodynamicznych i wciąż miej na uwadze kierunek poruszania się każdej części. Każda krawędź, kant lub niepotrzebny element to dodatkowy opór i hałas. Zwykle zegar pracuje 24h/dobę więc nie może przeszkadzać w codziennym życiu w domu. Jeżeli dajesz tasiemkę przewodów, niech będzie ona ułożona równolegle do opływających ją strug powietrza a nie jak na rys. środkowym - w poprzek. Z tego samego powodu lepiej sprawdzą się diody SMD a najlepiej, gdybyś cały tył: Discovery wraz z baterią i modułem BT zamknął w walcowej puszce wygiętej np. z cienkiej balsy. I tak planujesz - jak widzę, płytkę w formie koła.

Diody LED w pobliżu środka obrotu będą bezużyteczne. Będą zakreślać tak małe okręgi, że nic na nich nie pokażesz. Moim zdaniem użyteczna część takiego wyświetlacza zaczyna się dopiero od połowy promienia albo nawet jeszcze trochę dalej.

EDIT:

Silnik powinien dać radę, choć lekkie to to nie będzie. Minimalizuj opory a obrotami na biegu jałowym się nie podniecaj. I tak cała moc będzie szła na hałasowanie wiatrem 😐 W każdym razie zaprojektuj solidną podstawę i sztywne mocowanie silnika. Gdzie będzie czujnik położenia? Procesor musi znać swoją pozycję na okręgu a do tego potrzebuje przynajmniej jednego punktu odniesienia.

Link do komentarza
Share on other sites

Cześć, wracam po dłuższej nieobecności.

W tym czasie udało mi się skonstruować zegar widmowy, który ma LED-y po jednej stronie śmigła. Póki co, wszystko całkiem nieźle działa. Z racji prostoty konstrukcji zastosowałem zasilanie bateryjne (Duracell 9V) - przy większych prędkościach boję się, że się odczepi, ale jest w miarę stabilnie 😉 Ponieważ chcę obsługiwać ze śmigła Bluetooth, do zasilania śmigła użyłem napięcia 3.3V (stabilizator napięcia LM33). Na śmigle znajduje się ATmega328P, która jest odpowiedzialna za sterowanie diodami LED oraz odczytywanie przejścia śmigła przez punkt odniesienia (fototranzystor na śmigle reaguje na zapaloną diodę IR zamontowaną do nieruchomej podstawy zegara). Gdy już ukończę projekt, to postaram się wszystko dokładniej opisać i wrzucić jakieś zdjęcia/filmy.

Dotarłem do procesu testowania, tzn. kalibracji wyświetlanego obrazu i tutaj napotkałem problem - obraz przesuwa się na boki (w kierunku wskazówek zegara lub odwrotnie do kierunku wskazówek zegara). Jak temu zaradzić?

Mój program testowy powinien wyświetlać na zegarze krzyż (czy może raczej plus +). Ogólny cel jest osiągnięty - krzyż jest wyświetlany, lecz nie jest stabilny. Wraz z obrotami, obraz przesuwa się na boki - w kierunku wskazówek zegara lub odwrotnie do kierunku wskazówek zegara. Oto kod programu:

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define DS_PORT    PORTB
#define DS_PIN     0
#define ST_CP_PORT PORTB
#define ST_CP_PIN  1
#define SH_CP_PORT PORTB
#define SH_CP_PIN  2

#define DS_low()  DS_PORT&=~_BV(DS_PIN)
#define DS_high() DS_PORT|=_BV(DS_PIN)
#define ST_CP_low()  ST_CP_PORT&=~_BV(ST_CP_PIN)
#define ST_CP_high() ST_CP_PORT|=_BV(ST_CP_PIN)
#define SH_CP_low()  SH_CP_PORT&=~_BV(SH_CP_PIN)
#define SH_CP_high() SH_CP_PORT|=_BV(SH_CP_PIN)

//Define functions
//===============================================
void ioinit(void);
void timer_init(void);
void output_led_state(unsigned long int __led_state);
void draw_clock_face(void);
void draw_quarter_line(double small_delay);

//===============================================

//Define global variables
volatile double period = 500000.0; 		// period of a single rotation (us); starting value - 500000us
volatile unsigned char rot_num = 12; 	// number of rotations counted by a phototransistor;
									// the number is reset by timer interrupt (after computing frequency)
double counting_time = 6000000.0;		// the time of counting rotations (us);
									// after that time there is an interrupt
volatile double delay = 500000.0;		// delay used in function _delay_us(); 

char led_num[16] = {7,0,1,2,3,4,5,6,15,14,13,12,11,10,9,8};

int main (void)
{	
timer_init(); // setup timer
ioinit(); //Setup IO pins and defaults

while(1)
{
	draw_clock_face();
}
}


void ioinit (void)
{
DDRB  = 0b00000111; //1 = output, 0 = input
PORTB = 0b00000000;
DDRD  = 0b11111011;   // set PD2 to input
PORTD = 0b00000100;   // set PD2 to high

EICRA |= (1<<ISC01) | (1<<ISC00); // zbocze narastajace na INT0 gen przerwanie
EIMSK |= (1<<INT0); // włączenie INT0

sei();                    // turn on interrupts
}

void output_led_state(unsigned long int __led_state)
{
SH_CP_low();
ST_CP_low();
for (unsigned long int i=0;i<16;i++)
{
	if((_BV(i) & __led_state) == _BV(i))
		DS_high();
	else  
		DS_low();


	SH_CP_high();
	SH_CP_low();
  	}
ST_CP_high();
}


void timer_init(void)
{
// OCRn = (8000000 / 1024)*6-1 = 46874
// desired time = 6s
// 8MHz, 1024 - prescaler
// OCR1A = 46874 = 0xB71A

OCR1A = 0xB71A;

TCCR1B |= (1 << WGM12);
// Mode 4, CTC on OCR1A

TIMSK1 |= (1 << OCIE1A);
//Set interrupt on compare match

TCCR1B |= (1 << CS12) | (1 << CS10);
// set prescaler to 1024 and start the timer
}


void draw_clock_face(void){
unsigned char i = 0;
unsigned char num_of_parts = 4;
//double small_delay = delay/60;
//double part_delay = delay/num_of_parts-small_delay*num_parts;
double part_delay = 0.9*delay/num_of_parts;
double small_delay = 0.1*delay/num_of_parts;

for(i=0; i<num_of_parts; i++){
	draw_quarter_line(small_delay);
	_delay_us(part_delay);
}
}

void draw_quarter_line(double small_delay){
output_led_state(0xFFFF);
_delay_us(small_delay);
output_led_state(0x0000);
}


ISR (INT0_vect)
{
rot_num++; // phototransistor has detected IR diode
}


ISR (TIMER1_COMPA_vect)
{
if(rot_num != 0)
	period = counting_time / rot_num; // compute period in ms
else
	period = 500000.0;

delay = 0.95*period;
rot_num = 0;				// reset rot_num
}

Oto pokrótce, jak jest skonstruowany ten program:

  • * w pętli nieskończonej w int main() wywoływana jest funkcja draw_clock_face(), która w aktualnej formie odpowiada za jednorazowe wyświetlenie krzyża (powinna trwać tyle, ile wynosi okres obrotu śmigła),
  • * w programie są włączone dwa przerwania: jedno (ISR (INT0_vect)) reaguje na zbocze narastające na fototranzystorze (czyli przy spotkaniu się z promieniem diody IR), a drugie (ISR (TIMER1_COMPA_vect)) jest wywoływane co 6 sekund,
  • * przerwanie ISR (INT0_vect) służy do zliczania ilości obrotów śmigła,
  • * przerwanie ISR (TIMER1_COMPA_vect) służy do obliczania co 6 sekund okresu obrotu śmigła (pod warunkiem że ISR (INT0_vect) w czasie 6 sekund cokolwiek zliczy) i resetuje ilość zliczonych obrotów (żeby rozpocząć no wy cykl zliczania obrotów),
  • * funkcja output_led_state(unsigned long int) odpowiada za wyświetlenie zadanej sekwencji 16-bitowej za pomocą rejestrów przesuwnych.

Czy ma ktoś pomysł jak mogę poprawić precyzję wyświetlania i czy obrana przeze mnie koncepcja na wyświetlanie obrazu jest właściwa?

Link do komentarza
Share on other sites

Acha, czyli jak rozumiem Twoje rysowanie bazuje na wyznaczonym okresie obrotów i próbuje być z nim zgodne w sensie długości wykonania. Czy tak?

Takie coś nigdy nie będzie zgodne jedno z drugim, bo to trochę jakbyś oczekiwał, że wszystko jest mierzone i obliczanie idealnie. A tak nie jest.

Funkcja rysująca - tzn. jej wywołanie musi być synchronizowane zdarzeniem przejścia przez diodę IR. Wtedy i tylko wtedy masz jeden bezwzględny punkt w czasie gdy wiesz gdzie jesteś na kole. Po prostu wołaj tę funkcję gdy wykryjesz przejście. Przerwanie obsługujące impuls od fototranzystora może ustawiać jakąś flagę a main ją sprawdzać. Natomiast czas wykonania tej funkcji (czyli de facto) czas opóźnień między zmianami obrazów na LEDach bardzo słusznie uzależniłeś od zmierzonego okresu obrotu.

W nowej wersji początek obrazu będzie zawsze w dobrym miejscu i pływania lewo-prawo nie będzie, natomiast od jakości pomiaru okresu będzie zależeć jedynie "rozciągnięcie" obrazu wokół obrotu, a to nie jest już takie krytyczne. Im zrobisz to lepiej tym rozciąganie będzie mniej pływało.

Jakieś zdjęcie? Film? 🙂

EDIT: Musisz zapewnić (przez modyfikację obliczeń?), by funkcja rysująca wykonywała się zawsze odrobinę krócej niż okres obrotu. To może być nawet 1% czasu, ale musi zostać margines na jej poprawne zakończenie i ponowne oczekiwanie na początek cyklu.

Link do komentarza
Share on other sites

Dzięki wielkie, właściwie przed tym zanim napisałeś udało mi się wpaść na dokładnie ten sam pomysł 🙂 faktycznie jest dużo lepiej. Co do filmu to myślę, że jeszcze przyjdzie na to czas, teraz staram się wykonać więcej testów i pracuje na wyświetlanymi wzorami.

Pomyślałem o tym, żeby okres wyliczać jako średnią aktualnego okresu i poprzedniego okresu. Niestety dopasowywanie do nowej prędkości było bardzo wolne.

Wydaje mi się, że obraz jest już w miarę stabilny. Chciałbym się teraz skupić na wyświetlaniu konkretnych wzorów np. tarczy zegara ze wskazówką albo napisów. Widziałem w podobnych projektach, że jedną z metod jest reprezentacja tarczy w postaci współrzędnych biegunowych.

Rozumiem, że to niezbędny element aby wyświetlić ww. rzeczy?

Link do komentarza
Share on other sites

O, to fajnie, że jest poprawa.

Tak, biegunowy jest w tym przypadku najbardziej naturalnym układem. Ponieważ kąt bezpośrednio przekłada się tu na czas, można tę część położenia trzymać w postaci np. procentów. To nie muszą być stopnie. Np. 25% (czyli 0.25) to może być położenie godziny 3, a 0.75 to godzina 9. Wtedy przeliczanie położenia kątowego na czas jest jedynie mnożeniem ułamka właściwego przez czas ostatniego okresu. Jeżeli Twój start nie jest sprzętowo na godzinie 12 (tj. w chwili otrzymywania impulsu z fototranzystora pasek LED nie jest pionowo w górze), możesz przed mnożeniem dodawać do współrzędnej kątowej offset równy położeniu diody IR, oczywiście dodawanie modulo 1.

Promień czyli odległość od środka to już raczej zwykły numer piksela (diody LED) - tak jest najprościej i najszybciej.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.