Cuprins:
- Pasul 1: Ce este un Pi Zero W?
- Pasul 2: Scotty, avem nevoie de mai multă putere
- Pasul 3: Plasarea senzorului și software-ul
- Pasul 4: Configurarea Pi
- Pasul 5: Ora WiFi
- Pasul 6: Conectare
- Pasul 7: fire
- Pasul 8: Aprinde-l
- Pasul 9: Pasul opțional și comenzile utile
Video: Sistem de asistare la parcare bazat pe Pi: 9 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Buna! Iată un mic proiect mișto pe care îl poți face într-o singură după-amiază și apoi îl poți folosi zilnic. Se bazează pe Raspberry Pi Zero W și vă va ajuta să vă parcați mașina perfect de fiecare dată.
Iată lista completă a pieselor de care aveți nevoie:
- Raspberry Pi Zero W (vom numi acest „rpi” sau „pi” în acest articol)
- Card micro SD de 4 GB sau mai mare pentru sistemul de operare pi
- Două module de senzori pentru distanța tinyLiDAR Time of Flight
- Panou LED 32x32 RGB (există mulți producători pentru acest lucru cu tonuri de puncte diferite, puteți folosi, de exemplu, Adafruit 1484 sau similar, căutați doar „32x32 LED Matrix” pe Google). Panoul nostru avea un pas de 6 mm.
- 25 de picioare de cablu CAT5
- aproximativ 22 fire de la jumper colorate de la mascul la mascul
- Sursă de alimentare microUSB 5v 2Amp (încărcător telefon mobil) Toate setate? Să mergem!
TL; Rezumat DR
- Descărcați Raspbian Lite OS pentru rpi
- Configurați pi pentru a rula fără cap prin WiFi cu un IP static
- Configurați-vă mediul de dezvoltare PC cu PuTTY, WinSCP și opțional SublimeText cu addon FTP
- Descărcați, creați și legați driverul panoului LED
- Descărcați și instalați pigpio
- Descărcați codul nostru Python
- Conectați panoul de afișare LED de 32x32
- Realizați cablul de extensie CAT5 pentru senzorul lateral tinyLiDAR
- Pas opțional (dar numai pentru utilizatorii avansați): faceți un dans fericit rapid când totul funcționează;)
Pasul 1: Ce este un Pi Zero W?
Ați auzit, fără îndoială, de Raspberry Pi, dar ce naiba este un pi „Zero W”?
Raspberry Pi Zero și Zero W au fost adăugări mai recente la familia Pi, ceea ce înseamnă mai mult pentru IoT și alte aplicații încorporate cu costuri reduse. Sunt versiuni decupate ale plăcii pi originale, dar totuși cu un procesor puternic de 1 GHz. Iată o comparație bună a tuturor modelelor.
Avantajul pentru noi în alegerea Pi Zero W aici față de alte plăci de control este că îl putem programa cu ușurință în limbajul Python de nivel superior, în timp ce folosim în continuare driverele rapide ale panoului LED C / C ++. De asemenea, are un preț atractiv la doar 10 USD.
Rețineți că, deoarece această placă este o versiune dezactivată a unui pi complet - unele lucruri s-au schimbat. În special, mufa Ethernet a fost eliminată, conectorul HDMI s-a schimbat într-o dimensiune mini și cele patru porturi USB au fost simplificate până la un singur tip micro USB. Există un alt conector micro USB la bord, dar este doar pentru alimentarea plăcii. Eliminarea tuturor conectorilor USB de dimensiuni complete introduce unele complexități. Și anume, cum puteți conecta o tastatură și un mouse? Perifericele și hub-urile USB standard utilizează conectori de tip A, nu de tipul micro.
Deci ce putem face?
Putem rămâne fără cap!
Nu, nu vrem să înnebunim, ci să folosim o alternativă la configurarea normală cu fir direct. Headless înseamnă a „tunela” în pi de la distanță folosind o conexiune de rețea securizată shell (SSH). Pentru acest proiect vom folosi abordarea fără cap prin WiFi. De aici și motivul pentru care am ales versiunea W a pi zero în loc de costul și mai mic pi zero.
Rețineți că există, de asemenea, un alt mod de a rula pi în modul fără cap folosind ceva numit VNC. Are nevoie de software VNC special care rulează pe computerul dvs., deoarece oferă un desktop grafic virtual complet pe computerul dvs. Nu avem nevoie (și chiar nu vrem) de desktop pentru proiectul nostru, așa că vom rămâne la metoda SSH mai simplă.
Pasul 2: Scotty, avem nevoie de mai multă putere
Panoul cu matrice LED de 32x32 poate, singur, să ia mai mulți amperi de curent. Fara gluma! De aceea, majoritatea acestor panouri includ niște cabluri de alimentare cu aspect puternic pentru alimentarea acestuia. Din fericire pentru noi, deși nu va trebui să obținem o sursă de energie masivă pentru acest proiect. Am reușit să alimentăm întregul sistem doar de la un încărcător de telefon mobil microUSB de 5v / 2amp de rezervă pe care îl aveam în jur. Motivul curentului inferior este că folosim o grafică relativ simplă și, prin urmare, nu aprindem majoritatea LED-urilor. Dacă vă gândiți să faceți animație sau să folosiți grafică video / luminoasă, atunci ar trebui să luați în considerare alimentarea panoului de la o sursă de alimentare separată.
Pasul 3: Plasarea senzorului și software-ul
Ai observat că folosim două tinyLiDAR-uri în acest sistem în loc de unul singur? Așa cum se arată în schema de configurare a garajului, una este plasată în fața mașinii, iar cealaltă este așezată de-a lungul unei părți a mașinii.
Senzorul lateral va detecta dacă vă abateți în timp ce parcați mașina și, bineînțeles, cel din față vă va spune când să vă opriți.
Afișajul cu LED-uri de 32x32 vă va ajuta afișând săgeți pentru a vă deplasa înainte, la stânga sau la dreapta și un afișaj cu numărătoare inversă cu colțuri colorate pentru a indica cât de departe mai aveți de condus. Aruncați o privire la scurtul nostru videoclip pentru toate stările de afișare.
Planul jocului
Pe scurt, folosim biblioteca populară hzeller C pentru driverul LED, Python pentru codul de control și biblioteca pipgpio C pentru controlul corect I2C al senzorilor noștri.
Python este un limbaj de nivel înalt foarte ușor pe care îl puteți edita cu ușurință pe orice editor de text. În mod normal folosim SublimeText și pentru acest proiect am folosit și un plugin FTP foarte util care ne permite să edităm fișierele script direct pe pi. Acesta este un pas opțional, deoarece este necesar doar dacă doriți să editați codul. Mai multe detalii sunt disponibile la sfârșitul acestui articol.
Toate plăcile rpi, după cum știți, nu acceptă în mod nativ întinderea ceasului I2C. Așa că am folosit din nou biblioteca pigpio pentru acest proiect pentru a controla senzorii tinyLiDAR, dar de data aceasta cu o ușoară răsucire …
Mai multe LiDAR-uri
Când cumpărați un tinyLiDAR, acesta este întotdeauna setat la adresa implicită a sclavului de 0x10. Acest lucru este în regulă atunci când utilizați un singur senzor, dar dacă aveți mai mult de unul pe autobuz poate fi o problemă dacă scrieți o comandă la 0x10 și toți răspund!
Deci avem 3 opțiuni aici:
În primul rând, putem utiliza comanda (tinyLiDAR) „R” pentru a scrie o nouă adresă slave la senzorul conectat la magistrala I2C. Apoi repetați acest lucru pentru fiecare senzor. Atașarea fizică, scrierea și detașarea fiecărui senzor pentru această procedură. tinyLiDAR va stoca adresa dată în memoria sa non-volatilă de la bord. Adresa va persista chiar și după pornirea ciclului până când o ștergeți prin emiterea comenzii RESET.
A doua opțiune este de a utiliza funcția convenabilă de atribuire automată pe care am creat-o ca obiectiv întins în campania IGG. Aceasta implică trimiterea comenzii „AR” și apoi îndreptarea individuală a degetului către fiecare senzor pentru a atribui automat adrese secvențiale I2C senzorilor individuali similare cu prima opțiune, dar nu trebuie să deconectați fizic fiecare senzor pentru a face acest lucru.
A treia opțiune este cea pe care o folosim aici în acest proiect și este posibilă datorită bibliotecii pigpio. Pentru a implementa corect standardul I2C, pigpio bitbangs GPIO. Din această cauză, putem crea cu ușurință autobuze I2C separate pe aproape orice pereche de pini GPIO de rezervă.
Prin urmare, nu este nevoie să reprogramați adresele slave pentru senzorii LiDAR multipli. Putem folosi doar un autobuz separat pentru fiecare:)
Rețineți că autobuzul I2C care rulează la 100Kbps este de fapt destul de robust. Folosim un cablu Ethernet CAT5 vechi simplu pentru a rula autobuzul I2C către senzorul lateral tinyLiDAR aflat la o distanță de 25 de metri, fără componente repetor active! Detaliile cablajului senzorului sunt prezentate mai sus.
Bine, suficient jabber, să începem să descărcăm codul!
Pasul 4: Configurarea Pi
Atenție: Pi utilizează un sistem de fișiere Linux, deci este mai bine să efectuați pașii următori pe un sistem bazat pe Linux. Este posibil să ajungeți la reformatarea cardului SD dacă faceți acest lucru pe Windows. Am folosit desktopul minunat și gratuit Ubuntu 18.04 care rulează într-un mediu virtual pe un computer cu Windows 10, dar puteți încerca ceva similar.
Va trebui mai întâi să descărcați sistemul de operare de pe raspberrypi.org și apoi să îl inscripționați pe cardul dvs. microSD. Deci, urmați acești pași:
(1) În Ubuntu du-te aici și ia imaginea Raspbian Lite. Salvați-l în folderul de descărcări.
(2) În continuare descărcați utilitarul de scriere a cardului SD Etcher. FYI - link-ul oficial de descărcare Etcher pentru versiunea Linux de pe pagina lor de pornire nu a funcționat pentru noi, așa că am folosit în schimb metoda descrisă aici:
În rezumat, pașii descriși în link au fost:
Adăugați depozitul Etcher debian:
echo "deb https://dl.bintray.com/resin-io/debian stable etcher" | sudo tee /etc/apt/sources.list.d/etcher.list
Aveți încredere în cheia GPG a Bintray.com:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
Actualizați și instalați:
sudo apt-get update
sudo apt-get install etcher-electron
Odată finalizat, puteți continua și lansa Etcher de pe desktopul Ubuntu. Vă va solicita fișierul sursă (pe care îl puneți în folderul de descărcări). Următorul pas din Etcher este să alegeți ținta corectă. Etcher face o treabă bună de detectare a cardului dvs. micro SD, dar ar trebui să fiți paranoic aici. Pentru a verifica dacă găsește destinația corectă - încercați să scoateți cardul microSD făcând clic pe eject în fereastra de explorare a fișierelor Ubuntu și verificați dacă acesta dispare ca opțiune țintă din Etcher. Apoi introduceți-l înapoi și continuați cu pasul final, care este să scrieți fișierul pe acest card microSD.
Așteptați o perioadă până se termină și apoi continuați.
Pasul 5: Ora WiFi
Bine, așa că acum este timpul să introduceți detaliile WiFi.
Sfat: puteți copia oricând (Ctrl + C) și lipiți (clic dreapta, lipire) informații din acest articol pe ecranul terminalului PuTTY în loc să tastați comenzile. Verificați sfârșitul acestui articol și pentru câteva comenzi utile Linux.
Când Etcher a terminat de scris pe cardul micro SD, vor apărea 2 unități așa cum se arată mai sus. Una se numește boot, cealaltă se numește rootfs
Trebuie să folosim managerul de fișiere pentru a intra în folderul de încărcare și a crea un fișier numit wpa_supplicant.conf.
Pentru a face acest pas, puteți să faceți clic pe partea stângă unde scrie boot și apoi în partea dreaptă a ecranului puteți să faceți clic dreapta pe fundalul alb și să alegeți Deschidere în terminal.
Aceasta va deschide o fereastră terminal (similară cu CMD în Windows) în care puteți tasta următoarele:
sudo nano wpa_supplicant.conf Sfat: va trebui să introduceți parola de sistem Linux, astfel încât să poată rula ca Super Utilizator. Acest lucru este necesar sau altfel nu veți putea salva fișierele când ați terminat editarea
Comanda de mai sus va lansa apoi editorul de text „nano” unde puteți introduce următoarele informații:
country = SUA
ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = 1 network = {ssid = "WiFi_SSID" scan_ssid = 1 psk = "WiFi_Password" key_mgmt = WPA - PSK}
Notă: Nu uitați să înlocuiți WiFi_SSID și WiFi_Password cu numele și parola rețelei WiFi proprii.
Când ați terminat, faceți clic pe Ctrl + X pentru a ieși și răspundeți Da la scrierea fișierului la ieșire.
Următorul nostru pas este să creăm un fișier gol numit ssh. Pentru a face acest lucru, trebuie doar să tastați următoarele în fereastra terminalului:
atingeți ssh
Acum trebuie să îi oferim PI o adresă IP statică, astfel încât să știm unde este de fiecare dată când vrem să ne conectăm la ea. Tastați următoarele în fereastra terminalului:
sudo nano /etc/dhcpcd.conf
Aceasta ar trebui să deschidă din nou editorul de text nano și putem adăuga acest text în partea de jos a fișierului:
interfață wlan0
static ip_address = 192.168.0.routeruri statice = 192.168.0.1 static domain_name_servers = 192.168.0.1 8.8.8.8
Notă: Aceasta presupune că prefixul rețelei dvs. este 192.168.0. Dacă aveți 192.168.1 etc., atunci folosiți rețeaua în schimb. Serverul de nume de domeniu 8.8.8.8 este pentru Google și este opțional aici.
Tastați „exit” în terminal pentru al închide. Apoi faceți clic dreapta pe numele de boot din partea stângă a ferestrei Manager fișiere și selectați Eject.
Acum puteți conecta acest card microSD la pi și conectați cablul de alimentare microUSB pentru a vă alimenta pi-ul.
Dacă totul merge bine, LED-ul verde va clipi pentru o vreme, ca și cum ar accesa o unitate de hard disk și ar trebui să vă conecteze la rețeaua WiFi. Acordați-i aproximativ un minut pentru a se așeza și așteptați ca LED-ul să devină verde solid.
Pentru a verifica dacă totul a funcționat, putem încerca să facem ping.
Deci, tastați linia de mai jos și verificați dacă există un răspuns.
ping 192.168.0.200
În Ubuntu ar trebui să obțineți ceva similar cu acesta:
ping 192.168.0.200
PING 192.168.0.200 (192.168.0.200) 56 (84) octeți de date. 64 octeți din 192.168.0.200: icmp_seq = 1 ttl = 128 timp = 752 ms 64 octeți din 192.168.0.200: icmp_seq = 2 ttl = 128 timp = 5,77 ms 64 octeți din 192.168.0.200: icmp_seq = 3 ttl = 128 timp = 7.33 ms ^ C --- 192.168.0.200 statistici ping --- 3 pachete transmise, 3 primite, 0% pierdere pachete, timp 2001ms rtt min / avg / max / mdev = 5.777 / 255.346 / 752.922 / 351.839 ms
Rețineți că ping-ul continuă să funcționeze până când apăsați Ctrl + C pentru a ieși.
În Windows ar trebui să obțineți așa ceva:
ping 192.168.0.200
Ping 192.168.0.200 cu 32 de octeți de date: Răspuns de la 192.168.0.200: octeți = 32 de timp = 4ms TTL = 64 Răspuns de la 192.168.0.200: octeți = 32 de timp = 5ms TTL = 64 Răspuns de la 192.168.0.200: octeți = 32 de timp = 6ms TTL = 64 Răspuns de la 192.168.0.200: octeți = 32 de timp = 5ms TTL = 64 Statistici de ping pentru 192.168.0.200: Pachete: Trimise = 4, Primite = 4, Pierdute = 0 (0% pierdere), Timpi aproximativi de călătorie dus-întors în milisecunde: Minim = 4ms, Maxim = 6ms, Mediu = 5ms
Toate bune? În continuare …
Pasul 6: Conectare
Acum, că avem conectivitate la pi, vrem să îi trimitem comenzi. Dar cum? BUC, desigur! Puteți descărca PuTTY de aici Configurarea PuTTY După descărcarea software-ului PuTTY, creați un profil pentru pi cu următoarele informații:
Nume gazdă (sau adresă IP): 192.168.0.200 Tip conexiune: SSH Dă acestui profil un nume sub Sesiuni salvate și apasă Salvează. Puteți folosi orice nume doriți, de exemplu "rpizw_200"
Pentru a vă conecta, selectați-l din listă și apăsați Încărcare. Apoi apăsați Deschidere. Introduceți numele de utilizator și parola pentru a vă conecta:
nume de autentificare: pi
Defaltă parola: zmeură
Iată un exemplu de sesiune afișat în PuTTY când vă conectați:
autentificare ca: pi
parola [email protected]: Linux raspberrypi 4.14.34+ # 1110 Mon Apr 16 14:51:42 BST 2018 armv6l Programele incluse în sistemul Debian GNU / Linux sunt software gratuit; termenii exacți de distribuție pentru fiecare program sunt descriși în fișierele individuale din / usr / share / doc / * / copyright. Debian GNU / Linux vine cu ABSOLUT FĂRĂ GARANȚIE, în măsura permisă de legea aplicabilă. Ultima autentificare: [data și ora] de la 192.168.0. [Adresa IP] SSH este activată și parola implicită pentru utilizatorul „pi” nu a fost modificată. Acesta este un risc de securitate - vă rugăm să vă autentificați ca utilizator „pi” și tastați „passwd” pentru a seta o nouă parolă.
La prima conectare, va avertiza că nu ați schimbat încă parola. Ar trebui să îl schimbați în ceva puternic, dar simplu de reținut, așa că mergeți mai departe și schimbați-l tastând passwd și urmați instrucțiunile.
Ar trebui să actualizăm software-ul pe pi tastând acest lucru:
sudo apt-get update && sudo apt-get upgrade
Aceasta va descărca orice actualizări de care are nevoie de la conexiunea dvs. la internet. Răspundeți DA dacă vi se solicită să continuați, apoi acordați-i ceva timp pentru actualizare.
În acest moment, ar trebui să oprim și sunetul de pe pi, deoarece are un juju rău cu biblioteca de drivere LED. Copiați, lipiți rândurile următoare unul câte unul și apăsați Enter după fiecare linie:
cd ~
pisica << EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf blacklist snd_bcm2835 EOF sudo update-initramfs -u
Ieșirea va fi cam așa:
pi @ raspberrypi: ~ $ cd ~
pi @ raspberrypi: ~ $ cat <> lista neagră snd_bcm2835>> lista neagră EOF snd_bcm2835 pi @ raspberrypi: ~ $ sudo update-initramfs -u pi @ raspberrypi: ~ $
Apoi, trebuie să repornim pi-ul pentru ca modificările să aibă efect, deci tastați următoarele:
sudo reporniți acum
Conexiunea va renunța, desigur, pe măsură ce pi se repornește, astfel încât să puteți închide PuTTY. Încercați să vă conectați din nou peste un minut mai târziu.
Acum este timpul să obțineți un manager de fișiere grafic FTP numit WinSCP. Puteți descărca WinSCP de aici
WinSCP seamănă mult cu gestionarul de fișiere pe Windows și Ubuntu. Ne permite să tragem și să fixăm cu ușurință fișiere în & din pi și să creăm directoare cu doar un clic dreapta al mouse-ului.
Odată descărcat, va trebui să configurați un profil pentru pi.
Configurare WinSCP La fereastra pop-up Login, alegeți Site nou. Utilizați următoarele setări pentru sesiune:
Protocol fișier: Nume gazdă SFTP: 192.168.0.200 Nume utilizator: pi Parolă: {orice parolă ați schimbat implicit în pasul PuTTY de mai sus}
În Setări avansate de site accesați Mediu | Directoare și introduceți / home / pi pentru directorul Remote și orice doriți pentru setarea Director Local.
În Setări avansate de site accesați Mediu | Shell și alegeți sudo su - în lista derulantă Shell.
Apoi apăsați Salvare.
Păstrați atât WinSCP cât și PuTTY deschise în timp ce efectuați pașii următori
Mergeți la terminalul PuTTY și introduceți următoarele:
cd ~
Acest lucru ne va duce la directorul nostru de acasă din interiorul pi.
Acum putem lua biblioteca de drivere LED de pe github. Pentru a utiliza cel mai recent cod, va trebui să extragem repo, așa că trebuie să instalăm utilitarul git.
Introduceți acest lucru în PuTTY:
sudo apt-get install git
răspundeți la Y pentru a continua și va dura câteva secunde să ne instalați git de pe internet.
Rezultatul ar trebui să arate cam așa:
pi @ raspberrypi: ~ $ sudo apt-get install git
Citirea listelor de pachete … Gata Construirea arborelui de dependență Citirea informațiilor despre starea … Gata Următoarele pachete suplimentare vor fi instalate: git-man liberror-perl Pachete sugerate: git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn Următoarele pachete NOI vor fi instalate: git git-man liberror-perl 0 actualizat, 3 nou instalat, 0 de eliminat și 0 neactualizat. Trebuie să obțineți 4, 848 kB de arhive. După această operație, vor fi utilizați 26,4 MB de spațiu suplimentar pe disc. Doriți să continuați? [Da / n] y Obține: 1 https://muug.ca/mirror/raspbian/raspbian stretch / main armhf liberror-perl all 0.17024-1 [26.9 kB] Obține: 2 https://muug.ca/mirror/ raspbian / raspbian stretch / main armhf git-man all 1: 2.11.0-3 + deb9u3 [1, 433 kB] Obține: 3 https://muug.ca/mirror/raspbian/raspbian stretch / main armhf git armhf 1: 2.11.0-3 + deb9u3 [3, 388 kB] Adus 4, 848 kB în 5s (878 kB / s) Selectarea pachetului liberror-perl neselectat anterior.(Citind baza de date … 34363 fișiere și directoare instalate în prezent.) Pregătirea pentru despachetare … / liberror-perl_0.17024-1_all.deb … Despachetarea liberror-perl (0.17024-1) … Selectarea pachetului neselectat anterior git-man. Pregătirea despachetării … / git-man_1% 3a2.11.0-3 + deb9u3_all.deb … Despachetarea git-man (1: 2.11.0-3 + deb9u3) … Selectarea pachetului git neselectat anterior. Pregătirea despachetării … / git_1% 3a2.11.0-3 + deb9u3_armhf.deb … Despachetarea git (1: 2.11.0-3 + deb9u3) … Configurarea git-man (1: 2.11.0-3 + deb9u3) … Configurarea liberror-perl (0.17024-1) … Procesare declanșatoare pentru man-db (2.7.6.1-2) … Configurarea git (1: 2.11.0-3 + deb9u3) …
Acum reveniți la WinSCP și navigați la folderul / home / pi. Apoi, în partea dreaptă a acestei ferestre WinScp, faceți clic dreapta și alegeți să creați un nou director numit „parcare”
Înapoi în ecranul PuTTY puteți tasta ls pentru a confirma că ați făcut doar un nou folder în pi. Apoi introduceți acest lucru:
cd p [TAB]Sfat: Apăsarea tastei TAB va completa automat numele parțial pentru dvs.
Apăsați tasta Enter pentru a intra în acest director.
pi @ raspberrypi: ~ $ cd parking /
pi @ raspberrypi: ~ / parking $ ls
Acum putem obține fișierele driverului introducând următoarele în PuTTY:
git clone
Rezultatul va arăta cam așa:
pi @ raspberrypi: ~ / parking $ git clone
Clonarea în „rpi-rgb-led-matrix”… la distanță: Numărarea obiectelor: 3740, gata. la distanță: Total 3740 (delta 0), reutilizat 0 (delta 0), pachet reutilizat 3740 Obiecte primitoare: 100% (3740/3740), 20,61 MiB | 1,32 MiB / s, terminat. Rezolvarea deltelor: 100% (2550/2550), gata.
Acum compilați fișierele driverului LED accesând acest nou director 'rpi-rgb-led-matrix' și tastând comanda make:
cd r [TAB]
face Și așa arăta pe tabloul nostru
pi @ raspberrypi: ~ / parking $ cd rpi-rgb-led-matrix /
pi @ raspberrypi: ~ / parking / rpi-rgb-led-matrix $ make make -C./lib make [1]: Introducerea directorului '/ home / pi / parking / rpi-rgb-led-matrix / lib' g ++ - I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o gpio.o gpio.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-parametru-neutilizat -fno-excepții -c -o led-matrix.o led-matrix.cc g ++ -I../ include - Perete -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-parametru-neutilizat -fno-excepții -c -o opțiuni-inițializare.o opțiuni-initialize.cc g ++ -I../ include -Perete -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-parametru-neutilizat -fno-excepții -c -o framebuffer.o framebuffer.cc g ++ -I../ include -Wall -O3 -g - fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o thread.o thread.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = ' "regulat" '-Wextra -Wno-unused-parameter -fno-exceptions -c -o bdf-font.o bdf-fon t.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o graphics.o graphics.cc graphics.cc g ++ - I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o transformer.o transformer.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-parametru neutilizat -fno-excepții -c -o led-matrix-co led-matrix-c.cc cc -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-parametru-neutilizat -c -o hardware-mapping.o hardware-mapping.c g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o content-streamer.o content-streamer.cc g ++ -I../ include -Wall -O3 - g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-parametru-neutilizat -fno-excepții -c -o pixel-mapper.o pixel-mapper.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regulat"' -Wextra -Wno-unused-parameter -fno-excep tions -c -o multiplex-mappers.o multiplex-mappers.cc ar rcs librgbmatrix.a gpio.o led-matrix.o options-initialize.o framebuffer.o thread.o bdf-font.o graphics.o transformer.o led-matrix-co hardware-mapping.o content-streamer.o pixel-mapper.o multiplex-mappers.o g ++ -partajat -Wl, -soname, librgbmatrix.so.1 -o librgbmatrix.so.1 gpio.o led -matrix.o options-initialize.o framebuffer.o thread.o bdf-font.o graphics.o transformer.o led-matrix-co hardware-mapping.o content-streamer.o pixel-mapper.o multiplex-mappers. o -lpthread -lrt -lm -lpthread make [1]: Părăsind directorul '/ home / pi / parking / rpi-rgb-led-matrix / lib' make -C exemple-api-use make [1]: Introducerea directorului ' / home / pi / parking / rpi-rgb-led-matrix / examples-api-use 'g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o demo-main. o demo-main.cc make -C../lib make [2]: Introducerea directorului '/ home / pi / parking / rpi-rgb-led-matrix / lib' make [2]: Părăsirea directorului '/ home / pi / parking / rpi-rgb-led-matrix / lib 'g ++ demo-main.o -o demo -L../ lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o minimal-example.o minimal-example.cc g ++ minimal-example.o - o exemplu minim -L../ lib -lrgbmatrix -lrt -lm -lpthread cc -I../ include -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o c-example.o c- example.c cc c-example.o -o c-example -L../ lib -lrgbmatrix -lrt -lm -lpthread -lstdc ++ g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused- parametru -c -o text-exemplu.o text-example.cc g ++ text-exemplu.o -o text-exemplu -L../ lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ include -Wall - O3 -g -Wextra -Wno-unused-parameter -c -o scrolling-text-example.o scrolling-text-example.cc g ++ scrolling-text-example.o -o scrolling-text-example -L../ lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o clock.o clock.cc g ++ clock.o -o clock -L.. / lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o ledcat.o ledcat.cc g ++ le dcat.o -o ledcat -L../ lib -lrgbmatrix -lrt -lm -lpthread make [1]: Părăsind directorul '/ home / pi / parking / rpi-rgb-led-matrix / examples-api-use' pi @raspberrypi: ~ / parking / rpi-rgb-led-matrix $
Următorul nostru pas va fi să legăm biblioteca matricială RGB de Python. Am folosit Python 2 implicit pentru acest proiect. Deci, pentru a face această legare, introducem următoarea linie la un moment dat ca înainte:
sudo apt-get update && sudo apt-get install python2.7-dev python-pillow -y
make build-python sudo make install-python
Notă: Puteți ignora în siguranță singurul avertisment despre „-Wstrict-prototype” care apare atunci când rulați cele două declarații. Comenzile make durează câteva minute să ruleze și nu spun nimic în timp ce sunt ocupate. Deci, nu vă temeți - pi-ul dvs. ar trebui să revină în curând;)
Iată o ieșire parțială a primei declarații make:
construirea extensiei „grafică”
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / build / python2.7-kKRR4y / python2.7-2.7.13 =. -fstack-protector-strong -Wformat -Werror = format-security -fPIC -I../../ include -I / usr / include / python2.7 -c rgbmatrix / graphics.cpp -o build / temp.linux- armv6l-2.7 / rgbmatrix / graphics.o -O3 -Wall cc1plus: avertisment: opțiunea liniei de comandă „-Wstrict-prototypes” este valabilă pentru C / ObjC, dar nu pentru C ++ arm-linux-gnueabihf-g ++ -pthread -shared -Wl, -O1 -Wl, -Bsymbolic-functions -Wl, -z, relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix -map = / build / python2.7-kKRR4y / python2.7-2.7.13 =. -fstack-protector-strong -Wformat -Werror = format-security -Wl, -z, relro -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / build / python2.7-kKRR4y / python2.7 -2.7.13 =. -fstack-protector-strong -Wformat -Werror = format-security build / temp.linux-armv6l-2.7 / rgbmatrix / graphics.o -L../../ lib -lrgbmatrix -o./rgbmatrix/graphics.so make [1]: Părăsind directorul '/ home / pi / parking / rpi-rgb-led-matrix / bindings / python' pi @ raspberrypi: ~ / parking / rpi-rgb-led-matrix $
Apoi vom instala biblioteca pigpio C. Pentru a face acest lucru corect, trebuie să-l realizăm din sursă, așa că trebuie doar să introduceți următoarele rânduri:
cd ~
sudo rm -rf PIGPIO wget abyz.me.uk/rpi/pigpio/pigpio.zip unzip pigpio.zip cd PIGPIO make sudo make install rm pigpio.zip
Instalarea de mai sus durează aproximativ 3 minute.
Acum este timpul să obținem fișierele noastre de proiect Python. Introduceți următoarele:
cd ~
cd / home / pi / parking / rpi-rgb-led-matrix / bindings / python / samples wget https://s3.amazonaws.com/microedco/tinyLiDAR/Raspberry+Pi/tinyL_parking.zip unzip -j tinyL_parking.zip rm tinyL_parking.zip
Apoi pentru al executa, tastați următoarele:
sudo python parking.py
Dar nu trebuie să faceți acest lucru chiar acum, deoarece tot trebuie să le conectăm …
Pasul 7: fire
Așa cum am menționat mai devreme, am alimentat panoul LED cu același adaptor de alimentare care alimentează pi. Pentru a face acest lucru, va trebui să îmbinați firele roșii și negre puternice la pinii antetului masculin, astfel încât să poată fi conectați la pinii 2 și 9 ai conectorului 40pin pi.
Deconectați alimentarea de la pi acum și conectați panoul cu LED-uri conform schemei de mai sus. Păstrați pinul 2 deconectat pentru moment.
NOTĂ: Panoul matricial cu LED-uri se poate alimenta uneori într-o stare funky. Dacă se întâmplă acest lucru, vă poate încărca grav sursa de alimentare, indiferent de capacitatea curentă pe care o are. Am observat acest lucru în timpul dezvoltării pe banca noastră de aprovizionare, care poate furniza peste 4 amperi. Soluția la aceasta este să rulați mai întâi codul pi și apoi să conectați pinul 2 pentru a alimenta panoul cu LED-uri. În acest fel, panoul ar trebui să apară într-o stare de putere redusă, deoarece elimină stările LED aleatorii. Curentul de repaus (toate LED-urile oprite) pentru panoul nostru LED a fost de numai 50mA la 5v.
CAT5
Am folosit un cablu ethernet CAT5 de 25 de picioare și l-am modificat pentru a se conecta la pinii antetului pi de la un capăt și a accepta pinii conectorului GROVE de pe cealaltă parte, astfel încât să putem extinde distanța pentru a plasa senzorul nostru tinyLiDAR lateral. Fotografiile de mai sus arată acest cablu înainte și după modificări. Nu luați în considerare culorile firelor pinului antet, deoarece acestea nu sunt corelate cu diagramele. Asigurați-vă că v-ați conectat sistemul așa cum se arată în diagramele de conexiune ilustrate prezentate anterior la pasul 3.
Pasul 8: Aprinde-l
Secvența inițială adecvată de pornire ar trebui să fie conectarea încărcătorului microUSB la pi și așteptarea LED-urilor albastre de pe senzorii tinyLiDAR să clipească rapid, arătând că efectuează măsurători. Acest lucru demonstrează că codul funcționează corect.
Apoi puteți conecta încet, dar ferm pinul 2 pentru alimentarea panoului LED. Aveți grijă să nu faceți probleme în timp ce faceți acest lucru! Dacă panoul cu LED-uri afișează câteva LED-uri strălucitoare înghețate, atunci este posibil să se blocheze, deci scoateți puterea microUSB din pi și așteptați câteva secunde pentru a încerca din nou secvența de pornire.
Pentru a rula codul, introduceți următoarele:
cd / home / pi / parking / rpi-rgb-led-matrix / bindings / python / samples
sudo python parking.py
Dacă totul merge bine, ar trebui să obțineți un afișaj similar celui afișat în videoclip.
Aruncați o privire rapidă pe codul parking.py pentru a înțelege ce limite am folosit. Valoarea implicită pentru senzorul frontal este de 200 mm. Deoarece domeniul senzorilor este cuprins între 11mm și 2m, este o idee bună să păstrați distanța frontală nom_parked_ la 200mm sau mai mare. Senzorul lateral nom_parked_Side este setat la 600 mm. Vedeți imaginea de mai sus pentru codul Python care prezintă aceste opțiuni de configurare.
Dacă totul funcționează, puteți merge mai departe și puteți monta sistemul în garajul dvs. și puteți ajusta parametrii de mai sus, după cum este necesar. Deoarece sunteți conectat la Wi-Fi, puteți oricând să intrați și să modificați setările de distanță, după cum aveți nevoie pentru configurarea specială a garajului, în timp ce acesta este încă montat.
Asta este acum?
De ce da, da, este! - e timpul să faci dansul tău fericit:)
Vă mulțumim pentru citire și bucurați-vă de noul dvs. asistent de parcare!
Pasul 9: Pasul opțional și comenzile utile
Pas opțional - addon FTP pentru text sublim
Pentru a edita fișierele script Python direct pe pi, putem instala suplimentul FTP numit Sublime SFTP de către Wbond. Puteți descărca acest supliment urmând instrucțiunile de aici
Pentru a configura acest supliment, trebuie să configurăm acreditările FTP din Fișier | SFTP / FTP | Configurare Server … pagina.
Pentru configurarea noastră am folosit:
"type": "sftp", "sync_down_on_open": true, "sync_same_age": true, "host": "192.168.0.200", "user": "pi", "password": "YOUR_RPI_PASSWORD_HERE", "port": "22", "remote_path": "/ home / pi /", "file_permissions": "664", "dir_permissions": "775", Utilizați Ctrl + S sau Fișier | Salvați pentru a salva aceste informații. Vi se va solicita un nume pentru a apela această configurație. Pur și simplu l-am numit „rpizw_0_200”
Acum, pentru a vă conecta la pi din SublimeText, accesați Fișier | SFTP / FTP | Răsfoiți serverul …
Selectați din lista de opțiuni care apar. Veți dori să alegeți profilul cu numele specificat mai sus;) Urmați instrucțiunile pentru a naviga în foldere și a edita fișierul dorit.
Extras utile
Comenzi Linux utile pentru a fi utilizate pe pi.
Înainte de a deconecta pi-ul, asigurați-vă întotdeauna că îl închideți, astfel încât să nu primiți corupție de fișier pe cardul dvs. microSD. Introduceți această comandă:
oprire sudo acum
și așteptați ca ledul verde să se oprească înainte de a deconecta curentul. În mod similar, pentru a-l reporni, puteți introduce:
sudo reporniți acum
Pentru a lista fișierele dintr-un director, utilizați acest lucru:
eu sunt
Aici puteți găsi alte comenzi utile Linux
Recomandat:
Sistem de parcare inteligentă bazat pe IoT utilizând NodeMCU ESP8266: 5 pași
Sistem inteligent de parcare bazat pe IoT folosind NodeMCU ESP8266: În prezent, găsirea parcării în zonele aglomerate este foarte grea și nu există un sistem care să obțină detaliile disponibilității parcării online. Imaginați-vă dacă puteți obține informații despre disponibilitatea sloturilor de parcare pe telefonul dvs. și nu aveți roaming în jurul valorii de a verifica t
Sistem de sortare a culorilor: Sistem bazat pe Arduino cu două centuri: 8 pași
Sistem de sortare a culorilor: Sistem pe bază de Arduino cu două benzi: Transportul și / sau ambalarea produselor și articolelor din domeniul industrial se face folosind linii realizate cu benzi transportoare. Aceste centuri ajută la mutarea articolului dintr-un punct în altul cu o viteză specifică. Unele sarcini de procesare sau identificare pot fi
Sistem de alarmă de parcare a vehiculului utilizând senzorul PIR - DIY: 7 pași (cu imagini)
Sistemul de alarmă de parcare a vehiculului utilizând senzorul PIR - DIY: Ați avut vreodată probleme în timp ce staționați pentru vehicul, cum ar fi mașina, camionul, motocicleta sau orice altceva, atunci în acest instructiv vă voi arăta cum să depășiți această problemă folosind o alarmă de parcare simplă pentru vehicul folosind senzorul PIR. În acest sistem care
DIY - Asistent de parcare bazat pe Arduino V2: 6 pași
DIY - Arduino Based Parking Assistant V2: Când viața îți dă banane !!!!! Necesitatea este mama invențiilor și nu voi nega acest fapt. Sincer vorbind, aceasta este a doua oară când mă lovesc de peretele garajului nostru de când ne-am mutat în această casă nouă. Gata, nu ar exista nici un
Un prototip de sistem de parcare simplu folosind Ebot: 3 pași
Un prototip de sistem de parcare simplu folosind Ebot: Am realizat un prototip de sistem de parcare simplu folosind Ebot. În acest sistem, există un senzor cu ultrasunete pentru a detecta vehiculul / obiectul. Modulul LCD va arăta numărul de vehicule detectate. Odată ce numărul a atins maximul, va afișa mesajul & q