Skocz do zawartości

Kącik AA (Astro Arduino)


jolo

Rekomendowane odpowiedzi

Witam, Wszystkich

Jakoś tak wyszło że to tutaj mój pierwszy post. 

Arduino i tego typu 'komputerkami' zajmuję się już od pewnego czasu. W tym czasie nauczyłem się żeby sprawy opisywać w miarę precyzyjnie, bo tylko wtedy osiągane efekty są zgodne z oczekiwaniami. Wiele osób wykorzystuje czujnik temperatury DS18B20  (sam go wiele razy używałem) dlatego napiszę cos co dla jednych jest oczywiste a innym ucieka i działają w błędnym przekonaniu.

Czujnik posiada dwa parametry tj czułość i dokładność pomiarową. To różne parametry do których się nie zawsze się odwołujecie poprawnie. 

?Rozdzielczość jest regulowana ilością bitów (od 9 do 12) i określa jaką zmianę temperatury czujnik jest w stanie zarejestrować

Dokładność mówi z w jakich granicach zmierzona temperatura jest zgodna z rzeczywiście występującą.

W przypadku czujnika DS18B20 dokładność pomiarowa wynosi +- 0.5 stopnia (K) bez względu na ustawioną czułość gdzie notowana może być nawet zmiana temperatury od tej mierzone (a obarczonej błędem +-0.5 C ) o 0.0625 stopnia Celsjusza.

Warto o tym pamiętać pisząc program np detekcji rosy gdzie zmiany nie następują tak subtelnie jak rozdzielczość czujnika. Śrubowanie tego parametru do pewnych rozwiązań jest bezcelowe i traci tylko energię.

pisanie ' przy 10 bitowej dokładności trwa 188ms ' jest wprowadzaniem w błąd (pierwsza strona tego wątku). Na potrzeby problematyki 'około roszenia' wystarczy rozdzielczość 9/10 bitowa a sam pomiar może raz na minutę.

Co bardziej wymagający mogliby wykonać kalibrację czujnik DS18B20 i wprowadzać poprawki w zależności od mierzonej temperatury, ale w rozwiązaniach astro to raczej zbędna procedura.

Pojawiający się tutaj czujnik wilgotności DHT22 ma dokładność 0.5 stopnie Celsjusza i rozdzielczość  0.2 stopnia Celsjusza samą wilgotność mierzy nawet z dokładnością 2-5% i rozdzielczością 0.1%

?Nie są to dokładności porażające ale w zupełności wystarczające do astro zastosowań.

  • Like 2
Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Jolo zwrócę się z pytaniem jako do eksperta... na ile problematyczne było by oprogramowanie sterownika do montażu z wykorzystaniem układu do mikro kroków A4988? Na początek śledzenie i możliwość guidingu... mam shielda z dwoma takimi układami i myślę jak go wykorzystać. Niestety mój GM8 ma dość mała rozdzielczość bo tylko 1 arc sec/krok i się zastanawiam co by z tym zrobić :)

Pozdrawiam! Lucjan
Sony A7II, Olympus E-PL5, E-PM2 full spectrum, Astro CZJ Sonnar 300 f/[email protected], EQ3-2 + AstroEQ

Odnośnik do komentarza
Udostępnij na innych stronach

Takiego, żeby się dało spiąć z komputerem? Raczej trzeba się rozejrzeć za gotowcem jakimś albo przykładem chociaż. Jest to jak najbardziej możliwe, ale napisanie tego od zera to spory wysiłek. Szukałbym czegoś, co można na przykład sterować przez EQMODa - w nim można podać dowolne przełożenie obu osi i pozostałaby tylko do zaprogramowania część sprzętowa - komunikacja i sterowanie silnikami. Cała reszta - alignment, guiding jest już w logice EQMODa.

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

Nie koniecznie musiało by się dać sterować z komputera ale przykład z EQMOD jest obiecujący. Podgladales może komunikację po rs232 EQMOD? Myślę że mechanicznie/elektronicznie jestem w stanie to wykonać. Pozostała by kwestia komunikacji.

Pszy zastosowaniu silnika 200 krokowego i przekladni 16:1 plus 16 mikrokrokow da rozdzielczość 0.14 arc sec. Ewentualnie mniejsza przekładnia a do tego sterownik z mikrokrokami 1/64.

Pozdrawiam! Lucjan
Sony A7II, Olympus E-PL5, E-PM2 full spectrum, Astro CZJ Sonnar 300 f/[email protected], EQ3-2 + AstroEQ

Odnośnik do komentarza
Udostępnij na innych stronach

SkyWatcher udostępnia protokół komunikacji ze swoimi montażami https://github.com/skywatcher-pacific/skywatcher_open . Jak przejrzysz ten kod to pewnie uda Ci się wydobyć odpowiednie komendy sterujące wysyłane przez port szeregowy. Potem tylko trzeba zaprogramować własny kontroler tak, żeby odpowiadał na te same komendy i możesz używać EQMODa. 

Na stronie http://www.astroeq.co.uk/tutorials.php?link=/doku/doku.php?id=buildown jest opisany projekt AstroEQ oparty na Arduino Mega, łącznie ze schematem i kodem źródłowym. Oparty jest na sterownikach DRV8825 dających rozdzielczość 1/32 kroku, ale A4988 też na pewno da się zastosować po niewielkich modyfikacjach.

 

PS - bez sterowania z kompa będzie dużo łatwiej oczywiście, tylko trzeba zaimplementować tracking i obsługę portu ST4. Kilka linijek w Arduino pewnie :)

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Łukasz. AstroEQ to będzie to. Nawet cena gotowego jest do zaakceptowania. GM8 to świetny mechanicznie montaż ale ma wiekowy sterownik :) trzeba go odmlodzic. Spróbuję zrobić najpierw testy na Arduino. Moduły Sterowników silników są chyba kompatybilne pinami wiec podmienić to nie problem...

Pozdrawiam! Lucjan
Sony A7II, Olympus E-PL5, E-PM2 full spectrum, Astro CZJ Sonnar 300 f/[email protected], EQ3-2 + AstroEQ

Odnośnik do komentarza
Udostępnij na innych stronach

A jeszcze jedno. Jaką rozdzielczość minimalną (optymalną) dobrać zeby montaż dobrze sobie radził z guidingiem? Zapewne im większa tym lepsza ale może jest jakaś wystarczająca. Pytam bo musze dobrać przekładnie do silnika a jak bedzie za duża to musze zrobić podwójne przełożenie a chciałbym tego uniknąć.

Pozdrawiam! Lucjan
Sony A7II, Olympus E-PL5, E-PM2 full spectrum, Astro CZJ Sonnar 300 f/[email protected], EQ3-2 + AstroEQ

Odnośnik do komentarza
Udostępnij na innych stronach

A no to ja juz mowie ze sterownikiem 1/32. Wczesniej pisalem wlasnie z podwójną przekładnią 2x 4:1 i sterownikiem 1/16 mialbym rozdzielczosc 0.14. Teraz przekladnia 6:1 i sterownik 1/32 da rozdzielczosc 0.19''. Zobaczymy... może zrobie podwójną tak żeby mieć lepiej niż 0.1''.

Pozdrawiam! Lucjan
Sony A7II, Olympus E-PL5, E-PM2 full spectrum, Astro CZJ Sonnar 300 f/[email protected], EQ3-2 + AstroEQ

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Nie wiem czy piszę w dobrym wątku ale zaryzykuję  ;) Chciałbym się dowiedzieć jak zmienić wiersz czujnika dht22 na dht11 w projekcje autorstwa jolo sterownik grzałek .

 

post-1409-0-74705300-1431802249_thumb.jp

 

libraries.zip

 

program.txt

Synta 8 , Montaż Celestron CG5GT ,Canon 40D, Canon 300D+kabelek do długich czasów + Laptop Lenovo , Canon SX20 IS , Tair 3S, Rosyjska lornetka  7x50 , Jupiter 21M ,Grzałki , Baader Genuine Ortho 5mm i parę kolorowych filtrów :)  

f684.jpg
 

Odnośnik do komentarza
Udostępnij na innych stronach

Nikt nie pomoże  :-

Synta 8 , Montaż Celestron CG5GT ,Canon 40D, Canon 300D+kabelek do długich czasów + Laptop Lenovo , Canon SX20 IS , Tair 3S, Rosyjska lornetka  7x50 , Jupiter 21M ,Grzałki , Baader Genuine Ortho 5mm i parę kolorowych filtrów :)  

f684.jpg
 

Odnośnik do komentarza
Udostępnij na innych stronach

Ok dzięki , czyli w wierszu dht.cpp int dht::read21(uint8_t pin)

{

    return read22(pin);  // dataformat identical to DHT22

}

 

zmieniamy wszystkie na read11 jeśli dobrze rozumiem  ;) 

Synta 8 , Montaż Celestron CG5GT ,Canon 40D, Canon 300D+kabelek do długich czasów + Laptop Lenovo , Canon SX20 IS , Tair 3S, Rosyjska lornetka  7x50 , Jupiter 21M ,Grzałki , Baader Genuine Ortho 5mm i parę kolorowych filtrów :)  

f684.jpg
 

Odnośnik do komentarza
Udostępnij na innych stronach

Ok wielkie dzięki .

Synta 8 , Montaż Celestron CG5GT ,Canon 40D, Canon 300D+kabelek do długich czasów + Laptop Lenovo , Canon SX20 IS , Tair 3S, Rosyjska lornetka  7x50 , Jupiter 21M ,Grzałki , Baader Genuine Ortho 5mm i parę kolorowych filtrów :)  

f684.jpg
 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

Fakt, pomyliłem oznaczenie - dzięki za poprawkę. Co to stabilności to po prostu zauważyłem nowszą wersję i dałem info na forum Wyszedłem z założenia, że skoro ta wersja "wisi" tam już kilka dni jest OK a tu zonk ..

APO TS 130/910;  ASI 290MM; okular Baader Scopos 30 mm 2",  ES 14mm,  ES 4,7 mm, EQ6-R Pro, Canon EOS RP, Jolo AstroHub 3.0

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc później...

Mam takie pytanie czy można przerobić układ pokazany przez Jolo Arduino Uno plus układ HC 05 aby miał zasilanie z rs232 teleskopu ? Chodzi mi o adapter rs232 bluetooth. Albo jest jakieś inne rozwiązanie z samym układem HC 05 ?

CBS - Całkowity Brak Sprzętu ( na chwilę obecną :( ).

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc później...

Do tej pory opisywałem różne rozwiązania z wykorzystaniem Arduino i komunikacji przez port szeregowy. Przyszła pora na coś nowego - połączenie przez sieć. Nakładając na Arduino dodatkowy shield (Ethernet shield) uzyskujemy możliwość komunikowania się z modułem poprzez połączenie sieciowe. Oczywiście do wszystkiego mamy gotowe biblioteki i będzie trzeba je tylko odpowiednio wykorzystać. Przykładowe rozwiązanie będzie umożliwiało sterowanie ze strony przeglądarki internetowej czterema przekaźnikami podłączonymi do modułu Arduino Uno, a dodatkowo będzie wyświetlało na stronie stan czterech wejść analogowych układu. Cały plik z kodem załączony jest do postu, a poniżej opiszę tylko wybrane fragmenty.

2015-09-25_194342.thumb.jpg.3e49581f31bb

Na początku definiujemy parametry sieciowe naszego ethernet shielda:

byte mac[] = {0x00, 0x1E, 0x2A, 0x77, 0x24, 0x02 };
byte ip[] = {192, 168, 1, 177 };
EthernetServer server(80); // Port 80 is http.

Adres MAC musi być unikalny w obrębie naszej sieci, podobnie jak wybrany adres IP, który też musi być dopasowany do maski naszej podsieci. W bloku setup() inicjalizujemy shield z tymi parametrami i ustawiamy tryb pracy odpowiednich pinów. Następnie w pętli loop() serwer sieciowy nasłuchuje żądań wysyłanych do niego i jeśli takie zostanie wykryte jest ono wczytywane i analizowane. W zależności od ustawionych parametrów w wywołaniu URL w metodzie parseRequest() włączany albo wyłączany jest wybrany przekaźnik. Na końcu w metodzie insertBody() generowana jest dynamicznie treść strony HTML i przesyłana z powrotem do przeglądarki. Po czym czyszczony jest bufor wejściowy i program w pętli loop() oczekuje na kolejne żądanie. Strona odświeżana jest automatycznie co 10 sekund

client.println("Refresh: 10, /");

Wyjścia Arduino raczej nie powinny sterować bezpośrednio przekaźnikami, należy podłączyć je przez jakiś tranzystor małej mocy, układ ULN2003 albo podobny - przykładów w internecie jest bardzo dużo. A jak ktoś nie lubi lutować ani montować to można zakupić Relay Shield wyposażony w cztery przekaźniki i nałożyć go na górę naszej kanapki.

Układ taki można wykorzystać do zdalnego włączania różnych urządzeń tam, gdzie mamy dostęp do gniazdka sieciowego, a nie do komputera z portem USB. Jeśli zamiast Ehternet shieldu zamontujem WiFi shield możemy sterować naszym urządzeniem bezprzewodowo z użyciem sieci WiFi.

 

eth.thumb.jpg.82299ab888bbd57968f5c5c4ec

 

ethernet.ino

  • Like 2

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc później...
  • 1 miesiąc później...

Z kodów przedstawionych tu przez Jola skleciłem program, który pokazuje na wyświetlaczu temperaturę powietrza, wilgotność oraz temperaturę punktu rosy.

Wszystko działa. Zapakuję to w pudełko i będę używał jako mini stację pogodową ostrzegającą o możliwości wystąpienia rosy.

Na razie żadnej automatyki... grzałki jak dotąd będę włączał ręcznie.

Żeby ten układ należycie spełniał swoją funkcję alarmową chciałbym jeszcze dodać mrugającą czerwoną diodę LED w momencie kiedy wystąpi możliwość roszenia.

I tu mam problem jak taki warunek dopisać do istniejącego programu - nie potrafię sam tego zrobić.

Czy ktoś mógłby mi pomóc dopisać taką sekwencję?

Zastanawiam się też jak bardzo temperatura powietrza musi się zbliżyć do temperatury punktu rosy, żeby warunek włączenia alarmu został spełniony?

Dwa, jeden, a może ułamek stopnia Celsjusza?

Arduino1.thumb.JPG.91574e13c388e93af5844

Uwaga do foto: w momencie robienia zdjęcia w układzie brakowało DHT22

Poniżej program, który z pewnością zawiera błędy (przepraszam znawców tematu), ale działa.

Dołączyłem do niego linię w części setup():

digitalWrite(7, LOW);           //LED czerwony - możliwość powstania rosy

więcej w temacie mrugającej diody nie potrafię...

 

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Timer.h>
#include <dht.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>

#define DS8120_PIN 6
#define DHT22_PIN 9

OneWire oneWire(DS8120_PIN);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
dht DHT;
Timer timer;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


boolean DS1820connected = false;
boolean DHT22connected = false;
float currentTemp;               // bieżąca temperatura z czujnika DHT
float currentHum;                // bieżąca wilgotność z czujnika DHT
float currentDewpoint;           // obliczony punkt rosy na podstawie danych z czujnika DHT
float currentDSTemp;             // bieżąca temperatura z czujnika DS przymocowanego do lustra

void setup() {
  int chk = DHT.read22(DHT22_PIN);
  if(chk == DHTLIB_OK) DHT22connected = true; {
  pinMode(9, OUTPUT);             // dwa wiersze do regulacji kontrastu wyświetlacza
  analogWrite(9, 100);            // regulacja
  }
  digitalWrite(7, LOW);           //LED czerwony - możliwość powstania rosy
 
  sensors.begin();
  DS1820connected = sensors.getAddress(insideThermometer, 0);  
  if(DS1820connected) sensors.setResolution(insideThermometer, 10);
 
 
  lcd.begin(16, 2);
 
  timer.every(1000, updateSensors);
}

void loop() {  
  timer.update();
}

void printData() {
  Serial.println(currentTemp);
}

void updateSensors() {
  if (DS1820connected) {
    sensors.requestTemperaturesByAddress(insideThermometer); // przy 10 bitowej dokładności trwa 188ms
    timer.after(188, readTemp);
    currentDSTemp = sensors.getTempC(insideThermometer);
  }
  if (DHT22connected) {
    DHT.read22(DHT22_PIN);
    currentTemp = DHT.temperature;
    currentHum = DHT.humidity;
    currentDewpoint = dewPoint(currentTemp, currentHum);  
  }
}

void readTemp() {
  currentTemp = sensors.getTempC(insideThermometer);
  updateLCD();
}

// 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);
}

void updateLCD() {
  lcd.clear();
  lcd.print("Temp [C]= ");
  lcd.print(currentTemp);
 
    lcd.setCursor(0, 1);
  lcd.print("RH=");
  lcd.print(currentHum,0);
  lcd.print("% DP=");
  lcd.print(currentDewpoint,1);
  lcd.print("C");
}

 

  • Like 3

----------------------------------------------------------------

SW ED80 OTA 80/600 + F/R x 0,85   Montaż: Celestron AVX,

kamera: QHY163M;  guiding: Orion Guide Scope + ASI120MM

Odnośnik do komentarza
Udostępnij na innych stronach

A może zamiast sprawdzać różnicę pomiędzy temperaturą i punktem rosy, wystarczy sprawdzić zmierzoną wilgotność? Z moich obserwacji wynika, że powyżej 95-96% już na pewnych elementach może osiadać rosa. A mruganie diodą można zrobić używając biblioteki Timer. 

W metodzie updateLCD dodaj taki kod:

if(currentHum > 95.0) {
	digitalWrite(7, HIGH);
	timer.after(500, ledLow);
}

I gdzieś w kodzie musisz dodać taką małą metodę:

void ledLow(){digitalWrite(7, LOW);}

 

  • Like 2

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki jolo !

Miałem pewne problemy w którym miejscu umieścić te kilka linii kodu, ale już jest OK i układ działa.

Rzeczywiście, nie wziąłem pod wzgląd, że można skorzystać z wilgotności zmierzonej.

Teraz pozostaje tylko umieścić to w obudowie i dość przydatny gadżet gotowy.

----------------------------------------------------------------

SW ED80 OTA 80/600 + F/R x 0,85   Montaż: Celestron AVX,

kamera: QHY163M;  guiding: Orion Guide Scope + ASI120MM

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • 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)