İçindekiler:
- Gereçler
- 1. Adım: 1. Adım: RPi OS Kurulumu, SSH ve İnternet Erişimini Yapılandırma
- Adım 2: Adım 2: Yazılımı RPi'ye Yükleme
- Adım 3: Adım 3: MySQL Veritabanına Bağlanma, Veritabanı Oluşturma
- 4. Adım: 4. Adım: Filezilla
- Adım 5: Adım 5: Web Sitesini Oluşturma
- Adım 6: Adım 6: Arka Uç Oluşturma (Flask)
- Adım 7: Adım 7: Donanım
- Adım 8: Adım 8: Kod Açıklaması
- Adım 9: Adım 9: Vaka Oluşturma
- Adım 10: Son Adımlar
Video: Renk Seçici: 10 Adım
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
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.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ı
- iş
- ağlar
Adım 3: 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
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
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ı
ö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
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.