Sida 4 av 4

Re: Frysa en pistolkula i luften - Fotografering

Postat: 16 september 2011, 17:00:47
av jesse
Nu har inte jag nån direkt erfarenhet av detta, men jag kan mycket väl tänka mig att det duger att detektera ett "högt" ljud med en enkel transistor eller en OP. Möjligtvis filtrerat. Eftersom ljudbilden borde vara likadan varje gång ett skott går av, så kommer triggningen att ske med ganska exakt timing, kan jag tänka mig. Analys av ljudet skulle vara plan B om jag hade byggt den här grejen. Hur många ljud låter lika högt som ett luftpistolskott? Man måste ju inte gå runt och hosta i mikrofonen eller starta motorgräsklipparen precis när man ska fotografera.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 16 september 2011, 17:53:10
av labmaster
Luftvapen kan man i de flesta fall använda inomhus och det går bra med pistol också. Dock lite värre med andra typer av vapen om det är det som kan vara målet. Då man är utomhus kan vinden ställa till ett spratt ifall konstruktionen är för enkel.

Hur som helst, jag tolkar det lite som att TS också vill passa på att lära sig hur man samplar analoga signaler med ADC:n.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 16 september 2011, 18:09:32
av jesse
jag tolkade det som att TS ville slippa den biten :D

Re: Frysa en pistolkula i luften - Fotografering

Postat: 16 september 2011, 20:14:44
av Nerre
PopUnoNkoK skrev:men jag vill bara detektera ett högt ljud.
Problemet är hur du definierar högt ljud. Det du tycker "låter" som högt ljud är en massa tryckförändringar i luften, en ton är en massa svängningar. Menar du stigtiden för den första vågen, eller stigtiden för envelopen?

Steget från mikrofon till att få en "indikering" av "högt ljud" är alltså den svåra biten. Antingen bygger man nån form av analogt filter, eller så analyserar man i mjukvara.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 16 september 2011, 23:45:52
av Borre
Personligen tror jag inte alls det behöver vara så avancerat, massa analysering av ljudet osv. Googlar man lite så ser man många som gjort liknande saker och i vissa fall syns det tydligt att det knappats funnits varken kunskap bakom eller någon avancerad analys av ljudet, men det fungerar ändå.

Jag har även en bekant som gjort samma sak. Frågade hur och fick bara svaret att han hade googlat lite och fick fram att det gick att lösa med "lite motstånd och nån transistor" in till en Arduino, i den ställde han bara fördröjningen och det fungerade varje gång.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 17 september 2011, 08:09:17
av jesse
Självklart är det så. Så länge man själv har kontroll över situationen med mikrofonen kan man ju styra lite. Anat vore det om man skulle göra ett inbrottslarm som bara skulle reagera på t.ex. glaskross, men inte på alla andra ljud, inkl. prat, smällande dörrar, hunndskall etc... Då krävs nån slags analys eller filtrering.

Till det här behövs ingen raketforskning. Onödigt att lägga ner en massa arbete på överkurs.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 17 september 2011, 11:13:46
av Nerre
Att nån har lyckats få bilder betyder ju inte att det inte ligger hundratals misslyckade exponeringar bakom.

Frågan är ju hur stabilt och pålitligt man vill ha det.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 17 september 2011, 11:31:46
av tecno
Personligen skulle jag inte gå på detta med att trigga med ljud utan använda mig av foto diod/transistor som man har i kronografer för analys av kulans hastighet dvs man triggar på ljusförändringen som sker då kulan passerar detektorn.

Här ett exempel http://www.shootingchrony.com/

Re: Frysa en pistolkula i luften - Fotografering

Postat: 17 september 2011, 12:46:22
av Borre
Nerre, Det var också en fråga jag ställde och svaret var att det "svåraste" var att ställa in rätt fördröjning, när det väl var gjort fungerade det utan några större problem så länge monteringen av gevär och mikrofon var densamma. Så det var faktiskt så enkelt.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 18 september 2011, 13:35:58
av PopUnoNkoK
Många fina svar nu. Tusen tack.

Liten sammanfattning utan att behöva svara er alla personligen.
Jag vill lära mig ALLT! =) Men jag vill åxå att projektet ska gå framåt i praktiken så det blir att kompromissa ibörjan. Tanken är alltså att använda en mic för att i början bara detektera ett högt ljud av något slag. Handklappning eller luftpistolskott mm. Precisionen i detta för jag "utvärdera" senare. Tex om kulan hinner väldigt olika långt med samma inställning. Allstå så att det blir svårt att få ett upprepbart resultat.

Jag har nu börjat med ADCn.
Jag har förövrigt bytt till en annan processor då jag upptäkte att den tidigare inte hade en ADC.

Bytt från 12f629
TILL

12F683

Jag har fått ADCn att fungera i praktiken med en LDR. När jag lyser på motståndet tänds en LED i ett par sekunder och slocknar sen. (Om jag inte lyser på motståndet fortfarande det vill säga.) Jag kan även ändra i koden så att det krävs mer eller mindre ljus för att "trigga" lysdioden.

I praktiken är det bra, det var dit jag ville komma med mitt första test.

MEN jag är inte alls nöjd med "siffrorna" bakom det som händer.
När jag mäter spänningen som går in på PICen så krävs det ca 3,6v för att trigga så att LEDen tänds. Trots att koden ser ut så här.

Kod: Markera allt

START
		BANKSEL 	GPIO 		;
		CLRF 		GPIO 		;Init GPIO
		MOVLW 		b'110' 		;Set GP<0> to Analog
		BANKSEL		CMCON0
		MOVWF 		CMCON0 		;Set GP<1,2>digital I/O

		MOVLW 		b'000001'
		BANKSEL		TRISIO
		MOVWF 		TRISIO
		BANKSEL		ANSEL
		MOVWF       ANSEL
		BANKSEL		ADCON0
		MOVLW 		B'10000001' ;<7> Right Justified, <0> ADC On
		MOVWF 		ADCON0

		BCF			GPIO,1			;Släck Diod
Här har jag alltså satt mina 10 bitars ADC "Right Justified" vilket innebär (om jag förstått allt rätt) att de 8 bitarna i "ADRESL" fylls med de första 8 bitarn i 10bitars värdet medan de 2 resterande bitarna läggs i "ADRESH" registret.
Jag har även satt "VCFG" biten till att använda VDD som referens, vilket i detta fall innebär ca 4.8v

Sedan ser koden ut så här:

Kod: Markera allt

START1 
		CLRF 	GPIO
		BSF 	ADCON0,GO 	  ;take an ADC reading


WAITADC 
		BTFSC 	ADCON0,GO		; poll for reading to complete
		GOTO 	WAITADC			; if not done, keep polling 
		MOVLW 	B'00000011'		; place in compare register 
		SUBWF 	ADRESL,C		; compare instruction
		BTFSC 	STATUS,C		; if ADC reading is more than "compare register", "signal" has been detected
		GOTO 	NEXT	  		; if "signal" has been detected, to go NEXT routine
		GOTO 	START1			; if not, start from beginning of program
Här jämför jag alltså registret "ADRESL" med binära talet '00000011' (.3) LEDen triggas om "ADRESL" är högre än b'00000011'.
Om jag delar VDD (4.8v) med 10 bitar (1023) så får jag ca 0.0047v om jag gångrar det med 3(som jag jämför med) får jag 0.014v.
Alltså att det bara ska krävas 0.014v för att trigga LEDen. Men det krävs alltså ca 3.6v.

Är det någon som ser vart jag uppenbarligen tänkt fel eller gjort fel?

Tacksam för all hjälp jag hittils fått och hjälpen jag hoppningsvis kommer att få. =)

MVH Peter

Koden i sin helhet:

Kod: Markera allt

;******************************************************************************
;   This file is a basic code template for object module code                 *
;   generation on the PIC12F683. This file contains the                       *
;   basic code building blocks to build upon.                                 *
;                                                                             *
;   Refer to the MPASM User's Guide for additional information on             *
;   features of the assembler and linker (Document DS33014).                  *
;                                                                             *
;   Refer to the respective PIC data sheet for additional                     *
;   information on the instruction set.                                       *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Filename:      xxx.asm                                                   *
;    Date:                                                                    *
;    File Version:                                                            *
;                                                                             *
;    Author:                                                                  *
;    Company:                                                                 *
;                                                                             *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Files required: P12F683.INC                                              *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Notes:                                                                   *
;                                                                             *
;******************************************************************************

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------

     LIST      P=12F683              ; list directive to define processor
     #INCLUDE <P12F683.INC>          ; processor specific variable definitions

;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the 
; .asm file. The lables following the directive are located in the respective 
; .inc file.  See the data sheet for additional information on configuration 
; word settings.
;
;------------------------------------------------------------------------------

    __CONFIG   _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 
	errorlevel   -302

;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------

; example of using Shared Uninitialized Data Section
INT_VAR     UDATA_SHR      
W_TEMP      RES     1             ; variable used for context saving 
STATUS_TEMP RES     1             ; variable used for context saving
d1			RES		1
d2			RES		1
d3			RES		1
c1			RES		1				;Till ADC delayen

;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 12F683 has 256 bytes of non-volatile EEPROM, starting at address 0x2100
; 
;------------------------------------------------------------------------------

DATAEE    CODE  0x2100
    DE    "MCHP"          ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3

;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------

RESET_VECTOR  CODE    0x0000  ; processor reset vector
        GOTO    START         ; go to beginning of program

;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------

INT_VECTOR    CODE    0x0004  ; interrupt vector location
        MOVWF   W_TEMP        ; save off current W register contents
        MOVF    STATUS,w      ; move status register into W register
        MOVWF   STATUS_TEMP   ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

        MOVF    STATUS_TEMP,w ; retrieve copy of STATUS register
        MOVWF   STATUS        ; restore pre-isr STATUS register contents
        SWAPF   W_TEMP,f
        SWAPF   W_TEMP,w      ; restore pre-isr W register contents
        RETFIE                ; return from interrupt

;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------

MAIN_PROG     CODE

START
		BANKSEL 	GPIO 		;
		CLRF 		GPIO 		;Init GPIO
		MOVLW 		b'110' 		;Set GP<0> to Analog
		BANKSEL		CMCON0
		MOVWF 		CMCON0 		;Set GP<1,2>digital I/O

		MOVLW 		b'000001'
		BANKSEL		TRISIO
		MOVWF 		TRISIO
		BANKSEL		ANSEL
		MOVWF       ANSEL
		BANKSEL		ADCON0
		MOVLW 		B'10000001' ;<7> Right Justified, <0> ADC On
		MOVWF 		ADCON0

		BCF			GPIO,1			;Släck Diod




;------------------------------------------------------------------------------
; PLACE USER PROGRAM HERE
;------------------------------------------------------------------------------
MainCode
START1 
		CLRF 	GPIO
		BSF 	ADCON0,GO 	  ;take an ADC reading


WAITADC 
		BTFSC 	ADCON0,GO		; poll for reading to complete
		GOTO 	WAITADC			; if not done, keep polling 
		MOVLW 	B'00000011'		; place in compare register 
		SUBWF 	ADRESL,C		; compare instruction
		BTFSC 	STATUS,C		; if ADC reading is more than "compare register", "signal" has been detected
		GOTO 	NEXT	  		; if "signal" has been detected, to go NEXT routine
		GOTO 	START1			; if not, start from beginning of program

NEXT
	NOP
	BANKSEL	GPIO
	BSF		GPIO,1
	CALL	Delay
	CALL	Delay
	CALL	Delay
	CALL	Delay
	CALL	Delay
	CALL	Delay
	CALL	Delay
	CALL	Delay
	BCF		GPIO,1
	GOTO	START1


;------------------------------------------------------------------------------
; SubRoutines
;------------------------------------------------------------------------------
Delay        
	movlw	0x03
	movwf	d1
	movlw	0x18
	movwf	d2
	movlw	0x02
	movwf	d3
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_0

			;6 cycles
	goto	$+1
	goto	$+1
	goto	$+1
	RETURN



        END                       ; directive 'end of program'




EDIT: Nu ser koden mycket finare ut än tidigare. Måste kolla varför så att den alltid kan se ut så här när jag postar.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 18 september 2011, 21:45:22
av netrunner
tecno skrev:Personligen skulle jag inte gå på detta med att trigga med ljud utan använda mig av foto diod/transistor som man har i kronografer för analys av kulans hastighet dvs man triggar på ljusförändringen som sker då kulan passerar detektorn.

Här ett exempel http://www.shootingchrony.com/
Är inte kronograferna av den typ du länkar till extremt svåra att bygga för en amatör?

Re: Frysa en pistolkula i luften - Fotografering

Postat: 18 september 2011, 21:58:31
av tecno
Nu är det ju inte kronograf han ska bygga, det var mer att visa att det finns andra 'bättre' sätt att detektera.

Re: Frysa en pistolkula i luften - Fotografering

Postat: 20 september 2011, 08:17:37
av PopUnoNkoK
Nu har jag fått ADCn att göra som jag vill och jag förstår vad jag gör. =)

Jag hade gjort en tankevurpa, det som är ändrat från överstående kod är att jag satt tillbaka ADC registrena till "Left Justify" och läser bara av "ADRESH", nöjer mig med 8 bitars upplösning.

Jag använder ett LDR för att kontrollera ADCn och det är riktigt läckert när uträkningarna stämmer i praktiken. =)


Jag har nu beställt både 5st TL072 och 5st LM358 (Kommer säkert att vilja använda MIC någon annan gång eller förstärka någon annan signal).

Så jag återkommer när dessa komponenter har kommit hem så jag kan börja att testa med MICen.

Tack för all hjälp som jag fått.

tecno: Hur fungerar detekteringen i en Kronograf? Fotodiod och transistor skriver du men vad gör den stora triangelbågen?

Re: Frysa en pistolkula i luften - Fotografering

Postat: 20 september 2011, 10:15:09
av tecno
Bågarna är till för att hålla ett tak på plats så att bakgrunden (tittar nerifrån upp) blir 'neutral/jämn'. Används även som riktmärken vid uppsättning så man får kulbanan rätt. Det finns nu även nyare 'tak' som är belysta.