# 2.1 Motores

Vamos a empezar por la parte importante de un rover:

![](https://libros.catedu.es/uploads/images/gallery/2022-03/embedded-image-oghyfsow.gif)

[NASA/JPL-Caltech](https://mars.nasa.gov/resources/25691/perseverance-wiggles-a-wheel/)

Los motores estan gobernados con los siguientes GPIO

<table id="bkmrk-interfaces-puertos-g"><thead><tr><th>Interfaces</th><th>Puertos GPIO de la Raspberry Pi</th></tr></thead><tbody><tr><td>IN1</td><td>P12</td></tr><tr><td>IN2</td><td>P13</td></tr><tr><td>ENA</td><td>P6</td></tr><tr><td>IN3</td><td>P20</td></tr><tr><td>IN4</td><td>P21</td></tr><tr><td>ENB</td><td>P26</td></tr></tbody></table>

Luego una de las primeras líneas que hay que poner en nuestros programas es traducir esos números a letras para que sea más facil utilizarlos en el código, y definir esos pines como pines de salida que van a gobernar a los motores:

```Python
import RPi.GPIO as GPIO

IN1=12;IN2=13;ENA=6;IN3=20;IN4=21;ENB=26

GPIO.setmode(GPIO.BCM);GPIO.setwarnings(False)
GPIO.setup(IN1,GPIO.OUT);GPIO.setup(IN2,GPIO.OUT);GPIO.setup(IN3,GPIO.OUT);GPIO.setup(IN4,GPIO.OUT)
GPIO.setup(ENA,GPIO.OUT);GPIO.setup(ENB,GPIO.OUT)
```

## ¿Qué significan IN1 IN2 IN3 IN4 ?

<table id="bkmrk-in1-in2-in3-in4-desc"><thead><tr><th>IN1</th><th>IN2</th><th>IN3</th><th>IN4</th><th>Descripción</th></tr></thead><tbody><tr><td>1</td><td>0</td><td>0</td><td>1</td><td>Motores hacia delante</td></tr><tr><td>0</td><td>1</td><td>1</td><td>0</td><td>Motores hacia atrás</td></tr><tr><td>0</td><td>0</td><td>0</td><td>1</td><td>Giro derecha</td></tr><tr><td>1</td><td>0</td><td>0</td><td>0</td><td>Giro izquierda</td></tr><tr><td>0</td><td>0</td><td>0</td><td>0</td><td>Stop</td></tr></tbody></table>

## ¿Y qué significa ENA ENB?

ENA y ENB es la velocidad de los motores A y B respectivamente.

Su valor tiene que ser analógico pero los GPIO son digitales, así que tienen que ser señales PWM.

Si vamos a poner una frecuencia de 500Hz y una velocidad media, el código que tenemos que poner al principio de nuestro programa es:

```Python
PWMA = GPIO.PWM(ENA,500);PWMB = GPIO.PWM(ENB,500)
PWMA.start(50);PWMB.start(50)
```

### Bueno, pero ... ¿Cómo son las conexiones?

En el AlphaBot están conectados los pines IN1 IN2 IN3 IN4 ENA ENB en los pines de un chip L298P que hace de driver a los motores (nunca conectes un motor a un GPIO de la Raspberry[ ya lo sabes](https://catedu.github.io/raspberry-muy-basico/2-gpio.html)) ![](https://libros.catedu.es/uploads/images/gallery/2022-03/embedded-image-pxrwv40u.png)

## Vale... ¿Y cómo se utiliza?

Podemos definir en nuestros programas unas funciones para simplificar código para utilizar los motores hacia delante, detrás y giros:

```Python
def FORDWARD():
    GPIO.output(IN1,GPIO.HIGH);GPIO.output(IN2,GPIO.LOW);GPIO.output(IN3,GPIO.LOW);GPIO.output(IN4,GPIO.HIGH)
def BACKWARD():
    GPIO.output(IN1,GPIO.LOW);GPIO.output(IN2,GPIO.HIGH);GPIO.output(IN3,GPIO.HIGH);GPIO.output(IN4,GPIO.LOW)
def LEFT():
    GPIO.output(IN1,GPIO.LOW);GPIO.output(IN2,GPIO.LOW);GPIO.output(IN3,GPIO.LOW);GPIO.output(IN4,GPIO.HIGH)
def RIGHT():
    GPIO.output(IN1,GPIO.HIGH);GPIO.output(IN2,GPIO.LOW);GPIO.output(IN3,GPIO.LOW);GPIO.output(IN4,GPIO.LOW)
def STOP():
    GPIO.output(IN1,GPIO.LOW);GPIO.output(IN2,GPIO.LOW);GPIO.output(IN3,GPIO.LOW);GPIO.output(IN4,GPIO.LOW)
```