RaspiCar

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

La RaspiCar è una macchinina i cui motori sono collegati alla GPIO del Raspberry Pi e comandati tramite un piccolo script in Python. Alla versione attuale la RaspiCar può avanzare, retrocedere e ruotare nei due sensi.

Schema elettrico

Per la costruzione della RaspiCar sono stati impiegati:

  • 4 resistenze da 1K ohm
  • 4 diodi
  • 4 transistor BC337 o equivalenti
  • 4 relè
  • 2 motori elettrici

Lo schema globale è questo:

RaspiCar Schema.png

Nel dettaglio questo è il circuito che fa scattare ogni singolo relè: (che ho preso da questo sito [1])

RaspiCar Schema Relay.png

Questo invece è il circuito che dà corrente a un motore:

RaspiCar Schema Motor.png

Script in Python

Il problema principale nella gestione dei motori, e di conseguenza dei pin che devono accenderli, è che devono essere azionati contemporaneamente. Per risolvere il problema si è usata la libreria threading di Python. Lo script accetta due parametri: il primo è un comando (simile a quelli del Logo, fd avanza, bk arretra, lt e rt ruotano in senso antiorario e orario), il secondo il numero di secondi di durata. I pin usati nell'esempio sono il 6 e l'11 per il motore 1 e lo 0 e il 5 per il motore 2.

import threading
import time
import wiringpi
import sys
sys.argv[2] = float(sys.argv[2])
class movimento(threading.Thread):
   def run(self):	
	if(sys.argv[2] > 0):
		io.digitalWrite(self.pin,io.HIGH)
		time.sleep(sys.argv[2])
		io.digitalWrite(self.pin,io.LOW)
io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_PINS)
ogg1 = movimento()
ogg2 = movimento()
io.pinMode(6,io.OUTPUT)
io.pinMode(11,io.OUTPUT)
io.pinMode(0,io.OUTPUT)
io.pinMode(5,io.OUTPUT)
if(sys.argv[1]=='rt'):
	ogg1.pin = 11
	ogg2.pin = 0
elif(sys.argv[1]=='lt'):
	ogg1.pin = 6
	ogg2.pin = 5
elif(sys.argv[1]=='fd'):
	ogg1.pin = 11
	ogg2.pin = 5
elif(sys.argv[1]=='bk'):
	ogg1.pin = 6
	ogg2.pin = 0
else:
	print "Command not found (try 'lt', 'rt', 'bk' or 'fd')"
ogg1.start()
ogg2.start()

Risultato

Raspicar 1versione.jpeg

Potete vedere il risultato del primo prototipo su Youtube.