Roomba scheduler

Da raspibo.
Versione del 20 nov 2016 alle 20:17 di Dancast78 (discussione | contributi) (Creata pagina con ' Qualche tempo fa ho comprato un robot Roomba 615 per la pulizia dei pavimenti. Questo robot è studiato per la pulizia quotidiana dei pavimenti, ma spesso di dimenticavo di a...')
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Jump to navigation Jump to search

Qualche tempo fa ho comprato un robot Roomba 615 per la pulizia dei pavimenti. Questo robot è studiato per la pulizia quotidiana dei pavimenti, ma spesso di dimenticavo di avviarlo quando uscivo di casa e farlo funzionare mentre si è in casa è un pò scomodo anche se accettabile.

Questa pagina raccoglie una serie di informazioni che ho trovato in giro da varie fonti e spesso sbagliate o relative ad altri modelli di robot.

Il costruttore fornisce anche indicazioni sul funzionamento del robot con documenti ufficiali, ma sconsiglia di modificare il firmware e la cosa al momento non è di mio interesse.

I robot Roomba hanno un accessorio chiamato muro virtuale utilizzato per evitare che entri in determinate stanze. Casualmente ho visto questo progetto da cui ho intuito che roomba ha una interfaccia infrarossi.

Un altro accessorio è il telecomando ad infrarossi che può essere usare per telecomandare il robot, su questo sono anche stati sviluppati progetti per comandare il robot via wifi.

Per generare comandi ad infrarossi su Linux usiamo lirc per l'installazione fate riferimento alla pagina Accendere e spegnere 4 led tramite un ricevitore a infrarossi limitandovi alla sezione "Installazione/Configurazione LIRC e test di funzionamento".

Per generare i codici di comando di roomba per il file lirc.conf ho trovato questo pezzo di codice.

Incollo di seguito il prodotto dello script che va scritto nel file /etc/lirc/lircd.conf

# Automatically generated LIRC Roomba config file
begin remote
  name   iRobot_Roomba
  flags RAW_CODES|CONST_LENGTH
  eps            30
  aeps          100
  ptrail          0
  repeat     0     0
  gap   100000
      begin raw_codes

          name left
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    1000    3000
             1000    3000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    1000    3000    1000    3000
             3000

          name forward
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    1000    3000
             3000    1000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    1000    3000    3000    1000
             1000

          name right
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    1000    3000
             3000    1000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    1000    3000    3000    1000
             3000

          name spot
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    3000    1000
             1000    3000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    3000    1000    1000    3000
             1000

          name dock
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    3000    1000
             1000    3000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    3000    1000    1000    3000
             3000

          name small
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    3000    1000
             3000    1000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    3000    1000    3000    1000
             1000

          name medium
             3000    1000    1000    3000    1000    3000
             1000    3000    1000    3000    3000    1000
             3000    1000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             1000    3000    3000    1000    3000    1000
             3000

          name clean
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    1000    3000
             1000    3000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    1000    3000    1000    3000
             1000

          name pause
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    1000    3000
             1000    3000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    1000    3000    1000    3000
             3000

          name power
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    1000    3000
             3000    1000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    1000    3000    3000    1000
             1000

          name forwardleft
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    1000    3000
             3000    1000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    1000    3000    3000    1000
             3000

          name forwardright
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    3000    1000
             1000    3000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    3000    1000    1000    3000
             1000

          name stop
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    3000    1000
             1000    3000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    3000    1000    1000    3000
             3000

          name sendall
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    3000    1000
             3000    1000    1000   19000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    3000    1000    3000    1000
             1000

          name seekdock
             3000    1000    1000    3000    1000    3000
             1000    3000    3000    1000    3000    1000
             3000    1000    3000   17000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    3000    1000    3000    1000
             3000

          name virtualwall
             3000    1000    1000    3000    3000    1000
             1000    3000    1000    3000    1000    3000
             3000    1000    1000   19000    3000    1000
             1000    3000    3000    1000    1000    3000
             1000    3000    1000    3000    3000    1000
             1000


      end raw_codes
end remote

Questo pezzo è scritto per essere utilizzato con la scheda PiFace che è montato sul mio Raspberry Pi, ma difficilmente interesserà altri perchè questa board monta due relè, ma non sopportano la tensione di rete, ma al massimo 20Volts. Ne ho utilizzato uno per pilotare un relè a 240Volts, ma è un pò uno spreco.

Inoltre ho dovuto cambiare il connettore di connessione tra il raspberry e Piface per permettere la connessione del led.

Lo riporto qui per spiegare quali sono le fasi di attivazione del Raspeberry ed i timer che sono fondamentali e hanno richiesto un pò di tempo per la calibrazione, ma va riscritto per chi lo volesse usare senza la board Piface aggiuntiva.

#!/usr/bin/python
from time import sleep
import pifacedigitalio
import os
#count is a counter of start attempts
count = 0
#maximum number of attemptes of start on fail after max_start exit
max_start=10
#use piface expansion board
pifacedigital = pifacedigitalio.PiFaceDigital()
#align led number 7 of piface board with limit switch sensor
pifacedigital.leds[7].value=pifacedigital.input_pins[7].value
#Turn off relay, when relay is off Roomba 
print "Reset Relay"
pifacedigital.relays[0].turn_off()
sleep(2)
print "End Reset"
if pifacedigital.input_pins[7].value == 0 :
        print "Roomba@work P7=" + str(pifacedigital.input_pins[7].value)
        pifacedigital.leds[7].value=pifacedigital.input_pins[7].value
        pifacedigital.relays[0].turn_off()
else :
        print "Roomba@home P7=" + str(pifacedigital.input_pins[7].value)
        print "Starting...."

while ( pifacedigital.input_pins[7].value == 1 and count <= max_start ) :
        print "Roomba@home P7=" + str(pifacedigital.input_pins[7].value)
        pifacedigital.relays[0].turn_on()
        sleep(3)
        os.system("/usr/bin/irsend SEND_START  iRobot_Roomba clean")
        sleep(3.5)
        pifacedigital.relays[0].turn_off()
        sleep(2)
        os.system("/usr/bin/irsend SEND_STOP  iRobot_Roomba ''")
        pifacedigital.leds[6].value=pifacedigital.input_pins[7].value
        sleep(3)
        count=count+1

if count > max_start :
        print "Maximun number of start: " + str(max_start) + " reached .. KO"

if pifacedigital.input_pins[7].value == 0:
        print "Roomba started"
        pifacedigital.leds[6].value=1
else :
        print "Problem starting roomba"