Ketika saya masih di sekolah dasar di sekolah menengah (dari Maret hingga Desember 2016), saya sangat terganggu dengan situasi yang berkembang di kantin sekolah kami.
Masalah Satu: Menunggu Antrian Terlalu PanjangMasalah apa yang saya amati? Ini satu:

Banyak siswa menumpuk di distribusi dan mereka harus berdiri lama (lima hingga sepuluh menit). Tentu saja, ini adalah masalah umum dan skema layanan yang adil: semakin lambat Anda tiba, semakin lambat Anda dilayani. Jadi Anda bisa mengerti mengapa Anda harus menunggu.
Masalah Dua: Kondisi yang Tidak Sama untuk MenungguTetapi, tentu saja, itu belum semuanya, saya harus mengamati satu lagi, masalah yang lebih serius. Sangat serius sehingga pada akhirnya saya memutuskan untuk mencoba mencari jalan keluar dari situasi tersebut. Siswa sekolah menengah (yaitu, setiap orang yang belajar setidaknya satu tingkat lebih tinggi) dan guru pergi ke distribusi tanpa mengantri. Ya, ya, dan Anda, sebagai siswa sekolah dasar, tidak bisa memberi tahu mereka apa pun. Sekolah kami memiliki kebijakan yang agak ketat terkait hubungan antar kelas.
Oleh karena itu, saya dan teman-teman saya, ketika kami adalah pendatang baru, datang ke ruang makan, hendak mendapatkan makanan - dan kemudian siswa sekolah menengah atau guru muncul dan hanya mendorong kami pergi (beberapa orang yang lebih baik hati mengizinkan kami untuk tetap berada di tempat kami dalam antrian). Kami harus menunggu lima belas hingga dua puluh menit lagi, meskipun kami tiba lebih awal dari yang lain.
Kami memiliki waktu makan siang yang sangat buruk. Pada siang hari, benar-benar semua orang (guru, siswa, staf) bergegas ke ruang makan, jadi kami, sebagai siswa sekolah menengah pertama, tidak pernah memiliki kegembiraan.
Solusi umumTapi, karena pendatang baru tidak punya pilihan, kami datang dengan dua cara untuk mengurangi risiko kami dilemparkan ke ujung telepon. Yang pertama adalah datang ke ruang makan sangat awal (yaitu, secara harfiah sebelum makanan disajikan sama sekali). Yang kedua adalah secara khusus menghabiskan waktu di ping-pong atau bola basket dan datang dengan penundaan yang lama (dua puluh menit setelah dimulainya makan malam).
Hingga taraf tertentu, ini berhasil. Tetapi, jujur saja, tidak ada yang bersemangat untuk bergegas ke ruang makan dengan semua kakinya, hanya untuk dapat makan, atau memakan sisa makanan sisa di belakang sisanya, karena ia termasuk di antara yang terakhir. Kami membutuhkan solusi yang akan memberi tahu kami ketika ada beberapa orang di ruang makan.
Alangkah baiknya jika beberapa peramal meramalkan masa depan bagi kita dan mengatakan kapan tepatnya pergi ke ruang makan sehingga kita tidak perlu menunggu lama. Masalahnya adalah bahwa setiap hari semuanya berubah secara berbeda. Kami tidak bisa hanya menganalisis pola dan mengidentifikasi momen terbaik. Kami hanya punya satu cara untuk mengetahui bagaimana keadaan di ruang makan - untuk sampai ke sana dengan berjalan kaki, dan jalan setapak bisa beberapa ratus meter, tergantung di mana Anda berada. Jadi, jika Anda datang, lihat garis, kembali dan terus dalam semangat yang sama sampai menjadi pendek, Anda akan kehilangan banyak waktu. Secara umum, kelas dasar hidup menjijikkan, dan tidak ada yang bisa dilakukan tentang hal itu.
Eureka - gagasan menciptakan Sistem Pemantauan KantinDan tiba-tiba, sudah di tahun akademik berikutnya (2017), saya berkata pada diri sendiri: "Bagaimana jika kita membuat sistem yang akan menunjukkan panjang antrian secara real time (yaitu, mengidentifikasi kemacetan lalu lintas)?" Jika saya bisa berhasil, gambarannya akan seperti ini: siswa sekolah dasar hanya akan melihat telepon untuk mendapatkan data terbaru tentang tingkat beban kerja saat ini, dan menarik kesimpulan apakah masuk akal untuk pergi sekarang.
Intinya, skema ini memperlancar ketimpangan melalui akses ke informasi. Dengan bantuannya, para siswa muda dapat memilih apa yang harus mereka lakukan yang terbaik - pergi dan berbaris (jika tidak terlalu lama) atau menghabiskan waktu dengan manfaat yang lebih besar, dan kemudian memilih momen yang lebih cocok. Saya sangat senang dengan pemikiran ini.
Merancang Sistem Pemantauan Ruang Makan
Pada bulan September 2017, saya perlu mengirimkan proyek untuk kursus pemrograman berorientasi objek, dan saya menyatakan sistem ini sebagai proyek saya.
Rencana Sistem Awal (September 2017)Pemilihan Perangkat Keras (Oktober 2017)
Sakelar sentuhan sederhana dengan pull-up resistor. Sirkuit dengan lima perisai dalam tiga baris untuk mengenali garis dalam tiga garisSaya memesan hanya lima puluh sakelar membran, papan mini Wemos D1 berdasarkan ESP8266, serta beberapa klem cincin, yang saya rencanakan untuk memasang kabel enamel.
Prototipe dan Pengembangan (Oktober 2017)Saya mulai dengan papan tempat memotong roti - mengumpulkan sirkuit di atasnya dan mengujinya. Jumlah materi saya terbatas, jadi saya membatasi diri pada sistem dengan lima papan berjalan.
Untuk perangkat lunak yang saya tulis di C ++, saya menetapkan tujuan ini:
- Bekerja terus menerus dan mengirim data hanya pada periode-periode ketika makanan disajikan (sarapan, makan siang, makan malam, camilan sore).
- Kenali situasi dengan antrian / kemacetan lalu lintas di ruang makan pada frekuensi sedemikian rupa sehingga data kemudian dapat digunakan dalam model pembelajaran mesin (katakanlah, 10 Hz).
- Kirim data ke server dengan cara yang efisien (ukuran paket harus kecil) dan dalam interval pendek.
Untuk mencapainya, saya perlu melakukan hal berikut:
- Gunakan modul RTC (Real Time Clock) untuk terus memantau waktu dan menentukan waktu kapan makanan disajikan di ruang makan.
- Gunakan metode kompresi data untuk mendaftarkan status perisai dalam satu karakter. Memperlakukan data sebagai kode lima digit biner, saya mengikat berbagai nilai ke karakter ASCII, sehingga mereka mewakili elemen data.
- Gunakan ThingSpeak (alat IoT untuk analisis dan grafik online), mengirim permintaan HTTP menggunakan metode POST.
Tentu saja, ada beberapa bug. Sebagai contoh, saya tidak tahu bahwa operator sizeof () mengembalikan nilai 4 untuk objek char *, dan bukan panjang string (karena bukan array dan, karenanya, kompiler tidak menghitung panjang) dan sangat terkejut mengapa permintaan HTTP saya hanya berisi empat karakter dari seluruh url!
Juga, saya tidak meletakkan tanda kurung di tahap #define, dan ini menyebabkan hasil yang tidak terduga. Katakanlah:
#define _A 2 * 5 int a = _A / 3;
Di sini akan layak untuk mengharapkan bahwa A akan sama dengan 3 (10/3 = 3), tetapi sebenarnya itu dihitung secara berbeda: 2 (2 * 5/3 = 2).
Akhirnya, bug penting lain yang telah saya tangani adalah Reset pada anjing penjaga. Dengan masalah ini, saya menderita untuk waktu yang sangat lama. Ternyata kemudian, saya mencoba mengakses registry tingkat rendah pada chip ESP8266 dengan cara yang salah (saya keliru mendaftarkan nilai NULL untuk pointer ke struktur).
Alas kaki yang saya rancang dan rakit. Pada saat foto itu diambil, dia sudah selamat lima minggu menginjak-injakPerangkat keras (alas kaki)Agar perisai dapat bertahan dari kondisi makan yang keras, saya menetapkan persyaratan berikut untuk mereka:
- Perisai harus cukup kuat untuk secara konstan mendukung berat manusia.
- Perisai harus tipis agar tidak mengganggu orang dalam antrian.
- Switch harus selalu bekerja pada serangan.
- Perisai harus anti air. Ruang makan selalu lembab.
Untuk memenuhi persyaratan ini, saya memilih desain dengan struktur dua lapis - pemotongan laser akrilik pergi ke alas dan penutup atas, dan saya menggunakan bahan gabus sebagai lapisan pelindung.
Tata letak perisai yang saya buat di AutoCAD; ukuran - 400 kali 400 milimeter.
Di sebelah kiri adalah desain yang mulai berfungsi. Di sebelah kanan adalah opsi dengan koneksi legoNgomong-ngomong, saya akhirnya menolak desain yang tepat karena dengan sistem fiksasi seperti itu ternyata harus ada 40 sentimeter di antara perisai, yang berarti saya tidak bisa menutupi jarak yang diperlukan (sepuluh meter plus).


