Hi-speed photography - Writing the timing program?

I think to take a picture of an air rifle bullet that hit a falling water drop. Thinking to use a start button that starts the camera, open the valve in 150ms so that the water droplet is the appropriate size (and release). Timer control with a photo gate and then we trigger an electric motor which in turn triggers an air rifle, and finally a trigger pulse that triggers the flash.

I am using Arduino UNO and have never used it before. Someone who takes the challenge of writing the program if I specify exactly how I want it to work? want any help from anyone who can understand Norwegian, and preferably from someone who likes to shoot pictures.

Antager at dansk/svensk er tæt nok på Norsk.

Programmet er ganske enkelt. En liste med tider og hvad der skal ske til den tid.

Elektronikken er lidt mere problematisk - snitflade til så meget forskelligt udstyr

At finde ud af de nøjagtige tider, og få det gentagbart ... ja der ligger den sjove udfordring. Hvor nøje er tiden mellem signalet fra Arduino til geværet og at geværet faktisk fyr. Der er en del mekanik så tider kan variere. Kan der laves en feedback (kontakt) når det faktisk har skudt?

Aner (næsten) intet om fotografi ellers, og speciellt ikke noget om HighSpeed.

(NB: Hvis du vil have hjælp af de engelske folk så spørg i Project. I den her afdeling skrives der skandinavisk. Din position på verden er ligemeget)

Supert!! Da er du min første venn her inne på forumet :slight_smile:

Jeg har selv ganske god greie på foto og har rimelig god greie på elektronikk også.

Skal lage en skisse over hva jeg har av utstyr og hvilke signaler dem gir/trenger. Kan også tegne et flytdiagram som viser hvordan jeg ønsker at dette skal fungere, samt tegner inn hvilke timer-tider jeg ønsker innlagt.

Kan du sende med en e-post til bts.troms@hotmail.com så sender jeg planene via e-post.

Pointen med et forum er at mange kan hjælpe - privat mail er lidt lukket. Men hvis du mener det du har ikke skal ud til alle og enhver, så kan du bruge "IM" som er personlig mail på forumet.

Her er en meget enklet program. Jeg tror når vi/du analysere det her lidt mere så er nogen af hændelserne ikke bare en "fast køreplan" så har det her program lidt mulighed for at gøre ting overlappet (det er derfor der bruges "Timers" og ikke bare "delay()").

/* Liste af hvilken Arduino pin laver hvad */
const int Knap   = 3 ; // Den man trykker på. (Forbinder pin til GND)
const int Ventil = 4 ; // Solenoid ventil til vand
const int Draabe = 5 ; // Photogate til dråbe (hvordan ser man noget gennemsigtigt?)
const int Kamera = 6 ; // Åben/udløs kamera
const int Gevaer = 7 ; // Udløser til Gevær
const int Blitz  = 8 ; // Udløser til blitzen
/* Liste med tids intervaller (millisekunder) */
const unsigned long AabenVentil = 1000UL ; // ventil åbning efter knap tryk (1sec)
const unsigned long LukVentil   = 1150UL ; // og luk igen ...
const unsigned long AabenKamera = 1UL ;    // Kamera åben efter dråbe set
const unsigned long SkydGevaer  = 25UL ;   // Skyd gevær efter dråbe set
const unsigned long UdloesBlitz = 77UL ;   // Udløs Blitz efter dråbe set
const unsigned long LukKamera   = UdloesBlitz + 5UL ;   // Tid når kamra er færdigt efter blitz (5 ms)

void setup () {
  pinMode(Knap,  INPUT ) ; digitalWrite(Knap,HIGH) ; // intern pullup modstand til +
  pinMode(Ventil,OUTPUT) ; digitalWrite(Ventil,LOW) ; 
  pinMode(Draabe,INPUT ) ;
  pinMode(Kamera,OUTPUT) ; digitalWrite(Ventil,LOW) ; 
  pinMode(Gevaer,OUTPUT) ; digitalWrite(Ventil,LOW) ; 
  pinMode(Blitz, OUTPUT) ; digitalWrite(Ventil,LOW) ; 
}

