MOTORS
Un dels nous elements d'aquesta pràctica és el motor de corrent continu. Aquest és capaç de transformar l'energia elèctrica en un moviment rotatori. Les dues parts principals d'aquests tipus de motors són el rotor i l'estator. El rotor és la part encarregada de fer girar l'eix i la que permet engegar i parar el motor. Per altra banda, l'estator és on es genera tot el corrent elèctric.
TRANSISTORS
Un transistor és un element semiconductor que permet regular el flux de corrent com per exemple amplificant-lo. Els transistors funcionen d'una manera bastant curiosa utilitzant materials reals, com ara el silici o el fòsfor creant les unions PN formades per un cristall d'un material semiconductor "dopat" amb la unió de dos materials semiconductors un P i un N, un per cada banda del cristall. Els transistors consten de tres unions PN (col·lector, base i emissor) que hauran d'anar connectades en funció de la tasca que hagi d'exercir el transistor.
DÍODES
En aquest cas, el díode (explicat en l'apartat "TEMA 1: LEDS") serà utilitzat amb motiu de protecció, ja que el motor pot generar una petita espurna a l'hora de parar-lo que pot ser perjudicial tant pel circuit com per l'Arduino. D'aquesta manera, entre els 5 volts i el motor connectarem aquest díode perquè quan l'espurna surti del motor tingui un recorregut extern per extingir-se.
ESQUEMA ELÈCTRIC
L'esquema elèctric d'aquest codi és bastant més complex que el dels temes anteriors. Primerament, des del pin 9 col·locarem un cable fins a la zona de connexió de cables i posteriorment hi connectarem una resistència de 2.2k Ω. Des de l'altre extrem del resistor, connectarem la base del transistor. Després, des del col·lector, connectarem el díode, funció del qual ja ha estat explicada anteriorment i al mig d'un extrem i l'altre connectarem el motor. Des de l'altre extrem del díode connectarem un cable fins als 5V. Per altra banda, des de l'emissor del transistor connectarem un cable fins a "Ground".
CODI (motorOnthenoff)
L'objectiu d'aquest codi serà fer que l'eix del motor giri, després que freni durant uns segons i després que torni a girar. Abans, però haurem d'escriure algunes instruccions:
Primerament, haurem de declarar el pin de sortida per alimentar al motor creant una variable "integer" de nom "motorPin" adjudicant-li el número 9 (pin 9). Seguidament, declararem el "setup" ("void setup()") i especificarem que la funció del "pin 9" serà de sortida amb la instrucció "pinMode (motorPin, OUTPUT)". Per acabar, dins d'un loop, declararem les funcions, codis de les quals seran escrits més endavant.
Començant ja amb la funció, primerament la declararem amb la instrucció "void". Després, crearem dues variables "integer" de nom "ontime" (serà el nombre que indicarà el temps que el motor haurà d'estar encès) i "offTime" (serà el nombre que indicarà el temps que el motor haurà d'estar apagat), i els hi donarem els valors 2500 i 1000 respectivament. Un cop fet això, amb la instrucció "digitalWrite(motorPin, HIGH) farem que el motor s'encengui, amb la instrucció "delay (onTime)" li indicarem el temps que haurà d'estar encès, amb la instrucció "digitalWrite(motorPin, LOW)" apagarem el motor i novament amb la instrucció "delay(offTime)" indicarem el temps que haurà d'estar apagat.
int motorPin = 9;
void setup()
{
pinMode(motorPin, OUTPUT);
}
void loop()
{
motorOnThenOff();
motorOnThenOffWithSpeed();
motorAcceleration();
}
void motorOnThenOff(){
int onTime = 2500;
int offTime = 1000;
digitalWrite(motorPin, HIGH);
delay(onTime);
digitalWrite(motorPin, LOW);
delay(offTime);
}
CODI (motorOnthenoffWITHSPEED)
void motorOnThenOffWithSpeed(){
int onSpeed = 200;
int onTime = 2500;
int offSpeed = 50;
int offTime = 1000;
analogWrite(motorPin, onSpeed);
delay(onTime);
analogWrite(motorPin, offSpeed);
delay(offTime);
}
Aquesta funció és una variant de l'anterior, de manera que només veurem les diferències. Primerament, l'objectiu d'aquesta funció és el mateix que l'anterior, però amb un afegit que és la velocitat. En aquesta funció voldrem controlar la velocitat que el motor tarda tant a engegar-se com a aturar-se. D'aquesta manera, crearem, a més de les variables originals, dues d'addicionals ( "int on/offSpeed") que seran les que controlin les velocitats. Per poder fer això, però, haurem d'utilitzar l'"analogWrite" en comptes del "digitalWrite".
D'aquesta manera, i canviant els "digitalWrite(motorPin, HIGH/LOW" per "analogWrite(motorPin, on/offSpeed" quedaria conclòs el codi. Les diferències entre aquest codi i l'anterior es troben marcades en negreta.
CODI (motoracceleration)
En aquesta última funció, l'objectiu principal serà que el motor augmenti i disminueixi la seva velocitat progressivament.
Per això, primerament crearem una variable de tipus "integer" de nom "delayTime" amb el valor 50 que serà l'equivalent en mil·lisegons de quant temps hauran de tardar els "for" en repetir-se.
Un cop fet això crearem el primer "for" encarregat de fer accelerar el motor. D'aquesta manera, donada una variable "i" de valor 0, mentre "i" sigui inferior a 256 (màxima velocitat) a "i" se li sumi 1 complint les següents instruccions:
Primerament, amb l'"analogWrite(motorPin, i)" encendrem el motor a la velocitat equivalent a "i" i seguidament declararem una pausa amb la instrucció "delay(delayTime)" que durarà tants segons com el nombre de la variable "delayTime".
Un cop fet el primer "for" haurem de fer el segon encarregat de la disminució de la velocitat. D'aquesta manera el "for" serà el mateix però invertint les condicions i amb un valor menys a cadascun dels valors per evitar un retard explicat prèviament a anteriors pràctiques.
Així doncs, quedaria acabat el codi de l'última funció.
void motorAcceleration(){
int delayTime = 50;
for(int i = 0; i < 256; i++){
analogWrite(motorPin, i);
delay(delayTime);
}
for(int i = 255; i >= 1; i--){
analogWrite(motorPin, i);
delay(delayTime);
}