Skocz do zawartości

jolo

Moderator globalny
  • Liczba zawartości

    9 066
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    455

Zawartość dodana przez jolo

  1. Programy (Maxim -> Filter -> Kernel filters -> Hot pixel albo mapa hot pikseli, PixInsight -> Process -> Cosmetic correction) usuwają hot piksele z materiału. Nowe sensory mają na tyle niewielki i równomierny prąd ciemny matrycy, że faktycznie nie ma sensu odejmowanie darków, a jedynie usunięcie hot pikseli. Odejmowanie biasów ma sens jeśli wykazują one powtarzalne nierównomierności i zazwyczaj tak jest. Odejmowanie biasów ani darków nie usuwa szumu z materiału. Dobrze zrobione darki usuną nam hot piksele, ale można je też usunąć w inny sposób. Kalibracja biasami i darkami ma na celu usunięcie powtarzalnych zakłóceń i niejednorodności dodawanych przez sensor do każdej klatki. Zabrzmi to może dziwnie, ale kalibracja biasem i darkiem zwiększa nam ilość szumu w materiale (jeśli pominiemy hot piksele) dlatego warto mieć sporo klatek kalibracyjnych, żeby dodatkowo dodany szum kalibracyjny był jak najmniejszy. Biasów można mieć kilkadziesiąt (jeśli używamy również flaty szum z klatek master bias jest dodawany dwukrotnie, dlatego warto mieć sporo biasów). Darków tym więcej im więcej mamy klatek z materiałem, minimum 10, lepiej więcej, a najlepiej w ogóle nie używać darków. Jeśli nasz master dark wygląda jednolicie i ma tylko hot piksele, to najlepiej je usunąć programowo, albo w trakcie zbierania materiału stosując dithering. Nie bardzo, z tego co piszesz wynika, że aparat sam naświetla 'darka' po zrobieniu zdjęcia i odszumia materiał. Jeśli się tego nie da wyłączyć, to dodatkowa kalibracja nic nie da już.
  2. jolo

    Kącik AA (Astro Arduino)

    W dzisiejszym odcinku pomiary. Do Arduino podłączymy dwa popularne czujniki: tani i precyzyjny choć niezbyt szybki czujnik temperatury DS1820, oraz nieco droższy czujnik temperatury i wilgotności DHT22. Oba podłącza się w ten sam sposób jak na schemacie (rezystory o wartości 4.7kohm lub w pobliżu): i tyle, reszta w kodzie. Nasz kod nieco spuchł od ostatniego razu - doszły dedykowane biblioteki do obsługi czujników, biblioteka Timer która co sekundę odczytuje dane z czujników i zapisuje je do lokalnych zmiennych w Arduino oraz funkcja obliczająca temperaturę punktu rosy dla danych odczytanych z czujników. W sekcji setup inicjujemy port szeregowy oraz sprawdzamy czy czujniki zostały podłączone i wykryte. Dodatkowo zostaje zainicjowany timer, który co sekundę będzie wywoływał odczyt danych w funkcji updateSensors. W sekcji loop standardowo nasłuchujemy port szeregowy oraz aktualizujemy obiekt timer odpowiedzialny za wywołanie odczytu danych. Jeśli na porcie szeregowym pojawi się komenda 'M' przesyłamy z powrotem odczytane dane rozdzielone średnikiem. Kod wygląda tak: #include <OneWire.h> #include <DallasTemperature.h> #include <dht.h> #include <Timer.h> #define DHT22_PIN 2 #define DS8120_PIN 3 #define PWM1_PIN 5 #define PWM2_PIN 6 OneWire oneWire(DS8120_PIN); DallasTemperature sensors(&oneWire); DeviceAddress insideThermometer; dht DHT; Timer timer; String inputString = ""; // zmienna przechowująca polecenia z portu szeregowego boolean stringComplete = false; // oznacza zakończenie transmisji komendy boolean DS1820connected = false; boolean DHT22connected = false; float currentTemp; float currentHum; float currentDewpoint; float currentDSTemp; void setup() { Serial.begin(9600); inputString.reserve(6); int chk = DHT.read22(DHT22_PIN); if(chk == DHTLIB_OK) DHT22connected = true; sensors.begin(); DS1820connected = sensors.getAddress(insideThermometer, 0); if(DS1820connected) sensors.setResolution(insideThermometer, 10); timer.every(1000, updateSensors); } void loop() { if (stringComplete) { if(inputString.charAt(0) == 'M') { Serial.print(currentTemp); Serial.print(';'); Serial.print(currentHum); Serial.print(';'); Serial.print(currentDewpoint); Serial.print(';'); Serial.println(currentDSTemp); } inputString = ""; stringComplete = false; } timer.update(); } void updateSensors() { if (DS1820connected) { sensors.requestTemperaturesByAddress(insideThermometer); // przy 10 bitowej dokładności trwa 188ms currentDSTemp = sensors.getTempC(insideThermometer); } if (DHT22connected) { DHT.read22(DHT22_PIN); currentTemp = DHT.temperature; currentHum = DHT.humidity; currentDewpoint = dewPoint(currentTemp, currentHum); } } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } } // dewPoint function NOAA // reference (1) : http://wahiduddin.net/calc/density_algorithms.htm // reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm // double dewPoint(double celsius, double humidity) { // (1) Saturation Vapor Pressure = ESGG(T) double RATIO = 373.15 / (273.15 + celsius); double RHS = -7.90298 * (RATIO - 1); RHS += 5.02808 * log10(RATIO); RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ; RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ; RHS += log10(1013.246); // factor -3 is to adjust units - Vapor Pressure SVP * humidity double VP = pow(10, RHS - 3) * humidity; // (2) DEWPOINT = F(Vapor Pressure) double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558 - T); } W załączniku użyte biblioteki (prosto z Internetu). W następnej części podepniemy pod Arduino wyświetlacz LCD żeby uniezależnić się trochę od portu szeregowego, a potem dane z czujników (temperaturę, wilgotność i punkt rosy) wykorzystamy do sterowania przez wyjścia PWM grzałek oraz wentylatorów chłodzących lustro :) PS - oczywiście opóźnienie 188ms wprowadzane przez odczyt z czujnika DS1820 jest zazwyczaj niedopuszczalne. W kolejnych odcinkach pokażę, jak dokonywać odczytu asynchronicznie, czyli bez blokowania kodu w oczekiwaniu na wynik pomiaru. DallasTemperatureControl.zip DHT.zip OneWire.zip Timer.zip
  3. Bardzo ładnie wyszło. To są pojedyncze klatki 30s, bo nie piszesz nigdzie że składałeś? PS - pojedyncze - ślepy jestem. Tym większe wrażenie :)
  4. Niebo nie dopisało na wizualne testy 10" f/4, ledwo Mały Wóz było widać okiem :( Kilka celów uchwyconych, najładniej wypadły M13 i M57.

    1. Jacek E.

      Jacek E.

      Dawaj do Ustki - trzecia nocka super - masz 3 pokoje do wyboru w tym jeden z psem ;)

    2. jolo

      jolo

      Nie dam rady tym razem a do urlopu jeszcze trochę. Ale na przyszłość wybieram ten z psem :)

    3. Jacek E.
  5. Sięgasz gdzie inni nic nie widzą :) Będziesz też zbierał pozostałe części tej pętli? Życzę pogody!
  6. Posadziłem dziś w końcu 10" f/4 na EQ6 - astrofoto raczej nie pójdzie, ale może jakieś pierwsze szlify w wizualu dziś zdobędę :)

    1. Pokaż poprzednie komentarze  4 więcej
    2. jolo

      jolo

      Będę testował, ale nie wygląda to zbyt sztywno na głowicy.

    3. ignisdei

      ignisdei

      Jeśli będziesz sprzedawać w przyszłym roku chętnie eq-szóstkę kupię od ciebie ;)

    4. jolo

      jolo

      Będę pamiętał, ale mam ją od kilku miesięcy dopiero i się zapoznajemy :)

  7. Polowanie na M13 zaczęte :) 300s, newton 150/740, Atik383L+, niebo 5mag - PIxinsight autostretch
  8. Supernowa znacznie nam przygasła:
  9. Wybuchła niepostrzeżenie :) PS - poprawiona błędnie wyznaczona jasność
  10. Chodzi o pozycję przy obserwacjach - newton na montażu paralaktycznym będzie zajmował różne pozycje a dodatkowo okular i wyciąg będzie raz z jednej raz z drugiej strony co będzie wymagało obracania tuby w obejmach. W dobsonie okular masz zawsze z jednej strony i zmienia się tylko jego wysokość nad ziemią. Montaż paralaktyczny sprawdzi się w wizualu przy obserwacjach przez instrumenty, które mają wyciąg z tyłu jak refraktory, maczki czy SCT. Na tym moja wiedza w wizualu się kończy, może koledzy obserwatorzy coś jeszcze dodadzą :)
  11. Moje doświadczenie w wizualu jest mierne, ale napisałeś też coś o docelowym astrofoto - jak to widzisz w Twoim przypadku? To zupełnie dwie różne pola astronomii amatorskiej, których nie da się połączyć w jednym zestawie. Za 1/3 założonego budżetu kupisz nowego dobsona 8" albo używanego 10" który sprawdzi się w obserwacjach wizualnych. Za resztę możesz kupić nowego EQ5 z napędami do astrofoto obiektywami i lustrzanką, albo używanego HEQ5 SynTrek, który będzie już stanowił dobrą bazę do astrofotografii. Tak jak napisał Robert - ten maczek do obiektów głębokiego nieba nie nada się za bardzo, a z kolei ten newton na EQ5 nie nada się do astrofoto (za słaby montaż i bez napędów), a do wizuala będzie się trzeba z nim trochę pogimnastykować.
  12. W załączniku wersja 2.1.1 wsadu Arduino z poprawionym błędem w obliczaniu wartości PWM w trybie AUTO. Sterownik ASCOM pozostaje bez zmian. Użytkownicy którzy nie będą używać wyjść PWM mogą spokojnie używać wersji 2.1 wsadu Arduino. Arduino sketch 2.1.1.zip
  13. jolo

    Kącik AA (Astro Arduino)

    Tym razem będzie lżej - sterowanie PWM. Polega ono na tym, że sygnał sterujący to sygnał prostokątny, który jest włączony przez określony czas, a następnie wyłączony. Sygnał o wypełnieniu 100% jest włączony cały czas, 0% - cały czas wyłączony, a np sygnał 30% o częstotliwości 100Hz włączony jest przez 3ms a następnie wyłączony przez 7ms i tak w kółko. W ten sposób urządzenie sterowane jest 30% mocy. W przypadku Arduino domyślna częstotliwość wyjść PWM to 490Hz. Oto przykładowy schemat dwukanałowego sterownika PWM: Umożliwi nam on sterowanie dwoma urządzeniami, np dwoma opaskami grzewczymi albo opaską i wentylatorem chłodzącym teleskop. Jak tranzystor sterujący (polowy - FET, MOSFET, HEXFET) należy wybrać taki o niskim napięciu Vgs, np IRLZ44 - model ten charakteryzuje się też małą rezystancją w stanie włączonym, i do prądu 3-4A nie musimy stosować żadnego radiatora. Na schemacie nie uwzględniono podłączenia zasilania Arduino - możemy go zasilać tym samym napięciem co tranzystory mocy, albo przez port USB. Do sterowania wyjściami PWM w Arduino stosujemy komendę: analogWrite(pin, value) gdzie pin to numer wyjścia Arduino, a value to wartość z zakresu 0 do 255. W naszym przykładowym kodzie będziemy sterować wyjściami PWM za pomocą komend podawanych przez port szeregowy, a wpisane wartości będą zapisywane w pamięci nieulotnej (EEPROM) kontrolera, a więc po kolejnym włączeniu Arduino zostaną one automatycznie przywrócone. Kod nie zawiera żadnych niespodzianek - w sekcji setup wczytujemy zapamiętane wartości PWM oraz inicjujemy port szeregowy. W pętli loop nasłuchujemy nowych komend. Po otrzymaniu komendy zostaje ona rozbita na dwie części, następnie sprawdzamy czy podany numer pinu zawiera się w dozwolonym przedziale i zapamiętujemy w pamięci EEPROM podaną wartość dla danego pinu. Ostatnim krokiem jest zaktualizowanie wyjść PWM i podanie komunikatu na port szeregowy: #include <EEPROM.h> #define PWM1_PIN 5 #define PWM2_PIN 6 String inputString = ""; // zmienna przechowująca polecenia z portu szeregowego boolean stringComplete = false; // oznacza zakończenie transmisji komendy void setup() { updatePWM(); Serial.begin(9600); inputString.reserve(6); } void loop() { // 5:0, 5:110, 6:255 if (stringComplete) { byte pin = inputString.substring(0,1).toInt(); byte value = inputString.substring(2).toInt(); if(pin == PWM1_PIN || pin == PWM2_PIN) { value = constrain(value, 0, 255); EEPROM.write(pin, value); updatePWM(); Serial.println("Pin " + String(pin) + " updated to " + String(value)); } else { Serial.println("Pin " + String(pin) + " not allowed."); } inputString = ""; stringComplete = false; } } void updatePWM() { analogWrite(PWM1_PIN, EEPROM.read(PWM1_PIN)); analogWrite(PWM2_PIN, EEPROM.read(PWM2_PIN)); } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } } Funkcja constrain gwarantuje, że podana wartość nie będzie spoza zadanego zakresu. Czyli np komenda: - 5:0 - wyłączy nam wyjście 5 - 5:127 - włączy nam wyjście 5 z wypełnieniem 50% - 6:255 - włączy nam wyjście 6 z wypełnieniem 100% Zapraszam do eksperymentów :) W następnej części pomiary temperatury i wilgotności.
  14. jolo

    Kącik AA (Astro Arduino)

    Dziś wieczorem już dość poważny kawałek kodu - obiecuję, że kolejne zaplanowane odcinki (sterowanie PWM grzałkami i wentylatorami, pomiary temperatury i wilgotności, sterowanie silnikami) będą znacznie prostsze :) Prezentowany poniżej kod jest już dość zaawansowany i zawiera elementy, z których można budować rozbudowane programy. Do schematu z poprzedniej części dodamy logikę, która umożliwi planowanie załączania i wyłączania przekaźnika według zadanego schematu. Sterowanie w dalszym ciągu będzie się odbywało przez port szeregowy, dostępne komendy będą wyglądały teraz tak: - R:1, R:0 - załączanie i wyłączanie przekaźnika - R:R - start kolejki zdarzeń - R:S - zatrzymanie kolejki - R:I - wyświetlenie ilości elementów w kolejce - R:Q:1:1200 - zakolejkowanie włączenia przekaźnika na okres 1200ms - R:Q:0:350 - zakolejkowanie wyłączenia przekaźnika na okres 350ms Na początku kodu zaimportowane są dwie biblioteki: Timer oraz QueueArray . Ta pierwsza wspomaga nas w prostym sterowaniu zdarzeniami, druga natomiast to typowa implementacja kolejki dowolnych obiektów. W naszym przypadku obiektami w kolejce będą struktury RelayEvent zawierające dwie informacje: stan pinu oraz czas przez jaki ten stan ma być zachowany. Blok setup nie zmienił się w porównaniu do poprzedniego przykładu. W pętli loop dodaliśmy obsługę kilku nowych komend dostarczanych przez port szeregowy. Dodatkowo na końcu pętli loop wywoływana jest aktualizacja timera, który odpowiada za wywoływanie kolejnych zdarzeń z kolejki. Po dodaniu kilku elementów do kolejki i uruchomieniu jej poleceniem R:R wywoływana jest metoda processQueue i jeśli kolejka zawiera jeszcze jakieś elementy, to kolejny element jest pobierany z kolejki, ustawiane jest odpowiednio wyjście sterujące przekaźnikiem, a na końcu do timera dodawane jest polecenie uruchomienia kolejny raz metody processQueue po upływie zadanego okresu czasu. Jeśli kolejka jest pusta timer jest zatrzymywany a wyjście sterujące przekaźnikiem jest ustawiane w stan niski. Całości programu dopełniają wysyłane na port szeregowy komunikaty o postępie w przetwarzaniu kolejki. Ciekawą cechą implementacji jest możliwość dodawania do kolejki kolejnych zdarzeń podczas jej wykonywania. Nowe zdarzenia zostaną dopisane do kolejki i przetworzone jak istniejące już wcześniej. Aby np włączyć przekaźnik na 30 sekund należy dodać polecenie R:Q:1:30000 i uruchomić kolejkę. Aby włączyć przekaźnik na 15 minut ale po upływie 4 minut należy dodać polecenia: R:Q:0:240000 oraz R:Q:1:900000 i uruchomić kolejkę. Oto kod: #include <Timer.h> #include <QueueArray.h> struct RelayEvent { char pinState; long time; }; #define RELAY_PIN 2 String inputString = ""; // zmienna przechowująca polecenia z portu szeregowego boolean stringComplete = false; // oznacza zakończenie transmisji komendy QueueArray <RelayEvent> queue; // kolejka zdarzeń int queueTimer = 0; Timer timer; void setup() { digitalWrite(RELAY_PIN, LOW); Serial.begin(9600); inputString.reserve(15); } void loop() { // R:0, R:1, R:R, R:S, R:Q:1:2300, R:Q:0:12 if (stringComplete) { if(inputString.charAt(0) == 'R') { switch (inputString.charAt(2)) { case '0': if (queue.isEmpty()) digitalWrite(RELAY_PIN, LOW); break; case '1': if (queue.isEmpty()) digitalWrite(RELAY_PIN, HIGH); break; case 'R': processQueue(); break; case 'S': timer.stop(queueTimer); digitalWrite(RELAY_PIN, LOW); break; case 'Q': enqueueCommand(inputString); break; case 'I': Serial.println(queue.count()); break; } } inputString = ""; stringComplete = false; } timer.update(); } void enqueueCommand(String command) { RelayEvent event = {command.charAt(4), command.substring(6).toInt()}; queue.enqueue(event); } void processQueue() { if(queue.isEmpty()) { timer.stop(queueTimer); digitalWrite(RELAY_PIN, LOW); Serial.println("Queue end"); } else { RelayEvent event = queue.dequeue(); Serial.println("Processing: " + String(event.pinState) + ", " + event.time + "ms"); (event.pinState == '0') ? digitalWrite(RELAY_PIN, LOW) : digitalWrite(RELAY_PIN, HIGH); queueTimer = timer.after(event.time, processQueue); } } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } } Dołączam też użyte biblioteki, które oczywiście podobnie jak setki innych można znaleźć w internecie, a należy je rozpakować do folderu Moje dokumenty/Arduino/libraries . Do zabawy z Arduino polecam płytki stykowe do których możemy wpinać do testów przeróżne elementy i moduły i testować bezboleśnie nasze pomysły: To tyle tym razem, następnym razem już obiecuję ciekawsze rzeczy :) W najbliższej części sterowanie PWM grzałkami, wentylatorami, ewentualnie na przykład oświetleniem :D QueueArray.zip Timer.zip
  15. jolo

    Kącik AA (Astro Arduino)

    Dałoby radę :) Arduino ma też tą fajną cechę, że można w nim zmieniać program przez ten sam kabel USB przez który później z nim się komunikujemy, a więc można np zaktualizować oprogramowanie w urządzeniu które już jest przypięte do teleskopu a potem zaraz go używać bez żadnego pędzlowania kablami. Czas na pierwsze zastosowanie - zdalne włączanie i wyłączanie urządzeń za pomocą Arduino. Zasada działania będzie prosta - poleceniami wysyłanymi z komputera chcemy włączać i wyłączać przekaźniki, które następnie mogą zasilać interesujące nas urządzenia. Poniżej poglądowy schemat jak połączyć kilka elementów w interesującą nas całość: Oprócz Arduino i przekaźnika będziemy potrzebowali jakiś tranzystor NPN małej mocy (BC237, BC548 albo podobny) oraz dwa rezystory (górny 4.7kohm, dolny 100kohm) i diodę zabezpieczającą (dowolna dioda, np 1N4148 albo podobna). Schemat przedstawia tylko jeden kanał sterujący, ale do każdego wyjścia Arduino możemy podpiąć kolejny przekaźnik i sterować wieloma jednocześnie. Styki przekaźnika mogą włączać napięcie 12V ale też napięcie sieciowe 230V. W drugim przypadku należy oczywiście zachować wszystkie środki ostrożności przy pracy z napięciem sieciowym. Można też zastosować optoizolator pomiędzy Arduino i tranzystorem sterującym, ale żeby to miało sens uzwojenie przekaźnika należałoby zasilać osobnym napięciem zasilania 12V a nie tym, którym zasilamy Arduino i resztę układu. Opcjonalna dioda LED z rezystorem 1kohm będzie nam pokazywała, kiedy przekaźnik jest włączony. Kod: #define RELAY_PIN 2 String inputString = ""; // zmienna przechowująca polecenia z portu szeregowego boolean stringComplete = false; // oznacza zakończenie transmisji komendy void setup() { // ustawiamy wyjście przekaźnika w stan niski digitalWrite(RELAY_PIN, LOW); // inicjalizujemy port szeregowy Serial.begin(9600); // rezerwujemy 5 bajtów na dane wejściowe inputString.reserve(5); } void loop() { // jeśli pobrano komendę if (stringComplete) { // rozpoznajemy ją: (R:0, R:1) if(inputString.charAt(0) == 'R') { // i jej argument if(inputString.charAt(2) == '0') { digitalWrite(RELAY_PIN, LOW); } else { digitalWrite(RELAY_PIN, HIGH); } } // czyścimy bufor polecenia inputString = ""; stringComplete = false; } } /* Zdarzenie SerialEvent jest wywoływane kiedy nowe dane napływają do portu szeregowego kontrolera. */ void serialEvent() { while (Serial.available()) { // pobieramy bajt danych char inChar = (char)Serial.read(); // dodajemy do zmiennej przechowującej komendę inputString += inChar; // jeśli pobrany znak to znak nowej linii // ustawiamy flagę oznaczającą koniec polecenia if (inChar == '\n') { stringComplete = true; } } } Kodu jest dość sporo, ale większość to komentarze. W sekcji setup wyłączamy przekaźnik, inicjujemy port szeregowy Arduino oraz rezerwujemy zmienną na przesyłane polecenia. Zdarzenie serialEvent wywoływane jest automatycznie po odebraniu danych przez port szeregowy. Po odebraniu znaku nowej linii oznaczającego koniec polecenia ustawiana jest flaga stringComplete i w pętli loop z polecenia odczytywany jest jego argument i odpowiednio przełączany jest przekaźnik. Po załadowaniu kodu do Arduino możemy otworzyć dowolny monitor portu szeregowego (również ten wbudowany w Arduino IDE) i wpisując w jego okienko polecenie R:0 będziemy wyłączali przekaźnik a po wpisaniu R:1 przekaźnik zostanie włączony. Zamiast samemu montować układ możemy do Arduino Uno zakupić gotowy relay shield wyposażony w kilka przekaźników i pozostanie nam jedynie zaprogramowanie układu: W następnej części rozbudujemy nieco kod sterujący tak, żeby umożliwić włączanie i wyłączanie przekaźników po określonym czasie albo według zadanego prostego planu. Oczywiście zachęcam do prezentowania swoich pomysłów i rozwiązań B)
  16. Arduino to otwarta platforma elektroniczna bazująca na łatwej w implementacji elektronice oraz prostym oprogramowaniu http://arduino.cc/ . Dzięki prostocie, darmowemu i łatwemu w obsłudze środowisku do programowania Arduino IDE oraz ogromnej ilości gotowych bibliotek, przykładów, płytek, modułów i shieldów pozwala skupić się na implementacji własnych rozwiązań i pomysłów, a nie na zgłębianiu coraz to nowych tajemnic dostępnych jedynie dla wybrańców. W sprzedaży jest dostępna spora ilość różnego typu modułów Arduino, poniżej Arduino Uno, czyli pierwsze :) Arduino Uno może być zasilane bezpośrednio z portu USB komputera lub z dodatkowego źródła zasilania o napięciu 7-16V. Po podłączeniu płytki do komputera zainstalowane zostaną sterowniki portu szeregowego i układ jest gotowy do pracy. Mając zainstalowane darmowe środowisko Arduino IDE możemy napisać pierwszy prosty program: void setup() { digitalWrite(2, LOW); } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); } Kod Arduino zawiera dwie predefiniowane funkcje setup() oraz loop(). Pierwsza z nich wykonywana jest jeden raz po uruchomieniu albo restarcie urządzenia. W naszym przykładzie w bloku startowym ustawiamy wartość pinu 2 Arduino na niską. Pętla loop wykonywana jest w czasie działania urządzenia cały czas bez końca. W naszym prostym przykładzie zamienia ona cyklicznie stan pinu 2 pomiędzy wysokim i niskim a pomiędzy zmianami umieściliśmy funkcję delay która wprowadza dodatkowe opóźnienie równe u nas 1000 milisekund. Po podłączeniu teraz do pinu 2 urządzenia przez dodatkowy rezystor np diody LED i załadowaniu naszego programu do Arduino będzie ona cyklicznie włączana i wyłączana. W wątku tym będę prezentował cyklicznie różne proste rozwiązania w oparciu o Arduino, które mogą się przydać astroamatorom. W następnym poście opiszę sterowany z komputera układ umożliwiający zdalne włączanie i wyłączanie różnych urządzeń. Oczywiście jestem otwarty na wszystkie propozycje układów do opisania tutaj.
  17. 2 Autor: Łukasz Socha Miejsce: Nieborowice Data: 20.05.2014 Obiekt: Kometa 2012/K1 PANSTARRS przy galaktyce NGC3726 Montaż: HEQ5 Pro Obiektyw: Newton 150/740 Detektor: Atik 383L+ mono Czas ekspozycji: LRGB 3h (subekspozycje 2 min) Akwizycja: Maxim DL Obróbka: PixInsight + Photoshop CS2
  18. Jesteś gotowy na samodzielną przeróbkę na długie czasy? http://allegro.pl/kamera-internetowa-philips-spc880nc-spc900nc-ccd-i4402537330.html http://www.home.zonnet.nl/m.m.j.meijer/D_I_Y/spc900nc.htm http://www.iceinspace.com.au/forum/showthread.php?t=57876
  19. W załączniku nowe pliki do focusera. Instalację wsadu do Arduino i sterownika opisałem w pliku PDF. Trzeba zaktualizować zarówno wsad jak i sterownik ASCOM - mieszanie wersji 2.0 i 2.1 nie zadziała. Nowe rzeczy: obsługa czujnika wilgoci / temperatury DHT22 wyświetlanie małego okienka Focuser Monitor a w nim temperatura, wilgotność, punkt rosy, sterowanie focuserem, sterowanie wyjściami PWM i OPTO, odczyt i formatowanie odczytanej wartości z przetwornika ADC logowanie monitorowanych danych do pliku (Moje dokumenty/JOLOFocuser/rrrr-mm-dd.txt) kalkulator CFZ w okienku ustawień ASCOM część opcji konfiguracyjnych przeniesiona z wsadu Arduino do ustawień ASCOM Więcej informacji w załączonym pliku PDF. Trzymam kciuki żeby nie wybuchło :) Ładowanie wsadu przez Arduino IDE trwa około 30-40 sekund. Raz czy dwa razy zdarzyło mi się, że po załadowaniu wsadu Arduino się zapętliło - ponowne załadowanie wsadu rozwiązało sprawę. PS - zapomniałem dodać, że wciąż są jeszcze dwie czyste płytki PCB focusera 2.0 do wzięcia jakby ktoś chciał zmajstrować samemu. Dla mnie już jest za ciepło na lutowanie :) ASCOM Jolo Focuser 2.1.pdf Arduino libs 2.1.zip Arduino sketch 2.1.zip Jolo focuser Setup 2.1.zip
  20. Dziś wielkie klejenie...

    1. Pokaż poprzednie komentarze  3 więcej
    2. Alien

      Alien

      Kleik cały czas w modzie tylko trochę w podziemiu ;)

    3. Jacek E.

      Jacek E.

      Jeszcze małe malowanko było czarnym matkiem ;)

    4. jolo

      jolo

      Już po klejeniu - styren prawie jak sterydy :)

  21. Super zdjęcie no i ponad 16h materiału. Jak mocujesz filtry w takim zestawie? Szuflada, EOS clip czy jeszcze jakoś inaczej?
  22. To mój ulubiony zestaw astro kalkulatorów online, chyba jeszcze nikt nie linkował: http://www.wilmslowastro.com/software/formulae.htm rzeczywiste i pozorne pole widzenia okularu skala obrazowania CCD / światłosiła / próbkowanie matrycy CCD reduktor ogniskowej projekcja okularowa rozmiar 'placków' na matrycy a odległość pyłków od detektora rozmiar dysków wokół jasnych gwiazd i miejsce w torze optycznym w którym powstają odpowiedzialne za nie odbicia graniczna jasność obserwacji wizualnych stosunek sygnału do szumu rozmiar krążka Airy'ego błąd okresowy montażu długość śladów gwiazd na zdjęciu szybkości guidowania strefa ostrości CCD
  23. Ja amatorskich konstrukcji rakiet nie odpuszczę na pewno :)
  24. Możemy jak najbardziej przełożyć, tym bardziej że ciężko mi ocenić ile to może potrwać. Będę musiał wcześniej rzucić okiem na delikwenta, ale na pewno potrwa to więcej niż godzinę, a może nawet dużo więcej.
  25. Fantastyczna fotka i idealnie się wpasowała w kadr. W lipcowym konkursie będzie czerwono chyba :)
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.

© Robert Twarogal * forumastronomiczne.pl * (2010-2023)