A utilização básica do LEGO Mindstorms EV3 com ev3dev fica completa com a utilização de motores.
Ligando um motor (45503 EV3 Medium Servo Motor) na ficha A, o sistema operativo acusa o evento:
root@ev3dev:~# dmesg (...) tacho-motor tacho-motor0: Tacho motor registered. ev3-tacho-motor outA:motor: A Tacho Motor connected to port outA gpio 91 irq 192
Uma vez mais é necessário consultar a wiki do projecto ev3dev para entender como aceder aos motores. Estes também são mapeados pelo sistema operativo, desta vez em “/sys/bus/legoev3/devices/” e em ” /sys/class/tacho-motor/”:
root@ev3dev:~# ls /sys/bus/legoev3/devices/ in2 in3 in4 outA outA:motor outB outC outD
root@ev3dev:~# ls /sys/class/tacho-motor/ tacho-motor0
root@ev3dev:~# ls /sys/class/tacho-motor/tacho-motor0 device port_name pulses_per_second reset speed_regulation_K subsystem duty_cycle position pulses_per_second_sp run speed_regulation_P time_sp duty_cycle_sp position_mode ramp_down_sp run_mode state type estop position_sp ramp_up_sp speed_regulation_D stop_mode uevent polarity_mode power regulation_mode speed_regulation_I stop_modes
Muito informação para processar mas para começar podemos confirmar apenas o tipo de motor:
root@ev3dev:~# cat /sys/class/tacho-motor/tacho-motor0/type minitacho
Os motores Mindstorms são inicializados no modo “run forever”, podemos também confirmar isso:
root@ev3dev:~# cat /sys/class/tacho-motor/tacho-motor0/run_mode forever
Neste modo podemos controlar o motor controlando 2 parâmetros:
- /sys/class/tacho-motor/tacho-motor0/duty_cycle_sp
- /sys/class/tacho-motor/tacho-motor0/run
o shell script abaixo faz o motor rodar 5 segundos num sentido e 5 segundos no sentido inverso, com um duty factor de 50%:
#!/bin/bash echo 0 > /sys/class/tacho-motor/tacho-motor0/duty_cycle_sp echo 1 > /sys/class/tacho-motor/tacho-motor0/run echo 50 > /sys/class/tacho-motor/tacho-motor0/duty_cycle_sp sleep 5s echo 0 > /sys/class/tacho-motor/tacho-motor0/duty_cycle_sp sleep 1s echo -50 > /sys/class/tacho-motor/tacho-motor0/duty_cycle_sp sleep 5s echo 0 > /sys/class/tacho-motor/tacho-motor0/duty_cycle_sp echo 0 > /sys/class/tacho-motor/tacho-motor0/run