Tabel Foosball Raspberry Pi IoT: 11 Langkah
Tabel Foosball Raspberry Pi IoT: 11 Langkah
Anonim
Meja Bola Raspberry Pi IoT
Meja Bola Raspberry Pi IoT

Selamat datang di meja foosball versi saya yang diretas, sebagai bagian dari proyek siswa untuk teknologi Media dan Komunikasi Baru. Pada dasarnya saya dibesarkan di sekitar meja pingpong dan biliar jadi saya pikir akan sangat bagus untuk mencoba menghubungkan salah satu perangkat ini ke internet.

Pengaturan utama menggunakan tabel foosball yang ada yang terhubung ke Raspberry Pi yang dapat melakukan semua tugas berikut:

  • Menggunakan pin GPIO untuk menggerakkan LED/Penerima IR dan modul dot matrix 8x8
  • Menjalankan situs Flask menggunakan nginx
  • Menjalankan database MySQL/MariaDB untuk penyimpanan data

Untuk dapat membuat ulang proyek ini, Anda memerlukan keterampilan berikut:

Bagian belakang:

  • Memahami HTML/CSS/Javascript untuk klien situs web
  • Memahami Python dengan Flask/Flask-SocketIO/Jinja2 untuk sisi server situs web
  • Pengetahuan dasar tentang MySQL
  • Tahu cara menjalankan server web

Prototipe

  • Pengetahuan dasar tentang cara menyambungkan rangkaian listrik
  • Pematerian
  • Pemahaman dasar tentang cara menulis skrip dengan Python
  • Bekerja dengan Linux (Raspbian)
  • Memiliki banyak kesabaran karena akan ada banyak debug yang terlibat

Langkah 1: Bahan

Berikut adalah daftar dengan semua bagian yang diperlukan untuk tabel:

  • Raspberry Pi Model 3 (dengan casing)
  • T-Cobbler untuk menghubungkan Pi ke papan tempat memotong roti
  • Meja Foosball (Saya menggunakan meja yang sangat tua yang mirip dengan yang ini. Harus rela mengebor lubang di dalamnya)
  • Modul Dot Matrix Arduino MAX7219 (2)
  • IR LED Emitter (2+ karena pecah, mirip dengan yang ini)
  • Penerima IR (2+ karena mereka juga rusak, mirip dengan yang ini)
  • Papan tempat memotong roti tanpa solder dasar
  • Banyak dan banyak kawat (tergantung ukuran meja foosball)
  • konektor pria (30+)
  • konektor perempuan (10+)
  • Resistor 100-220 Ohm (4+)
  • bahan solder
  • tali kawat
  • pemegang LED
  • beberapa kayu / sekrup jika Anda ingin menyampaikan bola di selokan

Total biaya proyek ini sepenuhnya tergantung pada biaya meja foosball Anda (mahal). Selain meja, bahannya maksimal 150 euro.

Langkah 2: Sirkuit Listrik

Sirkuit Listrik
Sirkuit Listrik
Sirkuit Listrik
Sirkuit Listrik
Sirkuit Listrik
Sirkuit Listrik

Sebelum Anda mencoba menyolder, rakit semua komponen, saya sangat menyarankan untuk mengujinya di papan tempat memotong roti terlebih dahulu. Lebih mudah untuk mengganti komponen yang rusak sebelum Anda menghabiskan waktu berjam-jam untuk menyoldernya.

Pada awalnya saya mencoba menerapkan LED Matrix 8x8 dengan register geser 74HC595 (gambar pertama) dan array transistor tetapi karena banyak kabel dan output yang sangat rendah saya beralih ke Modul Dot Matrix MAX7219 karena hanya membutuhkan 5 kabel dan langsung digerakkan oleh sebuah bus SPI.

Sirkuit yang akhirnya saya gunakan digambar dengan Fritzing. Harap dicatat bahwa LED IR dan Penerima dapat dihubungkan ke salah satu Pin GPIO gratis Anda.

Penerima IR dan LED harus saling berhadapan dan bagian atas LED harus mengarah ke penerima. Karena kita ingin mensimulasikan sebuah sinar langsung yang dapat dipatahkan oleh gerakan bola yang dalam hal ini akan terjadi perubahan keadaan jalur DATA penerima dari 0 menjadi 1.

Langkah 3: Mengkodekan Sensor

Mengkodekan Sensor
Mengkodekan Sensor

Saya telah mengkodekan sebagian besar proyek ini menggunakan Pycharm karena memungkinkan penyebaran SSH yang mudah ke Raspberry Pi Anda menggunakan penerjemah jarak jauh. Saya tidak akan menjelaskan secara rinci bagaimana program ini bekerja tetapi banyak informasi dapat ditemukan di situs web pycharm.

Saat ini saya masih mengerjakan proyek tetapi setelah semuanya selesai, seluruh proyek akan tersedia di profil github saya

