Posuv přes Arduino

Zde si můžeme předat nějaké ty zkušenosti.
  • Advertisement

Posuv přes Arduino

Příspěvekod Lemur1 » ned 06. říj 2024 14:21:02

Ahoj, prosím nemohl by mi někdo pomoci se zapojením a kódem pro desku Uno. Potřebuji udělat posuv levá pravá, stačí jen ovládat tlačítky bez koncáků.
Motor: NEMA 17
Deska: Arduino UNO
Použitelné věci co mám: L298N, HW95, ULN2003, CNC štít a nebo co vlastně budu potřebovat pokud to nemám, ale nechci to ovládat přes počítač, jde jen o posuv.
Tlačítko vlevo a vpravo
Vyzkoušel jsem již spoustu návodů, ale nic nefungovalo tak jak potřebuji. Některé programy dokonce nešli ani nahrát.
Mohl by mi prosím někdo pomoct, já se v tom až tak moc nevyznám.
Všem moc děkuji.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » ned 06. říj 2024 19:43:36

Tak jsem tady sesmolil něco na základě ChatGPT 4o-mini:

Prompt:
Ahoj. Potřebuji napsat krátký kód pro Arduino UNO, který bude ovládat krokový motor. Na Arduino UNO připojím CNC Shield v3. Pro řízení bude použit driver A4988 na shieldu pro osu X. Chci aby šlo pomocí dvou tlačítek vždy spustit motor doleva nebo do prava. Motor se bude točit po dobu stisknutého tlačítka. Napiš tedy patřičný program a popiš kam se mají a jak připojit daná tlačítka.

Ahoj! Tady máš jednoduchý kód pro ovládání krokového motoru pomocí dvou tlačítek na Arduino UNO s CNC Shield v3 a driverem A4988 na ose X.

Zapojení
Krokový motor: Připoj krokový motor k driveru A4988 na CNC Shield (obvykle připojuješ motor do konektoru pro osu X).
Driver A4988: Ujisti se, že napájení je správně připojeno (Vmot a GND).
Tlačítka:
Připoj jedno tlačítko mezi pin 2 a GND. Toto tlačítko bude ovládat motor doleva.
Připoj druhé tlačítko mezi pin 3 a GND. Toto tlačítko bude ovládat motor doprava.
Kód pro Arduino
Kód: Vybrat vše
// Pin Definitions 
const int stepPin = 3; // Pin pro krok 
const int dirPin = 2;  // Pin pro směr 
const int buttonLeft = 4; // Tlačítko pro pohyb doleva 
const int buttonRight = 5; // Tlačítko pro pohyb doprava 

