Stránka 2 z 3

Napsal: 05 pro 2024, 09:51
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.

Napsal: 05 pro 2024, 19:10
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.

Napsal: 07 pro 2024, 14:48
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.

Napsal: 07 pro 2024, 15:07
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.

Napsal: 19 led 2025, 15:12
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);
    };
    };
  }

Napsal: 19 led 2025, 15:46
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;
   };
 }

Napsal: 19 led 2025, 16:34
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í.

Napsal: 19 led 2025, 16:49
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.

Napsal: 19 led 2025, 16:53
od Ruprecht
lesana87 píše:Proč všude cpete ty delaye?
Aby to sjelo z koncáku? Pak je ještě krátký :wink:

Napsal: 19 led 2025, 16:58
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ý.

Napsal: 19 led 2025, 17:12
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í.

Napsal: 19 led 2025, 17:16
od lesana87
Směrem jsem myslela směr pohybu nahoru / dolu.
No a ty koncáky teda fungujou?

Napsal: 19 led 2025, 17:22
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.

Napsal: 19 led 2025, 17:25
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ě.

Napsal: 19 led 2025, 17:30
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ý)?