Sadržaj:

ColorPicker: 10 koraka
ColorPicker: 10 koraka

Video: ColorPicker: 10 koraka

Video: ColorPicker: 10 koraka
Video: Реалити-сериал «Солдатки» | 9 и 10 серия 2024, Oktobar
Anonim
ColorPicker
ColorPicker

Cilj ovog projekta je mjerenje boja i njihovo prevođenje u druge sisteme boja. Koristeći samo RGB vrijednosti koje daje senzor, možete prevesti u HSL, CYMK, HEX, kao i najbliži RAL kôd (standard koji se koristi za boje). Ovaj projekt zahtijeva osnovno znanje o Pythonu, MySQL -u, Linuxu i Javascriptu.

Ako ste također upoznati s Flask framework -om i SocketIO -om, kôd za ovaj projekt trebao bi vam biti lako razumljiv.

Ovaj projekt mogu koristiti slikari, dizajneri interijera ili samo svi oni koji trebaju mjeriti boje.

Ovaj projekt nije tako skup i košta otprilike _ eura, bez dostave.

Supplies

Ovaj odjeljak možemo podijeliti na dva dijela:

  • Hardver
  • Softver

Hardver

Koristimo sljedeće komponente

  • HC04: Senzor udaljenosti, koliko mjerimo od objekta
  • LCD ekran 2x16
  • LCD I2C modul (HW061)
  • TCS34725 Modul senzora boje (Adafruit)
  • Bijela LED dioda
  • Raspberry Pi 3 (Bilo koji Raspberry Pi bi trebao raditi)
  • 5x 1k Ohm otpornik
  • 1x 220 ili 330 Ohm otpornik
  • SD kartica 16 GB (14,4 GB)

Softver

  • Python IDE, poput vizualnog koda ili Pycharma (ovdje se koristi Pycharm)
  • MySQL Workbench
  • Putty (Preuzmi Putty)
  • Rufus ili bilo koji drugi pisac SD kartica (preuzmite Rufus)

Cijene

Ovaj projekt je prilično jeftin, ako već imate Rapsberry Pi.

  • HC04: Počevši od 2,5 eura (Kina) i do 6 eura za više lokalnih trgovina.
  • LCD: Oko 6-8 eura.
  • I2C modul: jeftino ispod 1 € (Kina), ali do 4 € za više lokalnih trgovina.
  • TCS34725: Oko 9-12 eura. Najskuplji dio (isključujući RPi)
  • Bijeli LED: Kupljen na veliko, 20 LED dioda već za 1 €
  • Raspberry Pi: Ovisno o verziji, oko 40 eura
  • Otpornici: 0,10 € za jedan otpornik
  • SD kartica: oko 8 €

Adapter za napajanje za Raspberry Pi isključen je u cijenu, budući da je ovaj adapter prilično uobičajen.

Opći raspon cijena: oko 70 €, ako uključite Raspberry Pi i kućište za projekt.

Za izradu kućišta koristio sam lagano tanko drvo. Reciklirao sam ovo drvo iz namještaja. Materijal za kućište je na vama.

Korak 1: Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu

Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu
Korak 1: Instaliranje RPi OS -a, konfiguriranje SSH -a i pristupa internetu

Korak 1.1: Instaliranje slike

Preuzmite sliku sa službene stranice Raspberry Pi. Nije važno koju sliku instalirate. Za ovaj projekt nije potreban GUI, jer ćemo se povezivati samo putem SSH -a.

Zapišite sliku na (praznu) SD karticu (Sve datoteke na kartici će biti izbrisane).

Za pisanje svega na SD karticu upotrijebit ćemo alat pod nazivom 'Rufus'. Nakon preuzimanja slike otvorite Rufus i odaberite datoteku slike. Odaberite ciljni pogon i upišite sliku na pogon. Ovo može potrajati.

> Rufus

Korak 1.2: Instaliranje SSH -a

Sljedeći korak je stvaranje veze sa SD karticom. Da bismo to učinili, moramo omogućiti SSH.

Da biste to učinili bez upotrebe monitora, otvorite istraživač datoteka i otvorite particiju za pokretanje SD kartice. Napravite praznu datoteku pod nazivom "ssh", bez nastavka datoteke.

Također otvorite "cmdline.txt"

Dodajte "169.254.10.1" na kraj datoteke i spremite je.

Demontirajte SD karticu i umetnite je u Raspberry Pi.

