
Pada hari kerja, saya telah mengembangkan perangkat lunak perusahaan selama 17 tahun, saya memiliki banyak hobi yang berbeda, tetapi pada akhirnya saya menemukan apa yang telah saya pegang selama 5 tahun dan tidak akan membiarkannya. Sejak 2013, saya menghabiskan sebagian besar waktu luang saya untuk motorcross dan enduro sepeda motor off-road, termasuk berpartisipasi secara teratur dalam kompetisi amatir. Setelah gagal pada Juni 2017, saya berakhir di rumah sakit dengan fraktur lengkap humerus kanan. Saya meninggalkan rumah sakit, sadar dan menjadi jelas bahwa tidak mungkin untuk bepergian selama dua atau tiga bulan lagi, tetapi kebiasaan kerja aktif tetap ada. Kemudian saya memutuskan untuk mencoba mengatur lomba sendiri untuk teman-teman saya. Dari sudut pandang teknis, saya tertarik pada waktu, tentang bagaimana saya membuat sistem saya sendiri dan menghabiskan balapan membaca di bawah potongan.
Selama sebulan di malam hari, ia menulis versi pertama dari program wasit. Saya menggunakan C # dan WPF untuk implementasi, hanya karena saya mengenal mereka lebih baik dan saya tidak perlu menghabiskan waktu mempelajari dokumentasi. Dalam program itu dimungkinkan untuk merekam peserta dengan angka awal, dibagi ke dalam kelas dan ras. Selama perlombaan, perlu untuk mengemudi dalam jumlah peserta yang naik melalui garis finish. Semuanya bekerja dengan baik, dan mengingat sedikitnya jumlah peserta dalam lomba pertama (sekitar 40 orang), tidak sulit untuk menghitung semuanya dengan tangan.
Namun, sebagai seorang programmer, saya ingin lebih banyak otomatisasi, saya tidak suka pekerjaan rutin manual, dan selain itu, merekam dengan seratus peserta dengan tangan saya sudah cukup sulit. Hasilnya, pada tahun 2017, ia melakukan tahap lain, di mana sudah ada 3 kelas terpisah dan lebih dari seratus peserta, acara ini cukup sukses dan diputuskan untuk menggunakan serif elektronik pada musim berikutnya.

Angka tersebut menunjukkan versi modern dari program dengan dukungan RFID dan remote control dari smartphone. Ada lebih sedikit elemen dalam versi pertama.
Pemilihan peralatan
Tentu saja topik ini bukan hal baru, ada banyak pilihan yang sudah jadi, tetapi kebanyakan dari mereka tidak terlalu senang dengan harganya. Misalnya, sistem waktu balapan profesional dari perusahaan Italia AMB berharga sekitar € 13.000 dan dilengkapi dengan 20 transponder bergulir. Setiap chip tambahan berharga € 100 dan mereka dapat dibuang, yaitu, setelah 3-5 tahun, ketika baterai mati di dalamnya, itu tidak dapat diganti secara teratur. Sisa dari sistem ini sangat baik, digunakan di semua ras dunia, ia memiliki akurasi hingga seperseribu detik dan seterusnya. Bagi penggemar hobi yang mengorganisir balapan untuk teman di waktu luangnya, sistem ini tidak cocok. Saya juga menemukan banyak sistem waktu siap pakai untuk maraton, triathlon dan kompetisi serupa lainnya. Sistem menggunakan tag RFID. Tapi spesifiknya memalukan di sana - orang menyelesaikan maraton paling cepat dengan kecepatan 20 km / jam, dan di motorcross biasanya memberi finish pada batu loncatan terbesar, yang mereka masuki dengan kecepatan 70-80 km / jam. Tetapi harga tag RFID sekitar 11 rubel masing-masing diizinkan untuk mendistribusikannya dalam jumlah berapapun.
Menggunakan RFID
Secara umum, teknologi RFID pada awalnya tidak dirancang untuk mendeteksi balapan, jika Anda membaca spesifikasi chip dan pembaca, Anda dapat menemukan batasan pada kecepatan chip relatif terhadap antena beberapa meter per detik. Tetapi saya tahu bahwa sistem yang serupa telah berhasil digunakan selama bertahun-tahun dalam seri balap terkenal xsr-moto.ru, di mana saya sendiri berpartisipasi berkali-kali dan memasang tag RFID di helm saya. Sergey Mindin, penyelenggara seri itu, dengan ramah membagikan informasi dan mengarahkan saya ke motosponder.com, tempat ia memperoleh serifnya.

Ini membantu memutuskan pilihan pembaca pertama - Alien Technology F800, karena saya tahu pasti bahwa itu akan bekerja dalam kondisi yang saya butuhkan. Selain Alien, saya mempertimbangkan Imping Speedway Revolution R420 dan melihat kualitas SDK dan dokumentasi yang akan saya beli. Namun pada akhirnya, ia memilih F800 sebagai solusi yang sengaja terbukti.
Pembaca saya berharga sekitar $ 1600, dibeli di Moskow, segera membeli dua antena dan kabel frekuensi tinggi 5 meter untuk mereka. Kejutan yang tidak menyenangkan adalah harga kabel RF. Kabel 10 meter akan berharga lebih mahal dari antena itu sendiri, dan mudah untuk mematahkannya, misalnya, menekuk atau menghancurkannya dengan kaki Anda.
Solusi: membeli satu set peralatan dan perangkat lunak yang siap pakai dari motosponder seharga $ 3.500 mahal dan bukan olahraga. Anda hanya perlu membeli peralatan yang harganya sekitar $ 2.200, dan menulis sendiri perangkat lunaknya. Apa yang bisa rumit di sana? :)
Melihat harga-harga di atas, muncul pertanyaan logis: apakah mungkin untuk menabung? Beli pembaca China, harga mulai dari $ 200 Ada pemikiran seperti itu, tetapi masih ada pemikiran bahwa saya memiliki waktu yang sangat terbatas, dan stabilitas desain akhir dan kemudahan pengembangan adalah penting. Sebelum ini, saya tidak punya pengalaman praktis dengan RFID dan tidak tahu keterbatasan fisik apa yang mungkin saya temui. Karena itu, ide pembaca Cina ditunda, tetapi tidak dilupakan.
Ikhtisar Opsi RFID
RFID adalah nama umum untuk seluruh keluarga teknologi yang berbeda dalam hal frekuensi dan protokol pertukaran data.
- LF RFID - kisaran kilohertz, rentang rendah, dan kecepatan baca.
- HF 14 MHz - ini biasanya kartu "magnetik" ke gedung, kunci interkom, kartu pembayaran nirkontak, NFC di telepon. Secara umum, frekuensi sangat umum, tetapi radius komunikasi hingga satu meter. Sekali lagi tidak cocok untuk kasus saya. Namun, saya tahu satu sistem waktu yang berfungsi sempurna dibangun di atas smartphone dan kartu metro. Hanya untuk menandai pengendara, ia harus berhenti dan hakim harus menempelkan telepon ke tanda.
- UHF ~ 840 - 930 MHz - kisaran di mana semua sistem waktu peristiwa massa dibangun. Dalam kondisi optimal, tag dibaca pada jarak lebih dari 10 meter, kecepatan transfer data cukup untuk membaca tag pada 50 kali atau lebih per detik, gelombang frekuensi ini tidak begitu banyak diserap oleh air seperti pada rentang berikutnya.
- UHF 2,4 GHz - mungkin saya terlihat buruk, tetapi saya menyimpulkan bahwa frekuensi ini adalah penemuan orang Cina, karena saya tidak menemukan pembaca seperti itu dari produsen bermerek. Bagaimanapun, saya memutuskan untuk tidak menggunakan frekuensi ini, karena terlalu baik teredam oleh air, kotoran, kabut dan kebisingan lainnya.
Penjelasan lebih rinci tentang frekuensi dan standar dapat ditemukan di tautan rfidcenter.ru/page/frequencies-ranges berikut
RFID UHF
Jadi, saya menyimpulkan bahwa opsi terbaik untuk aplikasi saya adalah rentang UHF, tergantung pada batasan regional, ini akan menjadi frekuensi dari sekitar 840 hingga 930 MHz dan jumlah saluran dari 2 hingga 30.
F800 saya dirancang untuk kawasan Eropa dan disetel untuk beroperasi pada kisaran 865-867 MHz. Bersama dengan pembaca, saya membeli beberapa tag yang berbeda, semuanya memiliki karakteristik jangka panjang seperti yang dijelaskan oleh produsen, kisaran spesifik dan kecepatan membaca biasanya tidak tertulis di mana pun, karena sangat tergantung pada kondisi. Saya melakukan banyak percobaan membaca label yang berbeda, dalam jumlah dan konfigurasi antena yang berbeda. Berikut ini kesimpulan singkatnya:
- Di area terbuka, jika Anda secara tepat mengarahkan tanda pada antena, sangat mungkin untuk mendapatkan pembacaan yang stabil pada jarak 10 meter.
- Bentuk bidang pada antena mirip dengan setetes, sehingga pembacaan paling percaya diri diperoleh pada jarak 3-5 meter dari antena - di bagian terluas drop. Tentu saja, bentuk pola radiasi tergantung pada model antena, saya menggunakan antena panel datar dengan keuntungan 10dbi, 60/65 ° antenna31.ru/?product=rfid-panelnaya-antenna-pa868-10-rhcp
- Antena adalah polarisasi sirkuler dan linier. Dengan polarisasi linier, rentang bacaan jauh lebih tinggi, tetapi orientasi label harus sesuai dengan orientasi antena.
- Semua tag "jarak jauh" bekerja kurang lebih sama. Di sini perlu diklarifikasi bahwa saya menggunakan tag satu merek - Alien, mungkin mereka semua berada di chip yang sama.
- Menghidupkan daya pancar maksimum jauh dari selalu merupakan solusi terbaik. Di rumah di sebuah ruangan kecil, karena pantulan, kecepatan membaca turun sangat banyak. Hal yang sama dapat terjadi di ruang terbuka, jika dua antena saling memandang, mereka akan bekerja seperti cermin.
- Secara umum, dengan RFID, lebih banyak masalah berasal dari terlalu banyak daya dan jangkauan membaca daripada sebaliknya. Jika Anda "bersinar" di lapangan dengan daya maksimum, Anda bisa mendapatkan banyak bacaan acak dari area yang luas (puluhan meter persegi). Karena itu, penting untuk menyesuaikan daya dan lokasi antena sehingga pembacaan dilakukan pada area terkecil.
- Kecepatan membaca tag tergantung pada jumlah mereka di bidang tampilan pembaca. Pernyataan Kapten, tetapi saya mengubah angka tertentu untuk kondisi yang optimal:
- Satu tanda - 50-70 / dtk
- 5 dan lebih banyak tanda - 250-280 / detik
- Sekitar 280 kali dibaca per detik - ini adalah batas untuk sejumlah tag di lapangan, dan tentu saja, jika ada beberapa puluhan tag, kecepatannya akan turun secara signifikan karena tabrakan
- Tanda pada sepeda motor sungguhan yang bergerak pada kecepatan lebih dari 80 km / jam dapat terbaca, tetapi tidak dalam posisi apa pun, diharapkan bahwa tanda dan antena diorientasikan sehingga mereka sedikit saling memandang. Misalnya, antena sedikit diarahkan ke pengendara, dan tanda itu ditempel di suatu tempat di bagian depan sepeda motor. Pada kecepatan yang lebih rendah, tag dan antena dapat tegak lurus terhadap trek.
Pada tahap ini, semuanya terlihat cukup bagus, 50 pembacaan per detik, berarti bahwa rata-rata waktu antara pembacaan adalah 20 milidetik, tetapi ini juga perlu diperiksa. Program untuk mengumpulkan statistik dilengkapi dengan menghitung perbedaan waktu antara pembacaan, itu menampilkan terburuk, waktu terbaik dan delapan saham diukur dalam milidetik. Ternyata pembaca membaca jauh dari merata. Ini dijelaskan oleh protokol, menurutnya, pembaca harus berhenti menyiarkan setidaknya 10 milidetik setiap beberapa detik. Ini adalah tes untuk dua label di lapangan:

- 44 ms - terburuk
- 20 ms - desil kesepuluh
- 1 ms adalah yang terbaik
- 3,2 ms - waktu rata-rata
- 104 dibaca per detik
Artinya, dalam 5 detik uji, sebagian besar bacaan berjalan dengan selisih satu milidetik, dan kemudian hening 44 milidetik. Ini adalah fitur yang tidak menyenangkan untuk balapan, selama 44 milidetik dengan kecepatan 20 meter per detik, pengendara menempuh jarak 80 sentimeter dan jika ada gangguan cukup melaju melewati antena. Kira-kira situasi ini direproduksi dalam tes nyata yang dijelaskan di atas. Dan ada juga solusi - untuk mengarahkan antena ke arah pengendara, maka ruang, dan karena itu waktu membaca, sangat meningkat. Dan tentu saja Anda perlu menambahkan cara cadangan untuk melacak pengendara, misalnya: merekam video, seseorang dengan selembar kertas dan pensil, seseorang yang memasukkan angka ke dalam program dengan tangan.
Selesaikan konfigurasi garis
Adalah satu hal untuk membaca tag dengan antena di atas meja, dan satu lagi dalam perlombaan nyata dengan pengendara. Saya mempertimbangkan dua opsi utama untuk konfigurasi garis finish.
Pertama, antena terletak pada tripod di sisi trek. Idealnya, antena umumnya hanya berdiri di satu sisi dan "bersinar" di trek. Tetapi pada saat yang sama, lokasi tanda pada pembalap menjadi asimetris, tidak mungkin, misalnya, untuk memulai balapan di arah yang berlawanan. Apalagi membaca di satu sisi saja tidak begitu bisa diandalkan. Maka Anda harus meletakkan antena di kedua sisi lintasan agar saling "bersinar". Ini sudah membutuhkan konstruksi bingkai di sepanjang rute di mana kabel RF akan diletakkan, dan bahkan dalam konfigurasi ini masalah lebar lintasan tetap. Kebetulan lintasannya 8-10 meter, dan dengan mempertimbangkan margin untuk pemasangan tripod, bisa berubah menjadi 12-13 meter. Pada jarak ini, kegagalan membaca dapat dengan mudah terjadi.
Opsi kedua, terbukti selama bertahun-tahun oleh motosponder dan xsr-moto, adalah memasang antena pada bingkai di atas trek dan mengarahkannya ke bawah. Label harus menempel pada helm pengendara atau tubuh bagian atas. Hasilnya, ternyata jarak dari antena ke tanda akan selalu tidak lebih dari 1,5 meter (ketinggian bingkai adalah 3 meter, tetapi pengendara jarang melewati garis finish dengan helm di permukaan tanah). Dan lebar lintasan bisa sedikit dipotong oleh bingkai itu sendiri.

Saat ini saya menggunakan bingkai selebar 6 meter dengan tiga antena, lebarnya dapat ditingkatkan dengan bagian tambahan menjadi 8-9 meter. Setelah itu, Anda akan membutuhkan 4 antena yang terletak sedikit lebih lebar. Menurut pengalaman dua balapan di 2018, lebar 6 meter sudah cukup jika Anda memasang bingkai di bagian trek yang lambat. Ini juga meningkatkan kemungkinan membaca label - kami membunuh dua burung dengan satu batu.
Waktu
Setelah semuanya menjadi lebih atau kurang jelas dengan besi, tiba saatnya untuk benar-benar menghitung lingkaran. Sekilas, semuanya sederhana: buat tabel tempat setiap pengendara diberi pengenal tag dan rekam setiap sinyal dari pembaca.
Hampir begitu, tetapi sinyal dari pembaca perlu disaring, karena ketika tag berada di bidang pandang pembaca, itu dibaca hingga lima puluh kali per detik. Penting juga untuk memperhitungkan bahwa dalam kasus yang jarang, tanda masih belum dapat dibaca, oleh karena itu, program takik harus dapat menerima data real-time dari pembaca, dari operator, yang secara manual memasukkan angka dan memungkinkan pengeditan tanda setelah akhir lomba.
Data yang disediakan oleh pembaca dan operator melewati filter untuk deduplikasi dan berubah menjadi jalur angka. Ini adalah array satu dimensi jumlah pengendara dalam urutan di mana mereka melewati garis finish. Misalnya: [1, 2, 3, 2, 3, 1]. Dari trek ini Anda dapat melihat bahwa pembalap naik dua putaran, pada putaran pertama posisi pembalap adalah 1, 2, 3. Tetapi pada putaran kedua, nomor satu memiliki masalah dan berakhir di akhir. Hasilnya, nomor dua dimenangkan, diikuti oleh nomor tiga dan kemudian nomor satu. Untuk menghitung protokol akhir, itu adalah urutan yang digunakan, dan bukan cap waktu. Ini dilakukan untuk kompatibilitas dengan pengaturan waktu manual klasik, ketika juri mencatat nomor trek dalam buku catatan. Meskipun belum ada fungsi seperti itu, mudah untuk menerapkan pemuatan nomor trek dari juri tambahan. Sebagai hasil dari perhitungan, tabel berikut diperoleh:

Kesimpulan
Artikel ini hanya menjelaskan sebagian kecil pengalaman yang telah saya dapatkan selama 1,5 tahun terakhir. Lebih lanjut saya ingin berbicara tentang membuat situs untuk mendaftarkan pengendara dan mempublikasikan hasil dalam mode Live, mengembangkan versi kedua dari kompleks takik perangkat keras berdasarkan pada modul RFID Cina dan Orange Pi, proses mempersiapkan trek, mengatur acara massal dan banyak lagi. Jika topiknya menarik, tinggalkan komentar.
Proyek ini terbuka, sebagian besar kode diterbitkan di github.com/maxbl4, sisanya juga akan segera, Anda hanya perlu membersihkan kata sandi dan kunci API dari kode :-) Jika Anda tertarik untuk membantu pengembangan proyek, pelajari sesuatu yang baru, misalnya, belajar mengendarai sepeda motor, menulis di .Net Core dan Angular, silakan hubungi. Tumpukan teknologi saat ini adalah. Net 4.7, .Net Core 2.2, Docker, Angular 7.1, MySql 10.3
Saat ini, semua kode untuk bekerja dengan dua jenis pembaca RFID yang saya gunakan tersedia untuk umum: github.com/maxbl4/RfidDotNet
Pustaka .Net Standard 2.0, implementasi protokol lengkap, ketergantungan eksternal hanya pada SerialPorlStream untuk bekerja dengan port serial di Linux.
Anda dapat menonton sistem beraksi, berkomunikasi, dan bersenang-senang di festival sepeda motor olahraga pada 16 Februari di dekat Sergiev Posad vk.com/event74123582 di acara ini saya memberikan waktu