Sistem otak

Baru-baru ini, berbagai jenis permainan intelektual mulai populer: “Apa? Dimana? Kapan? ”,“ Melotrek ”,“ Cincin otak ”. Tetapi untuk beberapa jenis permainan Anda tidak dapat melakukannya tanpa sistem khusus yang akan mengendalikan jalannya permainan. Di sini, sebagai bagian dari proyek kursus, mereka memutuskan untuk mencoba membuat sistem otak mereka sendiri.

Sebelumnya, kami belum pernah bertemu Arduino atau perangkat keras, tetapi melihat bagaimana teman dan kenalan di universitas dengan mudah memasang perangkat, kami ingin mencoba dan melakukan hal kami sendiri. Karena kami cukup jauh dari topik ini, proposal untuk menyusun sistem otak dilontarkan oleh pemimpin kami, dengan mengatakan bahwa ini akan menjadi awal yang baik bagi kami. Anehnya, ini terjadi.

Untuk memulainya, kami menentukan tujuannya: sistem otak harus memberikan sinyal audio yang menunjukkan awal waktu putaran pertanyaan dan sinyal yang mengindikasikan akhir waktu putaran pertanyaan, dan juga harus memberi sinyal kepada tuan rumah tentang kesiapan pemain untuk memberikan jawaban. Jika satu pemain menekan tombol, maka tombol yang tersisa diblokir. Seharusnya juga ada kemampuan untuk memilih mode permainan.



Komponen yang Diperlukan


  • Arduino nano
  • Pembicara
  • LED 8 pcs.
  • 4 . 2
  • DIP-
  • :
  • 8 . – 100 ( )
  • 6 . – 10 ( )
  • 6 . – 1
  • 4 . – 470 DIP ( )
  • 5 . – ( )
  • – 6 . 1
  • Ethernet- 4 .
  • RJ-45 — 4.


Perlu dikatakan bahwa sistem dapat dibagi menjadi 3 blok: modul utama, tombol pemain (4 buah) dan kabel penghubung. Sistem ini berisi 4 tombol pemain. Jika pemain berhasil menekan lebih awal dari yang lain, maka LED pada tombolnya menyala.

Host jarak jauh. Jika pemain menekan tombol pada remote control-nya, maka dioda yang sesuai dengan tombol pemain menyala di unit utama. Modul ini memilih mode permainan. Presenter memiliki dua tombol Start dan Reset. Bergantung pada gimnya, tombol-tombol ini menghidupkan dan mengatur ulang timer.

Sinyal Arduino berasal dari tombol. Jika tombol ditekan, dioda pada tombol dan pada remote control master menyala dan sinyal suara dihidupkan. Inilah konsep utamanya.

Tombol-tombol dan konsol utama dihubungkan oleh kabel Ethernet. Sebuah tombol menuju ke tanah, unit logis dan sinyal yang menghidupkan dan mematikan LED, dan sebuah tombol berasal dari tombol ke modul utama, menekan tombol.

Pengembangan dimulai


Kami mulai dengan yang paling sederhana. Sirkuit yang mencakup dioda dipasang di papan tempat memotong roti. Itu semua berhasil! Kami melanjutkan. Kami menghubungkan Arduino dan tombol, ketika ditekan, dioda menyala. Dan di sini kita dihadapkan dengan masalah tombol rattling.



Pada tombol Anda perlu menghapus obrolan sinyal, jika tidak, sistem akan berpikir bahwa tombol ditekan berkali-kali. Untuk tombol para pemain, ini tidak terlalu menakutkan, kami masih menangkap pers pertama, tetapi pada tombol awal yang memimpin Anda harus menyingkirkan pantulan, karena di dalam cincin otak Anda perlu tahu berapa kali Start ditekan. Untuk melakukan ini, pemicu, kapasitor, dan resistor Schmitt termasuk dalam rangkaian tombol. Anda dapat membaca tentang pentalan di sini .



Baik tombol dan modul utama menggunakan LED. Tetapi tegangan 5V terlalu banyak untuk mereka. Oleh karena itu, untuk mencegah pembakaran dioda, resistor dihubungkan secara seri. Anda dapat menghitung resistansi resistor di sini . Karena kenyataan bahwa semua LED sama, kami membutuhkan 8 resistor masing-masing 100 ohm.



Mode permainan dipilih menggunakan DIP-SWITCH:

  1. Cincin otak
  2. Apa? Dimana? Kapan?
  3. Kuartet scrabble, Troika, Own game (sistemnya bekerja sama di game-game ini)

Bagian perangkat lunak


Kemalasan adalah kunci kesuksesan.

Sejalan dengan pengembangan sirkuit, kode ditulis. Jelas bahwa penekanan tombol harus ditangani melalui interupsi. Mengurangi sekitar 2 interupsi eksternal INT0 dan INT1, kami kecewa, karena sebanyak 6 tombol dua interupsi tidak cukup dan Anda harus meningkatkan kedalaman bit melalui register. Sejak pertama kali kami menemukan masalah perangkat keras, bagi kami semuanya rumit dan tidak dapat dipahami. Secara umum, kami tidak terlalu senang dengan fakta ini. Tidak percaya bahwa masalah kami tidak dapat diselesaikan dengan cara lain, kami menemukan Pin Change Interrupt Requests, yang sempurna untuk proyek kami. Tidak ada register!

Anda bisa berkenalan dengan gangguan di sini .

Dalam sistem otak kita, tombol SET dan RESET berhubungan dengan pin D8 dan D9, dan tombol pengguna berhubungan dengan A0-A3. Oleh karena itu, kami menetapkan hanya dua penangan interupsi untuk masing-masing kelompok interupsi yang digunakan.

  • ISR (PCINT0_vect) - untuk tombol utama.
  • ISR (PCINT1_vect) - untuk tombol khusus.

Interupsi dapat didefinisikan untuk setiap grup dan setiap pin secara individual. Ini dilakukan oleh register kontrol dan masker, di mana perlu untuk mengatur nilai yang sesuai. Untuk informasi lebih lanjut tentang pengaturan dan penyelesaian interupsi, lihat di sini .

Interrupt handler menginterogasi pin satu per satu untuk menentukan tombol mana yang ditekan. Situasi ini adalah salah satu batasan gangguan ini. Sistem otak harus menanggapi penekanan tombol, sehingga nilai pin dibandingkan dengan tingkat TINGGI (yaitu, tombol telah ditekan) dalam interrupt handler.

Mengkonfigurasi Interupsi
ISR(PCINT0_vect) {
	noInterrupts();
	isPushed = false;
	if (digitalRead(ADMIN_BUTTON_SET) == HIGH ) {	
		gameMode->Set();
		Timer1.attachInterrupt(TimerInterrupt);
		gameMode->SetFalseStart(false);
	}
	if (digitalRead(ADMIN_BUTTON_RESET) == HIGH) {
		Timer1.stop();
		gameMode->Reset();
		gameMode->SetFalseStart(true);
	}
	interrupts();
}

ISR(PCINT1_vect){
	noInterrupts();	
	if (isPushed == false){
		for (int i = 0; i < ARRAY_SIZE(ARRAY_USER_BUTTON); i++){
			if (digitalRead(ARRAY_USER_BUTTON[i]) == HIGH){
				isPushed = gameMode->UserButtonPushed(ARRAY_LED[i]);
			}
		}		
	}	
	interrupts();
}


Semua kode ada di sini .

Instalasi


Kami melihat besi solder untuk pertama kalinya, jadi kami mulai dengan dioda tradisional. Kami disolder - dioda terbakar! Kemudian tombol disolder. Memeriksa apakah semuanya dilakukan dengan benar cukup sulit, karena modul utama masih di papan tempat memotong roti.



Tombol utama, dioda, sakelar mode permainan disolder. Dalam prosesnya, kami menyadari bahwa adalah mungkin untuk bertahan dengan satu pemicu Schmitt. Kemudian harus ditransfer ke modul utama, membawa output dari tombol-tombol itu melalui kabel jaringan, dan sinyal dari outputnya harus diumpankan ke Arduino.





Secara umum, unit utama sudah siap. Tapi tetap saja dia tidak terhubung dengan tombol pemain. Kami mengambil papan asli dari router sebagai dasar untuk unit utama, di mana menguntungkan untuk menggunakan konektor RJ-45. Meskipun kami sedikit menyesalinya, karena memotong papan dan menyolder kontak di babak kedua bukanlah pengalaman yang menyenangkan. Tetapi semuanya berjalan cukup sukses.

Kami menggunakan konduktor putih-oranye untuk transmisi logis 1, oranye untuk logis 0, sinyal putih-hijau ke dioda dan sinyal tombol hijau. Meskipun Anda dapat menggunakan apa pun, hal utama adalah memeriksa kabel mana yang digunakan, karena ada berbagai opsi crimping.

Sekarang modul utama dan tombol terhubung dan sistem hampir siap, tetapi ada satu bug yang tidak ada di papan tempat memotong roti. Jika tombol tidak terhubung ke modul utama, maka sistem berpikir bahwa tombol ini ditekan. Di Internet, kami menemukan solusi - resistor pull-up.

Agar sinyal "tidak" datang ke Arduino (ketika tombol tidak terhubung sama sekali) di modul utama, Anda harus meletakkan resistor pull-down (dari 10 kOhm) pada setiap output tombol. Dengan sirkuit terbuka, arus yang tidak diinginkan akan melewati resistor ke tanah, dan ketika ditutup karena resistansi resistor yang tinggi, sinyal akan menuju ke kontak input.

Setelah menyelesaikan masalah ini, ternyata berhasil.



Fitur Mode Game


Fitur cincin otak. Jika start belum ditekan, sistem mendefinisikan tombol tekan sebagai start salah. Jika start ditekan pertama kali, sistem akan menunggu 20 detik hingga tombol ditekan, setelah beberapa saat sistem akan membunyikan alarm. Jika selama waktu ini tim masih mengetahui jawaban yang benar dan menekan tombol, sinyal yang sesuai berbunyi, dan penghitung waktu, pada gilirannya, berhenti. Sesuai dengan aturan, jika ada jawaban yang salah, tim lain harus bisa menjawab. Untuk melakukan ini, setelah menekan kedua pada awal, timer mulai selama 10 detik. Tombol Reset me-reset sistem, ditekan sebelum membaca pertanyaan berikutnya.

Fitur Apa? Dimana? Kapan?


Setelah menekan Mulai, sinyal suara berbunyi. Sinyal akustik berbunyi setelah 50 dan 60 detik. Di gim lain, hanya tombol pemain yang tertangkap. Berkat kenyamanan bekerja dengan Arduino, Anda dapat menerapkan game lain: mengubah timer, mengaktifkan start salah, dll. ini dapat diimplementasikan dengan menambahkan kode yang sesuai.




Kesimpulan


Itu bekerja dan bersyukur kepada Tuhan. Karena ini adalah pengalaman perangkat keras pertama kami, kami senang dengan hasilnya. Dan tidak hanya karena semuanya berfungsi terhubung di papan tempat memotong roti, tetapi juga sebagai perangkat yang dirakit penuh. Sistem otak lengkap dengan mode, pemain, dan presenter telah dirilis. Sebagai peningkatan pada sistem, Anda dapat menambahkan output untuk speaker sehingga Anda dapat bermain di turnamen besar.
Sedangkan untuk papan Arduino, mudah dan menyenangkan untuk bekerja. Di Internet, ada cukup informasi dan tutorial sederhana tentang perakitan potongan-potongan yang berguna dan menarik yang bukan yang termudah bagi orang yang tidak sadar. Ini bisa jadi hobi.

Oksana Kozlova dan Marina Bardiyan ikut serta dalam proyek ini.

Source: https://habr.com/ru/post/id394359/


All Articles