산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

스마트 농구 스코어보드

구성품 및 소모품

Arduino Nano R3
× 1
HC-05 블루투스 모듈
× 1
E18-D80NK 적외선 근접 센서
× 1
Seeed Grove - 진동 센서(SW-420)
× 1
DHT22 온도 센서
× 1
8mm RGB LED
× 1
저항 10k 옴
× 3
저항 100옴
× 3
스루 홀 저항기, 47옴
× 1
저항 1k 옴
× 1
저항 2.21k 옴
× 1
9V 배터리(일반)
× 1

앱 및 온라인 서비스

Arduino IDE
MIT 앱 인벤터 안드로이드 IDE

이 프로젝트 정보

나는 정기적으로 농구 훈련 운동을 하고 항상 섹션 통계(슛 수, 득점, 미스 등)를 추적합니다. 이러한 숫자를 추적하는 것은 지루하고 달성하기 어렵습니다. 스마트 볼은 이에 사용할 수 있지만 몇 가지 단점이 있습니다.

<울>
  • 여러 개의 공을 사용하여 훈련하려면 (비싼) 스마트 공을 여러 개 구입해야 합니다.
  • 정확도가 좋지 않습니다.
  • 공의 내구성
  • 이전 프로젝트 스마트 농구 스코어보드 프로토타입에서 Avnet SmartEdge 장치를 사용하여 농구 운동을 추적하는 방법을 테스트했습니다. 가속도 센서를 사용하여 샷을 감지하고 근접 센서를 사용하여 점수를 감지했습니다. 이제 이 프로젝트의 아이디어는 농구 스코어보드 작업에 대한 최종 솔루션을 구현하는 것입니다.

    버전

    프로젝트 초기에는 집에 있는 하드웨어 구성 요소를 사용하여 필요한 소프트웨어(Arduino 및 Android)를 개발했습니다. 이 첫 번째 버전(1.1.0)은 꽤 잘 작동하는 것으로 판명되었으므로 더 저렴한 구성 요소를 사용하고 일부 소프트웨어 개선 사항도 구현하기 위해 일부 변경을 수행하기로 결정했습니다. 두 번째 버전(2.0.0)이 더 좋습니다.

    1단계:Arduino

    하드웨어

    사물 섹션에서 버전 2.0.0의 하드웨어 구성 요소 목록을 볼 수 있습니다.

    다음은 버전 1.1.0에서 버전 2.0.0으로 변경된 주요 사항입니다.

    <울>
  • Arduino Mega 2560 => Arduino Nano R3로 변경됨
  • Bluetooth Shield => HC-05 블루투스 모듈로 변경
  • 충전식 리튬 이온 전원 => 9V 배터리로 변경
  • DHT22 온도 및 습도 센서 => 추가됨.
  • 이 프로젝트에 사용된 다른 구성 요소에 대한 몇 가지 고려 사항:

    <울>
  • E18-D80NK 적외선 근접 센서:이 프로젝트에서 다른 근접 센서를 사용할 수 있지만 이와 같이 햇빛 간섭을 받지 않는 센서를 사용하는 것이 더 낫다는 점을 염두에 두십시오.
  • SW420 진동 센서:이 프로젝트에서 다른 진동 센서를 사용할 수 있습니다. 이 센서는 정말 잘 작동합니다.
  • 두 버전에 대한 Arduino 회로도는 회로도 섹션에서 사용할 수 있습니다.

    소프트웨어

    Arduino IDE를 사용하여 다음 전략으로 프로그래밍된 Arduino 코드를 개발했습니다.

    <울>
  • 초기화 후(변수, LED, 블루투스 등) 센서 상태를 지속적으로 모니터링합니다.
  • 근접 센서가 공의 존재를 감지하면 슛이 막 발생했음을 의미하며 이는 득점입니다.
  • 진동 센서가 어떤 움직임을 감지하면 총격이 발생했지만 결정을 내리기까지 2초(최대) 동안 대기했음을 의미합니다.
  • 이때 근접 센서가 공의 존재를 감지하면 점수임을 (즉시) 인식합니다.
  • 2초의 시간이 끝날 때 근접 센서가 공의 존재를 감지하지 못한 경우 미스임을 알게 됩니다.
  • Arduino는 Bluetooth를 통해 Android에 슛(득점 또는 미스)이 발생했음을 알립니다.
  • 프로세스가 다시 시작됩니다.
  • 다음은 버전 1.1.0에서 버전 2.0.0으로 변경된 주요 사항입니다.

    <울>
  • Bluetooth 실드에서 HC-05 Bluetooth 모듈로 지원 변경
  • DHT22 온도 및 습도 센서 지원 추가
  • 슛, 득점, 실점을 감지하고 LED에 더 나은 신호를 보내기 위해 로직을 개선합니다.
  • 두 버전의 Arduino 코드는 코드 섹션에서 사용할 수 있습니다.

    2단계:Android

    MIT App Inventor를 사용하여 다음 전략으로 프로그래밍된 Android 코드를 개발했습니다.

    <울>
  • 초기화(슛, 득점, 미스, 블루투스 등) 후 "시작" 버튼이 눌러질 때까지 기다립니다.
  • "시작" 버튼을 누르면 계속해서 블루투스 연결을 모니터링합니다.
  • 데이터를 수신할 때마다 보드를 업데이트하고 올바른 알림음을 재생합니다.
  • "일시중지" 버튼을 누를 때까지 프로세스가 반복됩니다.
  • Bluetooth 장치를 선택하고 카운트를 재설정하는 버튼이 있으며 필요한 경우 보드를 조정하는 몇 가지 추가 버튼이 있습니다.
  • 다음은 버전 1.1.0에서 버전 2.0.0으로 변경된 주요 사항입니다.

    <울>
  • 레이아웃을 세로에서 가로로 변경합니다.
  • 빛, 습도, 온도 및 열 지수를 추가합니다.
  • 조정 버튼을 개선합니다.
  • 화면을 항상 켜두는 기능을 추가하세요.
  • 모든 버튼에 누르는 소리를 추가합니다.
  • 50샷 마크(50, 100, 150 등)에 도달할 때마다 경고하는 기능을 추가합니다.
  • 두 버전의 Android 코드는 코드 섹션에서 사용할 수 있습니다.

    3단계:농구판 설정

    이것은 제가 농구 훈련 운동을 할 때 정기적으로 사용하는 오리지널 농구판입니다.

    먼저 후프 아래에 있는 플라스틱 덮개를 제거하고 근접 센서에 구멍을 뚫었습니다.

    그런 다음 진동 센서를 고정하기 위해 작은 구멍을 만들었습니다.

    플라스틱 커버의 곡률 때문에 센서를 직접 부착할 수 없어서 MDF를 사용하여 센서 지지대를 만들었습니다.

    몇 개의 볼트와 너트를 사용하여 근접 및 진동 센서를 고정했습니다.

    그런 다음 다른 구성 요소를 연결했습니다.

    연기 테스트를 할 시간입니다.

    마지막으로 농구판에 모든 것을 설치했습니다.

    4단계:농구 운동 테스트

    이제 모든 것을 테스트할 시간입니다.

    그리고 그랜드 피날레... 쇼 타임입니다!

    5단계:최종 고려사항

    <울>
  • 시스템은 매우 정확한 것으로 판명되었으며, 가양성(false positive)이 거의 없고 가음성(false negative)이 거의 없었습니다.
  • 실시간으로 그리고 훈련 후에 운동 통계를 알기 위해 시스템을 가지고 노는 것은 환상적입니다.
  • 즐거운 시간 되세요...

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Arduino 코드(1.1.0)
  • Android 코드(1.1.0)
  • Arduino 코드(2.0.0)
  • Android 코드(2.0.0)
  • Arduino 코드(1.1.0)Arduino
    <사전>//--------------------------------------------- -------------------------------//// 파일명 :Scoreboard.ino //// 설명 :스마트 농구 스코어보드 / /// 버전 :1.1.0 //// 작성자 :Marcelo Avila de Oliveira ////--------------------- -------------------------------------------------- ------////----------------------------------------- -----------------------------------//// 정의 ////------ -------------------------------------------------- --------------------//// 디버그 모드 켜기// #define DEBUG// #define DEBUG_PROX// #define DEBUG_VIBR//----- -------------------------------------------------- ---------------------//// 상수 ////-------------------- -------------------------------------------------- ------//// 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 percent_to_bright_factor =100 * log10(2 ) / log10(255);//----------------------------------------- -----------------------------------//// 변수 ////------ -------------------------------------------------- --------------------//// TIMEunsigned long wait_time;// STATUSboolean prox =false;boolean vibr =false;boolean wait =false;//--- -------------------------------------------------- -----------------------//// 기능(설정) ///----------------- -------------------------------------------------- -----------// 무효 설정() { // 초기화 핀 pinMode(prox_pin, INPUT); 핀모드(vibr_pin, 입력); 핀모드(led_r_pin, 출력); 핀모드(led_g_pin, 출력); 핀모드(led_b_pin, 출력); set_led(5, 100); // 직렬 통신 시작 Serial.begin(9600); // 블루투스 통신 시작 setup_bluetooth(); set_led(4, 100); #ifdef DEBUG Serial.println("보드가 살아있습니다"); 직렬.println(); #endif}void setup_bluetooth() { #ifdef DEBUG Serial.println("블루투스 설정"); 직렬.println(); #endif Serial1.begin(38400); // 전송 속도 설정 Serial1.print("\r\n+STWMOD=0\r\n"); // 슬레이브 모드에서 작동하도록 설정 Serial1.print("\r\n+STNA=Arduino\r\n"); // 이름 설정 Serial1.print("\r\n+STOAUT=1\r\n"); // 페어링된 장치가 나를 연결하도록 허용합니다. Serial1.print("\r\n+STAUTO=0\r\n"); // 여기에서는 자동 연결을 금지해야 합니다. delay(2000); // 이 지연은 필수입니다. Serial1.print("\r\n+INQ=1\r\n"); // 슬레이브를 조회 가능하게 만듭니다. delay(2000); // 이 지연은 필수입니다. while (Serial1.available()) { // 데이터 지우기 delay(50); Serial1.read(); }}//---------------------------------------------- ------------------------------//// 기능(조명) ////-------- -------------------------------------------------- ------------------//int percent_to_bright(int percent) { // PERCENT:// 0..100 // RETURN BRIGHT // 255..0 return 256 - pow(2, 퍼센트 / 퍼센트_to_bright_factor);}void set_led(int color, int bright) { // COLOR:// 0 =GREEN // 1 =YELLOW // 2 =RED // 3 =CYAN // 4 =BLUE / / 5 =마젠타 // 6 =흰색 // // 밝음:// 0 =OFF // .. // 100 =MAX #ifdef DEBUG Serial.println("LED 설정"); 직렬.println(); #endif if (색상 <0 || 색상> 6 || 밝음 <0 || 밝음> 100) { return; } int led_r_bright =255; int led_g_bright =255; int led_b_bright =255; int bright_aux =퍼센트_to_bright(밝음); 스위치(색상) { 경우 0:// 녹색 led_g_bright =bright_aux; 부서지다; 사례 1:// 노란색 led_r_bright =bright_aux; led_g_bright =bright_aux; 부서지다; 사례 2:// 빨간색 led_r_bright =bright_aux; 부서지다; 사례 3:// CYAN led_g_bright =bright_aux; led_b_bright =bright_aux; 부서지다; 사례 4:// 파란색 led_b_bright =bright_aux; 부서지다; 사례 5:// 마젠타 led_r_bright =bright_aux; led_b_bright =bright_aux; 부서지다; 사례 6:// 흰색 led_r_bright =bright_aux; led_g_bright =bright_aux; led_b_bright =bright_aux; 부서지다; } analogWrite(led_r_pin, led_r_bright); analogWrite(led_g_pin, led_g_bright); analogWrite(led_b_pin, led_b_bright); 반품;}//--------------------------------------------- -------------------------------//// 함수(체크) ////--------- -------------------------------------------------- -------------------//void check_prox() { if (!prox) { if(digitalRead(prox_pin) ==LOW) { #ifdef DEBUG_PROX Serial.println( "근접 감지됨"); 직렬.println(); #endif 프록시 =true; if (!vibr) { 대기 =참; wait_time =millis() + wait_interval; } set_shot(1); } }} 무효 check_vibr() { if (!prox &&!vibr) { if(digitalRead(vibr_pin) ==HIGH) { #ifdef DEBUG_PROX Serial.println("진동 감지"); 직렬.println(); #endif 진동 =참; 대기 =사실; wait_time =millis() + wait_interval; set_led(1, 100); } }} 무효 check_wait() { if (wait &&millis()> wait_time) { if (!prox) { set_shot(0); } 초기화(); }}//---------------------------------------------- ------------------------------//// 함수(MIS) ////-------- -------------------------------------------------- ------------------//void set_shot(int mode) { // 모드:// 0 =WRONG SHOT(MISS) // 1 =RIGHT SHOT(SCORE) if (모드 ==0) { set_led(2, 100); } 그렇지 않으면 { set_led(0, 100); } Serial1.print(모드); 지연(1000);} 무효 리셋() { 진동 =거짓; 프록시 =거짓; 대기 =거짓; set_led(4, 100);}//---------------------------------------------------- ------------------------------------//// 기본 ////----- -------------------------------------------------- ---------------------//무효 루프() { check_prox(); check_vibr(); check_wait();}
    Android 코드(1.1.0)자바
    Android MIT App Inventor(http://ai2.appinventor.mit.edu/)
    미리보기 없음(다운로드만 가능).
    Arduino 코드(2.0.0)Arduino
    <사전>//--------------------------------------------- -------------------------------//// 파일명 :Scoreboard.ino //// 설명 :스마트 농구 스코어보드 / /// 버전 :2.0.0 //// 작성자 :Marcelo Avila de Oliveira ////--------------------- -------------------------------------------------- ------////----------------------------------------- -----------------------------------//// 라이브러리 ////------ -------------------------------------------------- --------------------//// 온도 및 습도 라이브러리#include "DHT.h"// 다중 직렬 라이브러리#include "SoftwareSerial.h"//- -------------------------------------------------- -------------------------//// 정의 ////---------------- -------------------------------------------------- ----------//// 디버그 모드 켜기// #define DEBUG// #define DEBUG_BLUE// #define DEBUG_PROX// #define DEBUG_VIBR// #define DEBUG_DHT// DHT 센서#define DHTPIN 7#define DHTTYPE DHT22DHT dht(DHTPIN, DHTTYPE);// 블루투스 모드 LE(RX, TX)소프트웨어직렬 블루투스(10, 11);//---------------------------------- ------------------------------------------//// 상수 /// /---------------------------------------------------- ---------------------------//// 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 =10000;// MATHconst float percent_to_bright_factor =100 * log10(2) / log10 -------------------------------------------------- -----------------------//// 변수 ////------------------ -------------------------------------------------- --------//// TIMEunsigned long wait_time;unsigned long dht_time;// HUMIDITY &TEMPERATUREfloat humi, temp, heat;// STATUSboolean prox =false;boolean vibr =false;boolean wait =false;// -------------------------------------------------- --------------------------//// 기능(설정) ////------------ ------------------------ ----------------------------------------//설정 무효화() { // 시작 PINS 핀 모드(prox_pin, INPUT); 핀모드(vibr_pin, 입력); 핀모드(led_r_pin, 출력); 핀모드(led_g_pin, 출력); 핀모드(led_b_pin, 출력); // SET LED MAGENTA set_led(5, 100); // 직렬 통신 시작 Serial.begin(9600); // 블루투스 통신 시작 setup_bluetooth(); // DHT 센서 시작 dht.begin(); // SET LED 파란색 set_led(4, 100); #ifdef DEBUG Serial.println("보드가 살아있습니다"); 직렬.println(); #endif}void setup_bluetooth() { #ifdef DEBUG_BLUE Serial.println("블루투스 설정"); 직렬.println(); #endif // 전송 속도 설정 Bluetooth.begin(9600); // 사용 가능한 모든 데이터 지우기 while (Bluetooth.available()) { delay(50); 블루투스.read(); }}//---------------------------------------------- ------------------------------//// 기능(조명) ////-------- -------------------------------------------------- ------------------//int percent_to_bright(int percent) { // PERCENT:// 0..100 // RETURN BRIGHT // 255..0 return 256 - pow(2, 퍼센트 / 퍼센트_to_bright_factor);}void set_led(int color, int bright) { // COLOR:// 0 =GREEN // 1 =YELLOW // 2 =RED // 3 =CYAN // 4 =BLUE / / 5 =마젠타 // 6 =흰색 // // 밝음:// 0 =OFF // .. // 100 =MAX #ifdef DEBUG Serial.println("LED 설정"); 직렬.println(); #endif if (색상 <0 || 색상> 6 || 밝음 <0 || 밝음> 100) { return; } int led_r_bright =255; int led_g_bright =255; int led_b_bright =255; int bright_aux =퍼센트_to_bright(밝음); 스위치(색상) { 경우 0:// 녹색 led_g_bright =bright_aux; 부서지다; 사례 1:// 노란색 led_r_bright =bright_aux; led_g_bright =bright_aux; 부서지다; 사례 2:// 빨간색 led_r_bright =bright_aux; 부서지다; 사례 3:// CYAN led_g_bright =bright_aux; led_b_bright =bright_aux; 부서지다; 사례 4:// 파란색 led_b_bright =bright_aux; 부서지다; 사례 5:// 마젠타 led_r_bright =bright_aux; led_b_bright =bright_aux; 부서지다; 사례 6:// 흰색 led_r_bright =bright_aux; led_g_bright =bright_aux; led_b_bright =bright_aux; 부서지다; } analogWrite(led_r_pin, led_r_bright); analogWrite(led_g_pin, led_g_bright); analogWrite(led_b_pin, led_b_bright); 반품;}//--------------------------------------------- -------------------------------//// 함수(체크) ////--------- -------------------------------------------------- -------------------//void check_prox() { if (!prox) { // 근접성이 감지되지 않은 경우에만 근접성을 확인 if(digitalRead(prox_pin) ==LOW) { #ifdef DEBUG_PROX Serial.println("근접 감지됨"); 직렬.println(); #endif // SET LED 녹색 set_led(0, 100); send_data(2); 프록시 =참; if (!vibr) { 대기 =참; wait_time =millis() + wait_interval; } } }}void check_vibr() { if (!prox &&!vibr) { // 근접 및 진동이 감지되지 않은 경우에만 진동을 확인 if(digitalRead(vibr_pin) ==HIGH) { #ifdef DEBUG_VIBR Serial.println(" 진동 감지"); 직렬.println(); #endif // LED 노란색 설정 set_led(1, 100); 진동 =사실; 대기 =사실; wait_time =millis() + wait_interval; } }}void check_wait() { if (wait &&millis()> wait_time) { if (!prox) { // SET LED RED set_led(2, 100); send_data(1); } 초기화(); }}void check_dht() { if (!prox &&!vibr) { // 진동이 감지되지 않은 경우에만 DHT를 확인 if (millis()> dht_time) { humi =dht.readHumidity(); 온도 =dht.readTemperature(); 열 =dht.computeHeatIndex(온도, 습도, 거짓); #ifdef DEBUG_DHT Serial.print("습도 :"); Serial.print(휴미); Serial.println("%"); Serial.print("온도:"); Serial.print(임시); Serial.println("C"); Serial.print("헤드 인덱스 :"); Serial.print(열); Serial.println("C"); Serial.println(""); #endif send_data(0); dht_time =millis() + dht_interval; } }}//--------------------------------------------- -------------------------------//// 함수(MIS) ////--------- -------------------------------------------------- -------------------//void send_data(int shot) { // 샷:// 0 =데이터 없음 // 1 =잘못된 샷(MISS) // 2 =오른쪽 샷(점수) Bluetooth.print(humi); Bluetooth.print(온도); Bluetooth.print(열); Bluetooth.print(샷); #ifdef DEBUG_BLUE Serial.println("블루투스 전송"); 직렬.println(); #endif}무효 재설정() { 진동 =거짓; 프록시 =거짓; 대기 =거짓; 지연(1000); // SET LED BLUE set_led(4, 100);}//------------------------------------------------- -----------------------------------------//// 기본 //// -------------------------------------------------- --------------------------//무효 루프() { check_prox(); check_vibr(); check_wait(); check_dht();}
    Android 코드(2.0.0)자바
    Android MIT App Inventor(http://ai2.appinventor.mit.edu/)
    미리보기 없음(다운로드만 가능).

    회로도


    제조공정

    1. 농구
    2. 오픈 소스 스마트 농업 시스템 설계
    3. 에지 AI 개발 속도를 높이는 스마트 센서 보드
    4. 라즈베리 파이 온도 센서
    5. Cellular IoT:Smart Garbage Can
    6. Smart Bartender
    7. 감정 센서 / EEG
    8. 스마트 섬유용 초고감도, 탄력 센서
    9. 스마트 콘택트 렌즈용 초박형 센서
    10. Sensata Technologies의 센서 생산을 지원하는 스마트 메카트로닉스