Spouštění a zastavení motoru 28BYJ-48 Arduinem

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
bu2520
Příspěvky: 4922
Registrován: 16 črc 2007, 00:00
Bydliště: u HK

#16 Příspěvek od bu2520 »

nevím úplné podrobnosti a třeba i to má být sofistikované řešení. Ale trochu něco podobného jsem řešil při plnění zásobníku peletek aby se při prázdném zásobníku zapnul dopravník a po dosažení plného zásobníku dopravník vypnul. Vyřešil jsem to bistabilním relé Spínače v tomto případě byly kapacitní spínače NO NC.
Uživatelský avatar
hafca
Příspěvky: 4723
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#17 Příspěvek od hafca »

Asi by to taky šlo. Jenže mechanická část je připravená na konkrétní motor a předělávka by asi byla složitější než to Arduino.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#18 Příspěvek od Valdano »

hafca píše:Jen je zajímavé, že zastavování funguje až na několikátý pokus, ale rozběh hned.
Pokud páka dojede dolů vlastní váhou a dosedne na dolní koncový spínač pro rozběh tak ten sepne a motor se tedy rozeběhne. To se dle vašeho vyjádření provede vždy.

Následně by měl motor běžet trvale až do té doby kdy páka dojede do horní polohy kde sepne horní koncák. Jakmile sepne horní koncák tak by měl motor zastavit.

Problém může být v tom, že dokud motor běží tak se vždy volá step(stepsPerRotation) což znamená vždy provedení jedné celé otáčky hřídele. Dokud není dokončena celá otáčka, tak motor stále běží a záleží na konstrukci a pevnosti osazení koncového spínače tj. zda celá otáčka není příliš mnoho a zda při tom třeba nedochází k odtlačení koncového spínače takovým způsobem, že se mírně posune a tím k sepnutí dojde až na několikátý pokus. Pokud je to tak pak by asi stálo za zvážení volat step po menších částech než je celé otočení hřídele tj. třeba jen step(stepsPerRotation/8), ale v závislosti na konstrukci ani to nemusí být dostatečně účinné.
hafca píše:Ale možná je to tím, že to zatím mám na "prkénku". Uvažuji o spínání buď magnetem a jazýčkovým zátavem nebo magnet a Hallovo čidlo.
Ano. Pokud tam bude magnet, který po najetí na úroveň čidla způsobí sepnutí, a čidlo zůstane sepnuté i při mírném přejetí v důsledku dokončení celé otáčky hřídele tak to by to mohlo vyřešit.
Uživatelský avatar
hafca
Příspěvky: 4723
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#19 Příspěvek od hafca »

Vyzkoušel jsem a je to lepší. Mám objednané Hall čidla a vyzkouším to s nimi. Když se to podaří dát na malou DPS a rovnou na Arduino, mohlo by to fungovat be zádrhelů s parazitním signálem z dlouhého vodiče.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
hafca
Příspěvky: 4723
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#20 Příspěvek od hafca »

Myslel jsem si, že DPS a čidla to vyřeší, ale není to tak.
Motor nezastavuje a když náhodou zastaví, tak po deaktivaci čidla zase běží.
Aby opravdu zastavil a zůstal stát přidal jsem žádek s myStepper.step(256);. Pak zastaví, ale dolní čidlo ho už nespustí. Někde je problém v podmínkách, ale já to nedokážu najít. Ležím v tom víc jak týden a nehnu se z místa.
Kde hledat chybu?

Kód: Vybrat vše

#include <Stepper.h>

#define OUTPUT1   11
#define OUTPUT2   10
#define OUTPUT3   9
#define OUTPUT4   8
#define SW_H      12
#define SW_D      13

int chod = 0;
const int stepsPerRotation = 2048;
Stepper myStepper(stepsPerRotation, OUTPUT2, OUTPUT4, OUTPUT1, OUTPUT3);

void setup()
{
  pinMode(SW_H,INPUT_PULLUP);
  pinMode(SW_D,INPUT_PULLUP);
    myStepper.setSpeed(15);
  chod = 1;
  Serial.begin(9600);
}
 void loop()
{
    if (chod) {
myStepper.step(256);
  };
  if (digitalRead(SW_H)==LOW) {
    // sepnul horní koncák tj. vypnout motor
    // páka pojede samočinně dolů bez motoru
      chod = 0;
     delay(20);
   } else {
 
    if (digitalRead(SW_D)==LOW) {
       // sepnul dolní koncák tj. zapnout motor
      // motor začne zvedat páku nahoru
       chod = 1;
        delay(20);
    };
    };
  }
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#21 Příspěvek od lesana87 »

Proč všude cpete ty delaye? A neměl by mít horní koncák (vypnutí motoru) prioritu?

Kód: Vybrat vše

void loop()
 {
   if (chod) {
       myStepper.step(16);
   };
   if (digitalRead(SW_D)==LOW) {
       // sepnul dolní koncák tj. zapnout motor
       // motor začne zvedat páku nahoru
       chod = 1;
   };

   if (digitalRead(SW_H)==LOW) {
       // sepnul horní koncák tj. vypnout motor
       // páka pojede samočinně dolů bez motoru
       chod = 0;
   };
 }
Uživatelský avatar
hafca
Příspěvky: 4723
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#22 Příspěvek od hafca »

Je mi to líto, ale funguje to pořád stejně. Horní koncák to zastaví, ale dolní koncák už to nespustí.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#23 Příspěvek od lesana87 »

A ten Serial.begin() je tam proč? Není UART na stejném pinu jako ten koncák? Nevím, jaké tam máš arduino.
Uživatelský avatar
Ruprecht
Příspěvky: 1494
Registrován: 28 zář 2005, 00:00
Bydliště: ZČ + JM

#24 Příspěvek od Ruprecht »

lesana87 píše:Proč všude cpete ty delaye?
Aby to sjelo z koncáku? Pak je ještě krátký :wink:
Když promluví, tak buď kňučí, nebo lže.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#25 Příspěvek od lesana87 »

A proč by to bez delaye nemělo sjet z koncáku? První aktivace koncáku otočí směr a pak se tam může mydlit jak chce a na funkci to nemá vliv, dokud nenajede na opačný.
Uživatelský avatar
hafca
Příspěvky: 4723
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#26 Příspěvek od hafca »

lesana87 píše:A ten Serial.begin() je tam proč? Není UART na stejném pinu jako ten koncák? Nevím, jaké tam máš arduino.
Měl jsem tam výpis stavů těch koncáků. Mám to na NANO. Ale je to jedno, funguje to pořád blbě s i bez toho UART.
Ten motor se musí točit pořád jedním směrem. Horní koncák ho vypne a dolní zase stejným směrem spustí.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#27 Příspěvek od lesana87 »

Směrem jsem myslela směr pohybu nahoru / dolu.
No a ty koncáky teda fungujou?
Uživatelský avatar
hafca
Příspěvky: 4723
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#28 Příspěvek od hafca »

Jo, zkoušel jsem i s RED zátavem a taky nic. Protě zastaví a už se nerozjede. Zkusil jsem i jiné NANO, ale nic.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#29 Příspěvek od lesana87 »

Podle datašítu Arduino Nano v3.2 je na pinu 13 LEDka, nestahuje náhodou ten pull-up dolu, takže je tam pořád log. 0? Akorát to by se to chovalo obráceně.
Uživatelský avatar
Ruprecht
Příspěvky: 1494
Registrován: 28 zář 2005, 00:00
Bydliště: ZČ + JM

#30 Příspěvek od Ruprecht »

Co naměříš voltmetrem na vstupních nožičkách Arduina od koncáků když zacvičíš těmi koncáky rukou? Spínají opravdu na země? Není jeden přehozený (přepínací kontakt nebo opačný smysl spínání tím jak je mechanicky otočený)?
Když promluví, tak buď kňučí, nebo lže.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“