Electronische airsoft doelwitten

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 6
Geregistreerd: 25 Jul 2016, 17:57

Electronische airsoft doelwitten

Berichtdoor Nickjaik » 25 Jul 2016, 18:12

Hallo iedereen,

Laat ik mijzelf allereerst even voorstellen, ik ben Nick en ben al een tijdje bezig met arduino. Ik kwam deze forum vandaag bezig en heb besloten mij te registreren.
Naast arduino is airsoft een hobby van mij. Onder andere het onderdeel IAPS (discipline binnen airsoft waarbij je op tijd en met precisie op doelen schiet) interesseert mij.

Nou zijn er elektronische doelwitten te koop, echter voor een belachelijk hoge prijs..! (Denk aan 300 euro voor een matig setje). Toen dacht ik, dit moet goedkoper kunnen. Wellicht met behulp van arduino?

Omdat ik nog niet zo heel lang bezig ben met arduino hoop ik op jullie hulp en ervaring. Eerst zal ik schetsen wat ik op dit moment in gedachte heb.

Een elektronische doelwit kan op verschillende manieren aangeven dat het is geraakt. Je kunt hem als het ware 'omschieten', of het werkt op een LED dat bijvoorbeeld dan van kleur veranderd wanneer het doelwit wordt geraakt (en dus een tilt sensor oid nodig heeft?).

Het mooiste zou zijn als dit doelwit dan ook (automatisch) kan worden gereset en/of kan worden gerandomniseerd.

https://youtu.be/hYdLjTeV9H4?t=131 << een voorbeeld van wat mogelijk is.

Ik hoop allereerst dat dit dmv arduino mogelijk is, en zo ja.. Hoe.

Hopelijk kan iemand mij op weg helpen! Alle bruikbare informatie is van harte welkom.

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Electronische airsoft doelwitten

Berichtdoor shooter » 25 Jul 2016, 20:23

ja dat is zeker mogelijk, het grootste probleem is denk ik om een goede sensor te vinden die bij beweging afgaat.
dat kan heel simpel met een gewichtje dat tegen een ring aanbotst, met trillingsensoren, capacitief etc.met piezo, of een speakertje als microfoon.

je kunt ze aan een draadje zetten naar een besturingskastje, maar ook los en dan een radio verbinding tussen elk doel.
een RGB ledje erin en je kunt echt alle kanten op.
Omschieten betekent weer wel dat je een manier moet hebben om het doel weer op te zetten, maar een kleurenled is simpeler.

Kijk eens bij ESP, daar zit al een radio op, en kun je voeden met een simpele batterij.
en de besturing is erg simpel dan, je kunt allerlei modes kiezen, bijv met een afstandsbediening, of een optisch signaal.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Electronische airsoft doelwitten

Berichtdoor nicoverduin » 26 Jul 2016, 08:32

Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 25 Jul 2016, 17:57

Re: Electronische airsoft doelwitten

Berichtdoor Nickjaik » 26 Jul 2016, 18:13

Super bedankt voor de reacties!

Betreft:
shooter schreef:Kijk eens bij ESP, daar zit al een radio op, en kun je voeden met een simpele batterij.
en de besturing is erg simpel dan, je kunt allerlei modes kiezen, bijv met een afstandsbediening, of een optisch signaal.


Na even te hebben gegoogled, bedoel je een module van espruino? Ik ben nog niet bekend met de termen of veelgebruikte sites.

Berichten: 6
Geregistreerd: 25 Jul 2016, 17:57

Re: Electronische airsoft doelwitten

Berichtdoor Nickjaik » 26 Jul 2016, 18:15

nicoverduin schreef:Leuk artikeltje: http://www.thepulsar.be/article/airsoft ... gets-game/


Ziet er op het eerste oog goed uit, ik ga er vanavond eens beter naar kijken! Bedankt.

Berichten: 6
Geregistreerd: 25 Jul 2016, 17:57

Re: Electronische airsoft doelwitten

Berichtdoor Nickjaik » 10 Aug 2016, 19:39

Hallo, ik heb op dit moment een 'prototype' gemaakt. Heel eenvoudig.

Ik heb poort 1 t/m 5 aangesloten op een weerstand + led. Deze vervolgens aan grnd verbonden.
Vervolgens heb ik poort 6 t/m 10 aangesloten op een druk-switch / knopje en doorverbonden aan grnd.


Ik gebruik de code van degenen die dat artikel heeft gemaakt (link van nicoverduin) en had gehoopt dat het dan zou werken. Degene die de script heeft geschreven heeft rekening gehouden met het 'missen' van het doelwit. Dit vind ik echter overbodig (als je op tijd gaat betekend mis schieten alleen maar tijdverlies).
cpp code
#define VERSION_IDENT     'TRG0'

struct packet_s
{
unsigned long ulIdent;
unsigned char ucChecksum;
int iCurrentScore;
int iScoreMax;
};

const int g_iNumTargets = 5;

int g_iTargetPinRead[g_iNumTargets] = {6, 7, 8, 9, 10};
int g_iTargetPinEnable[g_iNumTargets] = {A5, A4, A3, A2, A1};
bool g_bTargetPinConnected[g_iNumTargets] = {false, false, false, false, false};

int g_iNumConnectedTargets = 0;

int g_iCurrentTargetIndex = 0;
int g_iCurrentScore = 0;
int g_iScoreMax = 0;

const float g_fTargetDelayMax = 2000.0f;
const float g_fTargetDelayMin = 100.0f;
const float g_fTargetDelayConst = 0.05f;

unsigned long g_ulNextTargetOff = 0;
unsigned long g_ulTargetDelay = (unsigned long)g_fTargetDelayMax;
unsigned long g_ulNextTargetSelection = 0;

unsigned char checksum(unsigned char *pBytes, int n)
{
unsigned char ret = 0;

while(n--)
{
ret += ~(*pBytes);
pBytes ++;
}

return ~ret;
}

void remoteUpdate(void)
{
struct packet_s s;

s.ulIdent = VERSION_IDENT;
s.ucChecksum = 0;
s.iCurrentScore = g_iCurrentScore;
s.iScoreMax = g_iScoreMax;

s.ucChecksum = checksum((unsigned char*)&s, sizeof(s));

Serial.write((uint8_t*)&s, sizeof(s));
}

void checkTargetConnections(void)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<g_iNumTargets;j++)
{
enableTarget(j, true);
delay(125);

g_bTargetPinConnected[j] |= !isTargetOpen(j);

enableTarget(j, false);
delay(125);
}
}

g_iNumConnectedTargets = 0;

for(int i=0;i<g_iNumTargets;i++)
if(g_bTargetPinConnected[i])
g_iNumConnectedTargets ++;

delay(1000);
}

void setup()
{
Serial.begin(9600);

remoteUpdate();

randomSeed(analogRead(0));

for(int i=0;i<g_iNumTargets;i++)
{
pinMode(g_iTargetPinRead[i], INPUT);
pinMode(g_iTargetPinEnable[i], OUTPUT);
}

checkTargetConnections();
}

bool isTargetOpen(int iTargetIndex)
{
return digitalRead(g_iTargetPinRead[iTargetIndex]) == HIGH;
}

void enableTarget(int iTargetIndex, bool bEnable)
{
digitalWrite(g_iTargetPinEnable[iTargetIndex], bEnable ? HIGH : LOW);
}

void selectNextTarget(void)
{
if(g_iNumConnectedTargets == 0)
return;

int iNewTarget;

if(g_iNumConnectedTargets == 1)
{
for(int i=0;i<g_iNumTargets;i++)
if(g_bTargetPinConnected[i])
iNewTarget = i;
}
else
{
do
{
iNewTarget = random(g_iNumTargets);
} while(iNewTarget == g_iCurrentTargetIndex || !g_bTargetPinConnected[iNewTarget]);
}

enableTarget(iNewTarget, true);

g_iCurrentTargetIndex = iNewTarget;

g_ulNextTargetOff = millis() + g_ulTargetDelay;
}

