Sistem Check-In Elektronik Pintar untuk Hackerspace
Komponen dan Perlengkapan
Arduino Mega 2560
×
1
Modul Antena Pembaca Kartu Mifare RC522 RF
×
1
LED (generik)
×
2
Saklar taktil
×
2
Resistor (generik)
×
4
Tentang Proyek Ini
Salah satu masalah yang sering kita hadapi di Taipei Hackerspace adalah orang tidak tahu kami buka kapan. Aturan dasar kami sederhana: setiap kali seorang anggota pemegang kunci ada di Hackerspace, siapa pun boleh masuk. Namun dalam praktiknya, orang tidak pernah benar-benar tahu apakah ada orang di sana.
Mereka bisa menelepon ruang itu, atau bahkan mengirim email ke milis, sementara orang yang saya kenal biasanya akhirnya bertanya langsung padaku - hei, ada orang di ruang saat ini? Karena saya tidak selalu tahu jawabannya, pencarian dimulai untuk solusi yang lebih baik - mungkin lebih teknologis atau lebih hackish: mari kita bangun sistem check-in/out elektronik yang akan menampilkan status saat ini di situs web kami.
Ide utamanya adalah di Taipei hampir semua orang memiliki EasyCard, kartu RFID 13,56MHz yang digunakan untuk semua transportasi publik di kota dan banyak lagi. Modul antena kartu RC522 tampaknya mampu membaca kartu dengan baik, dan yang saya butuhkan untuk mendapatkannya adalah nomor ID yang cukup sederhana (setelah mencari di forum Arduino untuk kode sumber).
Proyeknya singkatnya:
Gunakan Arduino Mega dengan board RC522 untuk mendapatkan nomor ID dari EasyCard tertentu
Gunakan saklar untuk mengetahui apakah orang sedang check in atau check out
Gunakan LED untuk memberikan umpan balik dan antarmuka pengguna dasar untuk perangkat keras
Server Node.js untuk berkomunikasi dengan Arduino, menghubungkan database check-in/out, dan menyediakan API serta akses real-time ke data
Buat sedikit antarmuka di situs web untuk menampilkan status check-in
Sekarang mari saya membahas berbagai bagian secara rinci.
RFID
Modul RC522 memiliki 8 pin, dan Arduino dapat menggunakan library SPI untuk berkomunikasi dengannya. Saya menggunakan Arduino Mega ADK, karena pin SPI mudah diakses, tidak seperti misalnya Leonardo, untuk yang harusnya saya membuat kabel atau header baru. Koneksi RC522(nomor pin)->Mega(nomor pin) dilakukan sehingga:
SA(1) → SS(53)
SCK(2) → SCK(52)
MOSI(3) → MOSI(51)
MISO(4) → MISO(50)
(5) tidak terhubung
GND(6) → GND
RST(8) → (pin digital manapun)
+3.3V(8) → +3.3V
RFID-RC522, dengan kartu kosong dan pin
Kode sumber untuk berbicara dengan kartu berasal dari blog, dan aslinya dari toko teknologi di Cina, saya duga (berdasarkan banyak komentar bahasa China Sederhana).
Saklar dan Umpan Balik Visual
Saya ingin membuat antarmuka se sederhana mungkin untuk pembaca kartu. Ditambahkan pasang saklar dan LED ini (D1 hijau, dan D2 merah). Setelah Arduino menerima ID kartu dari pembaca, LED berkedip untuk meminta orang menekan tombol Check In atau Check Out. Jika mereka menekan salah satunya, LED yang sesuai berkedip sangat terang untuk sementara waktu, dan ID kartu serta event check-in/out dikirim ke komputer yang terhubung melalui koneksi serial
Rangkaian (sangat dasar) untuk tombol check-in/out dan LED umpan balik visual. "Pin" merujuk pada pin Arduino yang digunakan dalam versi saat ini
Jika tidak ada penekanan tombol dalam sekitar 10 detik, pembacaan dibuang dan pembaca kartu kembali ke mode mendengarkan.
Webserver
Node.js sangat berguna untuk membuat layanan web cepat, dan dukungan library-nya tidak terlalu buruk, meskipun tidak semua mulus: dokumentasinya seringkali minim. Namun, itu adalah yang paling cepat untuk menjalankan hal-hal, karena saya sebelumnya telah menggunakan hampir semua komponen yang diperlukan.
Server berkomunikasi dengan Arduino melalui library serialport. Saya lebih terbiasa dengan pyserial Python, meskipun dalam hal ini sangat nyaman bahwa serialport dapat memancarkan event baca, jadi server cukup menunggu hingga ada yang dapat dibaca dan menjalankan beberapa fungsi pada data yang masuk. Dalam pengalaman saya, serialport tidak akan baik untuk setiap kasus sudut yang saya temui di dunia serial, namun dalam pengaturan ini bekerja dengan indah.
Saya memilih SQLite3 untuk menyimpan data, menggunakan library sqlite3. Ada banyak yang lain, harus mencari tahu yang mana masih sedang dikembangkan. Library ini tidak terlalu buruk, meskipun saya menemukan diri saya perjuangan dengan kurangnya dokumentasi dan asinkronisasi cukup banyak. Kode yang dihasilkan cukup jelek, tentu saja, di beberapa tempat tidak efisien karena saya tidak tahu cara mencapai hasil yang diinginkan dengan cara yang lebih singkat, namun sepertinya bekerja dan itulah yang penting untuk prototipe.
Pertama saya membuat REST API sederhana untuk menanyakan orang yang saat ini check in, dan kemudian menambahkan pembaruan push (real-time) melalui socket.io, untuk membuatnya lebih baik. Luar biasa bahwa tanpa polling, semua klien dapat diperbarui saat seseorang masuk atau keluar.
Karena kode ini berjalan pada komputer yang berbeda dari server web utama kami, harus bermain-main dengan header Access-Control-Allow-Origin, dan menyesuaikan pengaturan router untuk membuatnya dapat diakses oleh web dengan benar.
Mencoba menambahkan skrip yang hampir mandiri yang dapat dimuat oleh front-end, dan itu menangani segalanya, hanya butuh elemen span atau div HTML yang sesuai untuk menampilkan informasi.
Pengaturan perangkat keras untuk check-in/out: Arduino Mega, rangkaian RFID-RC522, dan beberapa saklar serta LED.
Hasilnya cukup baik, selama pembaca kartu tidak crash. Awalnya hasilnya ditampilkan dalam tabel, tetapi ingin membuatnya lebih manusia, jadi inilah format yang saya hasilkan:
Tangkapan layar halaman utama dengan satu situasi check-in tertentu
Ada juga orang yang tidak punya nama, mereka hanya muncul seperti "Saat ini ada tiga orang yang check in di Hackerspace: Greg, dan dua orang lain."
SpaceAPI
Ada juga proyek bernama Space API untuk spesifikasi seragam untuk mengekspos informasi mengenai ruang itu sendiri (
Gadget check-in ini terintegrasi dengan endpoint Space API Taipei Hackerspace kami, menunjukkan status buka kami, jadi dapat digunakan dengan misalnya aplikasi Android My Hackerspaces, atau dengan aplikasi lain yang tercantum di situs Space API.
It lives!
Ini adalah video demonstrasi cepat tentang cara kerjanya:
Jadi Anda dapat memeriksa situs web kami di https://taipeihack.org/#open untuk hasil langsung, dan datang jika Anda di sekitar lingkungan jika ada orang di 'space.
Seluruh kode sumber dibagikan di repositori Github: skets Arduino, skrip server, dan file tambahan lainnya. Saya yakin ada banyak hal yang dapat ditingkatkan tentangnya...
Tulisan asli: Electronic check-in at the Taipei Hackerspace