Uvod
Mali DC motori će trošiti malo struje, ali nikako ih ne smijemo spajati direktno na izlazne pinove Arduina ili bilo kojeg drugog mikrokontrolera. Zato im treba nekakav upravljač ili prekidač koji bi ih kontrolirati. Isto tako, motori su veliki izvor smetnji koje mogu izazvati nepoželjne učinke kod elektroničkih skolpova u čijem se krugu nalaze. To se može spriječiti izolacijom napajanja motora u većoj ili manjoj mjeri.
Jednostavno upravljanje
Motor će često trebati veći napon kao i veću struju koju mu dovodimo izravno s vanjskog izvora napajanja. Najjednostavniji način upravljanja motorima je izravno kroz tranzistor, kao što je prikazano ovdje:
Digitalni pin D9 je spojen preko otpornika na bazu tranzistora, motor spajamo između kolektora i pozitivnog pola vanjskog napajanja, dok emiter spajamo na negativni pol ili masu. Imajte na umu da masa mora biti zajednička (povezana) između vanjskog napajanja i Arduina. Motor je u osnovi elektromagnet ili zavojnica - u elektroničkom smislu to je induktor. Kad isključite napajanje, magnetsko polje padne jer ne teče struje koja bi ga zadržala. Urušavanje magnetskog polja onda stvara povratnu elektromotornu silu (back-EMF) ili obrnuti napon koji može doseći nekoliko stotina volti. Ovaj potencijal može oštetiti elektroniku u sklopu tako da je uobičajena praksa staviti diodu paralelno s motorom, kako bi zaštitili ostale komponente. U tu svrhu će poslužiti obične ispravljačke diode, poput popularne 1N4004 ili slično. Vrijednost otpornika u krugu baze nije previše kritična. Mora se ograničiti struja, ali ne toliko da tranzistor ne uključuje u potpunosti.
Potrebno je napomenuti da ovaj način podržava pulsno-širinsko upravljanje (PWM) ali ne podržava promjenu smjera vrtnje motora.
U ovom primjeru ćemo serijskom vezom u kontroler poslati željenu brzinu vrtnje motora:
int motorPin = 9; void setup() { pinMode(motorPin, OUTPUT); Serial.begin(9600); while (! Serial); Serial.println("Brzina motora 0 - 255"); } void loop() { if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed <= 255) { analogWrite(motorPin, speed); } } }