void setup() { 
  // Nastavení pinů 
  pinMode(stepPin, OUTPUT); 
  pinMode(dirPin, OUTPUT); 
  pinMode(buttonLeft, INPUT_PULLUP); 
  pinMode(buttonRight, INPUT_PULLUP); 


void loop() { 
  // Kontrola stavu tlačítek 
  if (digitalRead(buttonLeft) == LOW) { 
    digitalWrite(dirPin, LOW); // Nastavení směru doleva 
    stepMotor(); // Funkce pro krok motoru 
  }   
  else if (digitalRead(buttonRight) == LOW) { 
    digitalWrite(dirPin, HIGH); // Nastavení směru doprava 
    stepMotor(); // Funkce pro krok motoru 
  }   


void stepMotor() { 
  digitalWrite(stepPin, HIGH); 
  delayMicroseconds(1000); // Délka kroku (uprav podle potřeby) 
  digitalWrite(stepPin, LOW); 
  delayMicroseconds(1000); // Délka kroku (uprav podle potřeby) 

Popis kódu
Pin Definitions: Definujeme piny pro řízení směru a krokování motoru a piny pro tlačítka.
setup(): Inicializujeme piny jako výstupy nebo vstupy s interním pull-up odporem.
loop(): Kontroluje stav tlačítek:
Pokud je stisknuto tlačítko pro pohyb doleva, nastaví směr a provede krok motoru.
Pokud je stisknuto tlačítko pro pohyb doprava, nastaví odpovídající směr a provede krok.
stepMotor(): Funkce, která provede jeden krok motoru.
Důležité poznámky
Ujisti se, že máš motor správně napájen a nakonfigurován.
Ovládání rychlosti a série kroků může být přizpůsobeno pomocí změny hodnot v delayMicroseconds().
Ujisti se, že v případě delšího provozu motoru máš vhodný chladící systém, aby nedošlo k přehřátí driveru.
Tento kód by měl být jednoduchým základem pro ovládání krokového motoru pomocí tlačítek.

Pokud potřebuješ jiný program stačí ho přesně specifikovat a AI ti ho celý vymyslí.

Více o AI ZDE
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » pon 07. říj 2024 19:17:35

Ahoj,
moc ti děkuju, hned to půjdu vyzkoušet. Pokud budeš chtít, až dodělám svůj projekt ( rotační válce pro laserový gravírovací stroj) rád se podělím o návod, stl soubory a fotky konstrukce. Samozřejmě že se rád podělím i s ostatními uživateli fóra.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Lemur1 » pon 07. říj 2024 22:07:14

Tak jsem to zkoušel a nic. Ještě jsem zkusil přes Xloader nahrát GRBL pro kontrolu zda není shield špatný a přes GRBL panel vše funguje. Pokud nahraju kód pro arduino který jsi poskytl, motor na tlačítka nereaguje a vůbec do něj nejde napětí. Teď ještě záleží zda používám správné piny 2 a 3. Pokud jsem to pochopil dobře, je to pin XSTEP/DIR a YSTEP/DIR. No a nebo jsem totální lama a to doufám že ne ;)
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » úte 08. říj 2024 8:33:45

No v tom popisu od ai je nesrovnalost s definici pinu. Je potrba zkontrolovat jak to je na shildu zapojene a jestli ro nekoliduje s temi tlacitky. A zamerne jsem tam nechal chybu, kterou ai vytvorilo, ktera brani tomu aby se motor roztocil. To melo proverit tvoji pozornost jestli se nad tim zamyslis. Takze ti dam napovedu. Jake signaly potrebuje driver aby mohl tocit motorem. Z programu je jasne ze STEP a DIR. Ale je to vsechno?
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » úte 08. říj 2024 21:15:27

Už jsem se do toho zamotal tak, že se na to asi vykašlu. Už jsem zkoušel všechna možná zapojení a kódy co mi poradilo AI a stále nic nefunguje. Zapojení podle AI je bez Shieldu, ovladač se má propojit drátama s deskou a s motorem. Přiznám se, že takhle bezradný a zoufalý, co se týká řešení technických problémů jsem ještě nebyl. Z 90% se mi vše podaří vymyslet, rozchodit, opravit nebo jinak zprovoznit. Opravuji motorky, auta, mám spoustu svých projektů, a vyhořím na tomhle. Myslel jsem si , že vyzkouším simulaci v Tinkercadu, ale tam nejsou ovladače, takže zase nic. Videa toho co potřebuji jsem taky žádný nenašel. Jasně že je možnost klasického DC motoru a tlačítek, ale tak to nechci. Potřebuji deskou ovládat dva motory nezávisle na sobě každý jinými tlačítky. Krokový motor je pro tyto věci nejideálnějším řešením z ohledem na místo a variabilitu motoru.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » stř 09. říj 2024 6:17:36

Ten muj priklad od AI by fungovat mel. Jen musis jak jsem psal premapovat piny pro rizeni krokoveho motoru. Jsou to 3 piny. Step, Dir a Enable. Jeden z tech pinu neni v programu definovan coz je ta chyba od AI. Ale to tam snad dokazes dopsat jsou to celkem 4 radky kodu pricemz se pouzije pouze Ctrl+C a Ctrl+V a jen se upravi cislo portu na kterem mas zapojeno to Enable. To snadno zjistiz ze schema zapojeni CNC Shieldu. Samozrejme cela tato anabaze pocita s tim, ze vis jak spravne nakonfigurovat a nastavit driver motoru. Je potreba nastavit proud a mikrokrokovani. Teto problematiky je plny internet nebo to s tim muze velmi efektivne pomoci AI.taktez neni dobre bezhlave generovat kody a ty bezhlave testovat. Zamer se na kod co jsem ti sem dal a ten uprav tak jak jsem psal aby fungoval. Snaz se z komentaru programu pochopit jak ten kod funguje, protoze bez pochopeni neni sebemensi sance na uspech.
Pokud s tim budes chtit poradit, neni problem, ale potrebuji vedet ze v tom vyvijis nejakou svoji iniciativu. Takze sem klidne vkladej svoje myslenky a postupy co jsi zkousel a jaky to melo vysledek. Popisuj jak to mas presne zapojene a vkladej aktualni kod. Pokud jen napises, ze jsi skousel X kodu nekde stazenych a ze nefungovaly je to naprosto zbytecna informace rp kohokoli, kdo by chtel poradit. Musis vzdy naprosto vecne a konkretne popisovat problem a postupy, aby bylo mozne odhalit tvoje chyby a ty napravit.
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » stř 09. říj 2024 19:49:38

Takže, VMOT jsem zapojil na 12V pro napájení motoru, oba GND jsem spojil s deskou GND, VDD na desku 5V, STEP na PIN2, DIR na PIN3, RESET a SLEEP též 5V. Motor jsem připojil na 1B-1A, 2A-2B tak aby cívky odpovídali připojení 1B+1A a 2A+2B. Tlačítka zapojena do PIN4 + GND a PIN5 + GND. Desku jsem připojil na 12v adaptér. Ve tvém kódu jsem nejprve zaměnil PIN2 s pinem3 aby připojení odpovídalo kódu STEP a DIR. Enable jsem nepřipojoval nikam. V tomto stavu motor pouze chvilku vrčel a po sepnutí tlačítek nereagoval. Je to vše řešeno bez Shieldu, pouze přímé zapojení dráty deska - ovladač - motor.

Další kód který jsem zkoušel použít je tento:

Kód: Vybrat vše
#define STEP_PIN 2 
#define DIR_PIN 3 
#define BUTTON_LEFT 4 
#define BUTTON_RIGHT 5 

void setup() { 
  pinMode(STEP_PIN, OUTPUT); 
  pinMode(DIR_PIN, OUTPUT); 
  pinMode(BUTTON_LEFT, INPUT_PULLUP); 
  pinMode(BUTTON_RIGHT, INPUT_PULLUP); 

 
  digitalWrite(DIR_PIN, HIGH); 


void loop() { 
  if (digitalRead(BUTTON_LEFT) == LOW) { 
     
    digitalWrite(DIR_PIN, LOW); 
    stepMotor(); 
  } else if (digitalRead(BUTTON_RIGHT) == LOW) { 
     
    digitalWrite(DIR_PIN, HIGH); 
    stepMotor(); 
  } 


void stepMotor() { 
  digitalWrite(STEP_PIN, HIGH); 
  delayMicroseconds(1000);
  digitalWrite(STEP_PIN, LOW); 
  delayMicroseconds(1000);
}
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » čtv 10. říj 2024 6:14:36

No to zapojeni driveru jak ho popisujes neni podle doporuceni vyrobce. Prvne piny Reset a Sleep se jen na driveru propoji a nic dalsiho se k nim nepripoji. Dale doporucuji propojit MS1 s +5V aby se predeslo u nekterych driveru spatne funkci. Pokud tento vstup totiz neni zapojen mel by tam byt odpor 100K proti zemi. Dale musi byt zapojen vstup Enable bez ktereho nedostane driver uvolneni k pohybu. Tento vstup Enable musi byt pripojen pres rezistor 10K k +5V a jeho aktivace je provadena logickou 0. Tedy pripojenim na GND. To je potreba do programu doplnit. Dale musi mit driver spravne nastaveny proud pro dany motor a mel by tal byt i kondenzator 100uF u napajeni motoru. Jinak muzes pouzit CNC shield kde pro osu X jsou vyvody mapovany Xstep D2, Xdir D5, enable D8. V tuto chvili se tedy zamer na spravne pripojeni motoru a driveru a jejich vzajemne nastaveni. Nasledne se zamer na integraci ovladani vyvodu enable do programu.

Ps: Jaky je rozdil v tech programech krom toho radku ve tvem programu, ktery tam je zcela zbytecny?
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » pát 11. říj 2024 20:37:15

rozdíl vidím pouze v pinech step a dir které jsem změnil. Ještě jsem se snažil zjednodušit si zapojení přes CNC shield, nastavené piny na X.STEP a X.DIR pro tlačítka, ale stále mi shield nepouští napětí do motoru a hlavně sériový monitor nic neukazuje. Když nahraju GRBL, tak přes GRBL panel vše funguje, ale takhle pořád nic. Tak už nevím co dělám špatně. :-(
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Lemur1 » pát 11. říj 2024 21:09:45

Ještě jsem zkusil použít tento program na posuv tlačítky a sériový monitor ukazuje pohyby do plusu a do mínusu podle stisknutých tlačítek.

Kód: Vybrat vše
#define buttonLeft 2    // Pin pro tlačítko vlevo 
#define buttonRight 5   // Pin pro tlačítko vpravo 
int posun = 0;           // Pozice posunu 

void setup() { 
    Serial.begin(9600); 
    pinMode(buttonLeft, INPUT_PULLUP); 
    pinMode(buttonRight, INPUT_PULLUP);   


void loop() { 
    // Kontrola stavu levého tlačítka 
    if (digitalRead(buttonLeft) == LOW) { 
        posun--; // Posun vpravo 
        Serial.print("Posun vlevo: "); 
        Serial.println(posun); 
        delay(500);  // Zpoždění pro stabilitu 
    } 

    // Kontrola stavu pravého tlačítka 
    if (digitalRead(buttonRight) == LOW) { 
        posun++; // Posun vpravo 
        Serial.print("Posun vpravo: "); 
        Serial.println(posun); 
        delay(500);  // Zpoždění pro stabilitu 
    } 
}
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Lemur1 » pát 11. říj 2024 21:22:32

Při nahrání tohohle kódu sériový monitor také ukazuje činnost, ale motor se nepohne.

Kód: Vybrat vše
#include <AccelStepper.h> 

// Definice pinů pro motor 
#define STEP_PIN 3  // Pin pro krok (X.STEP) 
#define DIR_PIN 4    // Pin pro směr (X.DIR) 

// Definice pinů pro tlačítka 
#define BUTTON1_PIN 2  // Tlačítko pro pohyb dopředu 
#define BUTTON2_PIN 5  // Tlačítko pro pohyb dozadu 

// Inicializace krokového motoru 
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN); 

// Nastavení počátečních hodnot 
int stepAmount = 1000; // Kolik kroků se má provést 
int motorSpeed = 200;  // Rychlost motoru 
unsigned long lastButtonPress = 0; // Čas posledního stisknutí tlačítka 
const unsigned long debounceDelay = 200; // Zpoždění pro debouncing 

void setup() { 
  Serial.begin(9600); // Inicializace sériového monitoru 
  pinMode(BUTTON1_PIN, INPUT_PULLUP); 
  pinMode(BUTTON2_PIN, INPUT_PULLUP); 
 
  stepper.setMaxSpeed(motorSpeed); 
  stepper.setAcceleration(500); 


void loop() { 
  // Kontrola stisknutí tlačítek 
  unsigned long currentMillis = millis(); 

  if (digitalRead(BUTTON1_PIN) == LOW && (currentMillis - lastButtonPress > debounceDelay)) { 
    lastButtonPress = currentMillis; // Aktualizace času posledního stisknutí 
    Serial.println("Pohyb dopředu."); // Debug zpráva 
    digitalWrite(DIR_PIN, HIGH); 
    stepper.move(stepAmount); 
  }   
  else if (digitalRead(BUTTON2_PIN) == LOW && (currentMillis - lastButtonPress > debounceDelay)) { 
    lastButtonPress = currentMillis; // Aktualizace času posledního stisknutí 
    Serial.println("Pohyb dozadu."); // Debug zpráva 
    digitalWrite(DIR_PIN, LOW); 
    stepper.move(-stepAmount); 
  }   
   
  // Provádí krok motoru 
  if (stepper.distanceToGo() != 0) { 
    stepper.run(); 
  } 
}
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » pát 11. říj 2024 21:42:29

Já už nevím. Proč tak tvrdošíjně ignoruješ to co píšu?
Kód: Vybrat vše
// Pin Definitions
const int stepPin = 2; // Pin pro krok
const int dirPin = 5;  // Pin pro směr
const int enable = 8;  //
const int buttonLeft = 4; // Tlačítko pro pohyb doleva
const int buttonRight = 5; // Tlačítko pro pohyb doprava

void setup() {
  // Nastavení pinů
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(enable, OUTPUT);
  pinMode(buttonLeft, INPUT_PULLUP);
  pinMode(buttonRight, INPUT_PULLUP);

  digitalWrite(enable, HIGH);
}

void loop() {
  // Kontrola stavu tlačítek
  if (digitalRead(buttonLeft) == LOW) {
    digitalWrite(enable, LOW);
    digitalWrite(dirPin, LOW); // Nastavení směru doleva
    stepMotor(); // Funkce pro krok motoru
  }   
  else if (digitalRead(buttonRight) == LOW) {
    digitalWrite(enable, LOW);
    digitalWrite(dirPin, HIGH); // Nastavení směru doprava
    stepMotor(); // Funkce pro krok motoru
  }
  else{
   digitalWrite(enable, HIGH);
   }   
}

void stepMotor() {
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500); // Délka kroku (uprav podle potřeby)
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500); // Délka kroku (uprav podle potřeby)
}

Zkus tento kód. Měl by fungovat s CNC shieldem. Je to upravené přesně tak jak jsem popsal v mém minulém příspěvku.
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » sob 12. říj 2024 10:07:37

Promiň, určitě neignoruju, jen tomu úplně nerozumím, jsem spíš na mechanické věci. Pokud jde o tohle, připojím, zapojím, podle rady nastavím, ale programově jsem mimo. Tohle se pokouším řešit, aby mi mozek nezakrněl, ale jak teď vidím asi už zakrňuje. Ten řádek s enable jsem zkoušel řešit po tom co jsi o něm psal, ale nevěděl jsem do jaké řádky ho mám zavést. Jen jsem to zapomněl ve zprávě napsat.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Lemur1 » sob 12. říj 2024 11:30:36

Takže konečný a zároveň kladný výsledek je takovýto. Konečně funguji a za tvoji pomoc ti opravdu moc děkuji. AI je fajn, ale pokud tomu vážně nerozumíš, tak stejně nevíš kam co doplnit pokud je něco špatně, bez tvé pomoci bych to vážně nezvládl. Jen jsem musel upravit piny a už to jede. Ještě předpokládám, že pokud budu chtít použít další motor a k němu také dvě tlačítka, doplním řádky pro další osu třeba Y a pro další odpovídající piny a rozdělím je čísly podle motorů a tlačítek, je tomu tak nebo jsem zase mimo?
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » sob 12. říj 2024 14:42:01

Jsem rád, že to konečně funguje.
Bohužel ten program je napsaný hodně jednoduše (dá se říct že špatně), jen tak aby sice fungoval, ale nikoli aby šel nějak rozumně použít v praxi. První problém kterého si můžeš všimnout je ten, že není ošetřeno pokud uživatel stiskne současně obě tlačítka. Toto se musí bezpodmínečně ošetřit přidáním další podmínky.
Ovšem to je jen drobnost v porovnání se samotným řízením motoru. To je od základu napsané zcela špatně (z programátorského pohledu). Je nemyslitelné, aby kdekoli jinde než ve void setup() bylo použito delay() nebo delayMicroseconds(). Toto by totiž zcela znemožnilo řídit najednou více jak 1 motor (nebo cokoli jiného).
Takže nyní se musíš rozhodnout jak přesně má tvoje řízení 2 motorů fungovat. Pokud bude v chodu vždy pouze jeden motor, je možné použít stávající kód, který se pouze rozšíří. Pokud ti nevadí, že bude možné použít sice oba motory současně, ale nebudou mít stabilní otáčky i pak lze použít rozšířený tento kód. Ovšem pokud mají běžet oba motory na sobě nezávisle, nelze použít z tohoto kódu prakticky nic a celé se to musí zcela přepsat a bude to mnohonásobně složitější.
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » sob 12. říj 2024 18:38:34

Prakticky nikdy nepůjdou oba motory současně. Buď budu jedním zvedat a snižovat výšku gravírky a nebo druhým posouvat rotační válce podle průměru materiálu, což se musí nastavit stejně nejprve jedno a potom druhé. Pro lidi co se tímto alespoň trochu zabývají asi super, ale pro mně to byla fuška :lol: Ještě jednou strašně moc děkuju.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Lemur1 » sob 12. říj 2024 18:51:26

Jen mám ještě v plánu doplnit koncáky, abych zbytečně nepřejel.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » ned 13. říj 2024 8:03:30

Tak samozřejmě použití koncových snímačů je dobrý nápad (už píšu jako AI). Stačí do kódu doplnit jejich definice a integrovat do podmínek. Přikládám kód, který to má integrované pouze do pohybu doleva. Je tam i ochrana proti stisku obou tlačítek. Tvým úkolem je to doplnit do zbytku kódu.
Kód: Vybrat vše
// Pin Definitions
const int stepPin = 2; // Pin pro krok
const int dirPin = 5;  // Pin pro směr
const int enable = 8;  //
const int buttonLeft = 4; // Tlačítko pro pohyb doleva
const int buttonRight = 3; // Tlačítko pro pohyb doprava
const int koncakMAX = 6;
const int koncakMIN = 7;

void setup() {
  // Nastavení pinů
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(enable, OUTPUT);
  pinMode(buttonLeft, INPUT_PULLUP);
  pinMode(buttonRight, INPUT_PULLUP);
  pinMode(koncakMAX, INPUT_PULLUP);
  pinMode(koncakMIN, INPUT_PULLUP);

  digitalWrite(enable, HIGH);
}

void loop() {
  // Kontrola stavu tlačítek a koncáků
  if (digitalRead(buttonLeft) == LOW && digitalRead(koncakMAX) == LOW && digitalRead(koncakMIN) == LOW && digitalRead(buttonRight) == HIGH) {
    digitalWrite(enable, LOW);
    digitalWrite(dirPin, LOW); // Nastavení směru doleva
    stepMotor(); // Funkce pro krok motoru
  }   
  else if (digitalRead(buttonRight) == LOW) {
    digitalWrite(enable, LOW);
    digitalWrite(dirPin, HIGH); // Nastavení směru doprava
    stepMotor(); // Funkce pro krok motoru
  }
  else{
   digitalWrite(enable, HIGH);
   }   
}

void stepMotor() {
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500); // Délka kroku (uprav podle potřeby)
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500); // Délka kroku (uprav podle potřeby)
}
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08

Re: Posuv přes Arduino

Příspěvekod Lemur1 » ned 13. říj 2024 23:15:25

Dobře, děkuju že se mnou ztrácíš čas. Pokusím se to doplnit, jestli se mohu nějak revanšovat, rád tvoji pomoc oplatím.
Uživatelský avatar
Lemur1
Chcíplotina
Chcíplotina
 
Příspěvky: 24
Registrován: ned 14. bře 2021 10:49:23

Re: Posuv přes Arduino

Příspěvekod Sakul » pon 14. říj 2024 7:45:03

Lemur1 píše:Dobře, děkuju že se mnou ztrácíš čas. Pokusím se to doplnit, jestli se mohu nějak revanšovat, rád tvoji pomoc oplatím.

V pohodě to neřeš. Pokud by byl nějaký problém klidně napiš, mrknem na to spolu.
INFO:
Sakul WORLD: www.sakul.cz/
Sakul YouTube: www.youtube.com/user/sakulraider

Možnost příspěvku (Donate):
Patreon: https://www.patreon.com/sakul
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 1762
Věk: 44
Registrován: úte 30. bře 2010 18:13:08


Zpět na Arduino


  • Advertisement

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník

cron