Založen: Jul 27, 2004 Příspěvky: 4573 Bydliště: 25km na západ od Prahy
Zaslal: st prosinec 04 2024, 16:54 Předmět: Spouštění a zastavení motoru 28BYJ-48 Arduinem *vyřešeno*
Potřebuji spouštět a zastavovat motor 28BYJ-48+ULN2003 koncovými spínači. Motor by měl po zapnutí začít zvedat páku, která nahoře najede na koncák a motor vypne. Páka jede pomalu samočinně dolů, dole najede na koncák, který motor zapne a páka jede zase nahoru. A tak pořád dokola.
Nedokážu nastavit podmínky tak, aby se motor po nájezdu na dolní koncák zapnul.
Mohl by mi někdo poradit jak to dát dohromady?
kód:
#include <Stepper.h>
#define OUTPUT1 11
#define OUTPUT2 10
#define OUTPUT3 9
#define OUTPUT4 8
// Define the number of steps per rotation
const int stepsPerRotation = 2048;
int switch_H = 4; // up button
int switch_D = 5; // down button
void loop()
{
myStepper.step(stepsPerRotation);
if (digitalRead(SW_H)==LOW) {
// sepnul horní koncák tj. vypnout motor
myStepper.setSpeed(0);
delay(20);
} else {
if (digitalRead(SW_D)==LOW) {
// sepnul dolní koncák tj. zapnout motor
myStepper.setSpeed(15);
delay(20);
}
}
}
Naposledy upravil Valdano dne st prosinec 04 2024, 18:05, celkově upraveno 3 krát.
Valdano, o čo sa snažíš? Prepísal si nefunkčnú blbosť na funkčnú blbosť. Myslíš, že už to pôjde?
hafca, nemôžeš do vstupu zapisovať digitalWrite(4, HIGH);.
Potrebuješ ešte jednu premennu definujúcu aktuálny stav a podľa nej kontrolovať horný alebo dolný spínač. Po zadetekovaní zopnutia spínača, zmeniť stav a zapnúť alebo vypnúť motor.
void setup()
{
pinMode(SW_H,INPUT_PULLUP);
pinMode(SW_D,INPUT_PULLUP);
pinMode(2, OUTPUT);
// tímto se nastavuje rychlost otáčení na 1024 RPM tj. 1024 otáček motoru za minutu
// na převodovce 64:1 to bude 16 RPM tj. 16 otáček výstupního hřídele za minutu
myStepper.setSpeed(1024);
chod = 1;
}
void loop()
{
if (chod) {
// pokud má běžet motor volá se step(256)
// 256 kroků (tj. 8 otáček motoru) během jednoho cyklu loop()
// na převodovce 64:1 to bude 0,125 otáčky výstupního hřídele
// funkce je blokující tj. čeká až motor dokončí pohyb 256 kroků
// při rychlosti 1024RPM a při počtu 32 kroků na jednu otáčku motoru
// bude její provedení trvat cca 256 * (60 / (1024 * 32)) tj. cca 470ms
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);
}
}
}
Založen: Jul 27, 2004 Příspěvky: 4573 Bydliště: 25km na západ od Prahy
Zaslal: st prosinec 04 2024, 20:20 Předmět:
Dík za snahu, ale nefunguje to. Navíc se motor po zapnutí nerozběhne, jen "vrní".
V původním programu jsem měl pohyb motoru v pořádku. To není potřeba řešit.
Problém byl a je jen v jeho (ne)reagování na koncáky. Dokáži ho po zapnutí napájení rozběhnout a horním koncákem zastavit. Ale dolní koncák ho nespustí. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
void loop()
{
if (chod) {
myStepper.step(stepsPerRotation);
};
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) {
// samozřejmě bez toho v úvodu chybně uvedeného středníku
// sepnul dolní koncák tj. zapnout motor
// motor začne zvedat páku nahoru
chod = 1;
delay(20);
};
};
}
Naposledy upravil Valdano dne st prosinec 04 2024, 21:12, celkově upraveno 4 krát.
Tato funkce nastavuje otáčky motoru v otáčkách za minutu (RPM). Tato funkce nespouští motor, pouze nastavuje rychlost, kterou se bude otáčet, když zavoláte step().
Při běhu motoru se má volat step() a při zastavení motoru se step() prostě nevolá. Navíc setSpeed(0) je chyba i vzhledem k tomu dělení nulou, které zde již zmínil asdf.
Proto mám v příkladu volání step() s podmínkou dle stavu proměnné chod, setSpeed(0) vůbec nevolám a setSpeed(15) stačí pro daný účel nastavit jen jednou v setup().
S tou poslední změnou tj. vrácením stepsPerRotation zpět na 2048 by to už mělo fungovat.
Založen: Jul 27, 2004 Příspěvky: 4573 Bydliště: 25km na západ od Prahy
Zaslal: čt prosinec 05 2024, 8:06 Předmět:
Valdano napsal(a):
A co tohle?
...
Ano, tohle už funguje. Velké díky za pomoc všem.
Jen je zajímavé, že zastavování funguje až na několikátý pokus, ale rozběh hned. 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. Tam by asi nebylo potřeba řešit debounce. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Založen: Jul 27, 2004 Příspěvky: 4573 Bydliště: 25km na západ od Prahy
Zaslal: čt prosinec 05 2024, 9:09 Předmět:
dj_Paul napsal(a):
není popsán důvod použití arduina ale nestačila by jedna L297 + 555 ?
Máš pravdu, je to asi s kanonem na vrabce, ale nic jiného mi nenapadlo. I vzhledem k jednoduššímu nastavení parametrů otáčení. Asi by to šlo i s ATTINY, to ale neumím vůbec. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.