Stránka 1 z 2
Airsoft čítač munice - Arduino program
Napsal: 23 lis 2014, 09:25
od Zeppy
Zdravím všechny přísedící!
Tuto problematiku jsem řešil už o sekci výše, ale tam jde hlavně o tu fyzickou část jak to ubastlit a to máme víceméně hotovo, děkuju za pomoc
Viz.
http://www.ebastlirna.cz/modules.php?na ... ic&t=67022 ...můžete si to tam pročíst
Jsem airsofťák, takovej ten magor co běhá s puškou na kuličky po lese a střílí na ostatní magory s puškami na kuličky...no a občas se stane že kuličky nehlídám a zrovna když je tak potřebuju, žiju si v libém snu, že kulí dost ale ono prd...tak mě napadlo udělat čítač munice. Normálně jak máte ve hrách napsanou munici, já bych to měl naživo.
K funkci. Nastavila by se výchozí hodnota tlačítkem (klikáním by se přidávaly desítky, kdybych to 2 sekundy podržel, tak by se klikáním přidávaly jednotky a dalším 2 sekundovým přidržením by se to potvrdilo, muselo by si to pamatovat i po vypnutí až když to zapnu, tak tam.bude, to co jsem si předtím nastavIl. IR brána na konci hlavně by při průletu kuličkou odečetla z tohoto čísla
až bych byl na nule, tak by to mohlo při dalších výstřelech třeba zablikat. Další závora by byla v šachtě, kde po vytažení zásobníku by se resetovalo zpět na nastavenou hodnotu. Ty čidla fungují jako tlačítko (programově) a při přetnutí nějakým objektem vydá log. 1. Ostatně když prolítnete to odkázané fórum, všechno tam je. Display je 2 ciferný 7 segment řízený přes dvě 74HC595. Kvůli úspoře drátů a výstupů. Tlačítka budou tlačítka a srdcem všeho bude Arduino Nano, to mi však ještě nedošlo z ebaye, tak se musíme spokojit s prototypem na arduino uno.
Takže jsou tu chytré hlavičky, co by mi pomohly s prográmkem arduino? Jsem začátečník
Napsal: 23 lis 2014, 18:34
od Zaky
Najdi si na netu nějaký tutorial, rozblikej ledku, přečti tlačítko, nauč se rozpoznat krátký a dlouhý stisk, naprogramuj řízení displeje, obsluž přerušení, zatím třeba od tlačítka, na něm pak bude viset optozávora výstřelu. Postupně a po jednom. Až to budeš umět, dej to dohromady a postupně zrealizuj svoje zadání. Jen tak se to naučíš a bude to pro tebe mnohem větším přínosem, než si to nechat od někoho napsat. Pokud jsi ještě s AVR nedělal, alternativně se podívej na Cypress PSOC4, viz:
http://cz.farnell.com/cypress-semicondu ... dp/2420489 , mám tyhle procesory mnohem radši, než AVR, IDE PSOC Creator ti umožní programovat v C, aniž bys musel studovat jakékoli konfigurace registrů, Cypress má i dost pěkně udělané video tutorialy. Pokud si k tomu koupíš Miniprog3, nebo levněji místo CY8KIT-049 si koupíš
http://cz.farnell.com/cypress-semicondu ... dp/2311054 , umožní ti to i debugging přímo v procesoru, což je obrovská výhoda.
Napsal: 24 lis 2014, 18:10
od Jeejda_teda_puvodne
Napsal: 24 lis 2014, 19:10
od Zeppy
No přesunul jsem to, protože je konstrukce a teda i její téma dokončené, tam je všechno vymyšleno a hotovo. Teď už jde pouze a jenom o ten program a když se někdo víc zajímá o programování, spíš poleze sem a mohl by mi tu pomoct. Fajn že mi nabízíte jiné platformy, ale já už to arduino mám u sebe a i jeho program jakš takš znám. Ostatní řekněme vůbec. Mezitím už jsem udělal nějaký progress...bude video

Napsal: 25 lis 2014, 06:33
od Zeppy
Zde je video
http://youtu.be/O1BQXsF69eY ...snad vám nevypálí oči nízká kvalita

Napsal: 25 lis 2014, 15:17
od bandolik
Napsal: 25 lis 2014, 19:27
od Jeejda_teda_puvodne
Napsal: 26 lis 2014, 06:15
od Zeppy
Prográmek není zdaleka hotov, ještě chybí noční režim, reset a vlastně čidlo na zásobník. K tomu na hlavni...je to jen provizorně, ta páska tam nebude vůbec

a lidským okem to nejde vidět...no a nakonec chci dodat, že tam bude arduino nano, jen mi ještě nedošlo z ebaye
Problém u toho displaye je, že je to už zalité a k vývodům se fakt nedostanu, je to připojeno na zemi. Takže asi zkončím s trimtrem, co?

Napsal: 26 lis 2014, 10:16
od masar
Pokud tam máš 74HC595, pak lze napětí snižovat až na +2V. Pak by šlo použít i PWM s integračním článkem a popř. sledovačem na výstupu.
Pokud tam máš ale 74HCT595, tak podle datasheetu končíš s regulací na +4,5V.
To platí za předpokladu, že nemůžeš oddělit napájení číslicovek od řadičů.

Napsal: 26 lis 2014, 19:37
od Zeppy
Je to 74HC595 v SMD variantě SO16 nxp
No..napadlo mě že kdyby se dalo číslo (říkejme tomu číslo nic 0b11111111 páč by nic nesvítilo) a rychle by blikalo se současnou hodnotou, tak by to bylo jak pwm
Napsal: 26 lis 2014, 23:31
od Zeppy
Po konzultaci se známým a posezením u "čaje" vzniklo těchto pár řádků:
A ještě přibude noční režim a kosmetické vychytávky ...jinak je to v podstatě funkční věc...odčítá kuličky, resetuje po vytažení zásobníku, mění jas
Kód: Vybrat vše
const byte ledCharSet[10] = { 0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b0000010,0b11111000,0b10000000,0b10010000 };
const int latchPin = 8;
const int clockPin = 12;
const int dataPin = 11;
const int IRhlaven=2;
const int tl_jas=3;
const int tl_zasobnik=4;
const int BoardLED=13;
const unsigned int zpozdeni = 3; // kolikrat se obslouzi displej za jeden cyklus (pri nizke rychlosti hrozi vynechavani snimace)
unsigned char pwm_data = 3; // stupen jasu displeje
const unsigned int korekce_jasu[7] = {1,20,40,100,300,500,1020}; // predem nadefinovane stupne jasu
unsigned char kapacita_zasobniku = 0; // kapacita zasobniku
unsigned char plny_zasobnik = 65; // kolik kuli je v zasobniku po naplneni
unsigned char stav_snimace_zas = 0;
unsigned char stav_snimace_jas = 0;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode (IRhlaven, INPUT);
pinMode (tl_jas, INPUT);
pinMode (tl_zasobnik, INPUT);
pinMode (BoardLED, OUTPUT);
attachInterrupt(0,strelba, FALLING);
}
void strelba()
{
detachInterrupt(0);
if(kapacita_zasobniku >= 1)
{
kapacita_zasobniku--;
}
RizeniJasu(zpozdeni);
attachInterrupt(0,strelba, FALLING);
}
void DisplayNumber(unsigned char num)
{
unsigned char tens;
unsigned char ones;
if (num > 100 || num < 0)
{
num = 0;
}
ones = num % 10;
if (num < 10)
{
tens = 0;
}
else
{
tens = num/10;
}
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, MSBFIRST, ledCharSet[ones]);
shiftOut(dataPin, clockPin, MSBFIRST, ledCharSet[tens]);
digitalWrite(latchPin, 1);
}
void RizeniJasu(unsigned int delka) // funkce starajici se o rizeni displeje (ta z predchozich pokusu)
{
while(delka--) // odpocitavani poctu smycek PWM
{
for(unsigned int pwm_pocitadlo = 0; pwm_pocitadlo < 1024; pwm_pocitadlo++)
{
if(pwm_pocitadlo == 0)
{
DisplayNumber(kapacita_zasobniku);
}
if(korekce_jasu[pwm_data] == pwm_pocitadlo)
{
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, MSBFIRST, 0xFF);
shiftOut(dataPin, clockPin, MSBFIRST, 0xFF);
digitalWrite(latchPin, 1);
}
delayMicroseconds(10);
}
}
}
void StavZasobnik() // obsluha resetu zasobniku
{
if((digitalRead(tl_zasobnik) == HIGH) && (stav_snimace_zas == 0))
{
kapacita_zasobniku = plny_zasobnik;
stav_snimace_zas = 1;
RizeniJasu(zpozdeni);
}
if((digitalRead(tl_zasobnik) == LOW) && (stav_snimace_zas == 1))
{
stav_snimace_zas = 0;
kapacita_zasobniku = 0;
}
}
void UlozeniJasu()
{
while(EECR & (1<<EEPE));
EEAR = 1;
EEDR = pwm_data;
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
}
void NacteniJasu()
{
while(EECR & (1<<EEPE));
EEAR = 1;
EECR |= (1<<EERE);
pwm_data = EEDR;
}
void NastaveniJasu() // obsluha tlacitka jasu
{
if((digitalRead(tl_jas) == HIGH) && (stav_snimace_jas == 0))
{
pwm_data++;
if(pwm_data >= 7)
{
pwm_data = 0;
}
stav_snimace_jas = 1;
UlozeniJasu();
RizeniJasu(zpozdeni);
}
if((digitalRead(tl_jas) == LOW) && (stav_snimace_jas == 1))
{
stav_snimace_jas = 0;
}
}
void loop()
{
digitalWrite (BoardLED, LOW);
NacteniJasu();
while(1)
{
RizeniJasu(zpozdeni);
StavZasobnik();
NastaveniJasu();
}
}
Napsal: 27 lis 2014, 09:25
od masar
Bravo. Snad by bylo dobré sem dát odkaz na video, jak to tvoje PWM vypadá na displeji.

Napsal: 27 lis 2014, 13:36
od bandolik

velká gratulace nezapomeň přidat video jak to funguje a nejlíp už namontované ať máme představu co krásného jsi stvořil.
Program vypadá funkčně tak se těším na video.
Napsal: 27 lis 2014, 21:21
od AB1
Zeppy:
Proč nepoužíváš tlačítko "Code"?
Číst kód kde všechny řádky jsou zarovnané doleva je utrpení.
Napsal: 27 lis 2014, 22:05
od Zeppy
Jojo pardón na code jsem zapoměl
Ještě tomu dám par kosmetickech funkcí a bude funkční prototyp hotov.
Jistěže bude video, to se stává mou tradicí!

Do dvou týdnů bude hotovo