unsigned long Start ;

void loop() {
  
  /* Strukturen kan gøres på flere måder. Her vælges en meget enkel en,
     Vi venter på at de forskellig trin udløses en efter en. */

  while (digitalRead(Knap)==HIGH) /* null */ ; // vent på knap tryk

  Start = millis() ;                       // Noter start 

  while ( millis()-Start < AabenVentil ) ; // Vent indtil vi skal åbne ventilen
  digitalWrite(Ventil,HIGH) ;              // Åben
  while ( millis()-Start < LukVentil ) ;   // Vent indtil vi skal lukke ventilen
  digitalWrite(Ventil,LOW) ;               // Luk

  while ( digitalRead(Draabe)==LOW) ;      // Vent til vi ser dråben

  Start = millis() ;                       // Noter Start tid ...

  while ( millis()-Start < AabenKamera ) ; // Vent indtil vi skal åbne kameraet
  digitalWrite(Ventil,HIGH) ;              // Klick
  while ( millis()-Start < SkydGevaer ) ;  // Vent indtil ...
  digitalWrite(Gevaer,HIGH) ;              // Klick
  while ( millis()-Start < UdloesBlitz ) ; // 
  digitalWrite(Blitz,HIGH) ;               // 

  while ( millis()-Start < LukKamera ) ;   // 
  digitalWrite(Blitz,LOW) ;
  digitalWrite(Kamera,LOW) ;               // Luk kamera, gevaer osv
  digitalWrite(Gevaer,LOW) ;

  delay(1000) ;   // Vent yderlige et sekund
}

OK

Var ikke klar over at det er mulig å legge med vedlegg i linken, så vi kan gjerne forsøke å ta det åpent.

Har endret litt på planene og tenker nå å lage ferdige senarie-program, ett program for bilde av kronen, ett for bilde av kolliderende vanndråper, ett for kolliderende dråper med flere farger (to solenoid ventiler), ett for bilder av ballong som skytes ett for oppsettet jeg innledningsvist startet med osv.

For å velge Senarie/program så tenker jeg å bruke en rekke med 2-4 DIP-brytere. Mulig det til slutt kan bli for lite utganger på Arduino UNO?

Har tegnet et flytskjema for et enkelt oppsett bare for å komme igang. Kan du lage scriptet for det først, så utvider vi etterhvert som jeg får testet. Se vedlagte skjema.

flytskjema utkast I.pdf (101 KB)

Jeg kigger på flowcharten i weekenden. Men der kan jo være andre der har noget at tilføje.

Der er flere der har brugt Arduinoen for alt mulig hjælp til fotografering. Dit projekt er nemt for Arduinoen, reelt kan den styre ting med ca 0,05 ms nøjagtighed.

Supert!

Dette blir spennende

Du skriver "Photogate til dråbe (hvordan ser man noget gennemsigtigt?)"

Vet ikke hvordan, men Den detekterer venndråper uten problemer. Tok bilder i dag (uten timer) og ser at photogaten er veldig pålitelig. 90% av bildene er helt som dette, di resterende har et avvik på 1-2mm.

Smukt! Du kan din fototeknik :slight_smile:

Tænk, i de "goe gamle dage" ville du for hvert forsøg tage rullen ud, ud i mørkekamret og fremkalde, tilbage at lave en justering og så forsøge igen. (Udover at der kun var LDR som lysmåler og de reagrerer "langsommere" ...)

Nåh, der er ikke noget nyt i din flow chart. Du har i mit program udkast alle delene, du skal bare flytte lidt rundt på linjerne.
Konstruktionen "while ( test ) ;" gør at vi kører i en løkke som du tegner, som første trin. Det der semikolon er MEGET vigtigt ellers bliver det noget helt andet.
"while ( millis()-Start<DelayVærdi ) ;" er det sammes om at skrive "delay(DelayVærdi)". Fordelen er at vi kan kan tilføje noget vi gør mens vi venter - det kan man ikke med delay. Så vil man skrive

  while ( millis()-Start<DelayVærdi ) {
    if (digitalRead(5)==HIGH) doSomething() ;
   }

"something" kan f.eks. være Start=millis()+DelayVærdi+1 ; - det vil fungere som en "straks udløser"

Jo der er noget nyt i din flow chart som jeg ikke forstår - dit DIPbryter. Antagligen en række switches? Hvis formålet er variere programmet (finjustere tider) så kan man alternativt bruge Serial og indtaste fra komputeren. Er det bedre? Jeg har en lille stump kode der gør det nemt at indtaste kommando-og-tal (hvor jeg skulle finjustere tid-sekvencen af en række lys). Jeg ser heller ikke hvor "C" og "D" i flowchartn går hen.

Jeg har før skrevet hele programmer til folk der var goe til andet en C-sproget på Arduino, der havde sjove projekter - f.eks: http://vimeo.com/24959129 men indtil andet tror jeg du gerne vil forsøge selv.

Hehe, ja det var nok garantert mye vanskeligere før man fikk digitale kamera, men dem fikk det nå til da også.

Ja jeg har flyttet litt om på rekkefølgen i forhold til ditt første utkast. Selve kameraet er gansk tregt og rekker ikke å ta noe bilde etter at photogaten har registrert dråpen. I realiteten så holder jeg det helt mørkt i rommet, så kameraet kan gjerne stå åpent i 2-4 sekunder uten at det gjør noe som helst. Det er blitsen som belyser bildet og den er veldig kjapp. Kommer helt ned i en lukkertid på 0,000028 sekund. Det rekker i massevis for å fryse en vanndråpe, men en luftgeværkule vil forflytte seg ca 2-3 millimeter på denne tiden.

Komklussjonen er altså at kameraet kan åpnes veldig tidlig i sekvensen, og når vi ønsker å ta bildet, så trigger vi blitsen.

DIP-bryterne er nye momenter og tanken er at jeg skal velge forskjellige program med dem. Program "A" er et program for å ta bilde av vannkroner (se vedlegte bilde), ett program for å ta bilde av kolliderende vanndråper, ett program for vanndråpe som kolliderer med en luftgeværkule osv. Derfor er dem tatt med. Har ikke tegnet ferdig flytskjemaene for program B, C og D enda. Dem tenkerjeg å tegne ferdig siden.

Det som også er nytt er at jeg har tatt med et POT-meter. Det var ikke med i det første utkastet. Hensikten med POT-meteret er at det skal være mulig å justere hvor stor dråpen skal være. Dette gjøres ved å justere tiden på hvor lenge solenoid-ventilen holder åpen. Tipper tiden for en normal dråpe er 0,050 sekund, men det kan være ønskelig å kunne justere dette fra 0,020 - 0,100 sekund.

Som jeg nevnte tidligere så har jeg aldri programmert Arduino tidligere, så derfor vil jeg trenge hjelp selv til så enkle ting som å skifte om på rekkefølgen for når kameraet skal åpne. Det med DIP-brytere, POT-meter, samt 10X repetisjon er helt nye momenter. "Vannkronen" (se vedlagte bilde) oppstår ca 0,202 sekund etter at dråpen har passert photogaten. Program "B" er for kolliderende vanndråper. Dem oppstår ca. 0,290 sekund etter at en har sluppet 2 vanndråper (med passe størrelse) med et interval på ca. 0,1 sekund. Men program B tenker jeg vi venter med til etter at vi har fått til den "enkle" vannkronen. Begge disse bildene er tatt med manuelt sluppede dråper (pipette), men med bruk av photogate og en helt vanlig analog timer (fra HiViz).

Når programmet er ferdig, så er det ikke meningen at jeg skal trenge å bruke PC'en når jeg skal ta bilder. Enheten må kunne fungere selv uten PC.

