İçindekiler:

Arduino/App Kontrollü Masa Lambası: 6 Adım (Resimli)
Arduino/App Kontrollü Masa Lambası: 6 Adım (Resimli)

Video: Arduino/App Kontrollü Masa Lambası: 6 Adım (Resimli)

Video: Arduino/App Kontrollü Masa Lambası: 6 Adım (Resimli)
Video: Adım at para kazan hîlesi ( Arapların taktiği 😅 ) 2024, Kasım
Anonim
Image
Image
Arduino/Uygulama Kontrollü Masa Lambası
Arduino/Uygulama Kontrollü Masa Lambası
Arduino/Uygulama Kontrollü Masa Lambası
Arduino/Uygulama Kontrollü Masa Lambası

Bu proje için elektronik/yazılım hakkında kendime daha fazla şey öğretmemi sağlayacak bir şey istedim, henüz tam olarak içine girmediğim bir şey.. Bunun için bir ışığın iyi bir platform olacağına karar verdim.

Geldiğim tasarım, renk ve parlaklık ayarına sahip bir uplighter içindi. Üründe, sıcaktan soğuğa beyaz renk sıcaklığı ve parlaklığı 'paket' aracılığıyla kontrol edilir, konumu ve yönü bunları bağımsız olarak değiştirir - oldukça benzersiz/eğlenceli bir etkileşim.

resim
resim

Ayrıca, bazı RGB LED'leri kontrol etmek ve bir gün doğumu alarmı ayarlamak için ek işlevler eklemenin yanı sıra bunları ayarlamak için bir Uygulama oluşturdum (kendime meydan okuyabilirim). Gün doğumu alarmı, uyanmanıza yardımcı olmak için parlaklığı 30 dakikanın üzerinde kademeli olarak artırır.

Bu benim ilk Arduino/App projem olduğu için, kodu yapmanın kesinlikle daha iyi yolları olacağını varsayıyorum, bu yüzden bana kolay gelsin! Çalışıyor, bu yüzden mutluyum. İyileştirmeler vb. ile ilgili önerileriniz varsa duymak iyi olur..

Bu proje için tüm dosyalar (arduino/app mucit kodu, uygulama grafikleri vb.) ve Uygulama apk. bu linkte bulabilirsiniz.

Bunu Raspberry Pi ve FULL SPECTRUM LASER yarışmalarına dahil ettim, bu yüzden buna değer olduğunu düşünüyorsanız, bir oy çok takdir edilecektir!

Neye ihtiyacın var….

Elek. Bileşenler:

  • Arduino Mikro
  • 12 Lineer Radyometrik Hall Etkisi Sensörü
  • DC jakı
  • 12V Güç Kaynağı
  • 2x 1W Soğuk Beyaz LED'ler (6000K)
  • 2x 1W Sıcak Beyaz LED'ler (2800K)
  • 4x Adafruit RGB Neopiksel
  • Sparkfun Picobuck 350mA sabit akım sürücüsü
  • HC06 Bluetooth modülü
  • Prototip kurulu
  • Terminal blokları
  • teller

Malzemeler:

  • Kalıp yapım malzemeleri (karton veya silikon vb.)
  • Poliüretan Döküm Reçinesi
  • kontrplak

Sarf malzemeleri:

  • Lehim
  • Sprey boya
  • zımpara kağıdı
  • Karıştırma kapları/karıştırıcılar

Aletler:

  • Havya
  • Tutkal tabancası
  • Pense/tornavida/bıçak vb.
  • Lazer Kesici

Yazılım:

  • Arduino
  • MIT App Inventor (ücretsiz web tabanlı)
  • Uygulama grafikleri oluşturmak için Photoshop veya başka bir şey

Adım 1: Hall Etkisi Sensörleri

Ürün kontrolü/etkileşimi için sadece bir kadran ya da başka bir şey değil, biraz farklı bir şey bulmaya çalışıyordum.

Farklı elektronik bileşenler üzerinde biraz araştırma yaptıktan sonra, lineer radyometrik salon etkisi sensörleri buldum. Bunlar temel olarak çıkışı manyetik alanlardan etkilenen bir sensördür. Genellikle sensör çıkışı, giriş voltajının yarısı kadardır. Ancak yanına bir mıknatıs getirildiğinde, mıknatısın kuzey veya güney kutbuna bağlı olarak çıkış ya giriş voltajına yükselir ya da 0V'a (doyma limitleri) düşer.