Kode untuk sensor terdiri dari 3 kelas yang dijalankan di thread latar belakang di server Flask saya (yang akan dijelaskan nanti):

  1. Kelas Sasaran (tautan) -File ini memulai semua komponen terpisah, yang dapat dipanggil dengan memasukkan perangkat/bus SPI dan nomor pin yang benar
  2. Kelas Matriks (tautan) -Ini adalah kelas utama untuk menyalakan modul MAX7219
  3. Kelas LED dan Penerima (tautan) - Ini adalah kelas utama untuk menyalakan sinar inframerah menggunakan Utas terpisah untuk mengurangi beban CPU dari RPi

LED dan receiver bekerja pada frekuensi 38kHz dan receiver selalu mengharapkan pulsa naik 50% dan pulsa turun 50% berfungsi dengan baik.

Langkah 4: Mempersiapkan dan Menempatkan Sensor

Mempersiapkan dan Menempatkan Sensor
Mempersiapkan dan Menempatkan Sensor
Mempersiapkan dan Menempatkan Sensor
Mempersiapkan dan Menempatkan Sensor
Mempersiapkan dan Menempatkan Sensor
Mempersiapkan dan Menempatkan Sensor

Sekarang kita akan menyiapkan IR LED dan receiver. Pada gambar tabel u dapat menemukan lokasi di mana RPi dan sensor harus ditempatkan.

Tapi pertama-tama kita perlu menyiapkan kabel:

  1. Pastikan Anda mengukur jumlah kabel yang dibutuhkan dari lokasi RPi/papan tempat memotong roti ke lokasi sensor
  2. Solder pin penerima IR ke salah satu ujung kabel (COM/GND/V+)
  3. Solder potongan konektor laki-laki di ujung kabel yang lain

Sekarang kita akan menyiapkan tabel:

  1. Buat gambar dasar (berdasarkan gambar) di mana untuk mengebor. Sangat penting bahwa 2 lubang sejajar satu sama lain karena ini akan menjadi lokasi balok.
  2. Bor lubangnya
  3. Jika Anda memiliki beberapa pemegang LED (tautan), Anda dapat memasukkannya ke dalam lubang agar lebih kokoh
  4. Masukkan + rekatkan LED + penerima di kedua sisi
  5. Ikat kabel + rekatkan di kayu agar tidak terlalu menyilang
  6. Masukkan pin jantan pada papan tempat memotong roti sesuai dengan sirkuit yang disediakan sebelumnya

Langkah 5: Mempersiapkan dan Menempatkan Modul Matriks

Menyiapkan dan Menempatkan Modul Matriks
Menyiapkan dan Menempatkan Modul Matriks

Selanjutnya kita akan menghubungkan 2 modul matriks LED

Catatan:

Karena saya menggunakan meja foosball lama sudah ada lubang naik ke atas karena tempat rokok. Jika Anda tidak memilikinya, Anda harus membuatnya.

Untuk mempersiapkan kabel:

  1. Ukur kawat dari papan tempat memotong roti ke bagian atas meja
  2. Solder beberapa konektor perempuan ke ujung pertama kabel
  3. Solder beberapa konektor pria ke ujung kabel yang lain

Menempatkan matriks:

  1. Keluarkan matriks melalui lubang di atas
  2. Tali + rekatkan kabel di dalam kayu untuk menghindari penyeberangan
  3. Masukkan pin jantan pada papan tempat memotong roti sesuai dengan sirkuit yang disediakan sebelumnya

Pada titik tertentu saya akan menambahkan langkah DIY kecil untuk menambahkan casing untuk modul matriks, tetapi untuk saat ini mereka telanjang.

Langkah 6: Menjadikannya IoT

Menjadikannya IoT
Menjadikannya IoT

Jika Anda hanya ingin mendaftar dan menampilkan skor, Anda dapat menyelesaikan proyek dengan menulis skrip python kecil yang berjalan yang berulang hingga salah satu skor mencapai 9 dan kemudian mengatur ulang.

Namun jika Anda ingin menghubungkan meja Anda ke internet, beberapa langkah selanjutnya harus sesuai dengan keinginan Anda.

Dalam beberapa langkah berikutnya kami akan membahas hal berikut:

  • Mengkonfigurasi Raspberry Pi
  • Membuat database untuk penyimpanan
  • Membuat situs web
  • Menempatkannya secara online

Pada titik ini, jika Anda sudah familiar dengan git, saya sarankan Anda membuat repositori di GitHub/GitLab untuk melacak file Anda. Jika tidak, Anda dapat membuat folder dengan struktur yang sama seperti pada gambar.

Proyek lengkapnya akan segera tersedia di GitHub. Namun file rar sementara dengan semua file yang diperlukan tersedia.

Langkah 7: Menghubungkan Raspberry Pi

Selanjutnya kita akan mengatur lingkungan raspberry pi, untuk melakukan ini Anda perlu menjalankan langkah-langkah berikut:

  • Hubungkan melalui SSH ke Rasberry Pi Anda (Anda dapat menggunakan Putty)
  • Buat folder (contoh proyek mkdir) dan pindahkan ke folder ini menggunakan perintah cd
  • Buat lingkungan Python virtual di folder ini menggunakan perintah python3 -m venv --system-site-packages env
  • Aktifkan penerjemah virtual dengan perintah source /env/bin/activate
  • Instal paket dari requirements.txt dengan perintah python -m pip install package-name
  • Transfer file dari file project_example.rar yang disediakan sebelumnya melalui SSH di folder proyek Anda

