Introducció a la robòtica en trenta-una classes/Dissetè dia: controlar cotxe amb motors de contínua des del teclat de l'ordinador

control per a dos motors de contínua amb arduino i l298n

Avui, hem vist com es poden controlar motors de corrent continu. Aquest tipus de motor és molt senzill de controlar, tant pel que fa a variar-ne la velocitat com al sentit de gir.

Per a controlar-ne la velocitat, cal donar més o menys energia al motor, i això ens permet fer-ho l’arduino amb les seves sortides PWM, tal com vam veure el novè dia de classe.

Com que els motors consumeixen molt més que els leds, no els activarem directament, sino que emprarem un mòdul de potència. En el nostre cas hem fet servir el L298N, que a més de permetre invertir la polaritat del motor, el que farà que poguem invertir-ne el sentit de gir, ens serveix per a controlar dos motors alhora.

El mòdul L298N el trobem ja soldat a una placa i a punt de fer servir. En el nostre cas, els motors son de 6V. Els podríem alimentar, per exemple, amb 4 piles de 1.5V recarregables, muntades en un portapiles de 4.

Per a provar-ne el funcionament, hem fet un programa que ens permet provar les diferents velocitats segons la potència. Al primer motor li donem tota la velocitat (255), i al segon la meitat (128):

void setup() {
}

void loop() {
    analogWrite(5,255);
    analogWrite(9,128);
}

Després, i per anar preparant programa per a controlar un cotxe des del mòbil, hem fet un programa que fa que poguem activar un motor endavant i endarrera, l’altre motor endavant i endarrera, els dos alhora endavant i endarrera, i finalment, aturar-los tots. Ho farem amb el monitor sèrie, i enviant les lletres: a,b,c,d,e,f i g. Ens ha quedat:

char tecla; // definim una variable on desar les lletres que ens arribin
void setup() {
    Serial.begin(115200);
}

void loop() {
    if (Serial.available()){
        tecla=Serial.read();
        if (tecla=='a'){
            analogWrite(5,255);
            analogWrite(6,0);
            analogWrite(9,0);
            analogWrite(10,0);
        }
        if (tecla=='b'){
            analogWrite(5,0);
            analogWrite(6,255);
            analogWrite(9,0);
            analogWrite(10,0);
        }
        if (tecla=='c'){
            analogWrite(5,0);
            analogWrite(6,0);
            analogWrite(9,255);
            analogWrite(10,0);
        }
        if (tecla=='d'){
            analogWrite(5,0);
            analogWrite(6,0);
            analogWrite(9,0);
            analogWrite(10,255);
        }
        if (tecla=='e'){
            analogWrite(5,255);
            analogWrite(6,0);
            analogWrite(9,255);
            analogWrite(10,0);
        }
        if (tecla=='f'){
            analogWrite(5,0);
            analogWrite(6,0);
            analogWrite(9,0);
            analogWrite(10,255);
        }
        if (tecla=='g'){
            analogWrite(5,0);
            analogWrite(6,0);
            analogWrite(9,0);
            analogWrite(10,0);
        }
    }
}

Si obrim el monitor sèrie, posem 115200bauds, i anem prement cadascuna de les tecles seguides de intro, veurem com van reaccionant els motors. Això també es pot combinar amb el control analògic, donant valors diferents de 255, si volem altres velocitats.