Bunu, tek bir salon sensöründe iki farklı ayarı kontrol etmeme izin vermek için kullanabileceğimi fark ettim - 'pak' fikri doğdu. Lazerle kesilmiş diskte bir mıknatıs gizlidir ve sensörlere hangi ucun baktığına bağlı olarak parlaklığı veya renk sıcaklığını kontrol eder. Arduino koduna daha sonra giriyorum, ancak esasen bu sensörleri okuyorum ve çıktının bir 'yüksek tetikleme'nin üzerine çıkıp çıkmadığına veya 'düşük tetiklemenin' altına düşüp düşmediğine bakıyorum. Diski yay etrafında kaydırdıkça tetiklenen, her birine belirli bir renk sıcaklığı ve parlaklık değeri eşlememe izin vermek için birden fazla salon efekti sensörü kullanıyorum.

resim
resim

Adım 2: Elektronik Donanım

Elektronik Donanım
Elektronik Donanım
Elektronik Donanım
Elektronik Donanım
Elektronik Donanım
Elektronik Donanım

Bu projenin ilk adımı elektronik donanımı bağlamaktı. Çok sayıda analog okuma pinine sahip olduğu için bir Arduino Micro kullanmayı seçtim - ayar ayarı için yeterli çözünürlük sağlamak için birden fazla salon efekti sensörü kullanmama izin verdi. 12V DC güç kaynağı, Arduino ve LED sürücüsüne güç sağlamak arasında bölünmüştür.

Kontrol arkı, ışığı kapatmak için kullanılan diğer 1 ile birlikte 11 salon sensörü kullanır. Bunlar A0->A5 ve 4, 6, 8, 9, 10, 12 pinlerine bağlandı. Ortak bir 5v ve toprak rayını/pinini paylaşırlar.

Kullandığım LED'ler 1W ve sabit akım sürücüsü gerektiriyor. Sparkfun PicoBuck, 3 adede kadar çıkış kanalına sabit bir 350mA sağladığı için kullanıldı. 12V besleme, sürücülerin Vin pinlerine bağlanır. Sürücü, çıkışların PWM'sini kontrol etmek için giriş pinlerine sahiptir, bunlar Arduino'nun 3 ve 5 pinlerine bağlanmıştır.

Daha sonra bluetooth modülü bağlandı. Bluetooth Rx-> Arduino Tx, Tx-> Rx ve 5v.ground.

resim
resim

LED'ler ayrı bir panoya monte edildi. Sıcak olanlar gibi iki soğuk beyaz LED de seri olarak bağlanmıştır. Bunlar sürücünün Çıkış 1 ve 2'sine bağlanır. RGB LED'ler Adafruit Neopikselleridir; bunlar tek bir Arduino pininden renk ve parlaklığını ayrı ayrı kontrol edebileceğiniz zincirlenebilir modüllerdir. Bunlar pin 11 ve 5V/toprak pinlerine bağlanır.

3. Adım: Uygulama Mucidi

Uygulama Mucidi
Uygulama Mucidi
Uygulama Mucidi
Uygulama Mucidi
Uygulama Mucidi
Uygulama Mucidi

Uygulamayı oluşturmak için MIT App Inventor kullandım, ücretsiz ve öğrenmesi/kullanımı oldukça kolay. İlk önce Uygulama ekranlarını/grafiklerini oluşturmam gerekiyordu - bu photoshop vb.'de yapılabilir. Ekranları ayrı görüntüler/dosyalar olarak oluşturan tüm bileşenlere sahipseniz, bu App Inventor'da işinizi kolaylaştırır.

App Inventor'ın iki görünümü vardır, ön uç görsel öğeleri için 'Tasarımcı' sekmesi ve kod için 'Bloklar' sekmesi vardır.

'Tasarımcı' sekmesini kullanarak uygulama ekranlarını oluşturdum. Bulduğum bir sorun, bluetooth bileşeninin birden fazla ekranda çalışmamasıdır, bu nedenle 'hoş geldiniz' ekranından sonra diğerlerinin tümü (bağlantı, RGB, renk sıcaklığı, alarm) aynı ekranda oluşturulur - etkin bir şekilde açtığım katmanlar /kapalı.

Kullandığım ana araçlar 'düzen/hizalama' ve 'tuval' içindir. Tuval, resim olarak gösterebileceğiniz dokunmaya duyarlı bir alandır.

Görseller kurulduktan sonra 'Bloklar' sekmesine geçme ve kodu yazma zamanı. Bunu kısaca anlatacağım, ancak dosyamı App Inventor'a aktarırsanız ve etrafınızda bir oyun oynarsanız muhtemelen daha kolay…

Bu ilk bloklar bağlantı ekranları içindir. Uygulamanın Arduinos bluetooth modülüne otomatik olarak bağlanmayı denemesine izin vermek için HC06 adresime bir değişken oluşturup ayarladım. Bağlanırken arka plan görüntüsünü değiştirmek için bir zamanlayıcı kullanıyorum. Bağlantı başarılı olursa, renk sıcaklığı ekranını yükler. Bluetooth otomatik olarak bağlanamazsa, 'cihaza bağlan' düğmesine basmanız gerekir. Bu, telefonunuzun görebileceği tüm bluetooth cihazlarının bir listesini getirecektir. 'bluetoothclient1.connect' komutu, bağlanmak için o listeden seçtiğiniz cihaz adresini kullanır.

resim
resim
resim
resim
resim
resim

Bu bloklar, menü düğmelerinin her birine dokunduğunuzda ne olacağını kontrol eder - RGB, renk sıcaklığı ve alarm arasında geçiş yapın. Dokunuldukça uygulanabilir görsel katmanlar açılır ve kapanır. Yani RGB menü düğmesine dokunduğunuzda, düğmeler tuvalinin arka plan görüntüsünü koyu simgeye çevirir, RGB ekranını açar ve diğerini kapatır.

Güç ve parlaklık kontrolü, RGB ve renk geçici ekranları arasında paylaşılır. Arduino'nun hangi LED'leri kontrol edeceğini bilmesi için hangi ekranın yüklü olduğunu söylemem gerekiyor. (ekran) biçiminde bir metin dizesi? BluetoothClient1. SendText komutu kullanılarak telefonunuz bluetooth tarafından gönderilir.

resim
resim

Bu blok dizeyi (Güç) gönderir mi? güç düğmesine her dokunulduğunda.

resim
resim

Bu bloklar renk sıcaklığı ayarını kontrol eder. Tuvale dokunduğunuzda, 'cool' değişkenini ayarlamak için temas noktanızın Y koordinatı kullanılır. Y değeri tuvalin piksel boyutu tarafından yönlendirilir, bu yüzden benim durumumda 0 ile 450 arasında bir değer. Çarpanı bunu kullanılabilir bir PWM değerine (0-255) dönüştürmek için kullanıyorum. Daha sonra bu değere sahip bir dize ve (Tempvalue)? biçiminde bir tanımlayıcı gönderirim.

resim
resim

Yukarıdakine benzer bloklar ancak parlaklık kontrolü için. Bu sefer X koordinatını ve farklı çarpanları kullanarak 'Parlak' değişkeni 10 ile 100 arasında bir değere ayarlayın.

resim
resim

Bu bloklar RGB kontrolü içindir. Parmağınızın dokunduğu pikselin RGB değerini almak için kullanılabilecek 'GetPixelColor' adlı bir komut var. Bir nedenden dolayı sonunda fazladan bir 255 değeri ile çıktı veriyor, bu yüzden değeri formata sokmak için biraz çalışıyorum (RGBredvalue.greenvalue.bluevalue.)? Yine bu daha sonra Arduino'ya gönderilir, ancak dizide tanımlayıcı olarak RGB bulunur.

resim
resim

Blokların sonraki bölümü alarm ayarları içindir. İlk blok, güneşe dokunduğunuzda/sürüklediğinizde ne olacağını kontrol eder. Yine, 'Geçerli X ve Y'yi al' komutları, parmağınızın bulunduğu yer için bir değer almak ve güneşin yüksekliğine bağlı olarak arka plan görüntüsünü değiştirmek için kullanılır. Güneşin konumu da alarmın etkin veya devre dışı olup olmadığını yönlendirir, bu bluetooth ile gönderilir.

resim
resim
resim
resim

Güneşi hareket ettirmeye dokunduğunuzda veya bitirdiğinizde, bir alarm saati ayarlamanıza izin vermek için zaman seçiciyi açar. Bu sonraki bloğun ana kısmı, alarm ayarına kadar kaç milisaniye kaldığını hesaplamak için mevcut zamanı kullanmaktır. Bu değer daha sonra Arduino'ya gönderilir.

resim
resim
resim
resim

Bir sonraki adımda Arduino'nun dizeleri nasıl okuduğunu ve kullandığını ele alacağım…

Adım 4: Arduino Kodu

Uygulama kodunda olduğu gibi, bunu kısaca ele alacağım….

İlk önce tüm değişkenlerimi ayarlıyorum, sensörleri ve LED'leri doğru pinlere atadım. Hall efekt sensörlerinin çıktısı analogRead işlevi kullanılarak okunacak ve 0 ile 1023 arasında bir değer verilecektir. Daha önce açıklandığı gibi, mıknatıs olmadığında yarı çıktı, yani 500 civarında. pakın sensörün üzerinde olduğunu bildiğinde ayarlayın.

resim
resim

Neopikseller, burada tanımlanan bir kitaplık gerektirir.

resim
resim
resim
resim

Void kurulumu serileri başlatır, Micro için Rx/Tx pinleri (bluetooth) Serial1'i kullanır. Daha sonra pinler giriş veya çıkış olacak ve LED'ler kapalı olacak şekilde ayarlanır.

resim
resim

Şimdi ana döngü…

Bu ilk bölüm, Uygulamadan herhangi bir veri alınıp alınmadığını kontrol ediyor. Serial1.available(), seriyi okuyor ve dizedeki bayt sayısını alıyor. Bu > 0 ise, gelen verileri biliyorum.

Hatırlarsanız, Uygulamadan gönderdiğim tüm dizeler bir soru işareti ile bitiyor…. yani (Bright100)?

Soru işaretine (Bright100) kadar seri verileri okumak ve BTstring değişkenini buna ayarlamak için.readStringUntil işlevini kullanıyorum. Tam komutların alındığından emin olmak için BTstring'in bir ')' ile bitip bitmediğini kontrol ediyorum. Eğer öyleyse, BluetoothProgram döngüsü çağrılır… bu aşağıda açıklanmıştır..

resim
resim

Bu sonraki bit, gün doğumu alarmını kontrol eder. Temel olarak, alarm etkinleştirilmişse ve saat doğruysa, LED'ler sönmeye başlayacaktır. İnsan gözünün ışığı logaritmik olarak algılaması nedeniyle, her türlü LED sönümlemesini doğrusal yerine üstel bir eğri ile yapmak daha iyidir. Dolayısıyla bir denklem PWM değerlerini yönlendiriyor…

resim
resim

Diskin Uygulama kontrolüne müdahale etmesini önlemek için, Uygulamayı kullandığınızda devre dışı bırakılır. Diski yeniden etkinleştirmek için, onu 5 saniye boyunca üründen uzaklaştırmanız gerekir. Bu kod biti önce tüm sensörlerin sabit durum değeri (mıknatıs yok) verip vermediğini kontrol eder ve ardından bir zamanlayıcı başlatır. 5 saniye tamamlandığında BTinControl değişkeni tekrar false olarak ayarlanır.

resim
resim

Şimdi diskin kodu.. Önce sensörlerin okunması gerekiyor.

Işık şu anda kapalıysa, sensörlerden herhangi birinin tetik noktalarının üstünde veya altında olup olmadığını, yani diskin yay üzerine yerleştirilip yerleştirilmediğini kontrol edecektir. Eğer öyleyse, nereye yerleştirdiğiniz önemli değil, beyaz LED'leri son ayarınıza getirecektir.

resim
resim
resim
resim

LED'leri, tetiklediği sensörlerle ilişkili değerleri güncellemek yerine son ayarınızda tutmak için MovedSinceStandby değişkeni false olarak ayarlanır. Bu sonraki kod parçası, temelde diski başlangıç konumundan belirli bir miktarda hareket ettirip ettirmediğinizi kontrol eder….

resim
resim
resim
resim

Diski hareket ettiriyorsanız, parlaklık/renk sıcaklığını güncellemek için 'Ana Program' çağrılır. Bu daha aşağıda açıklanmıştır.

resim
resim

Bu ana döngüdeki son bit, diskin bekleme yuvasına geri yerleştirilip yerleştirilmediğini kontrol eder - sensör 12, bir tetik noktasının üstünde/altında bir değer okur. Eğer öyleyse, LED'i tekrar kapatır..

resim
resim

Bluetooth döngüsü:

Yukarıda açıklandığı gibi, bluetooth üzerinden veri alındığında, dizi okunur. Şimdi bu dizenin ne söylediğini kontrol etmemiz gerekiyor…

Parlaklık, renk sıcaklığı ve RGB dışındaki tüm dizelerle başa çıkmak oldukça kolaydır. BTstring'in Uygulamadan gönderilen metne eşit olup olmadığını kontrol edersiniz.

Hatırlarsanız, Uygulamadaki ekranları her değiştirdiğinizde bir bluetooth komutu gönderir. Burada bunun için soru soruyoruz ve bazı değişkenleri doğru veya yanlış olarak ayarlıyoruz, böylece hangi ekranda olduğunuzu biliyoruz.

Her bölümün sonunda BTinControl değişkenini true olarak ayarladım ve BTstring değerini temizledim.

resim
resim
resim
resim

Uygulamadaki güç düğmesine dokunduğunuzda, LED'ler yukarı veya aşağı sönecektir. Hangi ekranda bulunduğunuz için yukarıda ayarlanan değişkenler, kontrol edilecek ekranın RGB mi yoksa beyaz LED mi olduğuna karar vermek için kullanılır.

resim
resim
resim
resim

