İçindekiler:

Algoritma Makinesi: 13 Adım (Resimlerle)
Algoritma Makinesi: 13 Adım (Resimlerle)

Video: Algoritma Makinesi: 13 Adım (Resimlerle)

Video: Algoritma Makinesi: 13 Adım (Resimlerle)
Video: Yazılımcıyım Dediğimde Çevrem vs Aslında Olan 😂 2024, Kasım
Anonim
Image
Image
LED Çubuk: Maskeyi 3D Yazdır
LED Çubuk: Maskeyi 3D Yazdır

15 yıldır üniversite düzeyinde bilgisayar bilimi öğretiyorum ve uzmanlığım daha çok programlama tarafında olmasına rağmen, hala arama ve sıralama için standart algoritmaları ele almak için oldukça fazla zaman harcıyorum. Öğretim açısından temel konu, hesaplama karmaşıklığıdır: belirli bir boyutta girdi verildiğinde, her bir algoritma ne kadar zaman gerektirir? Ancak çok sayıda nüans var. Örneğin, algoritmaların belirli giriş değerlerine bağlı olarak (boyutun aksine) farklı çalışma süreleri var mı? Hangi durumlarda bir sıralama algoritmasını diğerine tercih ederdiniz? Bu konuları özet olarak tartışsak da, farklı algoritmaların çeşitli koşullar altında nasıl çalıştığını görmenin kolay bir yolu olmaması beni her zaman rahatsız etti.

Hedefler

Bu projedeki en önemli amacım, öğrencilerin algoritmaları görselleştirmeleri ve keşfetmeleri için etkileşimli bir ekran oluşturmaktı. Kendimi değer dizileri (tamsayılar) üzerinde çalışan algoritmalarla sınırladım, böylece dizi içeriğini görselleştirmek için adreslenebilir bir RGB LED şeridi kullanabilirim. Dizinin 100 öğesi vardır ve her tam sayı, dizi sıralandığında, kısmen sıralandığında veya rastgele seçildiğinde hemen belli olacak şekilde gökkuşağı düzeninde bir renge eşlenir. Bununla birlikte, değerlere ek olarak, algoritmanın kontrol yönlerini görselleştirmenin bir yolunu istedim - örneğin, dizinin hangi öğelerinin şu anda karşılaştırılmakta veya değiştirilmektedir.

Belirli hedefler şunlardır:

- Çeşitli arama ve sıralama algoritmaları sağlayın

- Dizideki değerleri algoritma ilerlemesini vurgulayacak şekilde görselleştirin

- Algoritma kontrolünü görselleştirin; özellikle, ele alınan unsurlar.

- Kullanıcıların her zaman rastgele değerler üretmek yerine girdi veri modellerini seçmesine izin verin

- Kullanıcıların hızı kontrol etmesine ve algoritmayı duraklatmasına izin verin

- Kullanıcıların en iyi durum, en kötü durum, ortalama durum davranışını zorlamasına izin verin (algoritmaya özel)

- Algoritma ilerledikçe adım sayısını göster

görselleştirme

Fiziksel tasarım açısından bu projenin en ilginç kısmı dizinin görselleştirilmesidir. Verilerin ve kontrolün nasıl gösterileceği ve görüntüleme cihazının kendisinin nasıl oluşturulacağı ile mücadele ettim. Amacım, veri değerlerini renkli daireler ve kontrol noktalarını veri değerlerini işaret eden renkli oklar olarak göstermekti. Bazı deneylerden sonra, her bir veri LED'i üzerinde dairesel bir maske ve her bir kontrol LED'i üzerinde üçgen bir maske bulunan iki paralel 100 RGB LED şeridi (WS2812) içeren bir tasarıma karar verdim. 10 çift daire ve üçgen içeren maskenin 3B modelini yaptım ve ardından toplam 100 daire ve 100 üçgen için bu modüllerden 10'unu 3B yazdırdım. Maskemin boyutu ve aralığı, metre başına 100 LED'li şeritler için tasarlanmıştır. 3B model dosyaları bu açıklamanın ilerleyen kısımlarında verilmektedir.

Elektronik ve muhafaza

Cihazın geri kalanı elektronik açıdan basittir. İki LED şeridine ek olarak, bir dizi anlık düğme, bir döner kodlayıcı (hız kontrolü için) ve 7 segmentli bir ekran (adımları göstermek için) vardır. Bu kadar çok buton ve kontrol varken, çok fazla pin açığa çıkardığı ve oldukça güçlü olduğu için bir ESP32 mikrodenetleyici kullanmayı seçtim. Kablolama stratejisini gözden geçireceğim, ancak oldukça basit. Daha az pin kullanmak istiyorsanız, muhtemelen shift register ile akıllıca bir şey yapabilirsiniz.

Bu aygıtın muhafazasını birçok farklı biçimde oluşturabilirsiniz. Başlangıçta, üstte LED şerit ve ortada bir düğme ızgarası olan büyük bir dikdörtgen pano olarak hayal ettim. Sonunda elde ettiğim form, 1960'ların bir tür uzay çağı teknolojisi görüşünden ilham alıyor. LED şeritleri ile dikey yönde de oluşturabilirsiniz. Veya ayrı bir kontrol paneli ile LED parçasını çok daha büyük yapın - bütün bir duvarı doldurun.

Yazılım

Bu aygıtın kodu GitHub'da ücretsiz olarak mevcuttur ve nasıl çalıştığını ve nasıl yapılandırılacağını belgelemek için elimden gelenin en iyisini yaptım. İhtiyacınız olan tek harici kitaplık, WS2812 şeritlerini sürmek için FastLED'dir.

Gereçler

Elektronik