void recomputeTargetDelay(void)
{
if(g_iNumConnectedTargets == 0)
return;

float fScore = (float)(g_iCurrentScore / g_iNumConnectedTargets);

float fNewDelay = (g_fTargetDelayMax - g_fTargetDelayMin) * exp(-g_fTargetDelayConst * fScore) + g_fTargetDelayMin;

g_ulTargetDelay = (unsigned long)fNewDelay;
}

void waitForNextTarget(void)
{
if(g_iNumConnectedTargets == 0)
return;

g_ulNextTargetSelection = millis() + random(g_ulTargetDelay, g_ulTargetDelay * 2);

enableTarget(g_iCurrentTargetIndex, false);

g_ulNextTargetOff = 0;
}

void loop()
{
static bool bInitialize = true;

if(g_iNumConnectedTargets == 0)
{
checkTargetConnections();

return;
}

unsigned long ulTime = millis();

if((g_ulNextTargetSelection < ulTime && g_ulNextTargetSelection != 0) || bInitialize)
{
selectNextTarget();

g_ulNextTargetSelection = 0;
bInitialize = false;
}
else if(g_ulNextTargetOff == 0)
return;

if(g_ulNextTargetOff < ulTime)
{
if(g_iCurrentScore > 0 && g_iNumConnectedTargets > 0)
{
g_iCurrentScore --;

remoteUpdate();

recomputeTargetDelay();
}

waitForNextTarget();
}
else if(isTargetOpen(g_iCurrentTargetIndex))
{
if(g_iNumConnectedTargets == 1)
g_iCurrentScore ++;
else
g_iCurrentScore += g_iNumConnectedTargets - 1;

g_iScoreMax = max(g_iScoreMax, g_iCurrentScore);

remoteUpdate();

recomputeTargetDelay();

if(g_iNumConnectedTargets == 1)
{
while(isTargetOpen(g_iCurrentTargetIndex))
delay(50);
}

waitForNextTarget();
}
}


Heeft iemand enig idee hoe ik dit werkend kan krijgen? Het lijkt mij dat dit meer eenvoudige code kan zijn dan dat wat ik nu gebruik..

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Electronische airsoft doelwitten

Berichtdoor nicoverduin » 10 Aug 2016, 22:16

Ik gaf je de link ter info.... had ik geweten dat de code zo slecht was... (geen greintje documentatie) had ik het beter niet kunnen doen geloof ik....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 25 Jul 2016, 17:57

Re: Electronische airsoft doelwitten

Berichtdoor Nickjaik » 10 Aug 2016, 22:55

nicoverduin schreef:Ik gaf je de link ter info.... had ik geweten dat de code zo slecht was... (geen greintje documentatie) had ik het beter niet kunnen doen geloof ik....


Ik moet toegeven dat het inderdaad door een gebrekkige documentatie aardig wat hoofdpijn heeft opgeleverd om de code (min of meer) te kunnen begrijpen en iets in elkaars te knutselen dat (gebrekkig) functioneert.
Desondanks is het wel een een leuke bron van inspiratie geweest dus mijn dank is er nog altijd.

Nu moet ik dus eigenlijk een nieuw script gaan schrijven. Ik denk dat de script van de link daar best wel mee zou kunnen helpen. Helaas heb ik te weinig ervaring om te weten hoe ik zou kunnen bereiken wat ik wil bereiken. Ik zal weer proberen te schetsen wat ik in gedachte heb. Ik hoop dat ik goed te volgen ben!

Ik heb op dit moment vijf verschillende doelwitten in gedachte. Dus vijf leds/kanalen + nog 5 knopjes/kanalen.
- Iets zou ervoor moeten zorgen dat 1 v/d 5 leds willekeurig wordt gekozen en dat deze gekoppeld is aan het bijbehorende knopje.
- Dat knopje kan op twee manieren worden gebruikt, dit zal afhankelijk zijn van de uiteindelijke constructie waar ik dit 'binnenwerk' aan zal monteren. Dus wanneer de target wordt geraakt zou de knop kunnen worden 'uitgedrukt' of juist worden 'ingedrukt', afhankelijk van hoe ik dat ga maken. Qua code dus belangrijk om rekening mee te houden.

Goed, nu is het randomniseren gedekt en werkt de led icm het bijbehorende knopje.
Nu moet er nog iets in wat er voor zorgt dat de tijd die je hebt om het doelwit te raken, langzaam in snelheid toeneemt. Hiervoor moet de score dus worden bijgehouden, net zoals degene dat van de voorbeeld website heeft gedaan.

Ik denk dus zelf dat het probleem ergens zit in alles rondom het (niet)indrukken van het knopje. Iets zorgt er namelijk voor dat (ook als ik niks doe) hij steeds sneller gaat. Dit zou betekenen dat de score omhoog gaat? En dat terwijl ik niks doe..

Het liefst begin ik dus gewoon opnieuw met het schrijven van de script, ik weet alleen niet hoe. Daarvoor zou ik dus heel graag hulp hebben!

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Electronische airsoft doelwitten

Berichtdoor nicoverduin » 10 Aug 2016, 23:23

Nickjaik schreef:
nicoverduin schreef:Ik gaf je de link ter info.... had ik geweten dat de code zo slecht was... (geen greintje documentatie) had ik het beter niet kunnen doen geloof ik....


Ik moet toegeven dat het inderdaad door een gebrekkige documentatie aardig wat hoofdpijn heeft opgeleverd om de code (min of meer) te kunnen begrijpen en iets in elkaars te knutselen dat (gebrekkig) functioneert.
Desondanks is het wel een een leuke bron van inspiratie geweest dus mijn dank is er nog altijd.

Nu moet ik dus eigenlijk een nieuw script gaan schrijven. Ik denk dat de script van de link daar best wel mee zou kunnen helpen. Helaas heb ik te weinig ervaring om te weten hoe ik zou kunnen bereiken wat ik wil bereiken. Ik zal weer proberen te schetsen wat ik in gedachte heb. Ik hoop dat ik goed te volgen ben!

Ik heb op dit moment vijf verschillende doelwitten in gedachte. Dus vijf leds/kanalen + nog 5 knopjes/kanalen.
- Iets zou ervoor moeten zorgen dat 1 v/d 5 leds willekeurig wordt gekozen en dat deze gekoppeld is aan het bijbehorende knopje.
- Dat knopje kan op twee manieren worden gebruikt, dit zal afhankelijk zijn van de uiteindelijke constructie waar ik dit 'binnenwerk' aan zal monteren. Dus wanneer de target wordt geraakt zou de knop kunnen worden 'uitgedrukt' of juist worden 'ingedrukt', afhankelijk van hoe ik dat ga maken. Qua code dus belangrijk om rekening mee te houden.

Goed, nu is het randomniseren gedekt en werkt de led icm het bijbehorende knopje.
Nu moet er nog iets in wat er voor zorgt dat de tijd die je hebt om het doelwit te raken, langzaam in snelheid toeneemt. Hiervoor moet de score dus worden bijgehouden, net zoals degene dat van de voorbeeld website heeft gedaan.

Ik denk dus zelf dat het probleem ergens zit in alles rondom het (niet)indrukken van het knopje. Iets zorgt er namelijk voor dat (ook als ik niks doe) hij steeds sneller gaat. Dit zou betekenen dat de score omhoog gaat? En dat terwijl ik niks doe..

Het liefst begin ik dus gewoon opnieuw met het schrijven van de script, ik weet alleen niet hoe. Daarvoor zou ik dus heel graag hulp hebben!

Daarom doen ze bij bedrijven aan projecten waar dit soort vraagstukken eerst goed uitgewerkt worden (specificaties). Een van de stellingen in mijn vakgebied was altijd "If you can't describe it.... you can't build it". Ik zou eerst kennis opbouwen over de problematiek.... begrijpen hoe het werkt.... Zo ook voor het opzetten van software voor de Arduino. Dit itt eerst bouwen en dan nadenken....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 25 Jul 2016, 17:57

Re: Electronische airsoft doelwitten

Berichtdoor Nickjaik » 11 Aug 2016, 18:23

Enig idee hoe de dingen waar ik naar zoek worden genoemd? Dat maakt mijn zoektocht naar uitleg een stuk directer.

Of verder tips / bronnen die mij op weg kunnen helpen?

Volgende

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten