Web kontrollerade rover (13 / 14 steg)

Steg 13: Python/kolv koden

Detta bot använder Python och kolven web framework. Du kan läsa mer om kolven här om du är intresserad.

Den stora skillnaden från en kolv app och normal Python skript är klassmetod brukade göra URI hantering. Annat än att det är ganska mycket normal Python för det mesta.

#! / usr/bin/env python

#
# Wifi/Web driven Rover
#
# Skriven av Scott Beasley - 2015
#
# Använder RPIO, pyserial och kolv
#

Importera tid
importera följetong
från RPIO importera PWM
från kolven importera kolv, render_template, begäran

app = kolven (__name__, static_url_path = '')

# Anslut till comm porten att prata med Roboclaw motor controller
försök:
# Ändra baudfrekvens här om annan än 19200
roboclaw = följetong. Följetong ('/ dev/ttyAMA0', 19200)
utom IOError:
skriva ut ("Comm port hittades inte")
sys.Exit (0)

# Hastighet och enheten kontroll variabler
last_direction = -1
speed_offset = 84
turn_tm_offset = 0.166
run_time = 0,750

# Servo neutralläge (hem)
servo_pos = 1250
servo = PWM. Servo)
servo.set_servo (18, servo_pos)

# Lite uppehålla slå sig ner tid
Time.Sleep (3)

#
# URI hanterare - alla bot page åtgärder görs här
#

# Skicka ut sidan robotar kontroll (Startsida)
("/")
def (index):
återgå render_template ("index.html", name = ingen)

("/ framåt")
def (framåt):
Global last_direction, run_time

skriva ut "Framåt"
go_forward)
last_direction = 0

# sömn 100ms + run_time
Time.Sleep (0,100 + run_time)

# Om inte kontinuerlig, sedan stoppa efter fördröjning
om run_time > 0:
last_direction = -1
stoppa)

tillbaka "ok"

("/ bakåt")
def (bakåt):
Global last_direction, run_time

skriva ut "Bakåt"
go_backward)
last_direction = 1

# sömn 100ms + run_time
Time.Sleep (0,100 + run_time)

# Om inte kontinuerlig, sedan stoppa efter fördröjning
om run_time > 0:
last_direction = -1
stoppa)

tillbaka "ok"

("/ vänster")
def (vänster):
Global last_direction, turn_tm_offset

skriva ut "Vänster"
go_left)
last_direction = -1

# sova näst
Time.Sleep (0,500 - turn_tm_offset)

# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"

("/ rätt")
def (rätt):
Global last_direction, turn_tm_offset

skriva ut "Rätt"
go_right)

# sova näst
Time.Sleep (0,500 - turn_tm_offset)
last_direction = -1

# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"

("/ ltforward")
def ltforward ():
Global last_direction, turn_tm_offset

skriva ut "Vänster fram vända"
go_left)

# sova näst
Time.Sleep (0,250 - (turn_tm_offset / 2))
last_direction = -1

# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"

("/ rtforward")
def rtforward ():
Global last_direction, turn_tm_offset

skriva ut "Sväng höger framåt"
go_right)

# sova näst
Time.Sleep (0,250 - (turn_tm_offset / 2))
last_direction = -1

# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"

("/ stoppa")
def stop ():
globala last_direction

skriva ut "Stop"
stoppa)
last_direction = -1

# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"

("/ panlt")
def panlf ():
globala servo_pos

skriva ut "Panlt"
servo_pos-= 100
om servo_pos < 500:
servo_pos = 500

servo.set_servo (18, servo_pos)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ panrt")
def panrt ():
globala servo_pos

skriva ut "Panrt"
servo_pos + = 100
om servo_pos > 2500:
servo_pos = 2500

servo.set_servo (18, servo_pos)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ home")
def (hem):
globala servo_pos

skriva ut "Hem"
servo_pos = 1250

servo.set_servo (18, servo_pos)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ panfull_lt")
def panfull_lt ():
globala servo_pos

skriva ut "Pan full vänster"
servo_pos = 500

servo.set_servo (18, servo_pos)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ panfull_rt")
def panfull_rt ():
globala servo_pos

skriva ut "Pan full rätt"
servo_pos = 2500

servo.set_servo (18, servo_pos)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ speed_low")
def speed_low ():
Global speed_offset, last_direction, turn_tm_offset

speed_offset = 42
turn_tm_offset = 0,001

# Uppdatera nuvarande riktning för att få ny fart
om last_direction == 0:
go_forward)
om last_direction == 1:
go_backward)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ speed_mid")
def speed_mid ():
Global speed_offset, last_direction, turn_tm_offset

speed_offset = 84
turn_tm_offset = 0.166

# Uppdatera nuvarande riktning för att få ny fart
om last_direction == 0:
go_forward)
om last_direction == 1:
go_backward)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ speed_hi")
def speed_hi ():
Global speed_offset, last_direction, turn_tm_offset

speed_offset = 126
turn_tm_offset = 0.332

# Uppdatera nuvarande riktning för att få ny fart
om last_direction == 0:
go_forward)
om last_direction == 1:
go_backward)

# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"

("/ kontinuerlig")
def (kontinuerlig):
globala run_time

skriva ut "Kontinuerligt köra"
run_time = 0

# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"

("/ mid_run")
def mid_run ():
globala run_time

"mitten av upplaga"
run_time = 0,750
stoppa)

# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"

("/ short_time")
def short_time ():
globala run_time

Print "kort sikt"
run_time = 0,300
stoppa)

# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"

#
# Motordrift funktioner
#
def go_forward ():
globala speed_offset

om speed_offset! = 42:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (128 + speed_offset))
annat:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (255 - speed_offset))

def go_backward ():
globala speed_offset

om speed_offset! = 42:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (255 - speed_offset))
annat:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (128 + speed_offset))

def go_left ():
globala speed_offset

om speed_offset! = 42:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (128 + speed_offset))
annat:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (255 - speed_offset))

def go_right ():
globala speed_offset

om speed_offset! = 42:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (255 - speed_offset))
annat:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (128 + speed_offset))

def (stopp):
roboclaw.write (chr (0))

om __name__ == "__main__":
app.Run (host = "0.0.0.0", port = 80, felsöka = True)

Om du inte vill eller behöver felsöka information från kolven, ställa in debug till 'false' på raden app.run.

om __name__ == "__main__":

app.Run (host = "0.0.0.0", port = 80, felsöka = False)

Du kan också ändra porten som kolven http-servern lyssnar på här också.

Se Steg
Relaterade Ämnen

Giant Web kontrollerade Rover - inskickad av BayLab för Instructables Sponsring programmet

detta Instructable visar dig hur du sätter en PowerWheels bil till en web kontrollerade rover. Jag ska visa dig hur du sätter även den äldsta, junkiest PowerWheels bil till en snabb telepresence bil.Steg 1: Prepping bilen PowerWheels bilar är inte så...

Web kontrollerad Wifi LED Tower

Detta projekt är en web kontrollerad LED tower som använder Arduino och Wifi sköld för att ansluta till en webbserver att få kommandon in av användarna. Målet var att göra projektet mobil så det kan tas till visar och ändå tillåta kontroll från webbe...

Intellekten IoT Edison web kontrollerad LED

Detta instructable visar hur kombinera Arduino IDE med node.js, tillgänglig som standard på Edisons Yocto linux, för att fjärrstyra Arduino element, via ett webbgränssnitt. För att uttrycka det enkelt, kan du trycka på en knapp från alla webbläsare a...

Web kontrollerade uttaget av Arduino

Jag gjorde en Web kontrollerade uttaget av Taiwan klonade Arduino, som baseras av Arduino Pro Mini och ESP8266-1, är den officiella webbplatsen för denna klon: Webduino = Web x ArduinoVi kan programmera det av enkel HTML, CSS och JavaScript, den har...

LinkitONE Web kontrollerad LED

Någonsin velat göra dig egen web kontrollerade LED? Fick en LinkitONE styrelse? Vill du göra mer än så? då är denna handledning rätt för dig!Här ska jag visa dig steg för steg hur man gör en web kontrollerade ledde med hjälp av LinkitONE styrelsen.St...

Ännu en annan Exploration Rover web-kontrollerade (med Raspberry Pi och Arduino. Android, Iphone, PC, MAC compatible)