Sada možemo spojiti Raspberry Pi na izvor napajanja i pokrenuti se i povezati pomoću SSH -a.

Za povezivanje pomoću SSH -a koristimo program "Putty". Prije toga povežite svoj RPi i PC pomoću ehternet kabela. Otvorite Putty i idite na karticu SSH i popunite ovaj IP: 169.254.10.1. Pritisnite 'poveži se' i bit ćete povezani.

> Git

Zadana prijava koju koristi Raspberry Pi je 'pi' kao korisničko ime i 'malina' za lozinku.

Korak 1.3: Bežična veza

Vaš Raspberry Pi je sada uključen.

Također se želimo spojiti na RPi putem Wi -Fi -ja, pa nam na taj način više ne treba Ethernet kabel.

Izvršite sledeći red:

'sudo nano /etc/wpa_supplicant/wpa_supplicant.conf'

Ovo će otvoriti "nano" uređivač teksta s povišenim pravima.

Dodajte sljedeće redove u datoteku:

mreža = {

ssid = "SSID"

psk = "Lozinka"

}

Zamijenite "SSID" sa SSID vaše WiFi mreže

Zamijenite "Lozinku" svojom lozinkom.

Zatim pritisnite Ctrl+X i odaberite opciju 'da'. Datoteka će sada biti spremljena.

Sada moramo ponovo pokrenuti mrežni servis

Izvršite sledeće komande:

  • 'sudo -i'
  • 'sudo systemctl restart networking'

Svoju internetsku vezu možete testirati pomoću naredbe wget.

Primjer: 'wget google.com'

> Wget naredba

Korak 2: Korak 2: Instaliranje softvera na RPi

Za ovaj projekt moramo instalirati nekoliko biblioteka.

  • Mariadb: MySQL baza podataka (sudo apt-get install mariadb-server)
  • Biblioteka Adafruit za senzor boje: Mjerenje boja (pip3 instalirajte adafruit-circuitpython-tcs34725)
  • PHPmyAdmin: ('sudo apt install phpmyadmin', odaberite apache web server)

Takođe instalirajte sledeće pip biblioteke:

  • flask_socketio
  • boca
  • flask_cors
  • daska
  • busio
  • netifaces

Korak 3: Korak 3: Povezivanje sa MySQL bazom podataka, kreiranje baze podataka

Korak 3: Povezivanje na MySQL bazu podataka, kreiranje baze podataka
Korak 3: Povezivanje na MySQL bazu podataka, kreiranje baze podataka
Korak 3: Povezivanje na MySQL bazu podataka, kreiranje baze podataka
Korak 3: Povezivanje na MySQL bazu podataka, kreiranje baze podataka
Korak 3: Povezivanje na MySQL bazu podataka, kreiranje baze podataka
Korak 3: Povezivanje na MySQL bazu podataka, kreiranje baze podataka

Sljedeći korak je povezivanje s MySQL bazom podataka pomoću MySQL radnog stola.

> IP a

Izvršite naredbu 'ip a', kao što je prikazano na gornjoj slici (kliknite vezu)

U većini situacija bit će prikazana 3 unosa. Treba nam unos 'wlan0'. Kopirajte IP pored "inet" ili u ovom primjeru "192.168.1.44"

. >> Kreirajte novu vezu

Kao što je prikazano na gornjoj slici, stvorite novu vezu sa sljedećim parametrima (Slika ispod za parametre)

> Parametri veze

Dvaput kliknite na novostvorenu vezu za povezivanje.

Ako se pojavi upit, kliknite 'Da'.

Ovo je još uvijek prazna baza podataka, pa dodajmo neke tablice.

Prvo stvorite shemu, da biste to učinili, s lijeve strane kliknite desnim tasterom miša i odaberite "kreiraj shemu".

Dajte imenu sheme i potvrdite.

Sada moramo dodati tablice. Proširite shemu i 'desni klik', 'tablice'.

Kreirajte sljedeće sheme:

> Tabela 1: RALboje

> Tabela 2: Tipovi senzora

> Tabela 3: Mjerenja (Na slici se koristi 'metingen', holandski za mjerenja)

> Tabela 4: Podaci_ veb lokacije || Tabela 4 na dnu

MySQL je relacijski sistem baze podataka, što znači da možemo stvoriti odnose između tablica.

Prva relacija koju moramo stvoriti je između 'sensor_type' i 'mjerenja'.

Kao što je prikazano na slici, povežite dva ključa.

> Uredite tablicu i ključeve veza

Ne zaboravite spremiti promjene klikom na 'Primijeni' u donjem kutu.

Također uredite tablicu 'website_data' i povežite 'MetingID'.

Sada smo završili s stvaranjem tablica i stvaranjem odnosa.

Dodavanje podataka:

Tablica RALcolors je fiksna tablica u kojoj se vrijednosti nikada neće promijeniti. Ove vrednosti možemo dodati

veoma lako.

> Preuzmite Excel datoteku

Preuzmite Excel datoteku iznad i odaberite sve podatke i 'kopirajte'. Uradite kao na slici

> Prikaži tabelu

'desnim klikom' na tablici i odaberite 'Zalijepi retke'. 'kliknite' 'primijeni' 'u donjem kutu za dodavanje podataka.

Sada su sve RAL boje spremljene u bazu podataka.

Sada samo moramo dodati sensor_type u bazu podataka.

> Podaci senzortipa

Napomena: Opis senzora je na 'holandskom'

Korak 4: Korak 4: Filezilla

Korak 4: Filezilla
Korak 4: Filezilla

Za jednostavno povezivanje s Raspberry Pi i prijenos datoteka možemo koristiti Filezilla.

> Preuzmite Filezilla

Umetnite detalje povezivanja i povežite se. Na desnoj strani sada možete prenijeti datoteke povlačenjem.

> Github izvor

Preuzmite datoteke iz gornjeg izvora github -a.

Korak 5: Korak 5: Kreiranje web stranice

Korak 5: Kreiranje web stranice
Korak 5: Kreiranje web stranice
Korak 5: Kreiranje web stranice
Korak 5: Kreiranje web stranice

Za hosting web stranice koristimo PHPmyAdmin i Apache2.

Web server na Raspberry Pi -u koristi direktorij '/var/www/html' kao root.

Ako svoje datoteke smjestite tamo, bit će hostirane na IP -u Raspberry Pi. (IP = vidi 'ip a')

Možete preuzeti potrebne datoteke iz mog github repo -a (prethodni korak)

U '/var/www/html/' zalijepite sve datoteke iz mape 'Frontend'.

>/var/www/html/

Korak 6: Korak 6: Kreiranje pozadine (Flask)

Pozadina web stranice je zasnovana na Flasku.

Sve datoteke možete pronaći na github repo -u.

Kopirajte sve datoteke u bilo koji direktorij na Raspberry Pi.

Na primjer '/home/pi/colorpicker.

Da biste kreirali direktorij, idite do odredišnog direktorija pomoću 'cd', a zatim izvedite 'mkdir'.

To je sve za sada. Kôd će biti objašnjen u sljedećim koracima.

Korak 7: Korak 7: Hardver

> Preuzmi shemu

Kreirajte shemu kao što je prikazano u gornjem dokumentu.

NAPOMENA: Dodajte i jednu bijelu LED sa jednim otpornikom (220 ili 330 Ohma).

Objašnjenje hardvera

HC04

HC04 senzor emitira valove, koji se reflektiraju i senzor ih ponovo prima.

Izračunavanjem vremenske delte između emitovanja i prijema, možemo izračunati udaljenost.

Udaljenost = ((Timestamp_recieve - Timestamp_emit) / brzina zvuka) / 2

Dijelimo na dva jer se val reflektira, što znači da putuje dva puta.

LCD

Koristimo LCD ekran za prikaz RGB -a i HEX -a, kao i IP -a pri pokretanju programa.

Za ovaj LCD, kupio sam I2C modul. Sada nam trebaju samo 4 žice. SDA, SCL, GND, VCC

Da bih koristio ovaj LCD, napisao sam Python klasu, kako bih ga olakšao.

TCS34725

Ovaj senzor vam omogućava mjerenje boja. Za mjerenje RGB vrijednosti koristimo biblioteku.

Korak 8: Korak 8: Objašnjenje koda

Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda
Korak 8: Objašnjenje koda

Frontend

Frontend se sastoji od tri glavna dijela.

Prvo su html datoteke koje grade strukturu naše web stranice, ali ne sadrže ili imaju minimalni izgled.

Drugo, imamo css datoteke ili datoteke stilova koje stiliziraju i postavljaju našu web stranicu.

Ovo dvoje je prilično lako za čitanje i razumijevanje, pa ih zato neću objašnjavati.

Na kraju imamo Javascript sa dvije biblioteke.

Dvije korištene biblioteke su SocketIO i URLSearchParams.

SocketIO vam omogućuje slanje poruka sa pozadine na sučelje i obrnuto.

Poruke se mogu slati jednom klijentu, ali i više klijenata (emitiranje)

> Socket IO Javascript

> Socket IO Python

Na gornjim slikama možete vidjeti jednu od veza utičnice napravljenu u ovom projektu.

Naredba za slanje poruka je 'emitovanje', prijem se vrši pomoću 'uključeno'.

URLSearchParms vam omogućuje da lako dobijete vrijednosti iz niza upita.

Primjer nizova upita: example.com/index.html?id=1

URLSearchParams će vam vratiti: {'id' = '1'}

> Primjer URLSearchParams

Pozadina

Pozadina je u potpunosti napisana na Pythonu, s hrpom biblioteka.

Prva biblioteka koju uvozimo je 'Flask'. Ova biblioteka je potrebna za stvaranje API -ja, za izvršavanje svih CRUD radnji za MySQL bazu podataka. CRUD označava Create Read Update Update Delete.

> Boca

Gornja slika prikazuje nekoliko "ruta" Flaska. Surfanjem do rute, automatski ćete izvršiti 'GET' metodu, kôd će se izvršiti i dobit ćete vrijednost iz metode povratka. Postoje i druge metode, poput 'POST' i 'DELETE'. Za testiranje takvih metoda trebat će vam program poput Poštara.

Sljedeća biblioteka za uvoz je SocketIO, koju sam već objasnio u prednjem dijelu.

Sledeći je GPIO.

To vam omogućuje kontrolu GPIO pinova Rapsberry Pi.

Najvažnije komande su:

  • GPIO.setmode (GPIO. BCM) Odaberite konfiguraciju pinova.
  • GPIO.output (, GPIO. LOW ili GPIO. HIGH) Upišite nisko ili visoko na pin.
  • GPIO.setup (,) Definirajte PIN kao ulazni ili izlazni, ili padajući ili povučeni

Slijedi nam threading.

Jedine naredbe koje koristimo su:

  • Nit (cilj =)
  • .start ()

Koristeći niti, možemo pokrenuti više instanci koda istovremeno. Na ovaj način možemo mjeriti udaljenost i istovremeno slušati pristigle poruke sa utičnice.

Prva naredba Thread (target =) će stvoriti Thread klasu, koja će nakon početka korištenja 'start ()' pokrenuti funkciju u ključnoj riječi 'target', koja je dana pri kreiranju klase.

Zatim imamo biblioteku senzora boja, koja je prilično jasna. Neću objašnjavati ovu biblioteku, jer su metode vrlo jasne i objašnjene u kodu.

Na kraju imamo mrežne interfejse. To nam omogućuje da dohvatimo IP adresu koju koristimo za bežičnu i žičanu vezu.

Na kraju sam i sam napravio neke časove za senzor udaljenosti, LED i LCD.

Neću objašnjavati kako to funkcionira.

Korak 9: Korak 9: Kreiranje slučaja

Korak 9: Kreiranje slučaja
Korak 9: Kreiranje slučaja
Korak 9: Kreiranje slučaja
Korak 9: Kreiranje slučaja
Korak 9: Kreiranje slučaja
Korak 9: Kreiranje slučaja

Za ovaj projekt stvorio sam drvenu kutiju.

Drvo je lagano, tanko i ne košta mnogo.

Kao dimenzije koje sam koristio:

  • Visina: 5 cm
  • Širina: 10,5 cm
  • Dužina: 12,5 cm

Za senzore morate dodati 2 rupe i postaviti ih jednu pored druge.

Nakon stvaranja kućišta, instalirajte senzore, LED i LCD.

Korak 10: Završni koraci

Sve je u osnovi urađeno.

Sada se samo moramo pobrinuti da se naš kôd pokrene, onog trenutka kada uključimo izvor napajanja.

Postoji mnogo metoda za to.

> Primjeri

Koristit ćemo prvu metodu:

Izvršite ovu liniju: 'sudo nano /etc/rc.local'

Dodajte svoju naredbu za pokretanje koda: 'sudo python3'

Sačuvajte datoteku pomoću Ctrl-X.

Ako imate problema s uređivanjem. Ponovite ovaj korak, ali prvo izvedite 'sudo -i'.

Preporučuje se: