INHOUDSOPGAWE:

ColorPicker: 10 stappe
ColorPicker: 10 stappe

Video: ColorPicker: 10 stappe

Video: ColorPicker: 10 stappe
Video: ТАКОГО ЕЩЕ НИКТО НЕ ВИДЕЛ! Полезные советы и хитрости мастеров на все случаи жизни! 2024, Oktober
Anonim
ColorPicker
ColorPicker

Die doel van hierdie projek is om kleure te meet en na ander kleursisteme te vertaal. Met slegs die RGB -waardes wat deur die sensor gegee word, kan u vertaal na HSL, CYMK, HEX en ook die naaste RAL -kode (standaard wat vir verf gebruik word). Hierdie projek vereis basiese kennis van Python, MySQL, Linux en Javascript.

As u ook die Flask -raamwerk en SocketIO ken, behoort die kode vir hierdie projek vir u maklik te wees.

Hierdie projek kan gebruik word deur skilders, interieurontwerpers of net deur almal wat kleure moet meet.

Hierdie projek is nie so duur nie, en kos 'n geskatte _ euro, aflewering is nie ingesluit nie.

Voorrade

Ons kan hierdie afdeling in twee dele verdeel:

  • Hardeware
  • Sagteware

Hardeware

Ons gebruik die volgende komponente

  • HC04: Afstandsensor, hoe ver meet ons van die voorwerp
  • LCD -skerm 2x16
  • LCD I2C -module (HW061)
  • TCS34725 Kleursensormodule (Adafruit)
  • Wit LED
  • Raspberry Pi 3 (Enige Raspberry Pi behoort te werk)
  • 5x 1k Ohm weerstand
  • 1x 220 of 330 Ohm weerstand
  • SD -kaart 16 GB (14,4 GB)

Sagteware

  • Python IDE, soos Visual Code of Pycharm (Pycharm word hier gebruik)
  • MySQL werkbank
  • Putty (Putty aflaai)
  • Rufus of enige ander SD -kaartskrywer (laai Rufus af)

Pryse

Hierdie projek is redelik goedkoop as u reeds 'n Rapsberry Pi het.

  • HC04: vanaf € 2,5 euro (China) en tot € 6 vir meer plaaslike winkels.
  • LCD: ongeveer 6-8 euro.
  • I2C -module: so goedkoop as € 1 (China), maar tot € 4 vir meer plaaslike winkels.
  • TCS34725: ongeveer € 9-12 euro. Die duurste deel (uitgesluit RPi)
  • Wit led: grootmaat gekoop, 20 LED's so laag as € 1
  • Framboos Pi: Afhangend van watter weergawe, ongeveer € 40 euro
  • Weerstands: € 0,10 vir een weerstand
  • SD -kaart: ongeveer € 8

Die voedingsadapter vir die Raspberry Pi word nie by die prys ingesluit nie, aangesien hierdie adapter baie gereeld voorkom.

Algemene prysklas: ongeveer € 70, as u die Raspberry Pi en die omslag vir die projek insluit.

Om die kas te bou, het ek ligte dun hout gebruik. Ek het hierdie hout uit meubels herwin. Die materiaal vir die saak is aan u.

Stap 1: Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang

Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang
Stap 1: Installeer RPi OS, konfigureer SSH en internettoegang

Stap 1.1: Die installering van die prent

Laai die prent af van die amptelike webwerf van die Raspberry Pi. Dit maak nie regtig saak watter prent u installeer nie. Vir hierdie projek is 'n GUI nie nodig nie, aangesien ons slegs met SSH sal skakel.

Skryf die prent op die (leë) SD -kaart (alle lêers op die kaart sal uitgevee word).

Om alles op die SD -kaart te skryf, gebruik ons 'n instrument genaamd 'Rufus'. Nadat u die prent afgelaai het, maak Rufus oop en kies die prentlêer. Kies die doelskyf en skryf die prent op die skyf neer. Dit kan 'n rukkie neem.

> Rufus

Stap 1.2: Installeer SSH

Die volgende stap is om 'n verbinding met die SD -kaart te skep. Om dit te kan doen, moet ons SSH aktiveer.

Om dit te doen sonder om 'n monitor te gebruik, maak u File Explorer oop en maak die opstartpartisie van die SD -kaart oop. Skep 'n leë lêer genaamd "ssh", sonder lêeruitbreiding.

Maak ook "cmdline.txt" oop

Voeg "169.254.10.1" aan die einde van die lêer by en stoor dit.

Ontkoppel die SD -kaart en plaas dit in die Raspberry Pi.

Nou kan ons die Raspberry Pi aan 'n kragbron koppel en met SSH opstart en verbind.

Om verbinding te maak met SSH, gebruik ons die program "Putty". Koppel u RPi en rekenaar met 'n ehternet -kabel voordat u dit doen. Maak Putty oop en gaan na die SSH -oortjie en vul hierdie IP in: 169.254.10.1. Klik op 'verbind' en u sal verbind wees.

> stopverf

Die standaard aanmelding wat deur die Raspberry Pi gebruik word, is 'pi' as gebruikersnaam en 'framboos' vir die wagwoord.

Stap 1.3: Draadlose verbinding

U Raspberry Pi is nou aangeskakel.

Ons wil ook via Wifi aan die RPi koppel, sodat ons nie meer 'n ethernetkabel nodig het nie.

Voer die volgende reël uit:

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

Dit sal die 'nano' -teksredakteur met verhoogde regte oopmaak.

Voeg die volgende reëls in die lêer by:

netwerk = {

ssid = "SSID"

psk = "Wagwoord"

}

Vervang "SSID" deur die SSID van u Wifi -netwerk

Vervang "Wagwoord" met u wagwoord.

Doen dan Ctrl+X en kies die 'ja' -opsie. Die lêer sal nou gestoor word.

Nou moet ons die netwerkdiens weer begin

Voer die volgende opdragte uit:

  • 'sudo -i'
  • 'sudo systemctl herbegin netwerk'

U kan u internetverbinding toets met die wget -opdrag.

Voorbeeld: 'wget google.com'

> Wget opdrag

Stap 2: Stap 2: Installeer sagteware op die RPi

Vir hierdie projek moet ons 'n paar biblioteke installeer.

  • Mariadb: MySQL-databasis (sudo apt-get install mariadb-server)
  • Adafruit-biblioteek vir die kleursensor: Kleure meet (pip3 installeer adafruit-circuitpython-tcs34725)
  • PHPmyAdmin: ('sudo apt install phpmyadmin', kies apache webserver)

Installeer ook die volgende pip -biblioteke:

  • flask_socketio
  • fles
  • flask_cors
  • bord
  • busio
  • netfaces

Stap 3: Stap 3: Koppel aan die MySQL -databasis, skep databasis

Stap 3: Koppel aan die MySQL -databasis, skep databasis
Stap 3: Koppel aan die MySQL -databasis, skep databasis
Stap 3: Koppel aan die MySQL -databasis, skep databasis
Stap 3: Koppel aan die MySQL -databasis, skep databasis
Stap 3: Koppel aan die MySQL -databasis, skep databasis
Stap 3: Koppel aan die MySQL -databasis, skep databasis

Die volgende stap is om aan te sluit op die MySQL -databasis met behulp van die MySQL -werkbank.

> IP a

Voer die opdrag 'ip a' uit, soos in die prent hierbo getoon (klik op die skakel)

In die meeste situasies sal daar 3 inskrywings verskyn. Ons het die 'wlan0' -inskrywing nodig. Kopieer die IP langs 'inet', of in hierdie voorbeeld '192.168.1.44'

. >> Skep nuwe verbinding

Soos in die prent hierbo getoon, skep 'n nuwe verbinding met die volgende parameters (prent hieronder vir params)

> Verbindingsparameters

Dubbelklik op die nuutgeskepte verbinding om aan te sluit.

Klik op 'Ja' as 'n boodskap verskyn.

Dit is nog steeds 'n leë databasis, so laat ons 'n paar tabelle byvoeg.

Maak eers 'n skema om dit te doen, met die rechtermuisknop aan die linkerkant en kies 'skep skema'.

Gee die skema 'n naam en bevestig.

Nou moet ons tabelle byvoeg. Brei die skema uit en 'regs-klik', 'tabelle'.

Skep die volgende skemas:

> Tabel 1: RALkleure

> Tabel 2: Sensortipes

> Tabel 3: Metings (Op die foto word 'metingen' gebruik, Nederlands vir metings)

> Tabel 4: Webwerf_data || Tabel 4 onder

MySQL is 'n verhoudingsdatabasisstelsel, wat beteken dat ons verhoudings tussen die tabelle kan skep.

Die eerste verhouding wat ons moet skep, is tussen 'sensor_type' en 'metings'.

Soos in die prentjie getoon, koppel die twee sleutels.

> Wysig 'n tabel en skakel sleutels

Moenie vergeet om die veranderinge op te slaan deur op 'Pas' in die onderste hoek te klik nie.

Wysig ook die 'website_data' -tabel en skakel' MetingID '.

Nou is ons klaar met die skep van die tabelle en die skep van die verhoudings.

Voeg data by:

Die RALcolors -tabel is 'n vaste tabel, waar die waardes nooit sal verander nie. Ons kan hierdie waardes byvoeg

baie maklik.

> Laai Excel -lêer af

Laai die Excel -lêer hierbo af en kies alle data en 'kopieer'. Doen soos in die prentjie

> Wys tafel

Klik met die rechtermuisknop op die tabel en kies 'Plak rye'. 'klik' '' pas toe 'in die onderste hoek om die data by te voeg.

Nou word alle RALkleure in die databasis gestoor.

Ons hoef nou net die sensor_type by die databasis te voeg.

> Sensortipe data

Opmerking: die beskrywing van die sensor is in 'Nederlands'

Stap 4: Stap 4: Filezilla

Stap 4: Filezilla
Stap 4: Filezilla

Om maklik aan te sluit op die Raspberry Pi en lêers oor te dra, kan ons Filezilla gebruik.

> Laai Filezilla af

Lê die verbindingsbesonderhede in en maak aan. Aan die regterkant kan u nou lêers oordra deur dit in te sleep.

> Github -bron

Laai die lêers af vanaf die github -bron hierbo.

Stap 5: Stap 5: Die skep van die webwerf

Stap 5: Skep die webwerf
Stap 5: Skep die webwerf
Stap 5: Skep die webwerf
Stap 5: Skep die webwerf

Vir die aanbieding van die webwerf gebruik ons PHPmyAdmin en Apache2.

Die webbediener op die Raspberry Pi gebruik die '/var/www/html' -gids as wortel.

As u u lêers daar plaas, word dit op die IP van die Raspberry Pi gehuisves. (IP = sien 'ip a')

U kan die vereiste lêers aflaai van my github repo (vorige stap)

Plak alle lêers uit die 'Frontend' -lêergids in die'/var/www/html/'.

>/var/www/html/

Stap 6: Stap 6: Skep die agterkant (fles)

Die backend van die webwerf is gebaseer op Flask.

Alle lêers kan gevind word by die github repo.

Kopieer alle lêers na enige gids op die Raspberry Pi.

Byvoorbeeld '/home/pi/colorpicker.

Om 'n gids te skep, navigeer na die doelmap met behulp van 'cd' en voer dan 'mkdir' uit.

Dit is al vir nou. Die kode sal in die volgende stappe verduidelik word.

Stap 7: Stap 7: Hardeware

> Aflaai skema

Skep die skema soos aangedui in die dokument hierbo.

LET WEL: Voeg ook 'n wit LED by, met een weerstand (220 of 330 Ohm).

Verduidelik die hardeware

HC04

Die HC04 -sensor straal golwe uit, wat weerkaats en weer deur die sensor ontvang word.

Deur die tyddelta tussen uitstoot en ontvangs te bereken, kan ons die afstand bereken.

Afstand = ((Tydstempel_ontvang - Tydstempel_emit) / klanksnelheid) / 2

Ons deel deur twee omdat die golf weerkaats, wat beteken dat dit die afstand twee keer aflê.

LCD

Ons gebruik 'n LCD -skerm om die RGB en HEX te wys, sowel as die IP wanneer die program begin.

Vir hierdie LCD het ek 'n I2C -module gekoop. Ons benodig nou net 4 drade. SDA, SCL, GND, VCC

Om hierdie LCD te gebruik, het ek 'n Python -klas geskryf om dit makliker te maak om te gebruik.

TCS34725

Met hierdie sensor kan u kleure meet. Ons gebruik 'n biblioteek om die RGB -waarde te meet.

Stap 8: Stap 8: Kode verduidelik

Stap 8: Kode verduidelik
Stap 8: Kode verduidelik
Stap 8: Kode verduidelik
Stap 8: Kode verduidelik
Stap 8: Kode verduidelik
Stap 8: Kode verduidelik
Stap 8: Kode verduidelik
Stap 8: Kode verduidelik

Die voorkant

Die frontend bestaan uit drie hoofdele.

Eerstens is die html -lêers wat die struktuur van ons webwerf opbou, maar nie 'n minimale uitleg bevat nie.

Tweedens het ons die css -lêers, of styllêers, wat ons webwerf styl en uitleg.

Die twee is redelik maklik om te lees en te verstaan, en daarom sal ek dit nie verduidelik nie.

Laaste het ons Javascript, met twee biblioteke.

Die twee biblioteke wat gebruik word, is SocketIO en URLSearchParams.

Met SocketIO kan u boodskappe stuur vanaf die agterkant na die voorkant, en omgekeerd.

Die boodskappe kan na een kliënt gestuur word, maar ook aan verskeie kliënte (uitsending)

> Socket IO Javascript

> Socket IO Python

In die foto's hierbo kan u een van die Socket -verbindings in hierdie projek sien.

Die opdrag om boodskappe te stuur is 'emit', die ontvangs word gedoen deur 'aan'.

Met URLSearchParms kan u maklik waardes uit 'n navraagstring kry.

Voorbeeld navraagstring: example.com/index.html?id=1

URLSearchParams gee u terug: {'id' = '1'}

> URLSearchParams Voorbeeld

Die agterkant

Die agterkant is volledig geskryf in Python, met 'n klomp biblioteke.

Die eerste biblioteek wat ons invoer, is 'Flask'. Hierdie biblioteek is nodig om 'n API te skep om alle CRUD -aksies vir die MySQL -databasis uit te voer. CRUD staan vir Create Read Update Delete.

> kolf

Die prent hierbo toon 'n paar flesse 'roetes'. Deur na 'n roete te blaai, doen u outomaties '' GET' -metode, die kode word uitgevoer en u ontvang die waarde van die terugkeermetode. Daar is ook ander metodes, soos 'POST' en 'DELETE'. Om sulke metodes te toets, benodig u 'n program soos Postman.

Die volgende invoerbiblioteek is SocketIO, wat ek reeds in die voorkant -afdeling verduidelik het.

Die volgende is GPIO.

Hiermee kan u die GPIO -penne van die Rapsberry Pi beheer.

Die belangrikste opdragte is:

  • GPIO.setmode (GPIO. BCM) Kies die konfigurasie van die penne.
  • GPIO.output (, GPIO. LOW of GPIO. HIGH) Skryf 'n LAAG of HOOG na 'n pen.
  • GPIO.setup (,) Definieer 'n PIN as invoer of uitset, of aftrek of pullup

Vervolgens het ons threading.

Die enigste opdragte wat ons gebruik, is:

  • Draad (teiken =)
  • .start ()

Deur drade te gebruik, kan ons verskeie kodes op dieselfde tyd uitvoer. Op hierdie manier kan ons afstand meet en terselfdertyd luister na inkomende io -boodskappe.

Die eerste opdrag Thread (target =) sal 'n Thread -klas skep, wat met die gebruik van 'start ()' begin, die funksie sal uitvoer in die sleutelwoord 'target', wat gegee is by die skepping van die klas.

Vervolgens het ons die biblioteek van die kleursensor, wat redelik eenvoudig is. Ek sal hierdie biblioteek nie verduidelik nie, want die metodes is baie duidelik en word in die kode verduidelik.

Laastens het ons netifases. Dit stel ons in staat om die IP -adres wat ons gebruik vir die draadlose en bedrade verbinding op te haal.

Laaste het ek self klasse gemaak vir die afstandsensor, die LED en die LCD.

Ek sal nie verduidelik hoe dit werk nie.

Stap 9: Stap 9: Skep 'n saak

Stap 9: Skep 'n saak
Stap 9: Skep 'n saak
Stap 9: Skep 'n saak
Stap 9: Skep 'n saak
Stap 9: Skep 'n saak
Stap 9: Skep 'n saak

Vir hierdie projek het ek 'n houtkas gemaak.

Die hout is lig, dun en kos nie veel nie.

As afmetings het ek gebruik:

  • Hoogte: 5 cm
  • Breedte: 10,5 cm
  • Lengte: 12,5 cm

Vir die sensors moet u 2 gate byvoeg en langs mekaar plaas.

Nadat u die kas gemaak het, installeer u die sensors, LED en LCD.

Stap 10: Laaste stappe

Alles word basies gedoen.

Nou hoef ons net seker te maak dat ons kode begin, op die oomblik dat ons ons kragbron aansluit.

Daar is baie metodes om dit te doen.

> Voorbeelde

Ons sal die eerste metode gebruik:

Voer hierdie reël uit: 'sudo nano /etc/rc.local'

Voeg u opdrag by om die kode: 'sudo python3' uit te voer

Stoor die lêer met Ctrl-X.

As u probleme ondervind met die redigering. Doen hierdie stap weer, maar voer eers 'sudo -i' uit.

Aanbeveel: