Renk Seçici: 10 Adım
Renk Seçici: 10 Adım

Video: Renk Seçici: 10 Adım

Video: Renk Seçici: 10 Adım
Video: UI - UX Uzmanı Olun - Renkler ve Renk Kullanımı 2025, Ocak
Anonim
Renk seçici
Renk seçici

Bu projenin amacı renkleri ölçmek ve onları diğer renk sistemlerine çevirmektir. Sadece sensör tarafından verilen RGB değerlerini kullanarak HSL, CYMK, HEX ve ayrıca en yakın RAL koduna (boya için kullanılan standart) çevirebilirsiniz. Bu proje temel Python, MySQL, Linux ve Javascript bilgisi gerektirir.

Flask çerçevesine ve SocketIO'ya da aşinaysanız, bu projenin kodunu sizin için anlaması kolay olmalıdır.

Bu proje ressamlar, iç mimarlar veya sadece renkleri ölçmek isteyen herkes tarafından kullanılabilir.

Bu proje o kadar pahalı değil ve tahmini _ avroya mal oluyor, nakliye dahil değil.

Gereçler

Bu bölümü iki kısma ayırabiliriz:

  • Donanım
  • Yazılım

Donanım

Aşağıdaki bileşenleri kullanıyoruz

  • HC04: Mesafe sensörü, nesneden ne kadar uzakta ölçüyoruz
  • LCD ekran 2x16
  • LCD I2C modülü (HW061)
  • TCS34725 Renk sensörü modülü (Adafruit)
  • Beyaz LED
  • Raspberry Pi 3 (Herhangi bir Raspberry Pi çalışmalıdır)
  • 5x 1k Ohm direnç
  • 1x 220 veya 330 Ohm direnç
  • SD kart 16GB (14,4GB)

Yazılım

  • Python IDE, Görsel Kod veya Pycharm gibi (burada kullanılan Pycharm)
  • MySQL Workbench
  • Macun (Putty'yi İndirin)
  • Rufus veya başka bir SD kart yazıcısı (Rufus'u İndirin)

fiyatlandırma

Zaten bir Rapsberry Pi'niz varsa, bu proje oldukça ucuzdur.

  • HC04: Daha fazla yerel mağaza için yaklaşık 2,5 Euro'dan (Çin) ve 6 Euro'ya kadar başlayan fiyatlarla.
  • LCD: Yaklaşık 6-8 Euro.
  • I2C modülü: 1 €'nun (Çin) altında ucuz, ancak daha fazla yerel mağaza için 4 €'ya kadar.
  • TCS34725: Yaklaşık 9-12 Euro. En pahalı kısım (RPi Hariç)
  • Beyaz led: Toplu olarak satın alındı, 20 LED 1 €'dan düşük
  • Raspberry Pi: Hangi versiyona bağlı olarak yaklaşık 40 Euro
  • Dirençler: Bir direnç için 0,10 €
  • SD kart: yaklaşık 8 €

Raspberry Pi için güç adaptörü, bu adaptör oldukça yaygın olduğu için fiyat maliyetine dahil değildir.

Genel fiyat aralığı: Raspberry Pi'yi ve proje için kasayı dahil ederseniz yaklaşık 70 €.

Kasayı inşa etmek için hafif ince ahşap kullandım. Bu ahşabı mobilyalardan geri dönüştürdüm. Davanın malzemesi size kalmış.

1. Adım: 1. Adım: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma

Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
Adım 1: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma

Adım 1.1: Resmi yükleme

Resmi Raspberry Pi'nin resmi sitesinden indirin. Hangi imajı kurduğunuz gerçekten önemli değil. Bu proje için bir GUI gerekli değildir, çünkü yalnızca SSH kullanarak bağlanacağız.

Resmi (boş) SD karta yazın (Karttaki tüm dosyalar silinecektir).

Her şeyi SD karta yazmak için 'Rufus' adlı bir araç kullanacağız. Görüntüyü indirdikten sonra Rufus'u açın ve görüntü dosyasını seçin. Hedef sürücüyü seçin ve görüntüyü sürücüye yazın. Bu biraz zaman alabilir.

> Rufus

Adım 1.2: SSH'yi Yükleme

Bir sonraki adım, SD karta bir bağlantı oluşturmaktır. Bunu yapmak için SSH'yi etkinleştirmemiz gerekiyor.

Bunu bir monitör kullanmadan yapmak için dosya gezgininizi açın ve SD kartın önyükleme bölümünü açın. Dosya uzantısı olmayan "ssh" adlı boş bir dosya oluşturun.

Ayrıca, "cmdline.txt" dosyasını açın

Dosyanın sonuna "169.254.10.1" ekleyin ve kaydedin.

SD kartı çıkarın ve Raspberry Pi'ye takın.

Artık Raspberry Pi'yi bir güç kaynağına bağlayabilir ve SSH kullanarak önyükleme yapabilir ve bağlanabiliriz.

SSH kullanarak bağlanmak için "Putty" programını kullanıyoruz. Bunu yapmadan önce bir ehternet kablosu kullanarak RPi'nizi ve PC'nizi bağlayın. Putty'yi açın ve SSH sekmesine gidin ve bu IP'yi doldurun: 169.254.10.1. 'Bağlan'ı tıklayın ve bağlanacaksınız.

> Macun

Raspberry Pi tarafından kullanılan varsayılan giriş, kullanıcı adı olarak 'pi' ve şifre için 'raspberry'dir.

Adım 1.3: Kablosuz bağlantı

Raspberry Pi'niz şimdi açık.

Ayrıca Wifi kullanarak RPi'ye bağlanmak istiyoruz, bu şekilde artık bir ethernet kablosuna ihtiyacımız yok.

Aşağıdaki satırı yürütün:

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

Bu, yükseltilmiş haklara sahip 'nano' metin düzenleyicisini açacaktır.

Dosyaya aşağıdaki satırları ekleyin:

ağ={

ssid="SSID"

psk="Parola"

}

"SSID"yi Wifi ağınızın SSID'si ile değiştirin

"Şifre" yi şifrenizle değiştirin.

Ardından Ctrl+X yapın ve 'evet' seçeneğini seçin. Dosya şimdi kaydedilecektir.

Şimdi ağ hizmetini yeniden başlatmamız gerekiyor

Aşağıdaki komutları yürütün:

  • 'sudo -i'
  • 'sudo systemctl ağı yeniden başlat'

wget komutunu kullanarak internet bağlantınızı test edebilirsiniz.

Örnek: 'wget google.com'

> Wget komutu

Adım 2: Adım 2: Yazılımı RPi'ye Yükleme

Bu proje için birkaç kütüphane kurmamız gerekiyor.

  • Mariadb: MySQL veritabanı (sudo apt-get install mariadb-server)
  • Renk sensörü için Adafruit kitaplığı: Renklerin ölçülmesi (pip3 install adafruit-circuitpython-tcs34725)
  • PHPmyAdmin: ('sudo apt install phpmyadmin', apache web sunucusunu seçin)

Ayrıca aşağıdaki pip kitaplıklarını da kurun:

  • flask_socketio
  • şişe
  • flask_cors
  • yazı tahtası
  • ağlar

Adım 3: Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma

Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma
Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma
Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma
Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma
Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma
Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma

Sonraki adım, MySQL tezgahını kullanarak MySQL veritabanına bağlanmaktır.

> IP bir

Yukarıdaki resimde gösterildiği gibi 'ip a' komutunu çalıştırın (bağlantıya tıklayın)

Çoğu durumda, 3 giriş gösterilecektir. 'wlan0' girişine ihtiyacımız var. IP'yi 'inet'in yanına kopyalayın veya bu örnekte '192.168.1.44'

.>> Yeni bağlantı oluştur

Yukarıdaki resimde gösterildiği gibi, aşağıdaki parametrelerle yeni bir bağlantı oluşturun (Parametreler için aşağıdaki resim)

> Bağlantı parametreleri

Bağlanmak için yeni oluşturulan bağlantıya çift tıklayın.

Bir istem belirirse, 'Evet'i tıklayın.

Bu hala boş bir veritabanı, bu yüzden bazı tablolar ekleyelim.

Önce bir şema oluşturun, bunu yapmak için sol tarafta 'sağ tıklayın' ve 'şema oluştur' seçeneğini seçin.

Şemaya bir ad verin ve onaylayın.

Şimdi tabloları eklememiz gerekiyor. Şemayı genişletin ve 'sağ tıklayın', 'tablolar'.

Aşağıdaki şemaları oluşturun:

> Tablo 1: RAL renkleri

> Tablo 2: Sensör tipleri

> Tablo 3: Ölçüler (Resimde 'metingen' kullanılmıştır, ölçüler için Hollandaca kullanılmıştır)

> Tablo 4: Website_data || Tablo 4 alt

MySQL ilişkisel bir veritabanı sistemidir, yani tablolar arasında ilişkiler oluşturabiliriz.

Oluşturmamız gereken ilk ilişki 'sensor_type' ve 'measurements' arasındadır.

Resimde gösterildiği gibi, iki anahtarı birbirine bağlayın.

> Tablo ve bağlantı anahtarlarını düzenleyin

Alt köşedeki 'Uygula' düğmesine tıklayarak değişiklikleri kaydetmeyi unutmayın.

Ayrıca 'website_data' tablosunu düzenleyin ve 'MetingID' bağlantısını bağlayın.

Şimdi tabloları oluşturma ve ilişkileri oluşturma ile işimiz bitti.

Veri ekleme:

RALcolors tablosu, değerlerin asla değişmeyeceği sabit bir tablodur. Bu değerleri ekleyebiliriz

çok kolayca.

> Excel dosyasını indirin

Yukarıdaki excel dosyasını indirin ve tüm verileri seçin ve 'kopyala'. Görseldeki gibi yapın

> Tabloyu göster

tabloya 'sağ tıklayın' ve 'Satırları yapıştır'ı seçin. Verileri eklemek için alt köşedeki 'uygula'yı tıklayın.

Artık tüm RAL renkleri veritabanına kaydedilir.

Şimdi sadece sensor_type'ı veritabanına eklememiz gerekiyor.

> Sensör tipi verileri

Not: Sensörün açıklaması 'Hollandaca'

4. Adım: 4. Adım: Filezilla

4. Adım: Filezilla
4. Adım: Filezilla

Raspberry Pi'ye kolayca bağlanmak ve dosyaları aktarmak için Filezilla'yı kullanabiliriz.

> Filezilla'yı İndirin

Bağlantı ayrıntılarını dosyalayın ve bağlanın. Sağ tarafta artık dosyaları sürükleyerek aktarabilirsiniz.

> Github kaynağı

Dosyaları yukarıdaki github kaynağından indirin.

Adım 5: Adım 5: Web Sitesini Oluşturma

Adım 5: Web Sitesini Oluşturma
Adım 5: Web Sitesini Oluşturma
Adım 5: Web Sitesini Oluşturma
Adım 5: Web Sitesini Oluşturma

Web sitesinin barındırılması için PHPmyAdmin ve Apache2 kullanıyoruz.

Raspberry Pi üzerindeki web sunucusu, kök olarak '/var/www/html' dizinini kullanır.

Dosyalarınızı oraya yerleştirirseniz, Raspberry Pi'nin IP'sinde barındırılacaktır. (IP = bkz. 'ip a')

Gerekli dosyaları github depomdan indirebilirsiniz (önceki adım)

'/var/www/html/' klasöründeki tüm dosyaları 'Frontend' klasörüne yapıştırın.

> /var/www/html/

Adım 6: Adım 6: Arka Uç Oluşturma (Flask)

Web sitesi arka ucu Flask'a dayanmaktadır.

Tüm dosyalar github deposunda bulunabilir.

Tüm dosyaları Raspberry Pi'deki herhangi bir dizine kopyalayın.

Örneğin, '/home/pi/colorpicker.

Bir dizin oluşturmak için, 'cd' kullanarak hedef dizine gidin ve ardından 'mkdir' komutunu yürütün.

Şimdilik bu kadar. Kod sonraki adımlarda açıklanacaktır.

Adım 7: Adım 7: Donanım

> İndirme şeması

Yukarıdaki belgede gösterildiği gibi şemayı oluşturun.

NOT: Ayrıca bir dirençle (220 veya 330 Ohm) bir beyaz LED ekleyin.

Donanımı açıklamak

HC04

HC04 sensörü, sensör tarafından yansıtılan ve tekrar alınan dalgalar yayar.

Yayma ve alma arasındaki zaman deltasını hesaplayarak mesafeyi hesaplayabiliriz.

Mesafe = ((Timestamp_recieve - Timestamp_emit) / ses hızı) /2

Dalga yansıdığı için ikiye böleriz, yani mesafeyi iki kez kat eder.

LCD

Program başladığında RGB ve HEX'i ve IP'yi göstermek için bir LCD ekran kullanıyoruz.

Bu LCD için bir I2C modülü satın aldım. Şimdi sadece 4 kabloya ihtiyacımız var. SDA, SCL, GND, VCC

Bu LCD'yi kullanmak için, kullanımını kolaylaştırmak için bir Python sınıfı yazdım.

TCS34725

Bu sensör renkleri ölçmenizi sağlar. RGB değerini ölçmek için bir kütüphane kullanıyoruz.

Adım 8: Adım 8: Kod Açıklaması

Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması
Adım 8: Kod Açıklaması

ön uç

Ön uç üç ana bölümden oluşur.

Birincisi, web sitemizin yapısını oluşturan, ancak düzen içermeyen veya minimal olan html dosyalarıdır.

İkincisi, web sitemizi şekillendiren ve düzenleyen css dosyalarına veya stil dosyalarına sahibiz.

İkisinin okunması ve anlaşılması oldukça kolaydır, bu yüzden onları açıklamayacağım.

Son olarak iki kütüphaneli Javascript'imiz var.

Kullanılan iki kitaplık SocketIO ve URLSearchParams'dır.

SocketIO, arka uçtan ön uca mesaj göndermenize ve bunun tersi de mümkündür.

Mesajlar bir istemciye gönderilebilir, aynı zamanda birden fazla istemciye de gönderilebilir (Yayın)

> Soket IO Javascript

> Soket IO Python

Yukarıdaki resimlerde bu projede yapılan Soket bağlantılarından birini görebilirsiniz.

Mesaj gönderme komutu 'emit', alma 'on' ile yapılır.

URLSearchParms, bir sorgu dizesinden kolayca değerler almanıza olanak tanır.

Örnek sorgu dizesi: example.com/index.html?id=1

URLSearchParams size şunu geri verecektir: {'id'='1'}

> URLSearchParams Örneği

arka uç

Arka uç, bir sürü kitaplık ile tamamen Python'da yazılmıştır.

İçe aktardığımız ilk kitaplık 'Flask'. Bu kitaplık, MySQL veritabanı için tüm CRUD eylemlerini yapmak için bir API oluşturmak için gereklidir. CRUD, Okuma Güncelleme Silme Oluştur anlamına gelir.

> Şişe

Yukarıdaki resim birkaç Flask 'rotasını' göstermektedir. Bir rotada gezinerek otomatik olarak bir 'GET' yöntemi yapacaksınız, kod çalışacak ve dönüş yönteminden değeri alacaksınız. 'POST' ve 'DELETE' gibi başka yöntemler de vardır. Bu tür yöntemleri test etmek için Postman gibi bir programa ihtiyacınız olacak.

Bir sonraki içe aktarma kitaplığı, daha önce ön uç bölümünde açıkladığım SocketIO'dur.

Sıradaki GPIO.

Bu, Rapsberry Pi'nin GPIO pinlerini kontrol etmenizi sağlar.

En önemli komutlar şunlardır:

  • GPIO.setmode(GPIO. BCM) Pinlerin konfigürasyonunu seçin.
  • GPIO.output(, GPIO. LOW veya GPIO. HIGH) Bir pime DÜŞÜK veya YÜKSEK yazın.
  • GPIO.setup(,) Bir PIN'i giriş veya çıkış veya açılan veya açılan olarak tanımlayın

Daha sonra iplik geçirme işlemimiz var.

Kullandığımız tek komutlar:

  • Konu(hedef=)
  • . Başlat()

Konuları kullanarak aynı anda birden fazla kod örneği çalıştırabiliriz. Bu sayede mesafeyi ölçebilir ve aynı zamanda gelen soket io mesajlarını dinleyebiliriz.

İlk komut Thread(target=) bir Thread sınıfı yaratacak, 'start()' kullanılmaya başlandığında, fonksiyonu sınıfın oluşturulmasında verilen 'target' anahtar kelimesinde çalıştıracaktır.

Ardından, oldukça basit olan renk sensörünün kütüphanesine sahibiz. Bu kütüphaneyi açıklamayacağım, çünkü yöntemler çok açık ve kodda açıklanmıştır.

Son olarak netfaces'imiz var. Bu, Kablosuz ve Kablolu bağlantı için kullandığımız IP adresini almamızı sağlar.

Son olarak mesafe sensörü, LED ve LCD için kendim bazı dersler verdim.

Bunların nasıl çalıştığını açıklamayacağım.

Adım 9: Adım 9: Vaka Oluşturma

9. Adım: Bir Vaka Oluşturma
9. Adım: Bir Vaka Oluşturma
9. Adım: Bir Vaka Oluşturma
9. Adım: Bir Vaka Oluşturma
9. Adım: Bir Vaka Oluşturma
9. Adım: Bir Vaka Oluşturma

Bu proje için bir tahta sandık oluşturdum.

Ahşap hafiftir, incedir ve fazla maliyeti yoktur.

Kullandığım boyutlar olarak:

  • Yükseklik: 5 cm
  • Genişlik: 10.5cm
  • uzunluk: 12.5cm

Sensörler için 2 delik eklemeniz ve yan yana yerleştirmeniz gerekir.

Kasayı oluşturduktan sonra sensörleri, LED'i ve LCD'yi takın.

Adım 10: Son Adımlar

Her şey temelde yapılır.

Şimdi sadece, güç kaynağımızı taktığımız anda kodumuzun başladığından emin olmalıyız.

Bunu yapmak için birçok yöntem var.

> Örnekler

İlk yöntemi kullanacağız:

Şu satırı çalıştırın: 'sudo nano /etc/rc.local'

Kodu çalıştırmak için komutunuzu ekleyin: 'sudo python3'

Dosyayı Ctrl-X kullanarak kaydedin.

Düzenlemede sorun yaşıyorsanız. Bu adımı tekrar yapın, ancak önce 'sudo -i'yi yürütün.