Untuk menghubungkan semua sakelar, saya menggunakan kabel enamel - semuanya membutuhkan lebih dari 70 meter! Di tengah setiap perisai, saya menempatkan sakelar membran. Dua klip menonjol dari slot samping ke luar, ke kiri dan kanan sakelar.
Nah, untuk kedap air, saya menggunakan pita listrik. Banyak pita listrik.
Dan itu semua berhasil!
Periode dari 5 November hingga 12 DesemberFoto sistem - kelima perisai terlihat di sini. Di sebelah kiri adalah elektronik (D1-mini / Bluetooth / RTC)Pada tanggal 5 November, jam delapan pagi (waktu sarapan), sistem mulai mengumpulkan data terbaru tentang situasi di ruang makan. Saya tidak bisa mempercayai mata saya. Sekitar dua bulan yang lalu, saya membuat sketsa skema umum, duduk di rumah dengan piyama, dan sekarang, tolong, seluruh sistem bekerja tanpa hambatan tanpa hambatan ... atau tidak.
Bug dengan perangkat lunak selama pengujianTentu saja, ada cukup banyak bug dalam sistem. Inilah yang saya ingat.
Program tidak memeriksa titik Wi-Fi yang tersedia ketika mencoba menghubungkan klien ke ThingSpeak API. Untuk memperbaiki kesalahan, saya menambahkan cek ketersediaan Wi-Fi sebagai langkah tambahan.
Dalam fungsi pengaturan, saya terus memanggil "WiFi.begin" hingga koneksi muncul. Kemudian, saya mengetahui bahwa firmware ESP8266 menginstal koneksi, dan fungsi mulai hanya digunakan ketika mengatur Wi-Fi. Saya memperbaiki situasi dengan mulai memanggil fungsi hanya sekali, selama pengaturan.
Saya menemukan bahwa antarmuka baris perintah yang saya buat (dirancang untuk mengatur waktu, mengubah pengaturan jaringan) tidak berfungsi saat istirahat (yaitu, di luar sarapan, makan siang, makan malam, dan camilan sore). Saya juga melihat bahwa ketika tidak ada logging, loop internal dipercepat berlebihan dan data serial dibaca terlalu cepat. Oleh karena itu, saya mengatur penundaan sehingga sistem akan menunggu perintah tambahan tiba ketika mereka diharapkan.
Ode to WatchdogDan, dan setelah itu tentang masalah dengan pengawas waktu - saya memutuskannya pada tahap pengujian dalam kondisi "lapangan". Tanpa berlebihan, saya hanya memikirkan ini selama empat hari. Setiap istirahat (berlangsung sepuluh menit) saya bergegas ke ruang makan, hanya untuk mencoba versi kode yang baru. Dan ketika distribusi dibuka, saya duduk di lantai selama satu jam, mencoba menangkap serangga. Saya tidak memikirkan makanan! Terima kasih untuk semua ESP8266 pengawas waktu yang baik!
Bagaimana saya berurusan dengan WDTCuplikan kode yang saya perebutkanSaya menemukan sebuah program, atau lebih tepatnya, ekstensi untuk Arduino, yang menganalisis struktur data perangkat lunak ketika Wdt-reset terjadi, merujuk pada file ELF dari kode yang dikompilasi (korelasi antara fungsi dan pointer). Ketika ini dilakukan, ternyata kesalahan dapat diperbaiki sebagai berikut:

Apa-apaan ini! Nah, siapa yang tahu bahwa memperbaiki bug di sistem real-time sangat sulit! Namun demikian, saya menghapus bug, dan ternyata itu bug yang bodoh. Karena tidak berpengalaman, saya menulis loop sementara di mana array melampaui batas array. Fiuh! (indeks ++ dan indeks ++ adalah dua perbedaan besar).
Masalah perangkat keras sedang diujiTentu saja, peralatan, yaitu, alas kaki, jauh dari ideal. Seperti yang diharapkan, salah satu sakelar macet.
Pada 7 November, saat makan siang, sakelar pada perisai ketiga macetDi atas, saya memberikan tangkapan layar grafik online dari situs web ThingSpeak. Seperti yang Anda lihat, sesuatu terjadi sekitar 12:25, setelah itu perisai nomor tiga rusak. Akibatnya, panjang antrian didefinisikan sebagai 3 (nilainya 3 * 100), bahkan ketika sebenarnya tidak mencapai perisai ketiga. Cara mengatasinya adalah saya menambahkan lebih banyak lapisan (ya, pita listrik) untuk membuat sakelar lebih luas.
Kadang-kadang sistem saya benar-benar dicabut ketika kawat menempel di pintu. Troli diangkut melalui pintu ini ke ruang makan dan paket dibawa, jadi dia membawa kawat di belakangnya, menutup, dan menariknya keluar dari slot. Dalam kasus seperti itu, saya melihat kegagalan yang tidak terduga dalam penerimaan data dan menduga bahwa sistem terputus dari sumber listrik.
Penyebaran sistem sekolahSeperti yang telah disebutkan, saya menggunakan ThingSpeak API, yang memvisualisasikan data di situs dalam bentuk grafik, yang sangat nyaman. Secara umum, saya, pada kenyataannya, hanya melemparkan tautan ke jadwal saya ke grup sekolah di Facebook (saya mencari posting ini selama setengah jam dan tidak menemukannya - ini sangat aneh). Tapi kemudian saya menemukan posting di Band saya, komunitas sekolah, tertanggal 5 November 2017:
Reaksinya sangat hebat!Saya memposting posting ini untuk memicu minat pada proyek saya. Namun, bahkan hanya dengan melihatnya saja sudah cukup menghibur. Katakanlah terlihat jelas di sini bahwa jumlah orang melonjak tajam pada 6:02 dan hampir turun menjadi nol pada 6:10.


