Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Bluetooth Nerf Turret

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
HC-05 Bluetooth-Modul
× 1
LM2596 Abwärtswandler
× 1
MG-90s-Servos
× 3
Typ 130 Gleichstrommotoren
× 2
FR207-Gleichrichterdiode
× 1
RFP30N06LE-MOSFET
× 1
2,1x5,5mm Klinkenstecker
× 1
Widerstände 10kΩ
× 1
Widerstände 330Ω
× 1
Widerstände 680Ω
× 1
M2x10 selbstklebende Schrauben
× 30
M5*20 Senkkopfschraube
× 4
dupont-Konnektoren
× 15
1,5 mm Metallstab
× 1
Drähte
× 1
Schrumpfschlauch
× 1
20 mm Gummiband
× 1
9-V-Netzteil (mindestens 2,5 A)
× 1

Notwendige Werkzeuge und Maschinen

Schraubendreher
Abisolierzange
Zange
Lötkolben
Multimeter
Crimpzange
3D-Drucker

Apps und Onlinedienste

Microsoft Windows 10

Über dieses Projekt

Vielen Dank für die Überprüfung meines Bluetooth-gesteuerten Nerf-Turmprojekts. Ich denke, hier gibt es nicht zu viel zu erklären, dies ist ein Nerf-Turm, der über Bluetooth entweder von einem Android-Gerät oder einem PC gesteuert wird.

....................https://www.littlefrenchkev.com/bluetooth-nerf-turret............... .....

WIE FUNKTIONIERT ES ?

Nichts super komplexes. Die Neige- und Schwenkbewegung wird von 2 Servos gesteuert, die von einem Arduino Nano angetrieben werden.

Die Dartpfeile werden mit 2 Walzen geschossen, die von 2 kleinen Gleichstrommotoren angetrieben werden. Ein Servo schiebt die Darts in die Rollen, wenn der Schießbefehl gesendet wird. Das Magazin kann 7 Darts aufnehmen.

Wie oben erwähnt, wird es über Bluetooth entweder von einem Android-Gerät oder einem PC gesteuert.

WIE MAN ES ERSTELLT ?

MONTAGE :

Stativ und Magazin gibt es in zwei verschiedenen Ausführungen. Einer für MG-90s-Servos und der andere für MG996r-Servos. MG996r-Servos können leistungshungrig sein. Stellen Sie sicher, dass Ihre Stromversorgung der Aufgabe gewachsen ist, wenn Sie sich entscheiden, sie zu verwenden.

Stativ :

Magazin :

VERKABELUNG :

SOFTWARE UND TEST !!!

EINIGE ZUSÄTZLICHE FOTOS, WEIL NICHT !!!


Code

  • Arduino-Code
Arduino-CodeArduino
Code zum Hochladen auf das Arduino. Der Code bleibt gleich, egal ob Sie den Turm über die Android-App oder einen PC steuern.
#include //-----Servos und Variablen deklarierenServo 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 Rückstoß_Rest =180; // Winkel des Servos im Ruhezustandconst byte recoil_pushed =125; // Winkel, den das Servo erreichen muss, um den Dart zu drücken //-----Variablen im Zusammenhang mit der seriellen Datenverarbeitungbyte 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;//-----Variable in Bezug auf Motortiming und Zündungbool is_firing =false;bool can_fire =false;bool recoiling =false;unsigned longfire_start_time =0;unsigned longfire_current_time =0;const lange Zündzeit =150;ohne Vorzeichen lange Rückstoßzeit =0;ohne Vorzeichen lange Rückstoßzeit =0;const lange Rückstoßzeit =2 * Zündzeit;const Byte Motorpin =12;Boolesche Motoren_ON =false;//8===========================Dvoid setup () {//----- Motor-Pin-Modus definieren PinMode (motor_pin, OUTPUT); digitalWrite (motor_pin, LOW); //-----befestigt das Servo an den Pins recoil_servo.attach(9); pan_servo.attach(10); Tilt_servo.attach(11); //-----Startsequenz recoil_servo.write(recoil_rest); pan_servo.write(90); Verzögerung (1000); Tilt_servo.write(105); Serial.begin (9600); // serielle Kommunikation beginnen}//8===========================Dvoid loop () { getDataFromPC (); set_motor(); if (data_received) { move_servo(); set_recoil(); set_motor(); } fire();}//8===========================Dvoid getDataFromPC() { //erwartete Struktur der Daten [Startbyte , Pan-Betrag, Tilt-Betrag, Motor an, Auslösetaste gedrückt, End-Byte] //Startbyte =255 //Pan-Betrag =Byte zwischen 0 und 253 //Tilt-Betrag =Byte zwischen 0 und 253 //Motor an =0 for off - 1 on // Feuerknopf gedrückt =0 für nicht gedrückt - 1 für gedrückt // Endbyte =254 if (Serial.available ()) { // Wenn Daten in serieller Byte_from_app =Serial.read (); // das nächste verfügbare Zeichen lesen if (byte_from_app ==255) { // Suche nach Startbyte, falls gefunden:bytesRecvd =0; // das empfangene Byte auf 0 zurücksetzen (um den Eingabepuffer von Anfang an zu füllen) data_received =false; } else if (byte_from_app ==254) { // Suche nach Endbyte, falls gefunden:data_received =true; // setze data_received auf true, damit die Daten verwendet werden können } else { // füge empfangene Bytes zum Puffer hinzu inputBuffer[bytesRecvd] =byte_from_app; // Zeichen zum Eingabepuffer hinzufügen bytesRecvd++; // das empfangene Byte inkrementieren (dies dient als Index) if (bytesRecvd ==buffSize) { // nur eine Sicherheit für den Fall, dass der inputBuffer voll wird (sollte nicht passieren) bytesRecvd =buffSize - 1; // if bytesReceived> Puffergröße set bytesReceived kleiner als Puffergröße } } }}//8===========================Dvoid move_servo( ) { byte pan_servo_position =map(inputBuffer[0], 0, 253, pan_limit_2, pan_limit_1); // Eingangspufferwert in Servopositionswert umwandeln pan_servo.write (pan_servo_position); // Pan-Servopositionsbyte einstellen Tilt_servo_position =map (inputBuffer[1], 0, 253, Tilt_limit_2, Tilt_limit_1); // Eingangspufferwert in Servopositionswert umwandeln Tilt_servo.write (tilt_servo_position); // Pan-Servoposition einstellen}//8===========================Dvoid set_recoil() { if (inputBuffer [3] ==1) { //wenn der Feuerknopf gedrückt wurde if (!is_firing &&!recoiling) { //und nicht bereits feuern oder zurückspulen can_fire =true; // kann auf true gesetzt werden (siehe Effekt in void fire()) } } else { // wenn der Feuerknopf nicht gedrückt wird can_fire =false; //set kann auf false feuern (siehe Effekt in void fire())}}//8===========================Dvoid set_motor () {//-----Motoren mit MOSFET-Transistor starten und stoppen. if (inputBuffer [2] ==1) {// wenn der Bildschirm digitalWrite (motor_pin, HIGH) berührt hat; // Motor einschalten Motoren_ON =true; aufrechtzuerhalten. Sonst {// wenn der Bildschirm nicht berührt wurde digitalWrite (motor_pin, LOW); // Motor ausschalten Motoren_ON =false; }}//8==========================Dvoid Fire () {// wenn Motorbyte an, Motor einschalten und prüfen, ob Zeit war es an if (can_fire &&!is_firing &&motors_ON) { //if (can_fire &&!is_firing) { fire_start_time =millis(); recoil_start_time =millis(); is_firing =wahr; } fire_current_time =millis(); recoil_current_time =millis(); if (is_firing &&fire_current_time - fire_start_time  recoil_time) { is_firing =false; }}
Python-Dateien
Die ausführbare und Android-App finden Sie hier:https://www.littlefrenchkev.com/bluetooth-nerf-turrethttps://github.com/LittleFrenchKev/Bluetooth_Nerf_turret

Schaltpläne

Hier ist der Hauptschaltplan.
Die Verkabelung ist in kleine Abschnitte unterteilt, die mit Dupont-Steckverbindern miteinander verbunden sind. Dies dient der einfachen Montage. Hier ist die HC-05 Bluetooth-Verkabelung.
Dieses Kabel enthält einen Spannungsteiler, damit die aus dem Arduino kommenden 5 V auf etwa 3,3 V für den HC-05-Empfängerstift abgesenkt werden können.

Herstellungsprozess

  1. Widerstände
  2. Integrierter Schaltkreis
  3. Autonomer Nerf-Wachturm
  4. Arduino Digital Dice
  5. Multi-Temperatursensor
  6. Verwandeln Sie Ihr RC-Auto in ein Bluetooth-RC-Auto
  7. Arduino-Gamecontroller
  8. MOSMusic
  9. Komponenten der Bohrmaschine
  10. Komponenten des Verbrennungsmotors