본문 바로가기
아두이노

게이머를 위한 궁극의 모기채 모드: 킬 카운터, 사운드, 충전식 배터리를 추가

by 모빌리티키즈 2023. 5. 21.
728x90
반응형

게이머를 위한 궁극의 모기채 모드를 제작하기 위해서는 킬 카운터, 사운드 및 충전식 배터리를 추가해야합니다. 이를 위한 자세한 제작 방법은 다음과 같습니다.

재료:

모기채: 1개
마이크로컨트롤러: Arduino Nano 또는 Micro Arduino
OLED 화면: 1개
LED 및 다이오드: 여러 개
버튼 스위치: 1개
배터리: 1개 (충전식)
배터리 홀더: 1개
샤시 마운트 스피커: 1개
저항: 여러 개
점퍼 케이블: 여러 개
작업 단계:

전원 회로 설계 및 제작
먼저 배터리 홀더를 모기채에 연결합니다.
마이크로컨트롤러, OLED 화면, 버튼 스위치 및 샤시 마운트 스피커를 연결합니다.
전원 회로 및 제어 회로 제작 및 연결
마이크로컨트롤러의 전원 회로를 제작하고 OLED 화면의 전원도 연결합니다.
마이크로컨트롤러의 제어 회로를 제작합니다.
킬 카운터 제작 및 연결
LED 및 다이오드를 사용하여 킬 카운터 회로를 제작합니다.
카운터를 실제 게임에 맞게 설정할 수 있습니다.
충전회로 제작 및 연결
충전 회로를 제작하고 배터리가 충전되는지 여부를 확인합니다.
sound 제작 및 연결
샤시 마운트 스피커를 사용하여 게임 효과음을 재생합니다.
OLED 화면 제어 완료
OLED 화면에 필요한 정보를 출력하는 코드를 작성합니다.
위와 같은 과정이 완료되면 게이머를 위한 킬 카운터, 사운드 및 충전식 배터리가 추가된 궁극의 모기채 모드를 제작할 수 있습니다.

중요한 것은 모든 장치가 제대로 작동하는지 확인하는 것입니다. 모든 장치와 회로를 테스트하고 문제가있는 경우 확인하고 수정해야 합니다. 또한 게임에 맞게 킬 카운터를 설정하고 적절한 효과음을 선택하여 게이머가 게임을 더 즐길 수 있도록 해야합니다.

 

내가 사는 곳에서는 봄부터 가을까지 호랑이 모기와 영토를 놓고 경쟁해야 합니다.

현지 상점은 수백 유로에 판매되는 정교한 함정을 포함하여 모기 방지 장치, 양초의 인상적인 목록을 제공하며, 심지어 2000 유로를 판매 한 것을 발견했습니다.

 

모기와 싸우기 위해 내가 가장 좋아하는 무기 중 하나는 이 값싼 전기 채찍이지만, 이 싸움을 더욱 보람 있게 만들기 위해 무기를 업그레이드해야 한다고 생각했습니다.

 

이 지침서에서 나는 전기 채찍을 해킹하는 방법을 보여주고 설명 할 것입니다.

 

  • 전자를 추가하여 킬을 감지합니다.
  • 4자리 카운터를 추가합니다.
  • USB 충전식으로 만드십시오.
  • 더 나은 경험을 위해 사운드를 추가하십시오.

 

내 생각은 곤충이 찰싹 때리는 철망에 부딪혀 전기 아크가 발생하면 찰싹 때리는 회로에 약간의 전기적 변화가 있어야한다는 것입니다. 회로에서 arduino 또는 attiny (즉, 0에서 5 볼트 사이)로 읽을 수있는 장소를 찾을 수 있다면 점수를 계산하고 표시하고 소리를 재생하는 것이 쉬울 것입니다.

dfplayer 모듈을 사용하여 attiny에 사운드/음악 기능을 쉽게 추가할 수 있습니다

점수는 4자리 7세그먼트 디스플레이로 표시되며, 온보드 tm1637로 <>개의 와이어(attiny의 IO 핀 <>개)로 디스플레이를 구동할 수 있습니다.