Di atas, saya melampirkan beberapa jadwal yang berhubungan dengan waktu makan siang dan teh sore. Sangat menarik untuk dicatat bahwa puncak kemacetan saat makan siang hampir selalu turun pada pukul 12:25 (antrian mencapai perisai kelima). Dan untuk camilan sore hari, kemacetan besar orang umumnya tidak seperti biasanya (panjang antrian adalah maksimal satu perisai).
Kamu tahu apa yang lucu? Sistem ini masih hidup (https://thingspeak.com/channels/346781)! Saya masuk ke akun yang saya gunakan sebelumnya dan melihat ini:
Dalam grafik di atas, saya melihat bahwa pada tanggal 3 Desember, masuknya orang secara signifikan lebih sedikit. Dan tidak heran - itu hari Minggu. Pada hari ini, hampir semua orang pergi ke suatu tempat, karena dalam kebanyakan kasus hanya pada hari Minggu Anda dapat meninggalkan halaman sekolah. Jelas bahwa pada akhir pekan di ruang makan Anda tidak akan melihat jiwa yang hidup.
Bagaimana saya menerima untuk proyek saya hadiah pertama dari Departemen Pendidikan Korea
Seperti yang Anda lihat sendiri, saya tidak mengerjakan proyek ini karena saya sedang berusaha mendapatkan semacam penghargaan atau pengakuan. Saya hanya ingin menerapkan keterampilan saya untuk menyelesaikan masalah kronis yang saya temui di sekolah.
Namun, ahli gizi sekolah kami, Miss O, dengan siapa saya menjadi sangat dekat ketika merencanakan dan mengembangkan proyek saya, suatu kali bertanya kepada saya apakah saya tahu tentang kontes untuk ide-ide untuk ruang makan. Lalu saya pikir itu semacam ide aneh - untuk mengukur ide untuk ruang makan. Tetapi saya membaca buklet informasi dan mengetahui bahwa proyek itu harus diserahkan sebelum 24 November! Baik, baik. Saya segera mengingat konsep, data dan grafik dan mengirim aplikasi.
Perubahan pada ide asli untuk kompetisiOmong-omong, sistem yang saya usulkan pada akhirnya sedikit berbeda dari yang sudah diterapkan. Bahkan, saya mengadaptasi metode asli saya (mengukur panjang antrian secara real time) untuk sekolah-sekolah Korea yang jauh lebih besar. Sebagai perbandingan: di sekolah kami ada tiga ratus siswa, dan di beberapa yang lain begitu banyak orang belajar hanya dalam satu kelas! Saya perlu memahami bagaimana skala sistem.
Oleh karena itu, saya mengusulkan konsep yang lebih didasarkan pada kontrol manual. Saat ini, sekolah-sekolah Korea telah memperkenalkan urutan makan untuk semua kelas, yang sangat dipatuhi, jadi saya membangun kerangka kerja lain dari tipe "respons sinyal". Diasumsikan bahwa ketika kelompok yang mengunjungi ruang makan di depan Anda mencapai batas tertentu dalam panjang antrian (yaitu, antrian menjadi pendek), mereka secara manual akan mengirimkan sinyal menggunakan tombol atau beralih ke dinding. Sinyal akan dikirim ke layar TV atau melalui lampu LED.
Saya hanya benar-benar ingin menyelesaikan masalah yang muncul di semua sekolah di negara ini. Saya menjadi semakin kuat dalam niat saya ketika saya mendengar dari Miss O satu cerita - saya akan memberi tahu Anda sekarang. Ternyata di beberapa sekolah besar jalur melewati kafetaria, ke jalan dua puluh hingga tiga puluh meter, bahkan di musim dingin, karena tidak ada yang dapat membangun proses dengan benar. Dan kadang-kadang terjadi bahwa selama beberapa menit tidak ada yang muncul sama sekali di ruang makan - dan ini juga buruk. Di sekolah-sekolah dengan murid dalam jumlah besar, staf nyaris tidak berhasil melayani semua orang walaupun tidak sedikit waktu yang disediakan untuk makanan menghilang. Karena itu, mereka yang mendekati distribusi paling akhir (biasanya ini adalah siswa sekolah dasar) tidak punya cukup waktu untuk makan.
Jadi, meskipun saya harus mengirim aplikasi dengan tergesa-gesa, saya masih sangat hati-hati mempertimbangkan bagaimana menyesuaikannya untuk penggunaan yang lebih luas.
Pesan bahwa saya memenangkan hadiah pertama!Singkatnya, saya diundang untuk datang dan menyerahkan proyek saya kepada pejabat pemerintah. Jadi saya tegang semua bakat saya di bidang Power Point, datang dan disajikan!
Mulai presentasi (paling kiri - Menteri)Itu adalah pengalaman yang menarik - saya baru saja menemukan sesuatu untuk masalah Stolov, dan entah bagaimana berakhir di pemenang kompetisi. Bahkan berdiri di atas panggung, saya terus berpikir: "Hmm, apa yang saya lakukan di sini?" Tetapi secara umum, proyek ini memberi saya manfaat besar - saya belajar banyak tentang pengembangan sistem embedded dan implementasi proyek dalam kehidupan nyata. Ya, saya mendapat hadiahnya, tentu saja.
Kesimpulan
Ada beberapa ironi di sini: tidak peduli seberapa banyak saya berpartisipasi dalam kompetisi dan pameran ilmiah, yang saya daftarkan dengan sengaja, tidak ada hal baik yang terjadi. Dan di sini kesempatan hanya menemukan saya sendiri dan memberikan hasil yang bagus.
Itu membuat saya berpikir tentang alasan yang mendorong saya untuk mengambil proyek. Mengapa saya mulai bekerja - untuk "menang" atau untuk memecahkan masalah yang benar-benar ada di dunia di sekitar kita? Jika motif kedua berlaku dalam kasus Anda, saya mendorong Anda untuk tidak meninggalkan proyek. Dengan pendekatan bisnis ini, Anda mungkin menghadapi peluang tak terduga di sepanjang jalan dan Anda tidak akan merasakan tekanan dari kebutuhan untuk menang - motivator utama Anda akan menjadi pengabdian pada pekerjaan Anda.
Dan yang paling penting: jika Anda berhasil menerapkan solusi yang layak, Anda dapat langsung mencobanya di dunia nyata. Dalam kasus saya, sekolah menjadi platform, tetapi pengalaman menumpuk dari waktu ke waktu, dan siapa tahu - mungkin seluruh negara Anda atau bahkan seluruh dunia akan menggunakan aplikasi Anda.
Setiap kali, mengingat pengalaman ini, saya bahkan tampak bangga pada diri sendiri. Saya tidak bisa menjelaskan alasannya, tetapi proses implementasi proyek hanya memberi saya kesenangan besar, dan hadiah itu merupakan bonus tambahan. Selain itu, saya senang bahwa saya dapat memecahkan masalah bagi teman sekelas yang merusak kehidupan mereka setiap hari. Suatu ketika, salah satu siswa mendatangi saya dan berkata: "Sangat nyaman dengan sistem Anda." Saya berada di surga ketujuh!
Saya pikir bahkan tanpa penghargaan apa pun saya akan bangga dengan perkembangan ini untuk ini saja. Mungkin bantuan ini kepada orang lain memberi saya kepuasan seperti itu ... secara umum, saya suka proyek.
Apa yang ingin saya capai dengan artikel iniSaya harap setelah membaca artikel saya sampai akhir, Anda terinspirasi untuk melakukan sesuatu yang akan bermanfaat bagi komunitas Anda atau bahkan hanya Anda. Saya mendorong Anda untuk menggunakan keterampilan Anda (pemrograman, tentu saja, berlaku untuk mereka, tetapi ada yang lain) untuk mengubah realitas di sekitarnya menjadi lebih baik. Saya dapat meyakinkan Anda bahwa pengalaman yang akan Anda dapatkan dalam proses tidak dapat dibandingkan dengan apa pun.
Itu juga dapat membuka sebelum Anda jalan yang tidak Anda harapkan sama sekali - itu terjadi pada saya. Jadi saya bertanya kepada Anda, lakukan apa yang Anda suka dan tinggalkan tanda Anda di dunia! Gema dari satu suara dapat mengejutkan seluruh dunia, jadi percayalah pada diri Anda sendiri.
Berikut ini beberapa tautan terkait proyek: