OBS! Motorerna vi använder i denna guide ska drivas med högst 6V, och batteripacket skickar ut 6*1,5V = 9V. Det bör gå bra eftersom koden kör motorerna på halvfart, men mycket högre än så ska man nog inte gå.DSC_0167

 

En av många tillämpningar för Raspberry Pi är att driva robotar. Man kan, med hjälp av sensorer, göra autonoma (självgående) sådana. Det ska vi dock inte titta på i detta inlägg, utan bara introducera ett smidigt expansionskort för att styra upp till två elmotorer med en Pi.

Expansionskortet i fråga heter “RaspiRobot Board V2”, och är baserat på en motorkontroller av modell L293. Man sätter det direkt på GPIO-porten (fungerar på alla Rasberry Pi:s), och därmed blir det väldigt lite kabeldragning eftersom de enda kablar som behövs går till batteriet och de två motorerna.

En annan fördel med detta kort är att det finns ett färdigt kodbibliotek att använda, vilket förenklar programmerandet av roboten avsevärt.

Vi använder en av våra robotplattformar med två motordrivna hjul tillsammans med en RaspiRobot V2, ett batteripack för 6xAA-batterier och en Raspberry Pi Model B+. Länkar till alla delar:

https://www.m.nu/robotplattform-2wd-ink-hjul-och-motorer-p-1129.html
https://www.m.nu/raspirobot-board-v2-p-1477.html
https://www.m.nu/6-x-aa-battery-holder-with-55mm21mm-plug-p-962.html
https://www.m.nu/b-paketkonfigurator-raspberry-pi-mod-b-p-1516.html

Att ansluta det hela är, som tidigare nämnt, väldigt simpelt. Det går att provköra motorerna på Raspberry Pi:ns strömförsörjning innan man ansluter batteripacket. Då sätter man helt enkelt RaspiRobotBoard v2 på GPIO-porten (använder man B+ får man se till att den sitter på rätt ställe), och därefter ansluter man motorerna till “L” och “R” på utgångarna.

DSC_0165

Därefter är det färdigt att provköra! Här följer ett stycke kod som först släcker de två LED-lamporna på RRB2, och sen tänder en av dem. På detta sätt ser man när RPi:n bootat upp och startat skriptet när endast en av lamporna lyser.
I övrigt är koden rätt välkommenterad. Jag döpte denna fil till “Rasrob2.py” och placerade den i mappen /home/pi/python/ . Längst ner finns koden som nedladdning!

# This is a collection of sample code for the
# Raspi Robot v2:
# https://www.m.nu/raspirobot-board-v2-p-1477.html
#
# It uses the "raspirobotboard2" Python library from:
# https://github.com/simonmonk/raspirobotboard2
#
# By: Jonas Lundblad @ www.m.nu

# Import the RaspiRobot library and init variable "rr"
# as the controller
from rrb2 import *
from time import sleep
rr = RRB2()


# The RRB2 has two LED lights that can be controlled:

rr.set_led1(0)
rr.set_led2(1)
time.sleep(3)
# To control the motor(s), there are two different interfaces.
# Here is the simple interface:

# Set the same speed to both motors (half speed), direction forward
# (until user overrides the command)
rr.forward()
rr.set_led1(1)

# Sleep command to delay for 1 second
time.sleep(1)

#Stop the motor
rr.stop()
rr.set_led1(0)

time.sleep(1)
# It is also possible to define amount of time (in seconds):
#rr.forward(1)

# And finally, setting the motor speed (1 is full speed):
#rr.forward(1, 0.1)


# The second interface is more advanced and looks like this:
# rr.set_motors(left_speed, left_direction, right_speed, right_direction)

# Setting half speed and different directions wold be:
rr.set_motors(0.5, 1, 0.5, 0)
time.sleep(2)
rr.set_motors(0, 0, 0, 0)
time.sleep(1)
# Reverse rotation
rr.set_motors(0.5, 0, 0.5, 1)
time.sleep(2)
rr.stop()

# Additionally, it is possible to connect a "HC-SR04"
# Ultrasonic distance sensor to the connector labeled "SONAR"
# https://www.m.nu/hcsr04-ultrasonic-sensor-p-1072.html

# To get the distance from such a device, simply type:

#rr.get_distance()

Men vad är väl ett skript som man måste logga in och starta manuellt? Vi vill ju såklart att det startar automatiskt när Pi:n gör det, så att vi kan köra vår robot utan skärm och tangentbord anslutna. Vi börjar med att skapa ett “shellscript”, vilket är en körbar fil. Jag döpte min fil till “pylaunch.sh” och placerade den i samma mapp som python-skriptet:

#!/bin/sh
# pylaunch.sh
# execute a script on startup

cd /
cd home/pi/python
sudo python Rasrob2.py
cd /

Om man nu kör detta script kommer det exekvera Python-koden.

Vi vill även logga felmeddelanden med mera som kan tänkas skrivas ut av skriptet. För att lagra dessa på ett smidigt ställe skriver vi:

cd /home/pi/python
mkdir logs

Och skapar då en mapp i vilken vi kan placera loggar.

För att sedan få det att autostarta använder vi “cron”, som kan användas för att schemalägga olika aktiviteter.
För att öppna konfigurationen för cron skriver man

sudo crontab -e

Och då öppnas en fil i nano (den textbaserade texteditorn). Ta dig längst ner med piltangenterna och lägg till följande rad:

@reboot sh /home/pi/python/pylaunch.sh >/home/pi/python/logs/cronlog 2>&1

Denna kod kör skriptet vid uppstart och loggar eventuella utskrifter till en cronlog-fil i mappen vi skapade tidigare.

Mycket svårare än så är det inte, och här är en liten video på slutresultatet (observera att våra motorer drar lite ojämnt, det kan man justera med de avancerade kommandona)!

Här är även källkoden i nedladdningsbart format:

Raspi Robot Board - Raspberry Pi code (2031 nedladdningar)