Skocz do zawartości

Kącik AA (Astro Arduino)


jolo

Rekomendowane odpowiedzi

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

Czy ktoś z was zna jakąś szybka metodę odczytu temperatury z termometru DS18B20?

Z dzisiejszych testów wyszło mi, że potrzebuje na to ok 750 ms czasu w pętli głównej programu.
Czy jest jakaś metoda, żeby zajmowało to mniej czasu?

Jacek Pala

http://www.scopedome.com

tel. +48 602 315 947

 

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz odczytywać z mniejszą rozdzielczością - przy 10 bitach (dokładność 0.25*C) potrzebuje już tylko 180ms. Albo robić cały proces asynchronicznie i bez blokowania. Wywołać żądanie odczytu temperatury, zapamiętać czas i puścić program dalej, a po 180 czy 750ms odczytać z czujnika temperaturę. 

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

Można jeszcze użyć watków, ponoć w Arduino się da, może w tym wypadku to sztuka dla sztuki ale warto wiedzieć, że jest taka opcja, to otwoera zupełnie nowe możliwości, zwłwszcza, że nad wszystkim czuwa watchdog

  • Like 1

Astrogołębnik, NEQ6, ATM Newton carbon 200/800 (by jolo), SBIG2000XM, korektor x0,73

Odnośnik do komentarza
Udostępnij na innych stronach

te wątki to tak jak z pierwszych wersji Javy na Intelu ... ;) tu przerwanie, tam przerwanie, nie wiem jak z wydajnością, bo już samo określenie zaciska pętlę na szyi ;)

nie wiem czy sterowanie przerwaniami ADC nie było by lepsze w tym wypadku - jest seria tutoriali na stronach arduino ...

Odnośnik do komentarza
Udostępnij na innych stronach

Ciekawa biblioteka, ale w rozbudowanym programie bałbym się jej używać. Stosując wątki bardzo trudno jest zapanować nad aktualnymi wartościami zmiennych.

Asynchroniczne czytanie czujnika okazało się proste w realizacji. I teraz nie obciąża czasu głównej pętli. Jeszcze raz dziękuję za podpowiedź.

Poniżej testowy program:


#include <OneWire.h>
#include <DS18B20.h>
/********************************************************************/
// ONE Wire is plugged into pin 7 on the Arduino
#define ONE_WIRE_PIN 7
byte sensorAddress[8] = {0x28, 0x84, 0xF2, 0x4, 0x7, 0x0, 0x0, 0x79};
// 1-Wire object
OneWire onewire(ONE_WIRE_PIN);
// DS18B20 sensors object
DS18B20 sensors(&onewire);
long          lastTemperatureRequest = 0;
float         lastTemperature = 0.0;
unsigned long Temperature_Read_TimeOut = 1000;
bool          TemperatureRequestInProgress = false;
/********************************************************************/
void setup()
{
  // put your setup code here, to run once:
  // Serial port setup
  while(!Serial);
  Serial.begin(9600);
 
  // DS18B20 sensors setup
  sensors.begin();
 
  // The first requests sensor for measurement
  sensors.request(sensorAddress);
}
float getTemperature ()
{
 if ( millis()-lastTemperatureRequest < 0)
    {lastTemperatureRequest=millis();} //check for miliseconds overload
 
 if (TemperatureRequestInProgress==false)
    {
      Serial.println("sensor.request");
      sensors.request(sensorAddress);
      TemperatureRequestInProgress=true;
    }
 if ( millis()-lastTemperatureRequest > Temperature_Read_TimeOut)
    {
     if (sensors.available())
      {
       lastTemperature = sensors.readTemperature(sensorAddress);
       lastTemperatureRequest=millis();
       TemperatureRequestInProgress = false;
       Serial.println("Tem: "+String(lastTemperature,2)+"C");
      }
    }
 return lastTemperature;
}
void loop() {
  // put your main code here, to run repeatedly:
  //Serial.println("Now: "+String(millis()));
 getTemperature();
}
  • Like 2

Jacek Pala

http://www.scopedome.com

tel. +48 602 315 947

 

Odnośnik do komentarza
Udostępnij na innych stronach

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

Chociaż temat nie jest związany z astro ale pytanie dotyczy arduino.

Jestem  w trakcie budowy zasilacza o dużej wydajności prądowej.

Jako bazę chcę zastosować zasilacz serwerowy o prądzie około 110A.

Potrzebuję w nim regulować napięcie w przedziale około 12,5 do 14,5 V.

Z tego co udało mi się ustalić regulację uzyskuje się przez połączenie 2 pinów w zasilaczu odpowiednim rezystorem np:

960? = 13.6v
750? = 13.8v
570? = 14.0v
460? = 14.2v

Jak to uzyskać przez sterowanie z arduino?

Chciałbym to zrobić na takim wyswietlaczu dotykowym

zasilacz.thumb.jpg.b6ce349fb5d6758372594674729dee1b.jpg

Chciałbym na wyświetlaczu móc sterować napięciem w przedziale od 12,5 do 14,5 V z dokładnością około 0,1V

oraz mieć odczyt natężenia pobieranego prądu do ponad 100A.

Da się to w miarę prosty sposób uzyskać?

Jakieś pomysły?

EQ6 , TS APO 115/800 , SW 80/400+DSI , Canon 500D , Canon 450D w trakcie MOD

Odnośnik do komentarza
Udostępnij na innych stronach

Jednym sposobem może być zrobienie drabinki rezystorowej z 5 rezystorów połączonych szeregowo, z których cztery byłyby zwierane mikroprzekaźnikami. W ten sposób możesz sterując czterema liniami z Arduino te przekaźniki uzyskać 16 różnych kombinacji rezystancji i tyle samo wartości napięcia wyjściowego. 

Może też się uda dopasować jakieś przekaźniki elektroniczne, ale wyjdzie wtedy prawdopodobnie drożej. 

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

No to jeżeli na przekaźnikach , możliwe że wystarczyło by stopniowanie co 0,5V (12,5 13,0 13,5 14,0 14,5)

A jak z pomiarem natężenia prądu do ponad 100A , przez bocznik?

EQ6 , TS APO 115/800 , SW 80/400+DSI , Canon 500D , Canon 450D w trakcie MOD

Odnośnik do komentarza
Udostępnij na innych stronach

Przez bocznik jak najbardziej się da, albo czujnikiem ACS. Są takie cywilne do 50A http://www.allegromicro.com/en/Products/Current-Sensor-ICs/Zero-To-Fifty-Amp-Integrated-Conductor-Sensor-ICs.aspx  i takie do 200A też http://www.allegromicro.com/en/Products/Current-Sensor-ICs/Fifty-To-Two-Hundred-Amp-Integrated-Conductor-Sensor-ICs.aspx

Tylko jak weźmiesz taki czujnik na 200A to przy 10 bitowym przetworniku ADC z Arduino uzyskasz niewielką rozdzielczość pomiaru (pewnie coś około 0.5A). Trzeba będzie może pomyśleć o jakimś zewnętrznym przetworniku o większej rozdzielczości. Albo uśredniać dużo kolejnych odczytów (oversampling). 

jolo-astrojolo.png

Odnośnik do komentarza
Udostępnij na innych stronach

Proponuję potencjometr elektroniczny, taki gotowy chip można kupić np. w TME. Sterowanie odbywa się za pomocą dwóch pinów i mamy np. 64 stany w przypadku wersji 6-cio bitowej. Niestety w TME najmniejsze dostępne są chyba 2,1k ale łącząc go równolegle z innym rezystorem można już coś wykombinować. Oczywiście zachęcam do poszukiwań w innych sklepach. Cena kilka zł za sztukę plus przesyłka nie powinna odstraszać. 

  • Like 2

Astrogołębnik, NEQ6, ATM Newton carbon 200/800 (by jolo), SBIG2000XM, korektor x0,73

Odnośnik do komentarza
Udostępnij na innych stronach

29 minut temu, zarek napisał:

Proponuję potencjometr elektroniczny, taki gotowy chip można kupić np. w TME. Sterowanie odbywa się za pomocą dwóch pinów i mamy np. 64 stany w przypadku wersji 6-cio bitowej. Niestety w TME najmniejsze dostępne są chyba 2,1k ale łącząc go równolegle z innym rezystorem można już coś wykombinować. Oczywiście zachęcam do poszukiwań w innych sklepach. Cena kilka zł za sztukę plus przesyłka nie powinna odstraszać. 

Hmm,  szczerze mówiąc, nie rozumiem sensu tego urządzenia :) Czy to jest po prostu przetwornik ADC, do którego podłączamy zwykł potencjometr, a on nam odczytuje nastawę i odsyła np po I2C? Jeśli tak, to jaką to daje przewagę nad wbudowanym w mikrokontroler ADC? Jak dla mnie łatwiej nawet użyć ADC mikrokontrolera, niż ogarniać moduł I2C :) (o ile i tak go nie potrzebowaliśmy do czegoś).

SW 200/1000, TSAPO65Q, NEQ6 Pro SynScan, iOptron CEM25EC, Atik 383L+, ASI1600MMC, PG Chameleon3, MPCC, IDAS LPS P2, Nagler 9mm, Powermate 2,5x, Nikon D80, D7500, D750, Samyang 135

Szukasz darmowej wersji PixInsigt LE? Zgłoś się na PW!

Odnośnik do komentarza
Udostępnij na innych stronach

Ech... wystarczy otworzyć pierwszą stronę dokumentacji. Jest to zwykły potencjometr tyle, że nie trzeba kręcić gałką a wystarczy jednym pinem (CS) aktywować układ a drugim (UD) odpowiednio zaprogramować położenie elektronicznego suwaka. I tyle ;)

pot.jpg.321ea068935aa34f6f1fd77ac6f583e6.jpg

Astrogołębnik, NEQ6, ATM Newton carbon 200/800 (by jolo), SBIG2000XM, korektor x0,73

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, zarek napisał:

Ech... wystarczy otworzyć pierwszą stronę dokumentacji. Jest to zwykły potencjometr tyle, że nie trzeba kręcić gałką a wystarczy jednym pinem (CS) aktywować układ a drugim (UD) odpowiednio zaprogramować położenie elektronicznego suwaka. I tyle ;)

No własnie otwarłem i nie zakumałem :) Ale teraz już rozumiem - to jest urządzenie wyjściowe, a nie wejściowe :) Czyli taki odpowiednik drabinki zaproponowanej przez Jolo.

SW 200/1000, TSAPO65Q, NEQ6 Pro SynScan, iOptron CEM25EC, Atik 383L+, ASI1600MMC, PG Chameleon3, MPCC, IDAS LPS P2, Nagler 9mm, Powermate 2,5x, Nikon D80, D7500, D750, Samyang 135

Szukasz darmowej wersji PixInsigt LE? Zgłoś się na PW!

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc później...
  • 10 miesięcy później...
  • 1 rok później...

Hej

Bardzo ciekawy i przydatny watek!

Podlacze sie pod ta dyskusje jesli mozna. Zastanawiam nad samodzielna budowa  "autonomicznego" motofocusera z automatyczna kontrola ostrosci.  Na razie jestem na etapie zbierania informacji na temat ew. rozwiazania. Chcialbym azeby sluzylo to do dlugoczasowej astrofotografii. Gdziestam w odleglych wizjach "zupelnie opcjonalnie" jest tez ew. mozliwosc kontroli tego ustrojstwa przez sterownik INDI + istniejacy soft linuxowy. Nie wiem jeszcze co mialoby to robic  poza manualnym focusem. Widzialem sporo gotowych rozwiazan ale malo ktore mnie intersuja. Chcialbym najpierw lepiej zprozumiec problem i potem zadecydowac w ktora strone isc. Moje pytania ponizej:

1. Czy pomiar zmian temperatury I focusowanie wyciagu (z DSLR) wedle je zmian jest dobrym, sprawdzonym w  AF rozwiazaniem ?

2.  Jak jest ze (zmiana ostrosci) obiektywu refraktora wzgledem temp? Zawsze jest prosta i liniowa wg rozszerzalonosci szkla czy moze sa jakies bardziej skomplikowane kwestie ?

3. To samo co #2 ale dotyczace lustra w Newtonie.

4. Jaka platforme wybrac Arduino czy moze RPi ?

 

 



 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

Witam i prosze o porade w nastepujacej sprawie:


Mam dwa klony Arduino Nano 1 x FTDI232RL i 1 x CH340C
Obydwa sa dobrze wykrywane i programowane przez Arduino IDE pod Win10-64 bit.

Na obydwa arduino zaladowalem ten sam sketch, ktory ma za zadanie komunikacje po USB z fabryczna aplikacja (no Ascom) dla Moonlite focusera .
Arduino Nano z FTDI232RL jest podlaczona przez Windowsy na COM7, aplikacja Moonlita wykrywa je i dziala z nim prawidlowo.
Arduino Nano z CH340C podlaczone jest do COM8. Aplikacja Moonlite widzi ten port ale nie wkrywa tam arduino i nie moge dojsc co jest przyczyna.

Sterowniki, kable na pewno nie wchodza w gre. COM porty maja takie same ustwienia i poza tym (jak wczesniej napisalem) daje sie po nich zaladowac sketch pod IDE wiec COMy sa moim zdaniem sprawne. Probowalem tez tricku z wylaczaniem bootloadera w Nano (DTR off). Problem jest gdzies w komunikacji miedzy ta aplikacja i Arduino Nano z CH340C. Jedyne co obserwuje ze gdy aplikacja probuje sie komunikowac z tym Arduino to dioda RX mruga, dioda TX nie reaguje w ogole.

Czy mozliwe ze te chipy FTDI232 i CH340C  nie sa 100% kompatybilne ( np w zakersie handshake)?
Czy moze ktos podopowiedziec co jeszcze moge sprawdzic ?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 rok później...

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)