Här är en annan exploration rover, byggt i 1 timme eller mindre, utan det krävs. Everthing du behöver finns i förpackningen! Det ger dig grund att bygga och förbättra din egen rover.RaspberryPi med wifi USB-adapter, USB-webbkamera, web-server (apache...

En telefon kontrollerade rover (Intel Edison + Blynk + Arduino)

Backstory: (om du är för lat för att läsa hoppa detta)Det var maj (år 2015). En student i hans Form 4 (årskurs 10?) bara kom tillbaka hem från skolan och han drivs på sin dator, som en daglig rutin, att kolla på inlägg på sociala medier han frekvente...

Web kontrollerade övervakningskamera

syftet med detta arbete är att visa, hur man bygger övervakningssystem med gränssnittet web-sida. Webbkameran kan stängas i lodrät eller vågrät riktning genom gränssnittet, men bara i området som gränsar sensorer gör att. Sidan kontroll är säkrad med...

Web kontrollerade EggBot

Kontrollera den ursprungliga EggBot via webbläsare!EggBot styrs vanligtvis av Inkscape körs på värddatorn. Om du vill rita en bild på ett ägg, skickar Inkscape en massa kommandon via USB. EggBot är helt öppen källkod, är formatet på dessa kommandon l...

PiTank - en web kontrollerade tank med kanon och direktuppspelad video

PiTank är en web controller tank byggd för en tävling på min skola robotics club. Projektet tog ungefär två veckor för att slutföra med alla 5 gruppmedlemmar deltar i olika aspekter. Dess huvudsakliga projektilen är ping pong bollar (upp till 3). Brä...

Raspberry Pi Web kontrollerad / autonom Robot

Introduktion (uppdaterad 26/12/15)Detta är min första någonsin försök att bygga en web styrd robot med inbyggd i fristående läge. Projektet började som en Arduino Nano baserat kollision undvikande robot byggd för att inspirera lågstadiebarn och utvec...

Web kontrollerade multifunktionella RoboT

Gör en web kontroll multi funktionell robot byggd med minimal hårdvara och grundläggande programmering bygga på populära open source plattform dvs raspberry pi. Förutom grundläggande motorisk kontroll syftar denna handledning till att integrera popul...

Web-kontrollerade kvittrande Roomba

jag ville se om jag kunde driva min Roomba distans och få det att rapportera sin status via Twitter medan jag var hemifrån. Jag ville också göra enheten oberoende av en dator. Detta är lösningen jag kom upp med och det fungerar mycket bra.Följ på Twi...

Lätt telefon kontrollerade Rover

MotorAir är en av de enklaste sätten som jag har sett för att styra en robot från telefonen.Jag ska gå hur man ställer man upp, men först låt oss ser på Specs också så några fördelar och nackdelar.Specifikationer:upp till 2 ampere per kanalkontroller...

Web kontrollerade Holiday House belysning

Detta är en förlängning av ett tidigare Instructable på Permanent semester LED House belysning.Nu när alla lampor är trådbunden upp, utmaningen är att få ute varje semester att ändra mönster. Du kan lägga till några knappar för att välja mellan progr...

Web kontrollerade Arduino LED

Detta instructable visar dig hur man bygger en webb-aktiverade tri-color LED-baserad på en Arduino och WIZnet Ethernet shield, kontrollerbar från valfri webbläsare .Eftersom LED är utsatt kan genom en enkel RESTful web service körs på Arduino färgänd...

Web kontrollerad LED information Ticker

Projektet var ett samarbete med min rumskompis, vän och kollega hacker rishi2. Bosatt i New York, använder vi båda kollektivtrafik varje dag, så vi trodde det skulle vara häftigt att ha en ticker att Visa buss och tunnelbana gånger från internet. Det...

Treeduino - Web kontrollerade julgran

Treeduino är den kärleksfullt ges till familjen Cross julgran. Med början 2009, kunde besökare till en webbsida sätta lamporna på och av medan du tittar på deras handlingar genom en levande webbkamera feed. Under 2010 tillsammans jag med Jacob Ford....

Yarcow (ännu en annan Rover kontrolleras över Wifi) - Makeblock, Arduino, Droidscript

I detta Instructable ser vi hur man bygger en Wifi/web kontrollerade rover baserade på Makeblock Robot startpaket och Dave-Smart howto.Hur är det arbete:Rover styrs i en webbläsare (smartphone eller dator), kommandona är skicka genom WebSocket till D...