Moin zusammen.
Ich stell‘ mich hier mal vor. Ich bin Enno, 35 aus Weener in Ostfriesland, von Beruf Elektroniker für Betriebstechnik.
Mit Platinenlöten und Programmierung habe ich bisher nicht so viel zu tun gehabt, bis auf ein paar Unterrichtsstunden in der Berufsschule, während meiner Lehre.
Beste Voraussetzungen also ![]()
Für ein Star Wars Cosplay Projekt habe ich mir in den Kopf gesetzt eine Blasterpistole, die ich per 3D Drucker gedruckt habe, mit Licht und Sound auszustatten.
So sieht der Blaster erstmal aus:
Und so in Einzelteilen:
Den Korpus vorne habe ich ausgehölt auf 50x100mm und pro Hälfte 15mm tief.
Zum Abzug und zum Magazinfach habe ich auch Gänge vorbereitet, damit per Mikrotaster ein Sound abgespielt werden kann.
Mein Plan ist es jetzt drei Soundeffekte (Blast, Dry fire, Reload) abzuspielen und bei jedem Schuss soll eine LED aufblitzen.
Jetzt habe ich mir gedacht, dass ich das ganze doch mit einem Nano Board, einem DFPlayer, Mikrotastern, Lautsprecher usw. realisiere.
Nun meine Frage an euch: Wie setze ich das am besten um? Auf einer Lochrasterplatine oder mit direkter Verdrahtung? Welche Akkus kann ich nutzen? Wichtig wäre, dass ich von außen maximal einen Ein-Aus-Schalter und eine USB-C Ladebuchse sehen kann.
Da ich vom programmieren nicht viel Ahnung habe, habe ich mal ChatGPT gefragt (Asche auf mein Haupt).
Die KI hat mir folgendes ausgespuckt:
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
SoftwareSerial dfSerial(10, 11);
DFRobotDFPlayerMini dfPlayer;
// Pins
const int triggerPin = 2;
const int reloadPin = 3;
const int ledPin = 5;
// Settings
const int maxAmmo = 10;
int ammo = maxAmmo;
unsigned long lastShotTime = 0;
const int fireDelay = 150; // Feuerrate (ms)
bool lastTriggerState = HIGH;
bool lastReloadState = HIGH;
void setup() {
pinMode(triggerPin, INPUT_PULLUP);
pinMode(reloadPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
dfSerial.begin(9600);
dfPlayer.begin(dfSerial);
dfPlayer.volume(25);
}
void loop() {
handleTrigger();
handleReload();
}
// Trigger Logik
void handleTrigger() {
bool state = digitalRead(triggerPin);
if (lastTriggerState == HIGH && state == LOW) {
if (millis() - lastShotTime > fireDelay) {
if (ammo > 0) {
fireShot();
ammo--;
} else {
dryFire();
}
lastShotTime = millis();
}
}
lastTriggerState = state;
}
// Reload Logik
void handleReload() {
bool state = digitalRead(reloadPin);
if (lastReloadState == HIGH && state == LOW) {
reloadMag();
}
lastReloadState = state;
}
// Schuss
void fireShot() {
dfPlayer.play(1);
// realistischer Blitz
digitalWrite(ledPin, HIGH);
delay(30);
digitalWrite(ledPin, LOW);
delay(20);
digitalWrite(ledPin, HIGH);
delay(20);
digitalWrite(ledPin, LOW);
}
// Leer
void dryFire() {
dfPlayer.play(2);
}
// Reload
void reloadMag() {
dfPlayer.play(3);
ammo = maxAmmo;
}
Ergibt das irgendwie Sinn?
Beste Grüße
Enno


