Doposud jsme se na těchto stránkách věnovali především řízení krokových motorů a ke stejnosměrným komutátorovým motorkům jsme se chovali poněkud macešsky. Nyní to zkusíme trochu napravit.
Pro řízení stejnosměrného motoru budeme muset výstupy Arduina proudově posílit. Digitální výstupy je možné zatěžovat proudem typicky 20 mA, maximálně 40 mA. Běžný miniaturní motorek odebírá bez zatížení kolem 60 mA, při zatížení přes 300 mA a při násilném zastavení i několik ampérů.
Abychom se vyhnuli složitému zapojování mnoha součástek na nepájivém poli, použijeme jako výkonový spínací prvek pro motor pole tranzistorů pod označením ULN2003 (nebo ULN2803). Podrobnosti o obvodu naleznete v tomto článku.
Elektrolytický kondenzátor 470 µF, zapojený na napájecí vodiče v blízkosti motoru je nezbytný, jinak by se mohlo rušení od kartáčků motoru přenést jak do Arduina, tak do PC.
Jeden kanál obvodu ULN2003 (2803) snese proudovou zátěž do 0,5 A, ale výstupy je možno posílit jejich paralelním řazením.
POZOR!
Motor nikdy nezkoušejte napájet ze stabilizátoru Arduina a jeho vývodu +5 V!
Ačkoli se některé motory spokojí s napájecím napětím do 5 V, jejich proudový odběr je příliš velký; při pokusech je nutno je vždy napájet z odděleného zdroje, který je schopen poskytnout dostatečně velký proud.
Spínání motoru
Jako první vyzkoušejme jednoduchý program, který při stisku tlačítka roztočí motor.
// MOTOR1A – SPÍNÁNI MOTORU TLAČÍTKEM #define button 2 // tlačítko na pinu 2 #define driver 3 // výstup pro driver na pinu 3 void setup() { pinMode(button,INPUT_PULLUP); // vstup pro tlačítko, programově zapojen pull-up rezistor pinMode(driver,OUTPUT); // výstup motor } void loop() { if (digitalRead(button)==LOW) // je tlačítko stisknuto? { digitalWrite(driver,HIGH); // ano –> motor zapnut } else { digitalWrite(driver,LOW); // ne –> motor vypnut } }
Řízení otáček motoru pomocí PWM
V další úloze využijeme toho, že řízení motoru je „náhodou“ na pinu 3, který může být také výstupem PWM modulace. Motor budeme ovládat potenciometrem od zastavení do plného výkonu.
// MOTOR2 – ŘÍZENÍ OTÁČEK MOTORU POMOCÍ PWM #define pot A5 // potenciometr 1 až 10 k na pinu A5 #define driver 3 // výstup pro driver na pinu 3 void setup() { pinMode(driver,OUTPUT); // výstup motor } void loop() { analogWrite(driver,map(analogRead(pot),0,1023,0,255)); // změna rozsahu z 0-1023 na 0-255 }
Pokračování příště…