İlan
Hiç kendi Knight Industries Two Bin (KITT) arabanızın olmasını dilediniz - biliyorsunuz, Knight Rider'dan? Bir LED tarayıcı oluşturarak hayalinizi gerçeğe bir adım daha yaklaştırın! Sonuç:
Neye ihtiyacın var
Bu proje için çok fazla parça gerekli değildir ve bunların birçoğuna zaten sahip olabilirsiniz:
- 1 x Arduino UNO veya benzeri
- 1 x Breadboard
- 8 x kırmızı LED
- 8 x 220 ohm direnç
- 1 x 10k ohm potansiyometre
- Erkek erkek telleri bağlamak
Eğer bir Arduino başlangıç kiti Arduino Başlangıç Kitinde Neler Var? [Açıklamalar MakeUseOf]Daha önce MakeUseOf'da Arduino açık kaynaklı donanımını tanıttım, ancak bundan bir şey oluşturmak ve başlamak için sadece gerçek Arduino'dan daha fazlasına ihtiyacınız olacak. Arduino "başlangıç kitleri" ... Daha fazla oku muhtemelen bu parçaların hepsine sahipsin (başlangıç kitiyle ne yapabilirsiniz? Yeni Başlayanlar İçin Yapabileceğiniz Yeni Başlayanlar İçin 5 Benzersiz Arduino Projesi Daha fazla oku ).
Hemen hemen her Arduino çalışacak, sekiz mevcut pimi olması koşuluyla (Daha önce hiç Arduino kullanmadınız mı?
buradan başla Arduino'ya Başlarken: Başlangıç KılavuzuArduino esnek, kullanımı kolay donanım ve yazılıma dayalı açık kaynaklı bir elektronik prototipleme platformudur. Sanatçılar, tasarımcılar, hobiler ve etkileşimli nesneler veya ortamlar oluşturmak isteyen herkes için tasarlanmıştır. Daha fazla oku ). Yapabilirdiniz Shift Kaydı kullanın Arduino Programlama - Shift Kayıtlarıyla Oynama (daha da fazla LED)Bugün size Vardiya Kayıtları hakkında biraz bilgi vermeye çalışacağım. Bunlar Arduino programlamasının oldukça önemli bir parçasıdır, çünkü temel olarak, kullanabileceğiniz çıkışların sayısını ... Daha fazla oku Arduino'nun yeterli pimi olduğundan, bu proje için gerekli olmamasına rağmen, LED'leri kontrol etmek için.Yapı Planı
Bu çok basit bir proje. Çok sayıda kablodan karmaşık görünse de, her bir parça çok basittir. Her Işık Yayan Diyot (LED) kendi Arduino pinine bağlanır. Bu, her LED'in ayrı ayrı açılıp kapatılabileceği anlamına gelir. Arduino analoguna, tarayıcının hızını ayarlamak için kullanılacak pinlerde bir potansiyometre bağlanır.
Devre
Potansiyometrenin dış sol pimini (önden bakacak şekilde, alttaki pimlerle) toprağa bağlayın. Karşı dış pimi + 5v'ye bağlayın. Düzgün çalışmazsa, bu pimleri ters çevirin. Orta pimi 2'de Arduino analoguna bağlayın.
Her LED'in anodunu (uzun bacak) bir ila sekiz arası dijital pimlere bağlayın. Katotları (kısa bacak) Arduino topraklamasına bağlayın.
Kod
Yeni bir çizim oluşturun ve "knightRider" olarak kaydedin. İşte kod:
sabit ledler [] = {1,2,3,4,5,6,7,8}; // Led pimler. const int totalLeds = 8; int zaman = 50; // Varsayılan hız geçersiz kurulum () {// için tüm çıkışları başlat (int i = 0; i <= totalLeds; ++ i) {pinMode (ledler [i], ÇIKIŞ); } } void loop () {for (int i = 0; i 0; --i) {// Sağdan sola tarama süresi = analogOkuma (2); digitalWrite (ledler [i], YÜKSEK); gecikme süresi); digitalWrite (ledler [i - 1], YÜKSEK); gecikme süresi); digitalWrite (ledler [i], DÜŞÜK); } }
Hadi yıkalım. Her LED pimi bir dizide saklanır:
sabit ledler [] = {1,2,3,4,5,6,7,8};
Bir dizi aslında ilgili öğelerin bir koleksiyonudur. Bu elemanlar sabit (“const”) olarak tanımlanır, yani daha sonra değiştirilemezler. Bir sabit kullanmanıza gerek yoktur (“const” u kaldırırsanız kod mükemmel bir şekilde çalışır), ancak önerilir.
Bir dizinin öğelerine köşeli parantez (“[]”) ve dizin adı verilen bir tamsayı kullanılarak erişilebilir. Dizinler sıfırdan başlar, bu nedenle “ledler [2]” dizi - pin 3'teki üçüncü elemanı döndürür. Diziler kodu daha hızlı yazmayı ve okumayı daha kolay hale getirir, bilgisayarın zor işi yapmasını sağlar!
Her pimi çıkış olarak ayarlamak için bir for döngüsü kullanılır:
için (int i = 0; i <= totalLeds; ++ i) {pinMode (ledler [i], ÇIKIŞ); }
Bu kod, programın başlangıcında yalnızca bir kez çalıştırılması gerektiği için “setup ()” işlevinin içindedir. Döngüler için çok faydalıdır. Aynı kodu her seferinde farklı bir değerle tekrar tekrar çalıştırmanıza izin verir. Dizilerle çalışmak için mükemmeldir. Bir tamsayı "i" bildirilir ve yalnızca döngü içindeki kod bu değişkene erişebilir (buna "kapsam" denir). İ'nin değeri sıfırdan başlar ve döngünün her yinelemesi için i bir arttırılır. İ değeri “totalLeds” değişkenine eşit veya daha küçük olduğunda, döngü “kesilir” (durur).
İ değeri “led” dizisine erişmek için kullanılır. Bu döngü dizideki her öğeye erişir ve bunu çıktı olarak yapılandırır. El ile sekiz kez “pinMode (pin, OUTPUT) yazabilirsiniz, ancak üç tane yazabildiğinizde neden sekiz satır yazmalısınız?
Bazı programlama dilleri bir dizide kaç öğe olduğunu söyleyebilse de (genellikle array.length gibi sözdizimi ile), Arduino bunu o kadar basit yapmaz (biraz daha fazla matematik içerir). Dizideki öğelerin sayısı zaten bilindiği için sorun değil.

Ana döngünün içinde (void loop ()) döngüler için iki tane daha vardır. İlk olarak LED'leri 1 - 8 arasında AÇIK ve sonra KAPALI olarak ayarlar. İkinci döngü LED'leri 8 - 1'den önce AÇIK, sonra KAPALI konuma getirir. Mevcut pimin nasıl ayarlandığına ve mevcut pim artı bir pimin de açık olduğuna dikkat edin. Bu, her zaman aynı anda iki LED'in açık olmasını sağlayarak tarayıcının daha gerçekçi görünmesini sağlar.
Her döngünün başlangıcında, potun değeri “time” değişkenine okunur:
zaman = analogOkuma (2);
Bu, her döngü içinde bir kez olmak üzere iki kez yapılır. Bunun sürekli kontrol edilmesi ve güncellenmesi gerekir. Bu döngülerin dışında olsaydı, yine de işe yarayacaktı, ancak küçük bir gecikme olurdu - sadece bir döngü yürütmeyi bitirdikten sonra çalışırdı. Kaplar analog olduğundan, “analogRead (pin)” neden kullanılır. Bu, sıfır (minimum) ile 1023 (maksimum) arasındaki değerleri döndürür. Arduino, bu değerleri daha kullanışlı bir şeye dönüştürebilir, ancak bu kullanım durumu için mükemmeldir.
Değişen LED'ler (veya tarayıcının hızı) arasındaki gecikme milisaniye (1/1000 saniye) olarak ayarlanır, bu nedenle maksimum süre 1 saniyenin biraz üzerindedir.
Gelişmiş Tarayıcı

Artık temelleri bildiğinize göre, daha karmaşık bir şeye bakalım. Bu tarayıcı, LED'leri dışarıdan başlayıp çalışarak çiftler halinde aydınlatacaktır. Daha sonra bunu tersine çevirir ve içeriden dış çiftlere gider. İşte kod:
sabit ledler [] = {1,2,3,4,5,6,7,8}; // Led pimler. const int totalLeds = 8; const int halfLeds = 4; int zaman = 50; // Varsayılan hız geçersiz kurulum () {// için tüm çıkışları başlat (int i = 0; i <= totalLeds; ++ i) {pinMode (ledler [i], ÇIKIŞ); } } void loop () {for (int i = 0; i 0; --i) {// Çiftlerin içine tarama süresi = analogOkuma (2); digitalWrite (ledler [i], YÜKSEK); digitalWrite (ledler [(totalLeds - i) - 1], YÜKSEK); gecikme süresi); digitalWrite (ledler [i], DÜŞÜK); digitalWrite (ledler [(totalLeds - i) - 1], DÜŞÜK); gecikme süresi); } }
Bu kod biraz daha karmaşıktır. Her iki devrenin de sıfırdan “halfLeds - 1” e (3) nasıl gittiğine dikkat edin. Bu daha iyi bir tarayıcı yapar. Her iki döngü de 4 - 0 ve 0 - 4 arasında giderse, aynı LED'ler aynı sırayla iki kez yanıp söner - bu çok iyi görünmez.
Artık çalışan bir Knight Rider LED tarayıcıya sahip olmalısınız! Daha fazla veya daha büyük LED'ler kullanmak veya kendi deseninizi uygulamak için bunu değiştirmek kolay olacaktır. Bu devrenin bir Raspberry Pi (Pi'de yeni misiniz? Buradan başlayın Raspberry Pi: Resmi Olmayan Eğitimİster daha fazla bilgi edinmek isteyen mevcut bir Pi sahibi olun, ister bu kredi kartı boyutundaki cihazın potansiyel bir sahibi olun, bu kaçırmak istediğiniz bir rehber değildir. Daha fazla oku ) veya ESP8266 Arduino Katili ile tanışın: ESP8266Size, 10 dolardan daha düşük bir fiyata yerleşik Wi-Fi'ye sahip Arduino uyumlu bir geliştirme kartı olduğunu söylersem ne olur? Peki, var. Daha fazla oku .
KITT kopyasını oluşturuyor musunuz? Knight Rider'ın tüm yorumlarını yorumlarda görmek isterim.
Joe, İngiltere Lincoln Üniversitesi Bilgisayar Bilimi mezunudur. Profesyonel bir yazılım geliştiricisidir ve uçağı uçurmadığı veya müzik yazmadığı zamanlarda, genellikle fotoğraf çekerken veya video üretirken bulunabilir.