OK, jeg laver nok et nyt program.

Kig på Arduino i File-Examples menuen under Analog for en POT input. (Lysdioden er ikke nødvendig - der er en på dit Arduino kort allerede) SÅ kan du test om din POT er god nok. (Den skal være LINEAR ikke LOG)

De er "DIP-bryter" - det er bare tænd/sluk kontakter? (Jeg tænker på de der bittesmå vippekontakter på et printkort)

Der er 6 analog indgange så jeg vil forslå flere POT til de forskellige indstillinger:
Pot 1: Vanddråbe åben
Pot 2: Vent efter photodiode for vanddråbe
Pot 3: xxx
For dine programer kan betydningen af POTsene være forskellig.

Så du laver en fin frontpanel med et par DIP/vippe kontakter, og en 2-4 POTs... :wink: så kan jeg nok lave programmer.

Takk for tipset. Har liggende POT-meter på 10K, 50K og 100K, men vet ikke om dem er LINEÆRE eller LOGORITMISKE, så for sikkerhets skyld så bestiller jeg dette:

http://www.ebay.com/itm/Pack-2-100K-LIN-16mm-Potentiometer-POT-Alpha-POT-/130512342405?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item1e63244d85

DIP-bryterne mine er i pakker på 5 og 5. Derson vi har innganger nok, så da ønsker jeg at vi bruker alle kombinasjoner fra 00000 til 11111, altså hele 32 kombinasjoner for valg av program. Å bare legge inn maks 5 program er jo å sløse litt da det er meget tenkelig at jeg vil utvide med flere program senere. DIP-bryterne jeg har bestilt er disse:

http://www.ebay.com/itm/New-5-x-5-positions-DIP-Switch-Red-Free-shipping-5P-/330565974241?pt=LH_DefaultDomain_0&hash=item4cf74478e1

Legger også med bilde av inngangskretsen for Fotogaten. Den har ikke releutgeng, men en superkjapp SRG-gate som fungerer på samme måte som en potensialfri NO releutgang. Dog så vil den ene tråden ha forbindelse med jord/gnd.

Inngangskrets FotoGate.jpg

DIP.jpg

pot.jpg

På en normal Arduino Uno har vi D2 til D12 (dvs 11 stk) normale digital in/utgång. D13 er utgång alene, pga den indbyggede LED. D0 & 1 er Seriel, så de kan bruges, men kun når man ikke skal programmere mere (utan at kobble kredsløbet fra) Der er også A0 til A5 (6 styks) der kan bruges som digital ind/ud, men ellers er tænk som analog in (potentiometer). Så i runde tal, har du 16 ind/ud gange.

Jeg har selv kredsløb med photogates. Normalt ikke noget problem.

Program skrivning om en dag eller to

Tusen takk for hjelpen så lang. Trur dette kommer til å bli et flott prosjekt!

Bare en liten endring som jeg ønsker at du kan ta med i "program A - vannkrone" før du skriver det. Programmet bruker jo blitslyset for å fryse dråpen, og siden kameraets lukker står åpen i 2-4 sekund, så må jeg ha det mørkt i rommet. Det er litt unødvendig pes med å slå av og på hodelykten/taklyset for hver bildeserie, så jeg tenker å montere inn en 3W LED lampe (arbeidslys) i samme boks som Arduino'en og tenker vi kan la Arduino'en få jobben med å slå av og på lyset også.

Kan du legge inn en eksta utgang til i programmet. Ønsker at den slår på "lys utgangen" (sette utgangsporten høy) helt på slutten av "program A - vannkrone", altså etter at programmet har kjørt 10 runder og det er tatt 10 bilder. Så ønsker jeg at lysets blir slått av helt i starten av "program A - vannkrone". Og at lyset forblir avslått i hele sekvensen hvor det tas 10 bilder.

