2.1 Motores Evidentemente los sensores, motores, etc... estarán conectados de alguna manera a algún pin de la GPIO (¿qué es eso de GPIO? Pues eso es que no te has leido esto ). | Interfaces | Puertos GPIO de la Raspberry Pi | |------------|--------------| | IN1 | P12 | | IN2 | P13 | | ENA | P6 | | IN3 | P20 | | IN4 | P21 | | ENB | P26 | 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: 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 ? |IN1| IN2| IN3| IN4| Descripción| |---|----|----|----|------------| |1 |0 |0 |1 |Motores hacia delante| |0 |1 |1 |0 |Motores hacia atrás| |0 |0 |0 |1 |Giro derecha| |1 |0 |0 |0 |Giro izquierda| |0 |0 |0 |0 |Stop| ¿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: 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 ) 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: 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)