Pantový stolek

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Wrchi
Příspěvky: 7
Registrován: 19 dub 2019, 23:31
Reputation: 0

Pantový stolek

Příspěvek od Wrchi » 19 dub 2019, 23:49

Zdravím vás.
Můžete mi prosím pomoct se zapojením a naprogramováním?
Vyrabím pantový stolek, kvůli focení hvězd. Podoba je tady https://imgur.com/a/dAOIhfd
S čím si ale nevím rady je zapojení a naprogramování desky. Mám použitý Arduino UNO R3, krokový motorek 28BYJ-48 s driverem ( https://www.gme.cz/krokovy-motor-ridici-modul )
Nikdy předtím jsem s tímhle nedělal.
Povedlo se mi ale jen rozchodit motorek a měnit rychlost podle návodu https://navody.arduino-shop.cz/navody-k ... river.html
Chtěl bych ale mít zapojené dvě tlačítka (přepínače). Jedním přepínačem bych chtěl motorek zapnout a měnit směr otáčení a druhým přepínačem bych chtěl měnit rychlost. Jako příklad je tohle video https://www.youtube.com/watch?v=KryNwpZH5zs
Hledám už to pár dní ale nikde jsem zatím nenašel zapojení vodičů a kód pro mé komponenty.
Díky za případné rady.

gilhad
Příspěvky: 222
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Pantový stolek

Příspěvek od gilhad » 20 dub 2019, 02:31

Ten levy prepinac ma imho uprostred zem, kterou pripojuje bud doleva, nebo doprava na piny, kde je INPUT_PULLUP. Ktery pin vrati pri cteni nulu, tam je to prepojene, uprostred vraci oba dva jednicku. Pravy prepinac je mozna pouze vypinac mezi zemi a tretim pinem s INPUT_PULLUP a podle toho jestli je na pinu 0 nebo 1, tak jede pomalu, nebo rychle.

Podle prepinace v tom prikladu poustis bud jen cast s rotacePoSmeru() nebo cast s rotaceProtiSmeru() (nebo ani jednu, kdyz je uprostred a ma stat).

Vypinacem nastavujes rychlost na 1, nebo 2 a cekani v loop nedelas vubec a delas tam nikoli 512 kroku (dokola), ale jen jeden krok, takze celou otocku o 360 stupnu udelas po asi 512 pruchodech loop();

Kód: Vybrat vše


void loop() {

  if (digitalRead(pinVypinac)) {
     rychlost=2; // pomalu
     } else {
        rychlost=1; // rychle
     };
  
  //  rotace o 1 krok = 1 volání
  // funkce rotacePoSmeru() či rotaceProtiSmeru()
  if (digitalRead(pinVlevo)==0) {
    rotacePoSmeru();
  }
  if (digitalRead(pinVpravo)==0) {
    rotaceProtiSmeru();
  }
}

Wrchi
Příspěvky: 7
Registrován: 19 dub 2019, 23:31
Reputation: 0

Re: Pantový stolek

Příspěvek od Wrchi » 20 dub 2019, 08:52

Takže černé vodiče s přepínačů jsou propojené a zapojené do GND. Jednotlivé zelené jsou pak zapojené do analogových vstupů 5,4,3 ?(nevím, nejde to pořádně poznat z toho videa). Navíc jsou ještě všechny zelené přes odpory propojené a zapojené do 5V ? (taky to nejde úplně poznat).

gilhad
Příspěvky: 222
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Pantový stolek

Příspěvek od gilhad » 20 dub 2019, 09:05

Ono je celkem jedno na ktere volne piny pripojist ty zelene, pro ten prepinac smeru je pak oznacis jako pinVlevo a pinVpravo, pro rychlost pinVypinac. Odpory k +5V netreba, pokud to das jako INPUT_PULLUP (pouzijou se vnitrni pullup odpory Arduina pro pritazeni k +5V) , nikoli jen INPUT . At uz pouzijes Dneco, nebo Aneco, tak je pouzijes jako digitalni, cili digitalRead.

Wrchi
Příspěvky: 7
Registrován: 19 dub 2019, 23:31
Reputation: 0

Re: Pantový stolek

Příspěvek od Wrchi » 20 dub 2019, 15:25

No zatím tomu zase tak uplně nerozumím tak musím pomaleji :)
Zapojení by bylo asi takhle jestli to chápu?
zapojení.jpg
Tenhle základní kód bych pak upravil s tím co si napsal ty nahoře.

Kód: Vybrat vše

// Krokový motor a driver

// čísla pinů pro digitální výstupy
const int in1 =  8;
const int in2 =  9;
const int in3 = 10;
const int in4 = 11;

// proměnná pro nastavení rychlosti,
// se zvětšujícím se číslem se rychlost zmenšuje
int rychlost = 1;
//
int uhel = 360;

void setup() {
  // inicializace digitálních výstupů
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  // plná rotace o 360 stupňů = 512 volání
  // funkce rotacePoSmeru() či rotaceProtiSmeru()
  for(int i=0;i<(uhel*64/45);i++){
    rotacePoSmeru();
  }
  // pauza po dobu 1 vteřiny
  delay(1000);
  
  for(int i=0;i<(uhel*64/45);i++){
    rotaceProtiSmeru();
  }
  // pauza po dobu 1 vteřiny
  delay(1000);
}

// zde následují funkce pro volání jednotlivých
// kroků pro otočení po či proti směru hodinových
// ručiček
void rotacePoSmeru() {
  krok1();
  krok2();
  krok3();
  krok4();
  krok5();
  krok6();
  krok7();
  krok8();
}
void rotaceProtiSmeru() {
  krok8();
  krok7();
  krok6();
  krok5();
  krok4();
  krok3();
  krok2();
  krok1();
}
// každý krok obsahuje výrobcem dané pořadí
// pro správné spínání motoru a následnou
// pauzu, kterou určujeme rychlost otáčení
void krok1(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok2(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok3(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok4(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok5(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok6(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}
void krok7(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}
void krok8(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}

AstroMiK
Příspěvky: 169
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Pantový stolek

Příspěvek od AstroMiK » 20 dub 2019, 16:16

Vyzkoušený to nemám, ale asi to mělo být nějak takhle:

Kód: Vybrat vše

// Krokový motor a driver

// čísla pinů pro digitální výstupy
const int in1 =  8;
const int in2 =  9;
const int in3 = 10;
const int in4 = 11;

const int pinVypinac = A5;
const int pinVlevo   = A3;
const int pinVpravo  = A4;

unsigned int rychlost;


void setup() {
  // inicializace digitálních výstupů
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);

  pinMode(pinVypinac, INPUT_PULLUP);
  pinMode(pinVlevo  , INPUT_PULLUP);
  pinMode(pinVpravo , INPUT_PULLUP);




}

void loop()
  {
    if (digitalRead(pinVypinac))    rychlost=2; // pomalu (rozpojeny kontakt)
    else                            rychlost=1; // rychle (sepnuty kontakt)
  
    //  rotace o 1 krok = 1 volání
    // funkce rotacePoSmeru() či rotaceProtiSmeru()
    if (digitalRead(pinVlevo) == 0)
      {
        rotacePoSmeru();
      }
    if (digitalRead(pinVpravo) == 0)
      {
        rotaceProtiSmeru();
      }
  

  }

// zde následují funkce pro volání jednotlivých
// kroků pro otočení po či proti směru hodinových
// ručiček
void rotacePoSmeru() {
  krok1();
  krok2();
  krok3();
  krok4();
  krok5();
  krok6();
  krok7();
  krok8();
}
void rotaceProtiSmeru() {
  krok8();
  krok7();
  krok6();
  krok5();
  krok4();
  krok3();
  krok2();
  krok1();
}
// každý krok obsahuje výrobcem dané pořadí
// pro správné spínání motoru a následnou
// pauzu, kterou určujeme rychlost otáčení
void krok1(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok2(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok3(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok4(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok5(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok6(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}
void krok7(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}
void krok8(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}




A co se týče schématu, tak tam přece není možné připojit na kontakt z jedné strany +5V a z druhé GND!
Při jeho sepnutí by došlo ke zkratu.

V příloze je opravené schéma:
zapojení2.gif

Wrchi
Příspěvky: 7
Registrován: 19 dub 2019, 23:31
Reputation: 0

Re: Pantový stolek

Příspěvek od Wrchi » 20 dub 2019, 22:04

No na tom video příkladu to má právě zapojené s těma odporama na 5V. Ale teď už to chápu, jak si psal, že když se použije INPUT_PULLUP, tak už se to nemusí propojovat. Púvodně jsem myslel, že to musí být i tak propojené bez těch odporů.
Vyzkoušel jsem to zapojit a nahrát kód a je to přesně to co jsem potřeboval. Vše funguje jak má s přepínáním směru i rychlostí otáček :) Moc díky za pomoc :)! Určitě se to bude hodit i dalším astro fotografům :) Pak sem hodím výslednou podobu pantového stolku.

gilhad
Příspěvky: 222
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Pantový stolek

Příspěvek od gilhad » 21 dub 2019, 12:24

nejen astrofotografům :)

Ono je to docela obvyklý manévr kdekoli použít tlačítka proti zemi a INPUT_PULLUP (ostatně proto to tam výrobce čipu zadrátoval).

Jinak ono obecně pomáhá se naučit programovat, protože pak člověk chápe co dělá a proč a může s důvěrou ve výsledek upravovat cizí programy (které řeší něco jiného) a ukázkové kódy (které jsou většinou samy o sobě celkem na nic, ale ukazují, jak používat různé (často i všechny) funkce nějakého modulu a předpokládají, že laskavý čtenář si z nich vezme inspiraci a napíše si to po svém, na míru vlastnímu problému - nikdo nepotřebuje otáčet krokovým motorem o 360 stupňů tam a zpátky se sekundovými pauzami, ale spousta lidí potřebuje točit krokovými motory nějak a tady vidí, jak je přimět udělat pár kroků tam a pár zpět a jak měnit rychlost a zbytek už si dotvoří)

Wrchi
Příspěvky: 7
Registrován: 19 dub 2019, 23:31
Reputation: 0

Re: Pantový stolek

Příspěvek od Wrchi » 29 dub 2019, 23:45

Tak stolek je téměř hotový. Čekám jen na montáž foťáku a pak už jen na jasnou oblohu. Když to teď různě zkouším, tak ještě řeším rychlost toho pomalého otáčení. Mám nastavenou zatím pomalou rychlost na 6. Číslo 5 by už byla rychle a 7 pomalu. Když budu ale potřebovat ještě rychlost něco mezi tím. Je na to lepší funkce Delay, DelayMicroseconds nebo mikro kroky?

HrAd
Příspěvky: 24
Registrován: 12 říj 2017, 22:45
Reputation: 0

Re: Pantový stolek

Příspěvek od HrAd » 30 dub 2019, 09:09

Názornou odpověď hlavně s ohledem na omezení nežádoucího chvění najdeš cca od času 1 min v následujícím videu.
https://youtu.be/tRoT3qpndbU?t=57

Mimochodem spoustu informací včetně výpočtů, plánků, zapojení HW a SW je k nalezení pod termíny "barn door" + "mount" nebo + "tracker" různě doplněná o hesla motorized, arduino viz. třeba tady. Nicméně chválim snahu udělat si to po svém a hlavně tomu porozumět ;)

Bodla by nějaká fotka mechaniky a hlavně se nezapomeň pochlubit výsledkem, tj. fotkami hvězd :)

EDIT:
pro další experimenty s omezením otřesů = omezení rozklepanosti fotek bude potřeba lepší driver, proč, jak na to a co zvolit? Inspirace níže:
test TL Smoother a srovnání A4988 vs. DRV8825
srovnání driveru TMC2100 vs. DRV8825 vs. A4988 při reálném nasazení na video pojezdu

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host