Ser at dette oppsettet vil medføre at vi starter med avslått lys, men det er helt OK. Jeg kjører som regel en testrunde eller to for å justere inn fokus og vanntrykk alikavel. Ønsker altså ikke at lyset skal slås på straks Arduinoen blir slått på (får strøm), og ønsker heller ikke å legge ut en egen bryter for denne lille finessen.

Hentet ideen fra denne linken: Arduino High Speed Photography Trigger - YouTube

Skrevet lidt hurtigt. Kig på det, og se om det matcher dine tanker.

NorwegianFlash.pde (4.28 KB)

Tusen takk!

Dette ser veldig lovende ut. Kan ikke si jeg forstår det, men jeg skal teste programmet, så får du høre hvordan det fungerer.

Lurer litt på tilkoplingen av POT-metret. Skal senterkinnen til port A0 og en av sidepinnene til GND, eller skal senterpinnen til GND og sidepinnene til A0 og A1?

Er det slik at lyset nå vil bli slått PÅ straks Arduino'en får power? Ønsker at lyset slal være AV helt til første sekvens var kjørt, men det er er liten detalj vi eventuelt kan justere senere.

Mvh
Bjorn Tore

BjornTore:
Dette ser veldig lovende ut. Kan ikke si jeg forstår det, men jeg skal teste programmet, så får du høre hvordan det fungerer.

Har du overhovedet fået din Arduino at virke? - f.eks. med at indlæse File-Example-Blink og ændre intervallet?

Lurer litt på tilkoplingen av POT-metret. Skal senterkinnen til port A0 og en av sidepinnene til GND, eller skal senterpinnen til GND og sidepinnene til A0 og A1?

Senterkinnen til A0. De andre til hhv +5V og GND. Derfor er en 100K eller 50K pot god, så trækker du ikke meget strøm (5V/100K)

For afprøve pot opkobblingen prøv så File-Example-AnalogInput.

Og så skulle du have nok erfaring at lave et bitte lille program så du kan tænd-slukke Lyset på Pin13 ved en af DIP vippe kontakterne.

Er det slik at lyset nå vil bli slått PÅ straks Arduino'en får power? Ønsker at lyset slal være AV helt til første sekvens var kjørt, men det er er liten detalj vi eventuelt kan justere senere.

Lyset tænder ved poweron. Og slukker ved knap trykket. Og det kan justeres, ja. (bare fjern den ene linje i setup modulet)

Nei jeg har ikke mottatt min Arduino enda. Venter fælt og håper den dukker opp i morgen.

Har lastet programvaren og ser det ligger en del øvingsprogrammer der, men får ikke kjørt dem da jeg ikke har noe simuleringsverktøy heller. Jeg er såpass gammel at jeg husker vi programmerte litt i BASIC i 1978-79, har også programmert mikroprosessirer i 1985-86, men dette med C++ er helt nytt for meg. Men tusen takk for hjelpen, den er gull verdt.

Trenger å komme kjapt inn i dette da jeg vil få bruk for den i forbindelse med et fotokurs jeg skal være med å holde.

Mvh
Bjørn Tore

Simuleret Arduino, denne Msg tråd. Den er under udvikling (brug ikke penge på den, lev med de 30 sekunders straffeboks :slight_smile: ) men kan være en hjælp for dig, da man kan single steppe og den slags.

Takk for linken! (har ikke rukket å teste den ennå)

Fikk lastet inn programmet du har skrevet, og Arduinoen aksepterte det. Men jeg fikk ikke testet det da jeg mangler inngangskretsene og utgangskretsene for å få kople til de eksterne delene. Har bestilt meg demo-bord for å ha en plass å kople på.

Det som skjedde var at LED13 tente, jeg trigget pin12 mot GND og LED13 slukket. Men etter en stund (ca. 2 minutt), så tente LED13 igjen (uten at PHOTOGATEN var trigget). Vel, noe surrer og går i loop, men jeg må vente på demo-bordet før jeg får koplet til POT-meter og utgangstransistorene slik at jeg får kjørt en skikkerlig test.

Nå er vi igang. Jippiiiii...... :slight_smile: