Kazalo:
- 1. korak: Potrebna je strojna oprema
- 2. korak: Sestavljanje podvozja
- 3. korak: Montaža elektronike
- 4. korak: Dodajanje spletne kamere
- 5. korak: Ožičite vse
- 6. korak: Nastavitev RPI
- 7. korak: Konfiguriranje zaporednih vrat RPI
- 8. korak: Namestitev modulov Python
- 9. korak: Nastavitev RoboClawa
- 10. korak: Namestitev programa/datotek Rover
- 11. korak: Zaženite Bot Up
- 12. korak: Dostop do strani za nadzor Bota
- Korak: Koda Python/Flask
- Korak 14: Uporaba druge strojne opreme
Video: Spletni rover: 14 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Graditi in igrati se z roboti je moj glavni užitek v življenju. Drugi igrajo golf ali smučajo, jaz pa gradim robote (ker ne morem igrati golfa ali smučati:-). Zdi se mi sproščujoče in zabavno! Za izdelavo večine svojih robotov uporabljam komplete podvozja. Uporaba kompletov mi pomaga, da počnem tisto, kar rada počnem več, programsko opremo in elektroniko, poleg tega pa omogoča boljše ohišje za vse moje palce.
V tem navodilu bomo preučili, kaj je potrebno za izdelavo preprostega, a robustnega roverja Wifi/splet. Uporabljeno podvozje je Actobotics Gooseneck. Izbral sem ga zaradi velikosti, razširljivosti in cene, vendar lahko uporabite katero koli drugo ohišje po lastni izbiri.
Za takšen projekt bomo potrebovali dober trden enokanalni računalnik, za tega bot pa sem se odločil uporabiti računalnik Raspberry Pi (RPI), ki temelji na Linuxu. RPI (in Linux) nam daje veliko možnosti kodiranja, Python pa bo uporabljen za kodiranje. Za spletni vmesnik uporabljam Flask, lahek spletni okvir za Python.
Za pogon motorjev sem izbral RoboClaw 2x5a. Omogoča preprosto zaporedno komunikacijo za upravljanje in dobro deluje z RPI in motorji na Goosenecku.
Končno ima spletno kamero za video povratne informacije tipa POV za daljinsko vožnjo. Vsako temo bom podrobneje obravnaval kasneje.
1. korak: Potrebna je strojna oprema
- Actobotics Gooesneck ohišje ali ustrezna zamenjava po vaši izbiri
- Raspberry Pi po vaši izbiri (ali klon) - Na tem botu se uporablja model RPI B, vendar bo deloval vsak z vsaj dvema vhodoma USB
- Standardna servo plošča B x1
- 90 ° Enokotni nosilec kanala x1
- Gonilnik motorja RoboClaw 2x5a
- Servo S3003 ali podoben
- Majhna plošča ali mini ploščica
- Moški žice za ženske
- Moški in ženski mostički
- Spletna kamera (neobvezno) - uporabljam Logitech C110 in tukaj je seznam podprtih kamer za RPI
- 5v-6v vir napajanja za servo napajanje
- 7,2v-11,1v baterija za napajanje pogonskega motorja
- 5v 2600mah (ali več) USB napajalnik za RPI
- USB Wi -Fi adapter
V svojem botu uporabljam 4-palčna kolesa, da naredim malo več terenov v zaprtih prostorih. Za to možnost boste potrebovali:
- 4 "težko kolo x2
- 4 mm vijačno pesto (0,770 palca) x2
2. korak: Sestavljanje podvozja
Najprej sestavite ohišje po navodilih, priloženih ohišju ali videu. Po zaključku bi morali imeti nekaj podobnega. OPOMBA: Pri sestavljanju vratnega dela pustite pritrjen nosilec.
Na svojem botu sem se odločil za zamenjavo koles, ki so priložena šasiji, za 4 težka kolesa. To je neobvezno in ni potrebno, razen če želite storiti enako.
3. korak: Montaža elektronike
Gooseneck ima veliko prostora in možnosti za namestitev vaše elektronike. Te slike vam predstavljam kot vodilo, vendar lahko izberete, kako želite vse skupaj predstaviti. Za pritrditev plošče in baterij lahko uporabite stojala, dvostranski trak, Velcro ali servo trak.
4. korak: Dodajanje spletne kamere
Za ta korak vzemite 90 -stopinjski nosilec, lahko servo pesto in štiri (4) vijake.3125 :
- Vzemite servo pesto in ga namestite na eno stran nosilca ter ju pritrdite skupaj z vijaki.2125 ", kot je na sliki.
- Nato servo vstavite v servo nosilec
- 90 -stopinjski nosilec s servorogom pritrdite na hrbtenico servomotorjev in jih s pomočjo vijaka hupe, ki je priložen servo, povežite skupaj
- Sedaj namestite servo v nosilcu na vrh gosjega vratu s preostalimi vijaki
- Kamero z zadrgo ali dvostranskim trakom namestite na nosilec 90 stopinj
Slike po potrebi uporabite za vodnike.
5. korak: Ožičite vse
Ožičenje je za tega robota precej ostro.
Motorji:
Spajkajte kable na obeh motorjih, če tega še niste storili
Prednji roboti (konec z gosjim vratom) so obrnjeni stran od vas:
- Priključite žice motorja na levem motorju v kanal M1A in M1B
- Priključite žice motorja na desnem motorju v kanal M2A in M2B
Priključki ozemljitve (GND):
- En ozemljitveni zatič na RoboClawu priključite na ozemljitveno ploščo. Črta za ozemljitev na RoboClawu je najbližje sredini (glej sliko)
- PIN 6 na RPI povežite s skakalno ploščo. Za dodelitev zatičev si oglejte sliko glave RPI.
- Priključite GND iz servo baterije na enega od nožic na mostični plošči.
- Prekinite žico mostička od skakalne plošče do žice GND servomotorjev.
RPI v RoboClaw:
Priključite pin RPI GPIO14 TXD na pin RoboClaw S1
Moč:
- Priključite žico POS iz servo baterije na servo vodnik POS
- Priključite kabel POS iz akumulatorja motorja v POS (+) vhodnega priključka za napajanje motorja RoboClaw. Terminal GND bomo za zdaj pustili odklopljenega.
6. korak: Nastavitev RPI
Predvidevam, da uporabnik tukaj pozna nekaj o Linuxu in RPI. Ne obravnavam, kako namestiti ali povezati z njim. Če pri tem potrebujete pomoč, uporabite spodnje strani.
Za nastavitev RPI si oglejte naslednje strani:
- Osnovne nastavitve RPI
- Navodila za hitri začetek RPI
- Nastavitev NOOBS
Za splošne skočne strani sta glavna stran RPI in strani eLinux odlična mesta za začetek.
Za splošno nastavitev Wi -Fi RPI si oglejte to povezavo.
Če nameravate v botu uporabiti kakšno kamero ali spletno kamero, si oglejte te strani, da dobite osnovne potrebne datoteke.
- Nastavitev kamere RPI
- Nastavitev kamere eLinix RPI
Pretočni video:
Obstaja nekaj načinov, kako video pretakanje delovati na RPI, vendar najraje uporabljam Motion.
Če ga želite namestiti v RPI, zaženite to: sudo apt-get install motion
Ta navodila vam omogočajo tudi nastavitev za pretakanje.
7. korak: Konfiguriranje zaporednih vrat RPI
Za uporabo RX in TX bomo morali onemogočiti konzolni način Linuxa, saj se želimo pogovarjati s krmilnikom motorja RoboClaw s teh vrat. Če želite to narediti, lahko uporabite to metodo ali to orodje. Izbira je vaša glede metode, saj oba na koncu naredita isto.
8. korak: Namestitev modulov Python
Potrebovali boste nameščen python na RPI in pip namestitvenega paketa python.
Če želite namestiti pip, naredite naslednje:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Nato:
- sudo pip namestite bučko
- sudo pip namestite pyserial
- sudo pip namestite RPIO
To bodo vsi moduli, potrebni za izvajanje kode.
9. korak: Nastavitev RoboClawa
Koda robota se pogovarja z RoboClawom v standardnem serijskem načinu pri 19200 baud.
Za to nastavite RoboClaw:
- Pritisnite gumb "MODE" na RoboClawu
- Med nastavitvami pritiskajte gumb za nastavitev, dokler LED ne utripa 5 (pet) krat
- Za shranjevanje pritisnite gumb "LIPO"
- Nato pritisnite gumb "SET", dokler LED (3) trikrat ne utripa med zamudami
- Za shranjevanje pritisnite gumb LIPO
To je to za nastavitev krmilnika motorja. Za več informacij si oglejte pdf, ki je na zgornji povezavi, če je potrebno.
10. korak: Namestitev programa/datotek Rover
Prenesite in kopirajte datoteko rover.zip v RPI v svojem uporabniškem imeniku pi.
Če uporabljate Linux ali Mac, lahko za to uporabite »scp«:
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
Za Windows lahko prenesete in uporabite pscp in naredite naslednje:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Ko je zip datoteka kopirana v RPI, se vanj prijavite kot uporabnik pi.
Zdaj zaženite:
odpakiraj rover.zip
S tem boste datoteke razpakirali v mapo z imenom 'rover' in v tej mapi bodo imeli naslednje:
- restrover.py (koda Python za robota)
- statično (vsebuje slikovne datoteke za gumbe na nadzorni strani)
- predloge (vsebuje datoteko index.htlm, nadzorno spletno stran)
Če uporabljate spletno kamero, spremenite vrstico pri dnu datoteke index.html v mapi s predlogami. Spremenite URL v vrstici IFRAME tako, da se ujema z URL src za vaš video tok.
11. korak: Zaženite Bot Up
Napajanje USB priključite na RPI.
Če želite zagnati kodo bota, se prijavite kot uporabnik pi in zaženite:
- cd rover
- sudo python restrover.py
Če je bilo vse v redu, bi morali v tem koraku videti zaslon, podoben sliki
Če opazite napake ali težave, jih morate odpraviti, preden nadaljujete.
Zdaj priključite žico GND (-) na priključek NEG (-) na vhodu za moč motorja RoboClaw.
12. korak: Dostop do strani za nadzor Bota
Ko se zažene robotov python skript, vklopite RoboClaw in se nato pomaknite do IP -ja RPI, na primer:
your_rpi_ip
Videti bi morali pojavno spletno stran za nadzor, kot na slikah. Če ne, preverite izhodni terminal RPI in poiščite napake ter jih odpravite.
Ko ste na strani, ste pripravljeni nadzirati bot.
Robot se bo zagnal v nastavitvi "Med run" in pri srednji hitrosti.
Bota lahko upravljate z gumbi na strani ali s tipkami na tipkovnici.
Ključi so:
- w - naprej
- z - vzvratno/nazaj
- a - dolg zavoj levo
- s - dolg zavoj v desno
- q - kratek zavoj v levo
- e - kratek desni zavoj
- 1 - premikanje kamere levo
- 2 - pomična kamera desno
- 3 - posoda polna levo
- 4 - pomik v celoti desno
- / - domača/ osrednja kamera
- h - robot za zaustavitev/ustavitev
Med poslanimi ukazi je pol sekundni medpomnilniški zamik. To sem storil, da sem odpravil neželene ponavljajoče se ukaze. Seveda lahko to odstranite iz kode, če želite (v index.html)
Preostale kontrole in nadzor morajo biti samoumevne.
Korak: Koda Python/Flask
Ta bot uporablja Python in spletni okvir Flask. Če vas zanima, lahko tukaj izveste več o Flasku.
Velika razlika od aplikacije Flask in običajnega skripta Python je razred/metoda @app.route, ki se uporablja za obdelavo URI. Razen tega je večinoma precej normalen Python.
#!/usr/bin/env python
# # Wifi/spletni pogon Rover # # Napisal Scott Beasley - 2015 # # Uporablja RPIO, pyserial in Flask # uvozno serijsko uvozno serijo iz RPIO uvozi PWM iz uvozne bučke Flask, render_template, request app = Flask (_name_, static_url_path = ") # Povežite se s komunikacijskimi vrati in se pogovorite z motorjskim krmilnikom Roboclaw. Poskusite: # Tu spremenite hitrost prenosa, če je drugačna od 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200), razen IOError: print ("Comm port not Najdeno ") sys.exit (0) # Spremenljivke krmiljenja hitrosti in pogona last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo nevtralni položaj (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18)) def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): globalni last_direction, run_ti me natisni "naprej" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Če ni neprekinjeno, potem ustavite po zakasnitvi, če run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/backward") def backward (): globalna last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time. if run_time> 0: last_direction = -1 halt () return "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 second time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # sleep @1/2 sekunde time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): global last_direction, turn_t m_offset print "Zavijanje naprej levo" go_left () # sleep @1 /8 second time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): globalno last_direction, turn_tm_offset print "desno zavijanje naprej" go_right () # sleep @1/8 second time.sleep (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): globalno last_direction print "Stop" halt () last_direction = -1 # spanje 100 ms time.sleep (0.100) return "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # spanje 150 ms čas. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos print" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # spanje 150ms time.sleep (0.150) return "ok" @app.route ("/speed_low") def speed_low (): globalna hitrost_usmeritve, zadnja_smer, turn_tm_offset hitrost_usklada = 42 turn_tm_offset = 0,001 # Posodobite trenutno smer, da dobite novo hitrost, če last_direction == 0: go_forward () če je last_direction == 1: go_backward () # spi 150 ms time.sleep (0.150) vrnite "ok" @app.route ("/speed_mid") def speed_mid (): globalni speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Posodobi trenutno smer, da dobi novo hitrost, če last_direction == 0: go_forward (), če je last_direction == 1: go_backward () # spi 150 ms time.sleep (0.150) vrne "ok" @app.route ("/speed_hi") def speed_hi (): globalna hitrost_usposabljanja, zadnja_smer, turn_tm_offset hitrost_usklada = 126 tur n_tm_offset = 0.332 # Posodobi trenutno smer za novo hitrost, če last_direction == 0: go_forward () če last_direction == 1: go_backward () # spanje 150 ms time.sleep (0.150) vrne "ok" @app.route ("/neprekinjeno ") def continual (): global run_time print" Continuous run "run_time = 0 # sleep 100ms time.sleep (0.100) return" ok " @app.route ("/mid_run ") def mid_run (): global run_time print" Mid run "run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) return" ok " @app.route ("/short_time ") def short_time (): global run_time print" Short run "run_time = 0.300 halt () # sleep 100ms time.sleep (0.100) return "ok" # # Funkcije motornega pogona # def go_forward (): globalna hitrost_izklopa, če je hitrostna_postopa! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): globalni speed_offset, če speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): globalni speed_offset, če speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): globalni speed_offset če speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_ma_": app.run (host = '0.0.0.0', port = 80, debug = True)
Če ne želite ali potrebujete podatkov za odpravljanje napak iz Flaska, nastavite debug na 'false' v vrstici app.run.
če _name_ == "_maj_":
app.run (host = '0.0.0.0', port = 80, debug = False)
Tu lahko spremenite tudi vrata, ki jih posluša strežnik Flask
Korak 14: Uporaba druge strojne opreme
Če želite uporabiti drugo strojno opremo, na primer drugo vrsto SBC (računalnik z eno ploščo), bi morali imeti težave pri zagonu Pythona in Flaska na drugih ploščah, kot so Beagle Bone, PCDuino itd … Kodo boste morali spremeniti tako, da ustreza GPIO postavitev in uporabo zmogljivosti servo pogona nove plošče.
Če želite uporabiti drug tip gonilnika motorja, morate spremeniti funkcije go_forward, go_backward, go_left, go_right in halt, da naredite vse, kar nadomestni gonilnik motorja potrebuje za to posebno funkcijo motorja.
Priporočena:
Spletni radio: 5 korakov (s slikami)
Spletni radio: Pred meseci sem v Banggoodu videl razvojno ploščo M5stickC in jo kupil za igro. Lahko ga dobite tukaj. Poskusil sem veliko skic, a sem končno pregledal to stran in se odločil, da bom poskusil narediti spletni radio. Za ta razvojni odbor so
Naredite spletni radio za manj kot 15 USD: 4 koraki (s slikami)
Naredite spletni radio za manj kot 15 USD: Zato sem se odločil za projekt, ki sem ga za nekaj časa odlašal: domač, popolnoma funkcionalen spletni radio, skupaj z ojačevalnikom in zvočnikom, za manj kot 15 €! med vnaprej določenimi pretočnimi radijskimi postajami s pritiskom na gumb in
Stikalo za luč Wifi Spletni strežnik Raspberry Pi: 8 korakov (s slikami)
Spletni strežnik za luč Wifi Raspberry Pi Spletni strežnik: želel sem upravljati stikalo za luč v svoji spalnici, ne da bi mi bilo treba vstati iz postelje, zato sem želel, da ga lahko upravljam s telefona. Imel sem nekaj dodatnih omejitev, želel sem ga enostavno upravljati s katere koli naprave, želel sem
Kako ustvariti spletni tajni oglas: 3 koraki (s slikami)
Kako ustvariti spletni tajni oglas: Imate nekaj, s čimer mislite, da se morate ločiti? Eden od načinov za promocijo stvari, ki jih želite prodati, je objava malega oglasa, danes pa je uporaba interneta preprost, učinkovit in skoraj vedno brezplačen način. V tem navodilu bom
Sparky - DIY spletni spletni robot za prisotnost: 15 korakov (s slikami)
Sparky - DIY spletni spletni telepresence robot: Ime Sparky temelji na okrajšavi za "Self Portrait Artefact?" Roving Chassis I? neroden naslov umetniškega projekta, ki se je začel v zgodnjih devetdesetih letih. Od takrat se je Sparky razvil iz prevelike igrače z daljinskim upravljalnikom z nekaj "baby monitorjem"? video ca