Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Papan Skor Bola Basket Cerdas

Komponen dan persediaan

Arduino Nano R3
× 1
Modul Bluetooth HC-05
× 1
Sensor Kedekatan Inframerah E18-D80NK
× 1
Seed Grove - Sensor Getaran (SW-420)
× 1
Sensor Suhu DHT22
× 1
LED RGB 8mm
× 1
Resistor 10k ohm
× 3
Resistor 100 ohm
× 3
Melalui Resistor Lubang, 47 ohm
× 1
Resistor 1k ohm
× 1
Resistor 2.21k ohm
× 1
Baterai 9V (generik)
× 1

Aplikasi dan layanan online

Arduino IDE
IDE Android Penemu Aplikasi MIT

Tentang proyek ini

Saya biasa melakukan latihan latihan bola basket secara teratur dan saya selalu melacak statistik bagian (jumlah tembakan, skor, kesalahan, dll). Melacak angka-angka ini agak membosankan dan sulit dicapai. Bola pintar dapat digunakan untuk ini tetapi memiliki beberapa kelemahan:

  • Jika ingin berlatih dengan banyak bola, Anda harus membeli beberapa bola pintar (mahal).
  • Akurasinya kurang bagus.
  • Daya tahan bola.

Dalam prototipe papan skor bola basket pintar proyek saya sebelumnya, saya menggunakan perangkat Avnet SmartEdge untuk menguji metode untuk melacak latihan bola basket saya. Saya menggunakan sensor akselerasi untuk mendeteksi bidikan dan sensor jarak untuk mendeteksi skor. Sekarang, ide dari proyek ini adalah untuk mengimplementasikan solusi pasti untuk tugas papan skor bola basket.

Versi

Pada awal proyek, saya menggunakan komponen perangkat keras yang saya miliki di rumah dan mengembangkan perangkat lunak (Arduino dan Android) yang diperlukan. Versi pertama (1.1.0) ini terbukti bekerja dengan baik, jadi saya memutuskan untuk membuat beberapa perubahan untuk menggunakan komponen yang lebih murah dan juga untuk mengimplementasikan beberapa peningkatan perangkat lunak. Versi kedua (2.0.0) bahkan lebih baik, selamat menikmati.

Langkah 1:Arduino

Perangkat Keras

Anda dapat melihat daftar komponen perangkat keras untuk versi 2.0.0 di bagian Hal.

Ini adalah perubahan utama yang dibuat dari versi 1.1.0 ke versi 2.0.0:

  • Arduino Mega 2560 => Diubah menjadi Arduino Nano R3
  • Bluetooth Shield => Diubah menjadi HC-05 Bluetooth Module
  • Daya Li-ion Isi Ulang => Diubah ke Baterai 9V
  • Sensor Suhu &Kelembaban DHT22 => Ditambahkan.

Beberapa pertimbangan tentang komponen lain yang digunakan dalam proyek ini:

  • Sensor Kedekatan Inframerah E18-D80NK:Sensor jarak lainnya dapat digunakan dalam proyek ini, tetapi perlu diingat bahwa lebih baik menggunakan yang tidak mengalami gangguan sinar matahari, seperti ini.
  • Sensor Getaran SW420:Sensor getaran lain dapat digunakan dalam proyek ini, yang satu ini bekerja dengan sangat baik.

Skema Arduino untuk dua versi tersedia di bagian Skema.

Perangkat Lunak

Saya menggunakan Arduino IDE untuk mengembangkan kode Arduino, diprogram dengan strategi berikut:

  • Setelah inisialisasi (variabel, LED, Bluetooth, dll), sensor akan terus memantau status sensor.
  • Jika sensor jarak mendeteksi keberadaan bola, itu berarti tembakan baru saja terjadi dan itu adalah skor.
  • Jika sensor getaran mendeteksi beberapa gerakan, itu berarti tembakan baru saja terjadi tetapi menunggu selama 2 detik (maksimum) untuk mengambil keputusan.
  • Saat ini, jika sensor jarak mendeteksi keberadaan bola, ia (segera) mengetahui bahwa itu adalah skor.
  • Pada akhir waktu 2 detik, jika sensor jarak tidak mendeteksi keberadaan bola, ia tahu bahwa itu meleset.
  • Arduino menginformasikan Android melalui Bluetooth bahwa tembakan (skor atau meleset) baru saja terjadi.
  • Proses dimulai ulang.

Ini adalah perubahan utama yang dibuat dari versi 1.1.0 ke versi 2.0.0:

  • Ubah dukungan dari pelindung Bluetooth ke modul Bluetooth HC-05
  • Tambahkan dukungan ke sensor Suhu &Kelembaban DHT22
  • Tingkatkan logika untuk mendeteksi tembakan, skor, dan kesalahan, serta untuk memberi sinyal yang lebih baik pada LED.

Kode Arduino untuk dua versi tersedia di bagian Kode.

Langkah 2:Android

Saya menggunakan MIT App Inventor untuk mengembangkan kode Android, yang diprogram dengan strategi berikut:

  • Setelah inisialisasi (tembakan, skor, meleset, Bluetooth, dll) ia menunggu tombol "Mulai" untuk ditekan.
  • Saat tombol "Start" ditekan, tombol ini terus memantau koneksi Bluetooth.
  • Setiap kali menerima data apa pun, ia memperbarui papan dan memainkan suara notifikasi yang benar.
  • Proses berulang sampai tombol "Jeda" ditekan.
  • Ada tombol untuk memilih perangkat Bluetooth, mengatur ulang hitungan, dan beberapa tombol tambahan untuk menyesuaikan papan jika perlu.

Ini adalah perubahan utama yang dibuat dari versi 1.1.0 ke versi 2.0.0:

  • Ubah tata letak dari potret ke lanskap.
  • Menambahkan Cahaya, Kelembaban, Suhu, dan Indeks Panas.
  • Tingkatkan tombol penyesuaian.
  • Tambahkan fitur agar layar selalu menyala.
  • Tambahkan suara tekan di semua tombol.
  • Menambahkan fungsionalitas untuk memperingatkan setiap kali tanda 50 tembakan (50, 100, 150, dll) tercapai.

Kode Android untuk kedua versi tersedia di bagian Kode.

Langkah 3:Penyiapan papan basket

Ini adalah papan basket asli yang biasa saya gunakan untuk latihan basket.

Pertama, saya melepas penutup plastik di bawah lingkaran dan membuat lubang untuk sensor jarak.

Kemudian saya membuat lubang kecil untuk memperbaiki sensor getaran.

Saya tidak dapat memasang sensor langsung ke penutup plastik karena lengkungannya, jadi saya membuat penyangga ke sensor menggunakan MDF.

Saya memperbaiki sensor jarak dan getaran menggunakan beberapa baut dan mur.

Kemudian saya menghubungkan komponen lainnya.

Saatnya melakukan tes asap.

Akhirnya, saya memasang semuanya di papan basket.

Langkah 4:Tes latihan bola basket

Sekarang saatnya untuk menguji semuanya.

Dan grand final... saatnya pertunjukan!

Langkah 5:Pertimbangan akhir

  • Sistem ini terbukti sangat akurat, dengan sangat sedikit hasil positif palsu dan negatif palsu yang jarang.
  • Menyenangkan bermain dengan sistem untuk mengetahui statistik latihan secara real-time dan setelah latihan.

Selamat bersenang-senang...

Kode

  • Kode Arduino (1.1.0)
  • Kode Android (1.1.0)
  • Kode Arduino (2.0.0)
  • Kode Android (2.0.0)
Kode Arduino (1.1.0)Arduino
//--------------------------------------------- -------------------------------//// Nama file :Scoreboard.ino //// Deskripsi :Papan Skor Bola Basket Cerdas / /// Versi :1.1.0 //// Penulis :Marcelo Avila de Oliveira  ////--------------------- -------------------------------------------------- --////--------------------------------------------- -----------------------------------//// DEFINISI ////------ -------------------------------------------------- --------------------//// AKTIFKAN MODE DEBUG// #define DEBUG// #define DEBUG_PROX// #define DEBUG_VIBR//----- -------------------------------------------------- ------------//// KONSTAN ////------------- -------------------------------------------------- ------//// PINSconst int prox_pin =2;const int vibr_pin =3;const int led_r_pin =4;const int led_g_pin =5;const int led_b_pin =6;// TIMEconst unsigned long wait_interval =3000;/ / MATHconst float persen_to_bright_factor =100 * log10(2 ) / log10(255);//----------------------------------------- -----------------------------------//// VARIABEL ////------ -------------------------------------------------- --------------------//// TIMEunsigned long wait_time;// STATUSboolean prox =false;boolean vibr =false;boolean wait =false;//--- -------------------------------------------------- -----------------------//// FUNGSI (PENGATURAN) ////--------------- -------------------------------------------------- -----------//void setup() { // INITIATE PINS pinMode(prox_pin, INPUT); pinMode(vibr_pin, INPUT); pinMode(led_r_pin, OUTPUT); pinMode(led_g_pin, OUTPUT); pinMode(led_b_pin, OUTPUT); set_led(5, 100); // MEMULAI KOMUNIKASI SERIAL Serial.begin(9600); // MULAI KOMUNIKASI BLUETOOTH setup_bluetooth(); set_led(4, 100); #ifdef DEBUG Serial.println("Board hidup"); Serial.println(); #endif}void setup_bluetooth() { #ifdef DEBUG Serial.println("Menyetel Bluetooth"); Serial.println(); #endif Serial1.begin(38400); // Atur kecepatan baud Serial1.print("\r\n+STWMOD=0\r\n"); // Atur untuk bekerja dalam mode budak Serial1.print("\r\n+STNA=Arduino\r\n"); // Setel nama Serial1.print("\r\n+STOAUT=1\r\n"); // Izinkan perangkat yang dipasangkan untuk menghubungkan saya Serial1.print("\r\n+STAUTO=0\r\n"); // Koneksi otomatis harus dilarang di sini delay(2000); // Penundaan ini diperlukan. Serial1.print("\r\n+INQ=1\r\n"); // Jadikan penundaan yang tidak wajar bagi budak(2000); // Penundaan ini diperlukan. while (Serial1.available()) { // Hapus data delay(50); Serial1.baca(); }}//--------------------------------------------- ------------------------------//// FUNGSI (LIGHT) ////-------- -------------------------------------------------- ------------------//int persen_to_bright(int persen) { // PERSEN:// 0..100 // RETURN BRIGHT // 255..0 return 256 - pow(2, persen / persen_to_bright_factor);}void set_led(int color, int bright) { // WARNA:// 0 =HIJAU // 1 =KUNING // 2 =MERAH // 3 =CYAN // 4 =BIRU / / 5 =MAGENTA // 6 =WHITE // // BRIGHT:// 0 =OFF // .. // 100 =MAX #ifdef DEBUG Serial.println("Setting LED"); Serial.println(); #endif if (warna <0 || warna> 6 || cerah <0 || cerah> 100) { return; } int led_r_bright =255; int led_g_bright =255; int led_b_bright =255; int bright_aux =persen_to_bright(terang); switch (warna) { case 0:// HIJAU led_g_bright =bright_aux; merusak; kasus 1:// KUNING led_r_bright =bright_aux; led_g_bright =bright_aux; merusak; kasus 2:// MERAH led_r_bright =bright_aux; merusak; kasus 3:// CYAN led_g_bright =bright_aux; led_b_bright =terang_aux; merusak; kasus 4:// BIRU led_b_bright =bright_aux; merusak; kasus 5:// MAGENTA led_r_bright =bright_aux; led_b_bright =terang_aux; merusak; kasus 6:// PUTIH led_r_bright =bright_aux; led_g_bright =bright_aux; led_b_bright =terang_aux; merusak; } analogWrite(led_r_pin, led_r_bright); analogWrite(led_g_pin, led_g_bright); analogWrite(led_b_pin, led_b_bright); kembali;}//--------------------------------------------- -------------------------------//// FUNGSI (PERIKSA) ////------- -------------------------------------------------- -------------------//void check_prox() { if (!prox) { if(digitalRead(prox_pin) ==RENDAH) { #ifdef DEBUG_PROX Serial.println( "Kedekatan terdeteksi"); Serial.println(); #endif prox =benar; if (!vibr) { tunggu =benar; wait_time =milis() + wait_interval; } set_shot(1); } }}void check_vibr() { if (!prox &&!vibr) { if(digitalRead(vibr_pin) ==HIGH) { #ifdef DEBUG_PROX Serial.println("Getaran terdeteksi"); Serial.println(); #endif vibr =benar; tunggu =benar; wait_time =milis() + wait_interval; set_led(1, 100); } }}void check_wait() { if (tunggu &&milis()> wait_time) { if (!prox) { set_shot(0); } mengatur ulang(); }}//--------------------------------------------- ------------------------------//// FUNGSI (MIS) ////-------- -------------------------------------------------- ------------------//void set_shot(int mode) { // MODE:// 0 =SALAH SHOT (LEWATKAN) // 1 =KANAN SHOT (SKOR) jika (mode ==0) { set_led(2, 100); } else { set_led(0, 100); } Serial1.print(modus); delay(1000);}void reset() { vibr =false; proksi =salah; tunggu =salah; set_led(4, 100);}//--------------------------------------------------- ------------------------------------//// UTAMA ////----- -------------------------------------------------- ---------------------//void loop() { check_prox(); cek_vibr(); check_wait();}
Kode Android (1.1.0)Java
Android MIT App Inventor (http://ai2.appinventor.mit.edu/)
Tidak ada pratinjau (hanya unduhan).
Kode Arduino (2.0.0)Arduino
//--------------------------------------------- -------------------------------//// Nama file :Scoreboard.ino //// Deskripsi :Papan Skor Bola Basket Cerdas / /// Versi :2.0.0 //// Penulis :Marcelo Avila de Oliveira  ////--------------------- -------------------------------------------------- --////--------------------------------------------- -----------------------------------//// PERPUSTAKAAN ////------ -------------------------------------------------- --------------------//// TEMPERATURE &HUMIDITY LIBRARY#termasuk "DHT.h"// MULTI SERIAL LIBRARY#termasuk "SoftwareSerial.h"//- -------------------------------------------------- -------------------------//// DEFINISI ////---------------- -------------------------------------------------- ----------//// AKTIFKAN MODE DEBUG// #define DEBUG// #define DEBUG_BLUE// #define DEBUG_PROX// #define DEBUG_VIBR// #define DEBUG_DHT// DHT SENSOR#define DHTPIN 7#define DHTTYPE DHT22DHT dht(DHTPIN, DHTTYPE);// MODU BLUETOOTH LE (RX, TX)Perangkat Lunak Serial Bluetooth (10, 11);//---------------------------------- ------------------------------------------//// KONSTAN /// //------------------------------------------------- ---------------------------//// PINSconst int prox_pin =2;const int vibr_pin =3;const int led_r_pin =4;const int led_g_pin =5;const int led_b_pin =6;// TIMEconst unsigned long wait_interval =2000;const unsigned long dht_interval =10.000;// MATHconst float persen_to_bright_factor =100 * log10(2) / log10(255);//--- -------------------------------------------------- -----------------------//// VARIABEL ////------------------ -------------------------------------------------- --------//// TIMEunsigned long wait_time;unsigned long dht_time;// HUMIDITY &TEMPERATUREfloat humi, temp, heat;// STATUSboolean prox =false;boolean vibr =false;boolean wait =false;// -------------------------------------------------- --------------------------//// FUNGSI (PENGATURAN) ////------------ ------------------------ ----------------------------------------//pengaturan batal() { // INITIATE PIN PINMode(prox_pin, INPUT); pinMode(vibr_pin, INPUT); pinMode(led_r_pin, OUTPUT); pinMode(led_g_pin, OUTPUT); pinMode(led_b_pin, OUTPUT); // SET LED MAGENTA set_led(5, 100); // MEMULAI KOMUNIKASI SERIAL Serial.begin(9600); // MULAI KOMUNIKASI BLUETOOTH setup_bluetooth(); // INITIASI SENSOR DHT dht.begin(); // SET LED BIRU set_led(4, 100); #ifdef DEBUG Serial.println("Board hidup"); Serial.println(); #endif}void setup_bluetooth() { #ifdef DEBUG_BLUE Serial.println("Menyetel Bluetooth"); Serial.println(); #endif // SET BAUD RATE Bluetooth.begin(9600); // HAPUS DATA YANG TERSEDIA while (Bluetooth.available()) { delay(50); Bluetooth.baca(); }}//--------------------------------------------- ------------------------------//// FUNGSI (LIGHT) ////-------- -------------------------------------------------- ------------------//int persen_to_bright(int persen) { // PERSEN:// 0..100 // RETURN BRIGHT // 255..0 return 256 - pow(2, persen / persen_to_bright_factor);}void set_led(int color, int bright) { // WARNA:// 0 =HIJAU // 1 =KUNING // 2 =MERAH // 3 =CYAN // 4 =BIRU / / 5 =MAGENTA // 6 =WHITE // // BRIGHT:// 0 =OFF // .. // 100 =MAX #ifdef DEBUG Serial.println("Setting LED"); Serial.println(); #endif if (warna <0 || warna> 6 || cerah <0 || cerah> 100) { return; } int led_r_bright =255; int led_g_bright =255; int led_b_bright =255; int bright_aux =persen_to_bright(terang); switch (warna) { case 0:// HIJAU led_g_bright =bright_aux; merusak; kasus 1:// KUNING led_r_bright =bright_aux; led_g_bright =bright_aux; merusak; kasus 2:// MERAH led_r_bright =bright_aux; merusak; kasus 3:// CYAN led_g_bright =bright_aux; led_b_bright =terang_aux; merusak; kasus 4:// BIRU led_b_bright =bright_aux; merusak; kasus 5:// MAGENTA led_r_bright =bright_aux; led_b_bright =terang_aux; merusak; kasus 6:// PUTIH led_r_bright =bright_aux; led_g_bright =bright_aux; led_b_bright =terang_aux; merusak; } analogWrite(led_r_pin, led_r_bright); analogWrite(led_g_pin, led_g_bright); analogWrite(led_b_pin, led_b_bright); kembali;}//--------------------------------------------- -------------------------------//// FUNGSI (PERIKSA) ////------- -------------------------------------------------- -------------------//void check_prox() { if (!prox) { // PERIKSA KEJADIAN HANYA JIKA PROXIMITAS TIDAK TERDETEKSI if(digitalRead(prox_pin) ==RENDAH) { #ifdef DEBUG_PROX Serial.println("Kedekatan terdeteksi"); Serial.println(); #endif // SET LED HIJAU set_led(0, 100); kirim_data(2); proksi =benar; if (!vibr) { tunggu =benar; wait_time =milis() + wait_interval; } } }}void check_vibr() { if (!prox &&!vibr) { // PERIKSA GETARAN HANYA JIKA PROXIMITAS DAN GETARAN TIDAK TERDETEKSI if(digitalRead(vibr_pin) ==HIGH) { #ifdef DEBUG_VIBR Serial.println(" Getaran terdeteksi"); Serial.println(); #endif // SET LED KUNING set_led(1, 100); getar =benar; tunggu =benar; wait_time =milis() + wait_interval; } }}void check_wait() { if (tunggu &&milis()> wait_time) { if (!prox) { // SET LED MERAH set_led(2, 100); kirim_data(1); } mengatur ulang(); }}void check_dht() { if (!prox &&!vibr) { // PERIKSA DHT HANYA JIKA GETARAN TIDAK TERDETEKSI if (millis()> dht_time) { humi =dht.readHumidity(); suhu =dht.readSuhu(); panas =dht.computeHeatIndex(temp, humi, false); #ifdef DEBUG_DHT Serial.print("Kelembaban :"); Serial.print(humi); Serial.println("%"); Serial.print("Suhu :"); Serial.print(temp); Serial.println("C"); Serial.print("Indeks Kepala :"); Serial.print(panas); Serial.println("C"); Serial.println(""); #endif send_data(0); dht_time =milis() + dht_interval; } }}//-------------------------------------------------------- -------------------------------//// FUNGSI (MIS) ////------- -------------------------------------------------- -------------------//void send_data(int shot) { // SHOT:// 0 =NO DATA // 1 =WRONG SHOT (MISS) // 2 =TEMPAT KANAN (SKOR) Bluetooth.print(humi); Bluetooth.print(temp); Bluetooth.print(panas); Bluetooth.print(tembakan); #ifdef DEBUG_BLUE Serial.println("Bluetooth terkirim"); Serial.println(); #endif}void reset() { vibr =false; proksi =salah; tunggu =salah; penundaan (1000); // SET LED BIRU set_led(4, 100);}//----------------------------------- -----------------------------------------//// UTAMA //// -------------------------------------------------- --------------------------//void loop() { check_prox(); cek_vibr(); periksa_tunggu(); check_dht();}
Kode Android (2.0.0)Java
Android MIT App Inventor (http://ai2.appinventor.mit.edu/)
Tidak ada pratinjau (hanya unduhan).

Skema


Proses manufaktur

  1. Bola Basket
  2. Merancang sistem pertanian pintar sumber terbuka
  3. Papan sensor pintar mempercepat pengembangan AI tepi
  4. Sensor Suhu Raspberry Pi
  5. IoT Seluler:Tempat Sampah Cerdas
  6. Bartender Cerdas
  7. Sensor Emosi / EEG
  8. Sensor Ultra-Sensitif dan Tangguh untuk Tekstil Cerdas
  9. Sensor Ultra Tipis untuk Lensa Kontak Cerdas
  10. Mekatronika pintar membantu produksi sensor di Sensata Technologies