1 ESP32 geliştirme kartı (ör.

2 WS2812 veya benzeri LED şerit, metre başına yoğunluk 100 LED (ör.

1 Üçgen "başlat" düğmesi (ör.

12 Anlık düğmeler (ör. https://amzn.com/B01N4D4750) -- isterseniz farklı şekiller

1 Paket (20) önceden kablolanmış düğme konektörü (ör.

1 Paket JST konektörü (ör.

1 Döner kodlayıcı (ör.

1 Döner kodlayıcı için düğme (ör.

1 Paket Dupont konektörleri (ör. https://amzn.com/B014YTPFT8) -- ayrıca sıkma aletini almaya değer.

1 Namlu jakı (güç için) (ör.

1 TM1637 7 segmentli sayısal ekran (ör.

Lehimleme ve kablolama dişlisi

3B model dosyaları

Bir çift 10 ışıklı modülün 3B modelini Thingiverse'de bulabilirsiniz:

www.thingiverse.com/thing:4178181

Toplam 10 modül için bu modeli beş kez yazdırmanız gerekecek.

Yazılım

github.com/samguyer/AlgorithmMachine

muhafaza

Ahşap, pleksiglas, paslanmaz çelik cıvata ve vidalar

Difüzyon malzemesi. Benim favorim Lee Filters #216 tam beyaz difüzyon, ancak başka seçenekler de var. Düz beyaz kağıt bile iyi bir iş çıkarır.

Adım 1: Algoritmalar 101

Pek çok insan bilgisayar biliminin esasen programlama çalışması olduğunu düşünüyor. Ancak bu alanın gerçek kalbi ve ruhu algoritmalardır: problemlerin çözümüne yönelik sistematik prosedürlerin ve maliyetlerinin (tipik olarak, ne kadar sürdüğünü) incelenmesi. Alan Turing, Alonzo Church ve Edsger Dijkstra gibi bu alandaki çığır açıcı isimler, var olduklarını bildiğimiz bilgisayarlardan önce bu fikirleri düşünüyorlardı.

Belirli bir sorunu çözmek için bir algoritmanın temel özelliği, ayrıntılı ve kesin olmasıdır, böylece birisi nasıl çalıştığını anlamadan bir çözüm elde etmek için kullanabilir; adımları mekanik bir şekilde takip edin ve doğru cevabı alacaksınız. Bu ayrıntı düzeyine ihtiyaç duyduklarından, bunun bilgisayarları programlamaya nasıl yardımcı olduğunu görebilirsiniz. Bir bilgisayar, bir kişinin yapabildiği gibi, eksik ayrıntıları dolduramaz veya yargıda bulunamaz.

Ne kadar sürer?

Ayrıntılı bir prosedürümüz olduğunda, doğal bir soru, cevabı almanın ne kadar süreceğidir? Sıradan zaman birimlerini kullanamayız, çünkü bu işi kimin yaptığına bağlıdır (bir kişinin bir şeyi ne kadar hızlı hesaplayabileceğini bir süper bilgisayarla karşılaştırın). Ayrıca, ne kadar veriye sahip olduğumuza bağlıdır. Açıkçası, bir milyon telefon numarasından oluşan bir listeyi aramak, yüz kişilik bir listeden daha uzun sürer.

Bir algoritmanın maliyetini tanımlamak için ilk önce prosedürde bir "adım"ı temsil eden bir işlem seçiyoruz - genellikle basit bir şey, örneğin iki sayıyı karşılaştırmak veya eklemek gibi, yapılması sabit bir zaman alır. Ardından, belirli sayıda veri öğesi verildiğinde algoritmanın kaç adım atacağını açıklayan bir formül buluyoruz. Tarihsel nedenlerden dolayı, neredeyse her zaman büyük N ile veri öğelerinin sayısını belirtiriz.

Örneğin, N telefon numarası listesine bakmak N adım alır. Listeye iki kez bakmak 2N adım atıyor. Bunların her ikisine de doğrusal zaman algoritmaları denir - toplam adım sayısı, giriş boyutunun bir katıdır. Diğer algoritmalar ikinci dereceden (N kare zaman) veya kübik (N küp) veya logaritmik (log N) veya bunların bazı kombinasyonlarıdır. En zor hesaplama problemlerinden bazıları üstel zaman algoritmaları (2^N) gerektirir.

Tamam, ne olmuş?

N veri öğelerinin sayısı küçük olduğunda, bunun pek bir önemi yoktur. Örneğin, N=10 için 10N, N kare olarak bu addır. Peki ya N=1000? veya N=1000000? Bir milyon kare oldukça büyük bir sayıdır. Çok hızlı bir bilgisayarda bile, girdi yeterince büyükse ikinci dereceden bir algoritma uzun zaman alabilir. Üstel algoritmalar çok daha zahmetlidir: N=50 için üstel bir algoritmanın tamamlanması, her adımın yalnızca bir nanosaniye (saniyenin 1 milyarda biri) olduğu bir bilgisayarda bile iki hafta sürer. Ah!

Ölçeğin diğer ucunda çok hızlı olan logaritmik zaman algoritmalarımız var. Günlük süresi üstel zamanın tersidir: Girdi boyutu N verildiğinde, adım sayısı 2^T = N formülündeki T üssüdür. Örneğin, girdi boyutumuz bir milyar ise, bir günlük zaman algoritması yalnızca 30 gerektirir. adımlar, 2^30 = 1, 000, 000, 000 olduğundan. Ne kadar tatlı değil mi?!??!

Merak ediyor olabilirsiniz, milyonlarca veya milyarlarca girdi boyutu kimin umurunda? Bir düşünün: Facebook'ta kaç kullanıcı var? Google tarafından kaç web sayfası dizine eklenir? İnsan genomunda kaç baz çifti vardır? Bir hava durumu simülasyonuna kaç ölçüm giriyor?

2. Adım: Algoritmalar

Algoritma Makinesi şu anda aşağıdaki algoritmaları uygular. Bunlardan ikisi arama algoritmaları (listedeki belirli bir değeri bulun), geri kalanı sıralama algoritmalarıdır (değerleri sıralayın).

Doğrusal arama

Değerler listesini baştan başlayarak tek tek arayın. Doğrusal zaman gerektirir.

Ikili arama

Bir listeyi tekrar tekrar ikiye bölerek arayın. Günlük süresi gerektirir, ancak çalışması için listenin sıralanması gerekir.

Kabarcık sıralama

Bir listeyi sıralı olmayan sürekli değiş tokuş eden komşu öğeler olarak sıralayın. İkinci dereceden zaman gerektirir.

Ekleme sıralama

Her öğeyi önceden sıralanmış değerler listesindeki uygun yerine yerleştirerek bir listeyi sıralayın. İkinci dereceden zaman gerektirir.

Hızlı sıralama

Listeyi art arda ikiye bölerek ve ortancadan küçük tüm değerleri ilk yarıya ve ortancadan büyük tüm değerleri ikinci yarıya taşıyarak bir listeyi sıralayın. Pratikte medyanı verimli bir şekilde bulamıyoruz, bu yüzden rastgele bir değer seçiyoruz. Sonuç olarak, bu algoritma en kötü durumda ikinci dereceden olabilir, ancak tipik olarak N * logN süresi gerektirir.

Sıralamayı birleştir

Bir listeyi ikiye bölerek, iki yarıyı ayrı ayrı sıralayarak (birleştirme sıralamasını kullanarak) ve ardından değerleri serpiştirerek birleştirerek sıralayın. Her zaman N * logN zamanı gerektirir.

yığın sıralama

Günlük süresindeki en küçük değeri bulmanızı sağlayan yığın adı verilen bir veri yapısı oluşturarak bir listeyi sıralayın. Her zaman N * logN zamanı gerektirir.

bitonik sıralama

Birleştirilmiş sıralama ve hızlı sıralamaya benzer şekilde, bir listeyi ikiye bölün, yarıları sıralayın ve yeniden birleştirin. Bu algoritma N * logN * logN süresi gerektirir, ancak paralelleştirmenin kolay olması avantajına sahiptir.

Adım 3: LED Çubuk: Maskeyi 3D Bastırın

LED Çubuk: Maskeyi 3D Yazdır
LED Çubuk: Maskeyi 3D Yazdır
LED Çubuk: Maskeyi 3D Yazdır
LED Çubuk: Maskeyi 3D Yazdır

LED çubuğu oluşturmanın ilk adımı, ışıklara şeklini veren maskeyi 3B yazdırmaktır. Her modül dizinin on elemanını, 10 değeri (daireler) ve 10 göstergeyi (üçgenleri) kapsar, bu nedenle toplamda 10 modüle ihtiyacınız olacak. Burada sağladığım STL dosyası modülün iki örneğini içeriyor, bu nedenle beş yazdırma döngüsü yapmanız gerekecek. En iyi 3D yazıcıya sahip değilim, bu yüzden bir dosya ve zımpara kağıdı kullanarak üzerlerinde manuel temizleme yapmak zorunda kaldım. En önemli şey dairesel ve üçgen deliklerin temiz olmasıdır.

Fotoğraflarda test kurulumumu göreceksiniz: İki LED şeridini bantladım ve mikro denetleyicili bir devre tahtasına bağladım. Bu adım gerekli değil, ancak kasayı monte etmeye başlamadan önce nasıl görüneceğini görmek istedim. Maske modüllerini iki LED şeridine dizdim ve rastgele renklerle basit bir çizim yaptım. Difüzyon malzemesinin bir şeridi ile şekiller ve renkler gerçekten ortaya çıkıyor.

Adım 4: LED Çubuk Alternatifleri

LED Bar Alternatifleri
LED Bar Alternatifleri
LED Bar Alternatifleri
LED Bar Alternatifleri
LED Bar Alternatifleri
LED Bar Alternatifleri

Bu projeye ilk başladığımda LED maskesi yapmanın diğer yollarını denedim. 3D yazıcınız yoksa bu seçeneklerden birini düşünebilirsiniz. Dürüst olacağım: Bu parçaları yapmak çok büyük bir acı.

Daireler için, çapı neredeyse tam olarak 1 cm olan 13/32 pirinç bir boru aldım. Yüz adet 1 cm'lik dilimler halinde kestim ve ardından püskürterek beyaza boyadım.

Üçgenler için tek kullanımlık bir fırın tepsisinden kesilmiş ağır alüminyum folyo kullandım. Tahtadan üçgen bir form yaptım, sonra kalıbın etrafına kısa folyo şeritler sardım ve bantladım. Yine, bunlardan yüzlercesine ihtiyacınız olacak, bu yüzden biraz zaman ve sabır gerekiyor.

Adım 5: LED Bar Muhafazası

LED Çubuk Muhafaza
LED Çubuk Muhafaza
LED Çubuk Muhafaza
LED Çubuk Muhafaza
LED Çubuk Muhafaza
LED Çubuk Muhafaza

Kasam oldukça basit: yanlar için iki şerit ahşap ve üst ve alt için iki şerit pleksiglas. Tüm parçalar yaklaşık 102 cm uzunluğundadır (LED'ler için 1 metre, ayrıca kabloları yerleştirmek için biraz fazladan). LED şeritlere yer açmak için kenarlar 1 cm'den biraz daha uzun olmalıdır. Şeritleri kestikten sonra pleksiglasın genişliğini ölçmek için 3D baskılı maske parçalarını aralarına sıkıştırdım. Çubuğun genişliği ve uzunluğu boyunca iki parça pleksiglas kesin. Son olarak, maskenin üzerine oturması için difüzyon materyalinden bir şerit kesin.

Difüzyon için Lee Filters #216'yı gerçekten seviyorum (tam beyaz difüzyon). Çok fazla ışık kaybetmeden eşit dağılım sağlayan ince bir plastik levhadır. Ama pahalı şeyler. Bazen internette satılık daha küçük çarşaflar bulabilirsin, ama bütün bir rulo seni yaklaşık 125 $ geri getirecektir. Diğer bazı seçenekler beyaz kağıt veya herhangi bir saten veya buzlu plastik türüdür. Popüler bir seçim, ince plastik kesme altlıklarıdır.

LED çubuğunu monte etmeden önce, LED şeritlere lehimlenmiş uygun konektörlere sahip olduğunuzdan emin olun. Birçok şerit, önceden lehimlenmiş uçlarla birlikte gelir, böylece bunları kullanabilirsiniz.

Montaja pleksiglasın üst parçasını ahşap kenarlara vidalayarak başladım (fotoğrafa bakın). Sonra ters çevirdim ve difüzyon şeridini, ardından 10 maske parçasını yerleştirdim. Boşluktan memnun kaldığımda, onları birkaç nokta sıcak tutkalla sabitledim.

Ardından, iki LED şeridi yan yana maskelerin üzerine yerleştirin. LED'lerin aşağı baktığından ve her LED'in maskedeki karşılık gelen delikle aynı hizada olduğundan emin olun. LED şeritleri yerinde tutmak için biraz sıcak tutkal veya bant ekleyin. Son olarak, pleksiglasın arka parçasını vidalayın.

Bir test deseni çalıştırın. İyi iş! En zor kısmı yaptın!

6. Adım: Kontrol Paneli

Kontrol Paneli
Kontrol Paneli
Kontrol Paneli
Kontrol Paneli
Kontrol Paneli
Kontrol Paneli
Kontrol Paneli
Kontrol Paneli

Kontrol paneli, en yaratıcı özgürlüğü sağlayan kısımdır. LED çubuğuyla birlikte tüm kontrolleri ve elektronik aksamları tutması yeterlidir. En basit tasarım dikdörtgen panolardır: düğmeler ve kontroller için delikler açın ve LED çubuğu takın. Bir tür steampunk / retro-modern görünüm vermek için ahşap, pleksiglas ve diğer malzemeleri birleştirmeyi seviyorum. Bu durumda, ana algoritma seçim düğmelerini tutmak için bir parça ağır hizmet tipi pleksiglas ve elektroniklerin geri kalanını tutmak için bir tahta çubuk kestim. Arcade düğmelerinin boyutuna uyacak şekilde delikler açtım. Kablolar arkada görünüyor, ama hoşuma gitti!

Ayrıca 7 segmentli ekran, döner kodlayıcı ve arkadaki bazı kablolar için yer açtım. LED çubuğu tutmak için üstte bir dado kestim.

Adım 7: Düğme Demeti

Düğme Demeti
Düğme Demeti
Düğme Demeti
Düğme Demeti
Düğme Demeti
Düğme Demeti

Çok sayıda düğmeyi kablolamak gerçek bir acı olabilir. Neyse ki, atari makineleri yapan insanlar, kullanabileceğiniz bazı standart konektörler bulmuşlardır. Her düğme konektör kablosunun biri VCC diğeri toprak için olmak üzere iki kablosu vardır. Bir uçta, düğmenin arkasındaki uçlara uyan kürek konektörler bulunur - toprağı "normalde açık" kabloya ve VCC'yi "ortak" kabloya bağlayın. Bu konfigürasyonda kullanıcı butona bastığında devre tamamlanır ve mikrodenetleyici ilgili giriş pininde HIGH okuyacaktır.

Kablonun diğer ucunda bir JST konektörü vardır (küçük beyaz şey). Bu konektörlerle ilgili güzel olan şey, yuvaya yalnızca bir şekilde girmeleridir, bu nedenle VCC'yi ve topraklamayı yanlışlıkla tersine çevirmenin bir yolu yoktur.

Yaptığım şey, bu konektörler için küçük bir kablo demeti oluşturmak. Bir dizi JST yuvasını bir protokol parçasına lehimliyorum ve ardından kabloları mikro denetleyiciye takacağım Dupont konektörlerine geri sürüyorum. Kırmızı kablo VCC hattıdır ve tüm JST prizlerine bağlanır. Mavi teller her düğme için ayrı olan kablolardır.

Adım 8: Döner Kodlayıcı

Döner Kodlayıcı
Döner Kodlayıcı

Döner kodlayıcı, kullanıcının algoritmanın hızını kontrol etmesini sağlar. İki veri hattı (sarı kablolar) için çekme dirençleri içeren bir devre kartı olarak gelen bir modül kullanıyorum. Bu da bir düğme ama ben o özelliği kullanmıyorum. Diğer iki kablo VCC ve topraktır. Ayrıca güzel bir şişman topuz aldım.

Bir potansiyometrenin aksine bir döner kodlayıcı hakkında sevdiğim şey, mikrodenetleyiciye sadece dönüşü (saat yönüne karşı saat yönünün tersine) bildirmesidir, bu nedenle değerin nasıl yorumlandığını değiştirmek kolaydır. Örneğin, kullanıcı hızlı döndürdüğünde ona bir hızlanma hissi (fare gibi) verebilirsiniz.

Adım 9: 7 segmentli Ekran

7 segmentli Ekran
7 segmentli Ekran

Burada söylenecek çok şey yok. Bu şeyler her yerde. LED'ler, mikrodenetleyici ile basit bir seri protokol aracılığıyla iletişim kuran TM1637 adlı bir çip tarafından kontrol edilir. Hangi sayıyı göstermek istediğimi söylememe izin veren mevcut bir kitaplığı kullanıyorum ve gerisini o hallediyor.

Arkada dört pim vardır: VCC, toprak ve seri protokol için iki kablo. Mikrodenetleyiciye bağlı ilgili bir Dupont konektörüne bağlanan 4 pimli bir başlık parçası lehimledim.

Adım 10: Ana Denetleyici Kartı

Ana Kontrol Kartı
Ana Kontrol Kartı
Ana Kontrol Kartı
Ana Kontrol Kartı
Ana Kontrol Kartı
Ana Kontrol Kartı

Ana kontrol panosu, mikrodenetleyicinin kendisini ve kontrollerin (düğmeler, ekran, LED'ler) tüm konektörlerini barındırır. Mikrodenetleyici, çok fazla bilgi işlem gücü ve bellek sağlayan ve çok sayıda pin ortaya çıkaran bir ESP32'dir. Kablolama oldukça standart, ancak birkaç ilginç parçaya dikkat çekeceğim.

NOT: Ana kartı kablolamaya başlamadan önce koda (https://github.com/samguyer/AlgorithmMachine) bakmak isteyebilirsiniz, böylece pin yapılandırmanız benimkiyle eşleşir.

Güç için tahtaya bir varil jakı lehimledim ve iki etli bakır kabloyu kartın güç ve toprak raylarına bağladım. Bunun nedeni, parlaklık yüksek ayarlanırsa LED çubuğun çok fazla güç çekebilmesi ve bu gücün tamamını mikro denetleyicideki USB konektöründen çekmek istemiyorum.

Düğme kablolarını basitleştirmek için, mikrodenetleyicinin tüm tarafına (gösterildiği gibi kartın üst tarafı) bir erkek-dişi dik açılı başlık şeridi lehimledim. Düğme kablo demetindeki Dupont konektörleri doğrudan bu başlığa takılır.

ÖNEMLİ: Düğmelerin gücü (kırmızı kablo) mikrodenetleyici üzerindeki 3.3V güç hattına bağlanmalıdır. ESP32 bir 3.3V çiptir, bu nedenle veri pinlerine sadece 3.3V kaynaklar eklenmelidir.

Mikrodenetleyici, 5V USB pimi ve toprak aracılığıyla raylara (gösterildiği gibi kartın alt tarafı) güç çeker (veya gücü iter). Diğer tüm kırmızı/siyah kablolar VCC ve topraklıdır.

İki mavi kablo, LED şeritleri (WS2812'ler) için veri hatlarıdır. Sarı/yeşil çift, döner kodlayıcının veri hatlarıdır ve sarı çift, 7 segmentli ekrana seri bağlantıdır.

Adım 11: Montaj

toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı

Bu fotoğraf serisi, son montajı ve kablolamayı göstermektedir. Ana denetleyici kartını da üst tarafa arkaya taktım.

Açmadan önce kötü sürprizlerden kaçınmak için birkaç kontrol yaptım. Özellikle, geriye doğru herhangi bir güç/toprak konektörüm olmadığından ve kısa devre olmadığından emin olmak için. Sürekliliği test etmek için multimetrenizi ayarlayın - iki uç arasında bir elektrik yolu olduğunda bip sesi çıkaracaktır. Düğmelere ortak VCC hattına bir kablo bağlayın. Ardından diğer ucu kablo demetinin her bir pimine tek tek takın. Multimetre sadece düğmeye bastığınızda bip sesi çıkarmalıdır. Başka bir bip sesi alırsanız, geri dönüşünüz veya kısa devreniz olduğu anlamına gelir. Gücü açmadan önce onu takip edin ve düzeltin!

Adım 12: Kod

Öncelikle Arduino IDE'nizi açın ve FastLED kitaplığının kurulu olduğundan emin olun.

Algoritma Makinesi kodunu GitHub'dan indirin:

github.com/samguyer/AlgorithmMachine.git

Doğrudan Arduino klasörünüze klonlayabilir veya elle kopyalayabilirsiniz.

Yüklemeden önce pin ayarlarının donanım yapılandırmanızla eşleştiğinden emin olun. Tüm pin ayarlarını dosyanın en üstüne yerleştirdim.

Yükleyin ve keyfini çıkarın!

Adım 13: Nasıl Kullanılır

Algoritma Makinesinin kullanımı kolaydır ve hemen hemen her düğme kombinasyonu uygundur!

İlk olarak, dizideki değerleri başlatmak için veri düğmelerini kullanın. Üç seçenek vardır: (1) rastgele, (2) rastgele bir değer ekleyin ve (3) diziyi tersine çevirin. Değerlerin kalıcı olduğunu unutmayın, bu nedenle önce bunları sıralayın, ardından biraz gürültü ekleyin, ardından farklı bir sıralama veya arama algoritması çalıştırın.

Diğer düğme seçeneklerinden bir arama veya sıralama algoritması seçin. Şu anda, bu seçimi yaptığınızda herhangi bir geri bildirim yok (gelecekteki çalışmalar için bir şey). Ardından "oynat" düğmesine basın.

Düğme hızı kontrol eder. Algoritmayı duraklatmak ve devam ettirmek için "oynat" düğmesine de basabilirsiniz.

Bittiğinde otomatik olarak duracaktır. Ayrıca istediğiniz zaman başka bir algoritma düğmesine de basabilirsiniz. Makine mevcut algoritmayı durduracak ve yenisini başlatacak, ancak verileri tam olarak önceki algoritmanın bıraktığı gibi tutacaktır.

STEM Yarışması
STEM Yarışması
STEM Yarışması
STEM Yarışması

STEM Yarışmasında Büyük Ödül

Önerilen: