İçindekiler:

Raspberry Pi IoT Langırt Masası: 11 Adım
Raspberry Pi IoT Langırt Masası: 11 Adım

Video: Raspberry Pi IoT Langırt Masası: 11 Adım

Video: Raspberry Pi IoT Langırt Masası: 11 Adım
Video: First foosball goal-sensor test 2024, Kasım
Anonim
Raspberry Pi IoT Langırt Masası
Raspberry Pi IoT Langırt Masası

Yeni Medya ve İletişim teknolojisi için bir öğrenci projesinin parçası olarak, hacklenmiş bir langırt masası versiyonuma hoş geldiniz. Temelde langırt ve bilardo masaları arasında büyüdüm, bu yüzden bu cihazlardan birini internete bağlamayı denemenin harika olacağını düşündüm.

Ana kurulum, aşağıdaki görevlerin tümünü yapabilen bir Raspberry Pi'ye bağlı mevcut bir langırt masasını kullanmaktır:

  • IR LED/Alıcıları ve 8x8 nokta vuruşlu modülleri sürmek için GPIO pinlerini kullanır
  • nginx kullanarak bir Flask web sitesi çalıştırır
  • Veri depolama için bir MySQL/MariaDB veritabanı çalıştırır

Bu projeyi yeniden oluşturabilmek için aşağıdaki becerilere ihtiyacınız olacak:

Arka uç:

  • Web sitesinin istemcisi için HTML/CSS/Javascript'i anlama
  • Web sitesinin sunucu tarafı için Flask/Flask-SocketIO/Jinja2 ile Python'u anlama
  • MySQL'in temel bilgisi
  • Bir web sunucusunu nasıl çalıştıracağınızı bilin

Prototip

  • Bir elektrik devresinin nasıl bağlanacağı hakkında temel bilgiler
  • Lehimleme
  • Python'da bir komut dosyasının nasıl yazılacağına dair temel anlayış
  • Linux ile Çalışmak (Raspbian)
  • Çok sabırlı olmak, çünkü çok fazla hata ayıklama söz konusu olacaktır.

Adım 1: Malzemeler

Tablo için gerekli tüm parçaları içeren liste:

  • Raspberry Pi Model 3 (muhafazalı)
  • Pi'yi breadboard'a bağlamak için T-Cobbler
  • Langırt masası (Buna benzer çok eski bir masa kullandım. İçine delik açmaya istekli olmalı)
  • MAX7219 Arduino Dot Matrix Modülü (2)
  • IR LED Yayıcılar (2+ çünkü kırılırlar, buna benzer)
  • IR Alıcıları (2+ çünkü onlar da kırılır, buna benzer)
  • Temel lehimsiz devre tahtası
  • Çok ve çok sayıda tel (langırt masasının boyutuna bağlıdır)
  • erkek konektörler (30+)
  • dişi konektörler (10+)
  • 100-220 Ohm Dirençler (4+)
  • lehim malzemeleri
  • tel kayışlar
  • LED tutucular
  • topu olukta geçirmek istemeniz durumunda bazı tahta/vidalar

Bu projenin toplam maliyeti tamamen langırt masanızın maliyetine bağlıdır (pahalı). Masanın yanı sıra malzemeler maksimum 150 Euro olacaktır.

Adım 2: Elektrik Devresi

Elektrik Devresi
Elektrik Devresi
Elektrik Devresi
Elektrik Devresi
Elektrik Devresi
Elektrik Devresi

Lehimlemeye başlamadan önce, tüm bileşenleri bir araya getirin, önce bir breadboard üzerinde test etmenizi şiddetle tavsiye ederim. Arızalı bileşenleri saatlerce lehimlemeden önce değiştirmek daha kolaydır.

İlk başta 74HC595 kaydırma yazmacı (ilk görüntü) ve transistör dizisi ile 8x8 LED Matrix'i uygulamaya çalıştım, ancak çok sayıda kablo ve çok düşük çıkış nedeniyle MAX7219 Dot Matrix Modülüne geçtim çünkü sadece 5 kablo alır ve doğrudan tarafından çalıştırılır. bir SPI otobüsü.

Sonunda kullandığım devre Fritzing ile çizildi. Lütfen IR LED'lerinin ve Alıcıların ücretsiz GPIO Pinlerinizden herhangi birine bağlanabileceğini unutmayın.

IR Alıcıları ve LED doğrudan karşı karşıya olmalı ve LED'in üst kısmı alıcıya dönük olmalıdır. Çünkü topun hareketiyle kırılabilecek bir direkt ışın simule etmek istiyoruz ki bu durumda alıcının DATA hattında 0'dan 1'e bir durum değişikliği olacaktır.

Adım 3: Sensörlerin Kodlanması

Sensörlerin Kodlanması
Sensörlerin Kodlanması

Bu projenin çoğunu Pycharm kullanarak kodladım çünkü uzak bir yorumlayıcı kullanarak Raspberry Pi'nize kolay SSH dağıtımına izin veriyor. Bu programın nasıl çalıştığına ayrıntılı olarak girmeyeceğim, ancak pycharm web sitesinde birçok bilgi bulunabilir.

Şu anda hala proje üzerinde çalışıyorum ama her şey bittiğinde tüm proje github profilimde mevcut olacak

Sensörlerin kodu, Flask sunucumda bir arka plan iş parçacığında çalıştırılan 3 sınıftan oluşur (bu daha sonra açıklanacaktır):

  1. Hedef Sınıfı (bağlantı) -Bu dosya, doğru SPI cihazı/veri yolu ve pin numarası girilerek çağrılabilecek tüm ayrı bileşenleri başlatır.
  2. Matrix Sınıfı (bağlantı) -Bu, MAX7219 modülünü çalıştıran ana sınıftır.
  3. LED ve Alıcı Sınıfı (bağlantı) - Bu, RPi'nin CPU yükünü azaltmak için ayrı İş Parçacıkları kullanarak kızılötesi kırılma ışınını güçlendiren ana sınıftır.

LED ve alıcı 38kHz frekansta çalışır ve alıcılar her zaman düzgün çalışması için %50 yukarı ve %50 aşağı darbe bekler.

Adım 4: Sensörleri Hazırlama ve Yerleştirme

Sensörlerin Hazırlanması ve Yerleştirilmesi
Sensörlerin Hazırlanması ve Yerleştirilmesi
Sensörlerin Hazırlanması ve Yerleştirilmesi
Sensörlerin Hazırlanması ve Yerleştirilmesi
Sensörlerin Hazırlanması ve Yerleştirilmesi
Sensörlerin Hazırlanması ve Yerleştirilmesi

Şimdi IR LED ve alıcıyı hazırlayacağız. Tablonun resminde RPi ve sensörlerin yerleştirilmesi gereken yerleri bulabilirsiniz.

Ama önce kablolamayı hazırlamamız gerekiyor:

  1. RPi/breadboard konumundan sensör konumuna kadar gereken kablo miktarını ölçtüğünüzden emin olun.
  2. IR alıcı pimlerini telin bir ucuna lehimleyin (COM/GND/V+)
  3. Telin diğer ucundaki erkek konektör parçalarını lehimleyin

Şimdi tabloyu hazırlayacağız:

  1. Nerede delineceğine dair temel bir çizim (resme göre) yapın. Bu kiriş konumu olacağı için 2 deliğin birbirine hizalanması çok önemlidir.
  2. Delikleri delin
  3. Bazı LED tutucularınız (bağlantı) varsa, daha sağlam hale getirmek için bunları deliğin içine koyabilirsiniz.
  4. LED + alıcıyı her iki tarafa takın + bantlayın
  5. Telleri sarın + çok fazla geçmemeleri için tahtaya bantlayın
  6. Erkek pimleri önceden sağlanan devreye göre devre tahtasına yerleştirin

Adım 5: Matris Modülünü Hazırlama ve Yerleştirme

Matris Modülünü Hazırlama ve Yerleştirme
Matris Modülünü Hazırlama ve Yerleştirme

Sırada 2 LED matris modülünü bağlayacağız

Not:

Eski bir langırt masası kullandığım için zaten ağızlıklardan dolayı üst kısma doğru çıkan delikler vardı. Bunlara sahip değilseniz, onları oluşturmanız gerekecektir.

Telleri hazırlamak için:

  1. Breadboard'dan masanın üst kısmına doğru olan teli ölçün
  2. Bazı dişi konektörleri telin ilk ucuna lehimleyin
  3. Bazı erkek konektörleri telin diğer ucuna lehimleyin

Matrisin yerleştirilmesi:

  1. Üstteki delikten matrisi dışarı çıkarın
  2. Geçmeyi önlemek için telleri ahşabın üzerine bantlayın + bantlayın
  3. Erkek pimleri daha önce sağlanan devreye göre devre tahtasına yerleştirin

Bir noktada, matris modülü için bir kasa eklemek için küçük bir DIY adımı ekleyeceğim, ancak şimdilik çıplaklar.

Adım 6: IoT Yapmak

Nesnelerin İnterneti Yapmak
Nesnelerin İnterneti Yapmak

Sadece puanları kaydetmek ve görüntülemek istiyorsanız, puanlardan biri 9'a ulaşana kadar dönen ve ardından sıfırlanan küçük bir çalışan python betiği yazarak projeyi bitirebilirsiniz.

Ancak, masanızı internete bağlamak istiyorsanız, sonraki birkaç adım tam size göre olmalıdır.

Sonraki birkaç adımda aşağıdakileri ele alacağız:

  • Raspberry Pi'yi Yapılandırma
  • Depolama için bir veritabanı oluşturma
  • web sitesi oluşturma
  • çevrimiçi duruma getirmek

Bu noktada git'e aşina iseniz, dosyalarınızı takip etmek için GitHub/GitLab üzerinde bir depo oluşturmanızı tavsiye ederim. Eğer değilseniz, resimdeki ile aynı yapıda bir klasör oluşturabilirsiniz.

Projenin tamamı yakında GitHub'da hazır olacak. Ancak gerekli tüm dosyaları içeren geçici bir rar dosyası mevcuttur.

7. Adım: Raspberry Pi'yi Bağlama

Daha sonra ahududu pi ortamını kuracağız, bunu yapmak için aşağıdaki adımları uygulamanız gerekiyor:

  • Rasberry Pi'nize SSH üzerinden bağlanın (PuTTY kullanabilirsiniz)
  • Bir klasör oluşturun (örnek mkdir projesi) ve cd komutunu kullanarak bu klasöre taşıyın
  • python3 -m venv --system-site-packages env komutunu kullanarak bu klasörde sanal bir Python ortamı oluşturun
  • sanal yorumlayıcıyı source /env/bin/activate komutuyla etkinleştirin
  • python -m pip install package-name komutuyla gereksinimleri.txt dosyasından paketleri kurun
  • Daha önce sağlanan proje_example.rar dosyasındaki dosyaları proje klasörünüzdeki SSH üzerinden aktarın

Artık tüm projeyi Raspberry Pi'nizde çalıştırabilmelisiniz. Size uzak yorumlayıcınızdan SSH üzerinden hata ayıklamak ve gerekirse değişiklikleri doğrudan yüklemek için kullanmanıza izin veren PyCharm gibi bir Python IDE kullanmanızı tavsiye ederim.

Adım 8: Veritabanını Ayarlama

Veritabanını Ayarlama
Veritabanını Ayarlama

Şimdi bu modele dayalı çok temel bir veritabanı kurmanız gerekiyor.

Bununla gitmenin en kolay yolu, bazı testler yapabileceğiniz MySQL tezgahında veritabanınızı oluşturmaktır.

İşiniz bittiğinde, veritabanınızın bir dökümünü dışa aktarabilir ve RPi'nize yükleyebilir ve ardından sudo mariadb < pathtofile/file.sql ile çalıştırabilirsiniz.

9. Adım: Web Sitesini Oluşturma

Web Sitesi Oluşturma
Web Sitesi Oluşturma
Web Sitesi Oluşturma
Web Sitesi Oluşturma
Web Sitesi Oluşturma
Web Sitesi Oluşturma

Sırada, project_example.rar dosyasında sağlanan kodu analiz edebilir (ve kullanabilirsiniz).

Ana dosya, bu projenin ekmek ve tereyağı olan Flask.py'dir:

  • Web sitesinin arka ucunu yöneten bir Flask-SocketIO uygulamasını çalıştırır
  • Veritabanı ve Flask arasında bir bağlantı oluşturur
  • Oturum açma doğrulaması ve kullanıcı kaydı sağlar
  • Bir oyunun nasıl oynanacağına dair gerekli kodu sağlar, oyun sırasında web sitesini gerçek zamanlı olarak güncellemek için socketio kullanır
  • Oyun sonuçlarını veritabanına koyar

Statik ve şablonlar klasörlerinde web sitesinin ön uç kısmını sağlayan HTML/CSS/JS'yi bulabilirsiniz. Bunları kendi zevkinize göre değiştirmekten çekinmeyin.

Adım 10: World Wide Web'e Bağlanma

Web sitemizi web'e bağlamak için nginx ve uwsgi kullanacağız. Proje örneğinde gerekli dosyaları conf klasöründe bulabilirsiniz.

Her şeyden önce, bu dosyalarda aşağıdakileri güncellemeniz gerekir:

  • uwsgi-flask.ini'de virtualenv parametresinin yolunu yorumlayıcınıza değiştirmeniz gerekir.
  • Project1-flask.service'de, dosyanın [Service] bölümünü kimlik bilgileriniz ve ilişkili dosyalara giden yollarla güncellemeniz gerekir.
  • Nginx dosyasında, sunucuyu ve ilişkili soketinize giden konumu/yolu güncellemeniz gerekir.

Ardından, varsayılan nginx web sunucusu dosyasını nginx yapılandırma dosyanızın konumuyla değiştirmeniz gerekir, aşağıda bunu yapmak için linux komutlarına bir örnek verilmiştir.

  • me@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1
  • me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-etkin/varsayılan t
  • me@my-rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1
  • me@my-rpi:~/project1 $ sudo systemctl nginx.service'i yeniden başlat

Son olarak, özel hizmetleri systemd klasörünüze eklemeniz gerekiyor, bu nasıl yapılacağına dair bir örnek:

  • me@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
  • me@my-rpi:~/project1 $ sudo systemctl arka plan programı yeniden yükle
  • me@my-rpi:~/project1 $ sudo systemctl projeyi başlat1-*
  • me@my-rpi:~/project1 $ sudo systemctl durum projesi1-*

Web sunucusunun ahududu pi'nizin açılışında başlamasını istiyorsanız, sudo systemctl enable proje1-*.service komutunu kullanmanız gerekir.

Doğru yapılırsa, sistem yeniden başlatıldıktan sonra web siteniz IP adresinizde çalışıyor olmalıdır. Bu yapılandırma dosyalarından birini düzenlemek istiyorsanız, her zaman hizmeti durdurmanız, dosyaları yeniden yüklemeniz ve ardından bir başlatmanın ardından daemon-reload komutunu kullanmanız gerekir, aksi takdirde değişiklikler etkili olmayacaktır.

Adım 11: Bitirme

Bitirme
Bitirme

Bu eğitimin son bölümünü yazarken, bu küçük okul projesi hala devam eden bir çalışmadır.

Bunu 2,5 haftada yapmak için sayısız saatler harcadım. Her şey biraz aceleye getirilmiş olsa da, başardıklarımla gurur duyuyorum. Montaj aşamasında sayısız hata/hata/hatalı sensörle karşılaştım, bu yüzden ilk denemede her şey çalışmıyorsa cesaretiniz kırılmasın.

Yapabileceğiniz en iyi şey internette yardım istemek veya aramaktır, çok daha iyi bilgiye sahip ve size yardım etmeye can atan bir sürü insan var.

Son olarak, Yeni Medya ve İletişim Teknolojisi'nden hocalarıma bana birçok tavsiyede bulundukları ve bu projeyi bitirmemde yardımcı oldukları için teşekkür etmek istiyorum.

Önerilen: