Skocz do zawartości

r.ziomber

Społeczność Astropolis
  • Postów

    2 750
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez r.ziomber

  1. Rozpoczalem pisanie prostej aplikacji astronomicznej na urzadzenia mobilne. Czy moglbym pilnie* prosic Was o sugeste funkcjonalnosci, ktorej potrzebujecie na swoich telefonach? Zaznaczam, ze jestem w tej materii bardzo poczatkujacy i nie wymagajcie prosze ode mnie np obslugi kamer CCD i autoguidingu Obecna funkcjonalnosc: - obsluga GoTo teleskopu za posrednictwem przystawki Bluetooth do pilota. Umozliwia ustawienie czasu i wspolrzednych teleskopu dzieki pomocy GPS w telefonie. Pozwala rowniez na wpisanie wspolrzednych obiektow, ktorych nie ma w bazie pilota. - obsluga interwalometru do lustrzanki cyfrowej z Bluetooth. Opis sprzetu symulujacego wezyk spustowy, z ktorym laczy sie program: https://sourceforge.net/projects/arduino-dslr-remote-controller/ - kalkulator astrofotograficzny / obserwacyjny https://pl.wikipedia.org/wiki/Astrofotografia#Wzory_przydatne_w_astrofotografii - slider chwilowo sluzy jedynie zabawie. Po przerobkach byc moze ta karta obslugiwac bedzie np motofocus teleskopu. Korzystam z "lamerskiego" i niezalecanego srodowiska Apache Cordova (PhoneGap), ale mam ku temu kilka powodow. Dolaczam biblioteke do komunikacji szeregowej poprzez Bluetooth https://github.com/don/BluetoothSerial (*) Niestety mam niewiele czasu na napisanie, gdyz do testow uzywam telefonu pozyczonego od kolegi, ktory jest wystawiony na sprzedaz (telefon, nie kolega). Moja prehistoryczna Motorola Milestone z Androidem 2.2 nie spelnia minimalnych wymagan.
  2. r.ziomber

    Astroberry Server

    Chyba lepiej po prostu zainstalowac Linuksa i https://www.indilib.org https://www.indilib.org/about/ekos.html
  3. r.ziomber

    Astroberry Server

    Testowalem na Raspberry Pi. To Python, wiec bedzie dzialac na wszystkim ;-)
  4. Odleglosc s = 300m srednica przestrzeliny l = 0.00556m srednica katowa = 2*arctan(0.5*l/s) = 2*arctan(0.5*0.00556/300) = 0.001° = 3.8" https://pl.wikipedia.org/wiki/Kryterium_Rayleigha r = 143/70 = 2" Hipotetycznie sie da. Pewnie jednak wiekszy teleskop sprawi sie do tego celu o wiele lepiej.
  5. Sky Quality Meter mozna zrobic w miare latwo samemu. Niestety moj jest jeszcze nieskalibrowany z fabrycznym modelem.
  6. Gwiazda Barnarda to chyba jeden z najciekawszych obiektow do podjecia prob rejestracji paralaksy. http://pergelator.blogspot.com/2013/07/barnards-star.html
  7. Najwieksza bolaczka grup FB jest prawie zerowe indeksowanie przez Google. Sama wyszukiwarka FB jest tez mocno kulawa (czasem nawet nie znajduje potrzebnych materialow archiwalnych). Zamieszczanie tam cenniejszych informacji jest nieodpowiednie, bo nie zapewnia dostepu do nich przez wyszukiwarke. No i jest juz multum grup poswieconych astronomii, po co tworzyc kolejne?
  8. Troche OT. Obsluga Dynamic DNS https://freedns.42.pl dla ESP8266 napisana w Arduino. Zastosowanie: ESP caly czas monitoruje obserwatorium i w razie potrzeby zdalnie uruchamia komputer czy Raspberry Pi. Przy okazji dba tez o uaktualnienie IP rekordu A naszej domeny. #include <ESP8266HTTPClient.h> #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> struct FreeDNSsettings { String domain; String subdomain; String newaddress; String user; String password; String ttl; } dnsset; void setup() { dnsset.domain = ""; dnsset.subdomain = ""; dnsset.user = ""; dnsset.password = ""; dnsset.ttl = "120"; Serial.begin(9600); //Serial connection WiFi.begin("Ssid", "password"); //WiFi connection while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion delay(500); Serial.println("Waiting for connection"); } } void loop() { if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status String myIP = publicIP(); String hostIP = gethostbyname(dnsset.subdomain + "." + dnsset.domain); if (myIP != hostIP) { dnsset.newaddress = myIP; updateDynDNS(); Serial.println(hostIP); } } else { Serial.println("Error in WiFi connection"); } delay(15 * 60 * 1000); } String publicIP() { String myIP; HTTPClient http; http.begin("http://ip.42.pl/raw"); //Specify request destination int httpCode = http.GET(); //Send the request if (httpCode > 0) { //Check the returning code myIP = http.getString(); //Get the request response payload } return myIP; } String gethostbyname(String host) { IPAddress ipAddress; WiFi.hostByName(host.c_str(), ipAddress); return String(ipAddress[0]) + String(".") + \ String(ipAddress[1]) + String(".") + \ String(ipAddress[2]) + String(".") + \ String(ipAddress[3]); } void updateDynDNS() { String xml = "<?xml version='1.0'?>\r\n" "<methodCall>\r\n" "<methodName>xname.updateArecord</methodName>\r\n" "<params>\r\n" "<param>\r\n" "<value><struct>\r\n" "<member>\r\n" "<name>name</name>\r\n" "<value><string>" + dnsset.subdomain + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>zone</name>\r\n" "<value><string>" + dnsset.domain + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>newaddress</name>\r\n" "<value><string>" + dnsset.newaddress + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>oldaddress</name>\r\n" "<value><string>*</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>updatereverse</name>\r\n" "<value><string>0</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>user</name>\r\n" "<value><string>" + dnsset.user + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>ttl</name>\r\n" "<value><string>" + dnsset.ttl + "</string></value>\r\n" "</member>\r\n" "<member>\r\n" "<name>password</name>\r\n" "<value><string>" + dnsset.password + "</string></value>\r\n" "</member>\r\n" "</struct></value>\r\n" "</param>\r\n" "</params>\r\n" "</methodCall>"; String http = "POST /xmlrpc.php HTTP/1.1\r\n" "Host: freedns.42.pl\r\n" "Accept-Encoding: gzip\r\n" "Content-Type: text/xml\r\n" "User-Agent: Python-xmlrpc/3.5\r\n" "Content-Length: " + String(xml.length()) + "\r\n" "\r\n"; xml = http + xml; WiFiClientSecure client; IPAddress ipAddress; WiFi.hostByName("freedns.42.pl", ipAddress); client.connect(ipAddress, 443); client.print(xml); }
  9. W tym miejscu warto przypomniec miniserial sprzed 20. lat: https://en.wikipedia.org/wiki/From_the_Earth_to_the_Moon_(miniseries)
  10. https://github.com/gradyh/ISS-Tracking-Pointer https://en.wikipedia.org/wiki/Simplified_perturbations_models https://github.com/hazrmard/SatTrack
  11. Podobno gphoto2 obsluguje. http://www.gphoto.org/doc/remote/
  12. Raspberry Pi 3B+ https://indilib.org/support/tutorials/139-indi-library-on-raspberry-pi.html https://indilib.org/devices/rasbperry-pi/astroberry-server.html
  13. Mozesz tez samodzielnie zrobic bezprzewodowy (WiFi/Bluetooth) wezyk spustowy z interwalometrem ;-) https://sourceforge.net/projects/arduino-dslr-remote-controller/
  14. Gdybys uzywal Linuksa, polecilbym gphoto2 http://gphoto.org Dokladniej libgphoto2 http://www.gphoto.org/proj/libgphoto2/
  15. Rabka-Zdroj Niestety jedyna znana mi ciemna lokalizacja sa popularne Kudlacze.
  16. https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino
  17. Tez mam RS-232 dostepne po WIFi, tylko w o wiele bardziej "mlotkowej" formie ;-) http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/ a
  18. Przy okazji millis() mozna sobie samemu "przekrecic". Dla ATmega328P dodaj do setup() extern volatile unsigned long timer0_millis; noInterrupts(); timer0_millis += 4294963295; interrupts(); i bedziesz mial 4 s do przekroczenia zakresu unsigned long. Przy okazji przydatne, jesli chcemy korygowac millis() o czas uspienia kontrolera i nie bawic sie w podmiane millis() na actualMillis() we wszystkich plikach. unsigned long actualMillis() { return millis() + sleepCorrection; }
  19. https://arxiv.org/pdf/1610.00693.pdf "These PSF models are created for telescope focus values in the range −10μm to +5μm at one micron increments, thus spanning the allowed range of telescope focus values. We then use the approximately ten well measured stars in each COSMOS field to pick the best-fit focus value for each field." https://arxiv.org/pdf/astro-ph/0702140.pdf
  20. Raczej https://en.wikipedia.org/wiki/Point_spread_function#The_PSF_in_astronomy
  21. STM32! https://github.com/stm32duino https://www.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-raspberry-raspberri-pi-2-watch-nmd-diy/32786765274.html A ESP32 jest dwurdzeniowe i mozna jeden rdzen poswiecic na timer. https://groups.google.com/forum/#!topic/pl.misc.elektronika/K3eQYMWwdf4
  22. Jest pare bibliotek. Przypuszczam jednak, ze beda miec istotny narzut, dlatego cuduje realloc z C. Przyznaje jednak, ze nie testowalem ich wplywu na wydajnosc. https://github.com/maniacbug/StandardCplusplus https://www.arduinolibraries.info/libraries/arduino-stl https://github.com/zacsketches/Arduino_Vector
  23. Czy moge prosic o weryfikacje? Zamiast proponuje #include <limits.h> // constructor nextCall = now() + interval; //active loop if ( nextCall < now() && now() - nextCall < ULONG_MAX / 2 ) { nextCall += interval; callWhatever(); } Powod: przedzial czasu obejmujacy przekroczenie zakresu zmiennej. now() bedzie wtedy olbrzymie a nextCall male. Warunek nextCall < now() zostanie wiec spelniony. Standardowe rozwiazanie https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay nie sprawia klopotow z overflow, ale kumuluje opoznienie kolejnych krokow.
  24. Ale Arduino bez dodatkowych bibliotek nie obsluguje std::vector (w ogole STD) i stad takie mieszanie C++ z C. https://github.com/maniacbug/StandardCplusplus Zadanie "doczesne" przechowuje jedynie informacje o interwale. Wykonywane kilka razy dodatkowo musi miec informacje o ilosci cykli i "poczekalni" przed pierwszym wykonaniem. Ale ja oczekuje krytyki! Chce sie uczyc od zawodowych programistow i doskonalic swoje znikome umiejetnosci. Jesli tylko masz czas napisac, z checia wyslucham, co zrobilem zle! Mam jeszcze glupi pomysl, o ktory byc moze rozbuduje swoj timer. Terminarz oparty na... delay(). No dobra, nie na delay(), a na uspijMikrokontroler(), ale w zewnetrznym zachowaniu to prawie to samo Po prostu znajde najblizsze zadanie w tabelicach time i timeET i do tego czasu uspie mikrokontroler. Bedzie to dodatkowa opcja, bo oczywiscie nienadajaca sie do kazdego projektu. PS. Ktos kiedys powiedzial, ze na delay() nie da sie zrobic wielozadaniowosci. Dlatego tez chce ja zrobic
×
×
  • 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ę.