이러한 전자 모듈은 5V에서 작동하고 채찍은 일반적으로 2 x 1.5V 배터리로 작동하기 때문에 채찍의 전원 부분도 USB 충전식 배터리로 업그레이드했습니다.

 

즉, 업그레이드는 쉽게 찾을 수 있는 기성품 전자 모듈로 이루어지며 단순한 전자이며 유일한 "복잡성"은 신호 계산에 있지만 이는 프로그래밍을 통해 attiny에 의해 처리됩니다.

 

시작하기 전에 한 가지 더, 안전 : 전기 채찍은 전류가 매우 낮더라도 고전압 (버튼을 누를 때 메쉬에 100 볼트)을 사용하며 배터리가 연결될 때 내부 회로를 만지지 않도록 carrefull하십시오.

스티커에는 주의: 어린이(및 자신)의 손이 닿지 않는 곳에 보관하십시오.

 

공급

게이머를 위한 이 Ultimate Mosquito Swatter Mod에는 다음이 필요합니다.

  • 전기 모기채 (여러 유형의 채찍 회로가 있습니다. 이 지시 가능하고 내가 제안하는 프로그램은 한 가지 유형의 채찍에 맞게 조정됩니다. '채찍 열기' 단계를 확인하여 채찍이 내가 사용하는 것과 일치하는지 확인하십시오)
  • Digispark Pro (온라인에서 쉽게 찾을 수 있는 편리한 보드)
  • DFPlayer(온라인에서 쉽게 찾을 수 있음)
  • 저항기: 1Ω, 1kΩ
  • 스피커 8 Ω
  • SD 카드(작은 용량으로 몇 개의 사운드 파일을 저장할 수 있어야 함)
  • 리튬 이온 충전식 배터리 : 회수 배터리
  • 배터리 충전기, 이와 같은 것
  • 전위차계 (저는 1MΩ을 사용했는데 그다지 중요하지는 않지만 값이 높으면 전위차계를 통한 전류 소비가 제한됩니다)
  • tm1637이 있는 4자리 LED 디스플레이(1637자리 디스플레이 + TM4이고 <>자리 디스플레이만 해당되지 않음)
  • 커패시터 : 470 μF
  • 온/오프 토글 스위치
  • 푸시 버튼
  • 전선(오래된 전화 또는 이더넷 케이블 재사용)

툴링 부분의 경우 납땜 인두, 뜨거운 글루건 및 3D 프린터(또는 찰싹 때리는 손잡이를 수정하기 위한 약간의 창의성...)

1단계: 전기 채찍 작동 방식, 어떻게 업그레이드할 수 있습니까?

글쎄, 작동 방식에 신경 쓰지 않고 게이머를 위한 Ultimate Mosquito Swatter를 원한다면 이 단계를 건너뛸 수 있습니다...

전기 채찍의 작동 방식을 설명하는 리소스는 인터넷에서 찾을 수 있습니다. (즉, https://www.homemade-circuits.com/mosquito-swatter-bat-circuit/)

따라서 진동 회로와 라켓 철망에 연결된 수백 볼트까지 전압을 높이는 회로입니다.

안타깝게도 여기에 attiny를 연결할 수 있는 방법을 많이 찾을 수 없었습니다(고전압 측은 attiny의 5볼트 제한으로 인해 직접 사용할 수 없습니다).

이 문제를 해결하기 위해 두 번째 생각은 전류 소비를 측정하는 것이 었습니다. 그물에 아크가 발생하고 모기가 튀겨 질 때, attiny가 읽을 수 있어야하는 약간의 에너지 소비가 있어야합니다.

 

이 에너지를 측정하는 가장 좋은 방법은 전류 소비를 측정하는 것이고, 전류를 측정하는 가장 쉬운 방법은 저항을 통과하는 전압을 측정하는 것입니다.

 

따라서 모기를 세는 유일한 트릭은 배터리와 찰싹 때리기 회로 사이에 작은 저항을 삽입하고 이 저항의 전압을 모니터링하는 것입니다.

그 외에도 이미 만들어진 전자 모듈 (각 기능 : 사운드, 디스플레이, 충전기 등)을 사용했기 때문에 상당히 간단한 전자 프로젝트입니다.

2단계: 회로 계획

추가된 주요 구성 요소는 다음과 같습니다.

  •  애티니(디지스파크 프로)
  •    dfplayer
  •  USB 충전기 및 배터리
  •  전시
  •  리셋 버튼
  •  온/오프 스위치
  •  볼륨 조정을 위한 전위차계
  •  저항기 2개와 커패시터 1개

 

핸들에 맞도록 배치해야 하고, digispark와 dfplayer는 서로 가깝게 유지될 수 있으며, 최종 모드에서 위치할 위치에 따라 이 다른 구성 요소에 올바른 와이어 길이를 허용해야 합니다(즉, USB 충전기에는 충전을 위해 액세스할 수 있어야 하는 온보드 USB 포트가 있음)

3단계: Swatter 열기

배터리를 제거하고 스핏 터를 엽니 다 (나사 몇 개만 있어야한다).

추가 구성 요소를 배치해야 하는 공간을 확인할 수 있을 뿐만 아니라 채찍이 이 지침서에서 사용하는 것과 일치하는지 확인할 수 있습니다.

그것에 대해 신경 써야 할 가장 큰 차이점은 찰싹 때리는 푸시 버튼의 "위치"입니다. 내 경우에는 배터리의 +와 찰싹 때리기 회로 사이에 있습니다. 이 경우 당신은 갈 수 있습니다 (사진 참조).

일부 찰싹 때리기에서 이 푸시 버튼은 접지(-)와 회로 사이에 있습니다. 이 경우 수정 및 코드가 작동하지 않습니다. 나는 그런 찰싹 때리기로 작동하게 할 수 있다고 확신하지만 하드웨어 및 소프트웨어 측면에서 약간의 조정이 필요합니다. 이 두 번째 유형의 채찍질에 대해 작업한 후 이 침입 가능한 항목을 업데이트하겠습니다.

4단계: Swatter 수정

이 단계에서는 다음을 수행합니다.

- 2개의 AAA 배터리용으로 설계된 구획에 배터리를 위한 공간을 확보하고 충전식 배터리용 배터리 커넥터를 재사용합니다.

5단계: 회로 구축, 모든 구성 요소 납땜

이제 무엇이 어디에 연결되어 있는지 알았으므로 납땜을 진행할 수 있습니다.

다양한 와이어 길이를 추정하기 위해 최종 위치를 기준으로 모든 구성 요소를 배치합니다.

이전 단계에서는 명확성을 위해 접지와 VCC(5V) 전선을 그리지 않았지만 모든 접지가 상호 연결되어야 하고 모든 VCC가 상호 연결되어야 합니다.

VCC의 경우 디지스파크에는 3V로 표시된 5핀이 있으며 함께 연결되어 다른 구성 요소로 재발송하는 데 사용할 수 있습니다. 디지스파크의 VIN을 사용하지 마십시오(VIN은 vol입니다.tage 입력은 6V 이상이어야 하며, 우리는 그것을 사용하지 않고 배터리 충전기의 5V 출력을 사용합니다).

나는 digispark로 시작하는 것이 좋습니다.

  • DigisPark를 DFPlayer에 납땜합니다.
  • 디스플레이, 푸시 버튼 및 전위차계에 대한 DigisPark.
  • 열수축 튜브를 사용하여 접촉 및 단락을 방지하십시오(예: DigisPark와 DFPlayer 사이의 저항).

그런 다음 찰싹 때리기 회로, 배터리 차거, 켜기/끄기 스위치를 진행합니다.

  • 배터리 - 충전기 배터리 - 입력
  • 배터리 + 충전기 배터리 + 입력
  • 찰싹 때리기 회로의 1옴 저항(+)
  • 찰싹 때리기 회로의 (+)와 (-)에 있는 축전기는, 축전기 극성을 보십시오!
  • 디지스파크의 핀 A12를 푸시 버튼에 연결(푸시 버튼에는 두 개의 커넥터가 있으며 하나는 배터리 +에 연결되고 A12는 다른 커넥터에 연결됨)
  • 접촉 및 단락을 피하기 위해 열수축 튜브를 사용하십시오(커패시터, 저항 등).

6단계: Swatter 회로에서 디스플레이 분리

첫 번째 테스트에서 디스플레이 문제가있었습니다. 모기가 찰싹 때리는 그물망에 부딪히면 디스플레이가 꺼지거나 미쳐버릴 것입니다.

디스플레이 회로 및 연결에 영향을 미치는 고전압 변동으로 인해 발생하는 전자 방해 때문인 것으로 의심됩니다.

수정은 간단하며 회로의 일부 테이프, 알루미늄 호일 (전자기 실드) 및 테이프가 다시 있습니다.

물론 알루미늄 호일을 회로에 직접 올려 놓지 마십시오.

 

7단계: SD 카드에 사운드 로드

dfplayer에서 재생되는 사운드는 SD 카드에 저장됩니다.

나는 그것을 단순하게 유지하고, 카드를 포맷하고, 내가 선택한 소리를 복사했다

이것은

  • 전원을 켤 때 재생되는 소리("다음 전투를 준비하십시오")
  • "괴물이 죽었다" 소리
  • "레벨 업" 소리
  • 일부 사운드 파일은 킬이 감지될 때 무작위로 재생됩니다.

카드에 있으면 dfplayer는 "트랙 번호"를 기반으로 사운드를 재생합니다.

dfplayer 트랙 번호와 SD 카드의 파일 사이의 링크에 대한 명확한 설명을 찾을 수 없습니다.

관찰에 따르면, 나는 파일이 그들의 이름을 기준으로 정렬되지 않고 오히려 카드의 inode 번호 (리눅스에서 "ls -id"로 볼 수 있음)로 정렬 된 것으로 의심된다

ls -id * | more
647 1_Monster_kill.mp3
648 2_mixkit-final-level-bonus-2061.wav
649 3_get_ready_to_the_newt_fight.mp3
650 mixkit-arcade-retro-scoring-counter-273.wav
651 mixkit-arcade-video-game-bonus-2044.wav
652 mixkit-arcade-video-game-scoring-presentation-274.wav
653 mixkit-game-bonus-reached-2065.wav
654 mixkit-game-experience-level-increased-2062.wav
655 mixkit-winning-an-extra-bonus-2060.wav

새로 포맷 된 카드에서 시작하면 트랙 번호 / inode의 순서가 사운드 파일 사본의 순서가됩니다 (즉, 카드에 복사 된 첫 번째 파일의 트랜크 번호는 1입니다)

 

내가 제안한 코드에서 파일 / 트랙 선택은 setTrack 으로 수행됩니다.

 // 0 is random betwen tracks 4 to 9
 // 1 is monster kill = track 1 (listed by inode on card (ls -id))
 // 2 is level up
 // 3 is power on
 if (sound_type==0)  setTrack(int(random(4,9))); //SD card contains 9 files
 if (sound_type==1)  setTrack(1); // monster kill
 if (sound_type==2)  setTrack(2); //level up
 if (sound_type==3)  setTrack(3); //power on

따라서 해당 부분을 수정하여 액션(sound_type)과 재생된 트랙이 일치하도록 할 수 있습니다.

mixkit-winning-an-extra-bonus-2060.wav
0.26MB
mixkit-game-experience-level-increased-2062.wav
0.52MB
mixkit-game-bonus-reached-2065.wav
0.50MB
mixkit-arcade-video-game-scoring-presentation-274.wav
0.67MB
mixkit-arcade-video-game-bonus-2044.wav
0.23MB
mixkit-arcade-retro-scoring-counter-273.wav
0.47MB
3_get_ready_to_the_newt_fight.mp3
0.02MB
2_mixkit-final-level-bonus-2061.wav
0.44MB
1_Monster_kill.mp3
0.08MB

8단계: 3D프린터 인쇄

여기에 사용된 것과 동일한 찰싹 때리기를 수정하는 경우 내 핸들 디자인을 직접 인쇄할 수 있습니다.

그렇지 않다면 당신은 당신 자신의 디자인을 해야 할 것입니다...

그러나 일부 swatter에는 거의 아무것도없는 상당히 큰 핸들이 있으므로 아무 것도 인쇄하지 않고 추가 회로를 장착하는 것이 가능할 수 있습니다. 여전히 디스플레이와 스피커를 위한 장소를 찾아야 합니다.

swatter_instructable.stl
1.61MB

 

case_digispark.stl
0.09MB

9단계: 모든 것을 조립합니다

뜨거운 글루건을 사용하여 부품을 최종 위치에 고정했습니다.

스피커는 또한 찰싹 때리기에 직접 붙어 있습니다.

10 단계 : 모기는 어디에 있습니까? 구출을 위한 수학 및 통계

다시 한 번, 작동 방식에 신경 쓰지 않고 게이머를 위한 Ultimate Mosquito Swatter를 원한다면 이 단계를 건너뛸 수 있습니다... 그리고 나중에 다시 올 수도 있습니다.

 

모든 구성 요소가 함께 납땜되면 아날로그 읽기 (A12) 만 수행하는 간단한 프로그램을로드하고 원시 데이터를 보면... 약간 실망스럽고 원시 데이터는 매우 시끄러워 보이며 그래프에서 모기 (또는 다른 것, 모기가 코드를 디버깅하기 위해 라켓을 칠 때까지 기다리지 않았습니다 :))가 라켓의 메쉬를 쳤습니다 (그림 1 참조).

 

평균화하는 것이 소음의 일부를 정리하는 좋은 방법이고 내 생각은 마지막 평균을 "장기" 평균과 비교하는 것이었지만 약간 실망스러웠습니다(그림 2 참조).

 

다음 단계는 더 똑똑한 사람들이 하는 일을 읽고 배우는 것입니다. https://www.iese.fraunhofer.de/blog/change-point-detection/

이것은 내가 찾고있는 것과 정확히 일치하며, 내 신호의 표준 편차를 계산하면 그 킬을 감지 할 수 있습니다 (위 링크의 "슬라이딩 윈도우를 통한 변경점 감지 애니메이션"참조).

 

설정에 적용하면 다음과 같은 결과를 얻을 수 있습니다(그림 3). 내 프로그램에서 표준 편차의 제곱을 계산하면 라켓 버튼을 누르거나 놓을 때 매우 높은 값에 도달하는 것을 볼 수 있지만(이는 신호가 0V에서 5V에 가깝게 이동할 것으로 예상됨) 일단 이러한 위상이 제외되면 이 표준 편차를 모니터링하고 높은 값으로 이동하면 우리는 모기를 죽여야하는 회로에 교란이 있습니다 (그림 4)!

 

이제 킬을 찾는 방법을 알았으므로 나머지는 쉽습니다(소리 재생, 점수 증가).

 

정직하고 정확하게 말하면 몇 가지 사항이 더 추가되었습니다.

- 470 uF 커패시터 (자체적으로 더 많은 노이즈 필터링을 제공하고 고전류가 필요할 때 일종의 보조 배터리 역할을 함)

- 우리는 두 가지 수준의 평균화 메커니즘을 가지고 있습니다 (코드에서 핀 A5의 전압을 원시로 12 번 측정하고 평균을 낸 다음 표준 편차 계산의 슬라이딩 윈도우에 대해이 평균값을 저장하는 것을 볼 수 있습니다)

11단계: Digispark Pro에 프로그램 로드

이것은 매우 간단하며, attiny는 arduino IDE를 사용하여 프로그래밍 할 수 있습니다

지침 : http://digistump.com/wiki/digispark/tutorials/connectingpro

 

내가 제안하는 코드에 대한 몇 가지 설명 :

setup() 기능에서 DFPlayer에 필요한 직렬 통신을 초기화하고 PotentionMeter 값을 읽어 볼륨을 조정합니다(이를 위해 사이클을 사용하지 않도록 설정 시 한 번만 읽습니다. 즉, 볼륨 조정을 고려하기 위해 Swatter Woud의 전원을 끄거나 켜야 함).

카운터 재설정과 마찬가지로 점수를 0으로 재설정하려면 재설정 버튼을 누르고 찰싹 때리기의 전원을 켜고 디스플레이에 "<>"이 표시될 때까지 기다려야 합니다.

이어서, EEPROM에 저장된 스코어를 판독하였다.

디스플레이의 밝기를 설정합니다(그렇지 않으면 꺼진 상태로 유지됨).

 

loop() 함수에서 우리는 기본적으로 찰싹 때리기 거듭제곱 process_average()의 평균과 킬이 있는지 여부를 알려주는 표준 편차의 제곱을 처리합니다(process_std_dev() )

mosquito_std_dev_instructables.ino
0.01MB

12단계: Digispark Micronucleus 업데이트(옵션)

디지스파크 소핵은 디지스파크를 "시작"하는 코드 조각입니다.

새 프로그램을 업로드하려고 하는지, 그렇지 않은 경우 이미 로드된 프로그램을 시작하는지 확인합니다.

문제는 이 검사를 위해 6초 동안 기다린다는 것인데, 이는 찰싹 때리기가 사냥할 준비가 되기를 기다리는 데 상당히 긴 시간입니다...

고맙게도 다른 검사 메커니즘을 가진 소핵의 일부 변형이 있습니다. 이러한 지침에 따라 소핵을 업데이트하면("권장" 구성 사용) 1초 또는 2초 후에 채찍이 준비됩니다.

지침 : https://github.com/ArminJo/micronucleus-firmware

micronucleus 펌웨어를 업데이트한 후 프로그램을 다시 로드하십시오.

13단계: 문제 해결...

바라건대 당신은 이것을 읽을 필요가 없지만 ... 만일을 대비하여 몇 가지 팁...

  1. 별로 일하지 않습니다 ... 전선 및 땜납 확인
  2. 찰싹 때리기가 저절로 다시 시작되면(시작음이 들리지만 켜거나 끄지 않은 경우) 배터리를 충전하십시오
  3. 약 30초 후에 저절로 찰싹 때리기가 꺼집니다.
  4. 일부 USB 충전기 회로에는 자동 대기 모드 (칩 IP5306을 사용하는 광산의 경우)가 있으며 전류가 일정 량 (IP45의 경우 5306mA) 미만이면 대기 모드로 전환됩니다.
  5. 가능한 첫 번째 해결 방법은 정기적으로 Swatter 버튼을 누르는 것입니다. 매 20초마다. 이것은 전원을 유지합니다
  6. 보드(IP5306 포함)에는 전원을 켜거나 끌 수 있는 "키" 기능이 있습니다. 보드에 "K"라고 표시되어 있습니다. 이것을 digispark의 핀 10에 납땜합니다. 내가 제안한 코드의 watchdog() 함수는 전원을 계속 켜 둘 것입니다.
  7. Swatter가 감지에 정말 서툴거나 잘못 감지하는 경우... 코드 조정을해야 할 수도 있습니다 ...

이 장치와 코드를 조정하는 데 몇 시간을 보냈습니다. 가장 큰 어려움은 무슨 일이 일어나고 있는지 모니터링하는 것입니다.

USB 포트를 사용하여 일부 변수를 표시하려면 DigiCDC 라이브러리를 사용하고 SoftSerial(4자리 표시에 사용됨)을 제거하기 위해 코드를 수정해야 합니다. 그러나 그렇게 할 때 배터리 충전기 포트가 아닌 USB 포트에서 전원을 공급받으며 이는 큰 차이를 만듭니다. VCC의 품질은 계산된 평균 및 표준 편차에 많은 영향을 미칩니다.

즉, USB에 연결된 상태에서 수행된 튜닝은 배터리로 실행할 때 작동하지 않을 수 있습니다.

약간의 정보를 얻는 한 가지 방법은 디스플레이 자체를 사용하는 것입니다 (즉, 재설정 버튼을 눌렀을 때 마지막 표준 편차를 표시)

이를 알면 코드에서 다음 값을 조정하여 감지에 많은 영향을 줄 수 있습니다.

단일 읽기를 위해 채취한 샘플의 수:

int samples=10;

평균 슬라이딩 윈도우의 크기 :

int nbr_slot=15;
int value[16];  // array of (nbr_slot + 1)

 

표준 편차 임계값 :

int threshold=110;
int monster_threshold=250;

 

 

728x90
반응형