Parlaklık, renk sıcaklığı ve RGB için dizeleri biraz farklı bir şekilde okumam gerekiyor. Dizenin sayı kısmı değişeceğinden, dizenin tam dizeyle değil tanımlayıcılardan biriyle başlayıp başlamadığını sorguluyorum, bu yüzden sadece (burada parlak..

Şimdi gerçek parlaklık değerini dizeden ayırmam gerekiyor. Uygulamadan gönderilen dizenin biçimi (Parlak değer) olduğundan, parlaklık değerinin 't' ve ')' arasında olacağını biliyorum. 't'nin konumu sabit kalacak, her zaman dizedeki 7. karakter olacaktır. Ancak parlaklık değeri 10 ile 100 arasında olabileceğinden ')' nin konumu değişecektir. ')' öğesinin nerede olduğunu, hangi karakter olduğunu bulmak için.indexOf komutunu kullanıyorum ve ardından 7. karakter ile ')' karakter konumu arasındaki dizeyi okumak için.substring komutunu kullanabilirim. Bu bana ekrana bağlı olarak RGB veya beyaz LED'leri ayarlamak için kullanabileceğim parlaklık değeri veriyor.

resim
resim

Renk sıcaklığı ayarı yukarıdakine benzer bir işlemdir ancak bu sefer değer 'p' ile ')' arasında olacaktır…

resim
resim

RGB ayarı için dizeden çıkarılacak üç değerimiz var, ancak bu yine benzer bir süreç. Uygulamadan (RGBvalue.value.value) biçiminde dizeler alıyoruz

Bu yüzden kırmızı değerin 'B' ile ilk nokta arasında olacağını biliyorum. Yeşil değer 1./2. tam durak arasındadır ve mavi değer 2. tam durak ile ')' arasındadır.

Değerlere sahip olduğumuzda neopixles yeni renge ayarlanır…

resim
resim

Burada alarmın etkin mi yoksa devre dışı mı olduğunu kontrol ediyoruz. Alarm zamanı değiştirilirse, bundan sonra alarma kadar geçen milisaniye sayısını içeren bir dizi gönderilir. Yine bu değer diziden çıkarılır ve gündoğumunun başlama zamanının gelip gelmediğini kontrol edebilmek için şimdiki zamana (milis) bir değişken ayarlamamız gerekir.

resim
resim

Disk kontrolleri:

Daha önce açıklandığı gibi, disk (mıknatıs) bir yönde yukarıdaysa, hall sensörü çıkışını düşük tetikleyicinin altında ve diğer yönde ise yüksek tetikleyicinin üzerinde çalıştıracaktır.

Bu, aynı yay üzerinde hem parlaklığın hem de renk sıcaklığının kontrol edilmesini sağlar.

Sensör değerleri okunur. Bunlardan herhangi biri düşük tetikleme değerinden küçükse, renk sıcaklığını ayarlıyoruz. Ark alanının altında 11 sensör vardır ve bu sensörler, disk üzerlerinde hareket ettikçe çıkışlar tetik noktasının altına iner. Her sensörün kendisine karşı soğuk ve sıcak LED'leri için bir PWM değeri vardır, sensör 1 %100 sıcak, %0 soğukta başlar ve %0 sıcak, %100 soğukta 11.'ye kadar çalışır.

resim
resim
resim
resim
resim
resim

Parlaklık kontrolü de aynı şekilde yapılır.. Sensör çıkışlarının bu sefer yüksek tetiklemenin üzerinde olup olmadığı kontrol edilir ve her sensöre bir parlaklık ağırlık değeri verilir.

Bu parlaklık ağırlığı daha sonra genel çıktı değerini vermek için renk sıcaklığı değeriyle çarpılır. Herhangi bir renk sıcaklığını herhangi bir parlaklığa ayarlamanıza izin vermek…

resim
resim
resim
resim

Adım 5: Konut

Konut
Konut
Konut
Konut
Konut
Konut
  1. Gövdenin alt kısmı için kartondan bir kalıp yaparak başladım. Kontrol alanı için girintiler oluşturmak için ark şeklinde kesilmiş bir parça kontrplak lazerim vardı ve 'bekleme' yuvası için 5p jeton kullandım. Bunlar, hall efekt sensörleriyle hizalanacak doğru konuma gelmelerine dikkat edilerek karton kalıba yapıştırıldı.
  2. Sonraki, poliüretan reçineyi karıştırmaktı. Kullandığım malzemenin 1:1 oranında basit bir oranı var ve yaklaşık 20 dakika içinde kürleniyor… bu yüzden oldukça hızlı çalışmam gerekiyor!
  3. İlk dökme, kalıbın altını doldurmaktı. Bu setten sonra, yan duvarları dökmeme izin vermek için bir karton iç duvar ekledim.
  4. LED'lerin oturacağı üst bölümü oluşturmak için, bir açıyla plastik boru/bardak kesip yapıştırdım. Ve yine reçine döküldü ve sertleşmesine izin verildi.
  5. Artık yuva tamamen hazırdı, birkaç delik açmam ve ona iyi bir kum vermem gerekiyordu.
  6. Astar uygulandı ve ardından son kat boya ile püskürtüldü.

Adım 6: Montaj/Sonuç

Montaj/Sonuç
Montaj/Sonuç
Montaj/Sonuç
Montaj/Sonuç
Montaj/Sonuç
Montaj/Sonuç
Montaj/Sonuç
Montaj/Sonuç
  1. DC jakı için yuvadan bir yuva kesildi. Daha sonra kriko yapıştırılır.
  2. LED kartı daha sonra teller alt kısma beslenecek şekilde üst kısımda vidalanabilir.
  3. LED'lerden ve DC jakından gelen teller daha sonra doğru terminal bloklarına vidalandı.
  4. Ana kart daha sonra muhafazaya vidalanır
  5. Daha sonra mahfazanın altını örtmek için bir kontrplak parçası vidalanır.
  6. Son şey, mıknatısın kutuplarını doğru 'parlaklık' veya 'renk sıcaklığı' uç kapağı ile yönlendirdiğinizden emin olarak 'paketi' birbirine yapıştırmaktır.

Genel olarak ışık oldukça iyi çalışıyor! Yazılımda düzeltilmesi gereken birkaç hata var ve RGB LED'ler daha parlak olabilir. Ayrıca, renk sıcaklığını otomatik olarak değiştiren, gün boyunca 'soğuk'tan gece 'sıcak'a dönüşen bir ortam ışığı sensörü ekleyebilirim.

Okumak için şerefe!

Önerilen: