Construa uma Torreta Nerf Controlada por Bluetooth: Guia de Peças e Montagem
Componentes e Materiais
| Arduino Nano R3 | 1 |
| Módulo Bluetooth HC-05 | 1 |
| Conversor Buck LM2596 | 1 |
| Servos MG-90s | 3 |
| Motores DC tipo 130 | 2 |
| Diodo retificador FR207 | 1 |
| MOSFET RFP30N06LE | 1 |
| Plug jack 2.1x5.5mm | 1 |
| Resistores 10kΩ | 1 |
| Resistores 330Ω | 1 |
| Resistores 680Ω | 1 |
| Parafusos autoatarraxantes M2x10 | 30 |
| Parafuso chato M5x20 | 4 |
| Conectores Dupont | 15 |
| Haste de metal 1.5mm | 1 |
| Fios | 1 conjunto |
| Tubo termorretrátil | 1 |
| Elástico 20mm | 1 |
| Fonte 9V (mínimo 2.5 amps) | 1 |
Ferramentas e Máquinas Necessárias
- Chave de fenda
- Alicate de decapar fios
- Alicates
- Ferro de solda
- Multímetro
- Ferramenta de crimpagem
- Impressora 3D
Aplicativos e Serviços Online
- Microsoft Windows 10
Sobre o Projeto
Obrigado por conferir meu projeto de torreta Nerf controlada por Bluetooth. Não acho que haja muito a explicar aqui, esta é uma torreta Nerf controlada via Bluetooth a partir de um dispositivo Android ou PC.



Mais detalhes em: littlefrenchkev.com/bluetooth-nerf-turret

COMO FUNCIONA?
Nada super complexo. O movimento de inclinação (tilt) e rotação (pan) é feito por 2 servos acionados por um Arduino Nano.
Os dardos são disparados usando 2 rolos girados por 2 pequenos motores DC. Um servo empurra os dardos para dentro dos rolos quando a ordem de disparo é enviada. O carregador comporta 7 dardos.
Como mencionado acima, é controlado via Bluetooth a partir de um dispositivo Android ou PC.

COMO CONSTRUIR?
MONTAGEM:
O tripé e o carregador vêm em duas versões diferentes. Uma projetada para servos MG-90s e outra para servos MG996r. Servos MG996r podem consumir muita energia. Certifique-se de que sua fonte de alimentação dará conta do recado se decidir usá-los.
Tripé:

Carregador:

FIAÇÃO:
SOFTWARE E TESTES!!!
ALGUMAS FOTOS EXTRAS, POR QUE NÃO!!!



Código
Código Arduino
Código para carregar no Arduino. O código permanece o mesmo seja qual for o método de controle escolhido (app Android ou PC).
#include <Servo.h> //-----Declara servos e variáveis
Servo recoil_servo;
Servo pan_servo;
Servo tilt_servo;
const byte pan_limit_1 = 0;
const byte pan_limit_2 = 180;
const byte tilt_limit_1 = 65;
const byte tilt_limit_2 = 180;
const byte recoil_rest = 180; // Ângulo do servo em repouso
const byte recoil_pushed = 125; // Ângulo que o servo precisa alcançar para empurrar o dardo
//-----Variáveis relacionadas ao tratamento de dados seriais
byte byte_from_app;
const byte buffSize = 30;
byte inputBuffer[buffSize];
const byte startMarker = 255;
const byte endMarker = 254;
byte bytesRecvd = 0;
boolean data_received = false;
//-----Variáveis relacionadas a tempo de motor e disparo
bool is_firing = false;
bool can_fire = false;
bool recoiling = false;
unsigned long firing_start_time = 0;
unsigned long firing_current_time = 0;
const long firing_time = 150;
unsigned long recoil_start_time = 0;
unsigned long recoil_current_time = 0;
const long recoil_time = 2 * firing_time;
const byte motor_pin = 12;
boolean motors_ON = false;
void setup() {
pinMode(motor_pin, OUTPUT);
digitalWrite(motor_pin, LOW);
recoil_servo.attach(9);
pan_servo.attach(10);
tilt_servo.attach(11);
recoil_servo.write(recoil_rest);
pan_servo.write(90);
delay(1000);
tilt_servo.write(105);
Serial.begin(9600);
}
void loop() {
getDataFromPC();
set_motor();
if (data_received) {
move_servo();
set_recoil();
set_motor();
}
fire();
}
void getDataFromPC() {
if (Serial.available()) {
byte_from_app = Serial.read();
if (byte_from_app == 255) {
bytesRecvd = 0;
data_received = false;
} else if (byte_from_app == 254) {
data_received = true;
} else {
inputBuffer[bytesRecvd] = byte_from_app;
bytesRecvd++;
if (bytesRecvd == buffSize) {
bytesRecvd = buffSize - 1;
}
}
}
}
void move_servo() {
byte pan_servo_position = map(inputBuffer[0], 0, 253, pan_limit_2, pan_limit_1);
pan_servo.write(pan_servo_position);
byte tilt_servo_position = map(inputBuffer[1], 0, 253, tilt_limit_2, tilt_limit_1);
tilt_servo.write(tilt_servo_position);
}
void set_recoil() {
if (inputBuffer[3] == 1) {
if (!is_firing && !recoiling) {
can_fire = true;
}
} else {
can_fire = false;
}
}
void set_motor() {
if (inputBuffer[2] == 1) {
digitalWrite(motor_pin, HIGH);
motors_ON = true;
} else {
digitalWrite(motor_pin, LOW);
motors_ON = false;
}
}
void fire() {
if (can_fire && !is_firing && motors_ON) {
firing_start_time = millis();
recoil_start_time = millis();
is_firing = true;
}
firing_current_time = millis();
recoil_current_time = millis();
if (is_firing && firing_current_time - firing_start_time < firing_time) {
recoil_servo.write(recoil_pushed);
} else if (is_firing && recoil_current_time - recoil_start_time < recoil_time) {
recoil_servo.write(recoil_rest);
} else if (is_firing && recoil_current_time - recoil_start_time > recoil_time) {
is_firing = false;
}
}
Arquivos Python
O executável e o app Android podem ser encontrados aqui:
littlefrenchkev.com/bluetooth-nerf-turret
github.com/LittleFrenchKev/Bluetooth_Nerf_turret
Esquemáticos
Aqui está o diagrama principal de fiação. A fiação é dividida em pequenas seções ligadas usando conectores Dupont. Isso é para facilitar a montagem.

Aqui está a fiação do Bluetooth HC-05. Este pedaço de fiação inclui um divisor de tensão para permitir que os 5V vindos do Arduino sejam reduzidos para cerca de 3.3V para o pino receptor do HC-05.

Processo de manufatura
- Resistores: Fundamentos, Tipos e Aplicações Práticas
- Circuitos Integrados (CIs): Chips Compactos e Poderosos Impulsionando a Eletrônica Moderna
- Torretas Sentry Nerf Autônomas DIY – Construa uma Arma Nerf Inteligente com Motores de Passo, Câmera e Arduino
- Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
- Sistema Multi-Posição de Sensores de Temperatura para Integração em Casa Inteligente
- Transforme Seu Carro RC em um Veículo Controlado por Bluetooth
- Controle USB para Jogos DIY com Arduino – Construa Seu Próprio Gamepad de Alto Desempenho
- Kit MOSMusic: MOSFET, Arduino e Mais - Iluminação Sincronizada com Música
- Componentes Essenciais de uma Máquina de Furar: Visão Geral Completa
- Principais Componentes de um Motor de Combustão Interna