Sekarang Anda harus dapat menjalankan proyek penuh di Raspberry Pi Anda. Saya menyarankan Anda untuk menggunakan Python IDE seperti PyCharm yang memungkinkan Anda menggunakan Anda untuk men-debug dari penerjemah jarak jauh Anda melalui SSH dan langsung mengunggah perubahan jika perlu.

Langkah 8: Menyiapkan Database

Menyiapkan Basis Data
Menyiapkan Basis Data

Sekarang Anda perlu menyiapkan database yang sangat mendasar, berdasarkan model ini.

Cara termudah untuk melakukannya adalah dengan membuat database Anda di meja kerja MySQL di mana Anda juga dapat melakukan beberapa pengujian.

Setelah selesai, Anda dapat mengekspor dump database Anda dan mengunggahnya ke RPi Anda dan kemudian menjalankannya dengan Sudo mariadb <pathtofile/file.sql

Langkah 9: Membuat Situs Web

Membuat Situs Web
Membuat Situs Web
Membuat Situs Web
Membuat Situs Web
Membuat Situs Web
Membuat Situs Web

Selanjutnya Anda dapat menganalisis (dan menggunakan) kode yang disediakan dalam file project_example.rar.

File utama adalah Flask.py yang merupakan roti dan mentega dari proyek ini:

  • Menjalankan aplikasi Flask-SocketIO yang menangani backend situs web
  • Membuat koneksi antara database dan Flask
  • Menyediakan validasi login dan pendaftaran pengguna
  • Memberikan kode yang diperlukan tentang cara bermain game menggunakan socketio untuk memperbarui situs web secara realtime selama permainan
  • Menempatkan hasil game ke dalam database

Di folder statis dan templat Anda dapat menemukan HTML/CSS/JS yang menyediakan bagian depan situs web. Jangan ragu untuk memodifikasi ini sesuai dengan keinginan Anda sendiri.

Langkah 10: Menghubungkan ke World Wide Web

Untuk menghubungkan situs web kami ke web, kami akan menggunakan nginx dan uwsgi. Dalam contoh proyek Anda dapat menemukan file yang diperlukan di folder conf.

Pertama-tama Anda perlu memperbarui yang berikut di file-file ini:

  • Di uwsgi-flask.ini Anda perlu mengubah jalur parameter virtualenv ke penerjemah Anda
  • Di project1-flask.service Anda perlu memperbarui bagian [Layanan] file dengan kredensial dan jalur Anda ke file terkait
  • Dalam file nginx Anda perlu memperbarui server dan lokasi / jalur ke soket terkait Anda

Selanjutnya Anda perlu mengganti file webserver default nginx dengan lokasi file konfigurasi nginx Anda, di bawah ini adalah contoh perintah linux untuk melakukan ini

  • me@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1
  • me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/defaul t
  • me@my-rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1
  • me@my-rpi:~/project1 $ sudo systemctl restart nginx.service

Akhirnya Anda perlu menambahkan layanan khusus ke folder systemd Anda, ini adalah contoh cara melakukannya:

  • me@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
  • me@my-rpi:~/project1 $ sudo systemctl daemon-reload
  • me@my-rpi:~/project1 $ sudo systemctl start project1-*
  • me@my-rpi:~/project1 $ sudo systemctl status project1-*

Jika Anda ingin server web mulai saat boot raspberry pi Anda, Anda perlu menggunakan perintah sudo systemctl enable project1-*.service.

Jika dilakukan dengan benar, setelah sistem reboot, situs web Anda akan berjalan di alamat IP Anda. Jika Anda ingin mengedit salah satu file konfigurasi ini, Anda selalu harus menghentikan layanan, mengunggah ulang file dan menggunakan perintah daemon-reload diikuti dengan memulai, jika tidak, perubahan tidak akan efektif.

Langkah 11: Menyelesaikan

Menyelesaikan
Menyelesaikan

Saat mengetik bagian akhir dari instruksi ini, proyek sekolah kecil ini masih dalam proses.

Saya telah menghabiskan waktu berjam-jam untuk menyelesaikan ini dalam 2,5 minggu. Meskipun semuanya sedikit terburu-buru, saya tetap bangga dengan apa yang telah saya capai. Selama fase perakitan, saya menemukan banyak bug/kesalahan/sensor yang salah, jadi jangan terlalu berkecil hati jika semuanya tidak berfungsi pada percobaan pertama.

Hal terbaik yang dapat Anda lakukan adalah meminta atau mencari bantuan di internet, ada banyak orang dengan pengetahuan yang jauh lebih baik yang sangat ingin membantu Anda.

Terakhir namun tidak kalah pentingnya, saya ingin mengucapkan terima kasih kepada guru-guru saya dari Media Baru dan Teknologi Komunikasi karena telah memberi saya banyak saran dan membantu saya menyelesaikan proyek ini.

Direkomendasikan: