Arduino als delay voor high speed fotografie

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 44
Geregistreerd: 21 Dec 2012, 15:23
Woonplaats: Drenthe

Arduino als delay voor high speed fotografie

Berichtdoor B.Meijer » 21 Dec 2012, 17:09

Hallo,
Ik ben een newbie in arduino en programmeren.
Voor mijn high speed fotografie project ben ik op zoek naar een delay.
Ik heb een geluidstrigger gemaakt die als uitgang via een thyristor mijn flitsers aanstuurd maar dit is te snel.
Voor een ander druppelproject heb ik een kastje gebouwd met een ingang, en 4 uitgangen die gestuurd worden door een arduino.
Hiervoor heb ik een vast programma gekregen, dus hoefde niet te programmeren.

Heb eerst een vraag over arduino.
Moet deze altijd aangesloten zijn aan een pc? of kan dit ook stand alone.
Het programma dat ik gebruik kan ik in windows miliseconden veranderen en dan starten.
wanneer ik mijn geluid trigger hiervoor gebruik zit er meer dan een halve sec vertraging, omdat de puls naar de pc gaat en daar het programma wordt gestart.

Volgens mij na wat leeswerk heb ik niet veel code nodig.
Dit is wat ik zou willen:
Puls komt binnen op ingang pin 12 (zit deze namelijk al aangesloten)
vertraging van een aantal miliseconden bijv. 100ms waarna pin7 gestuurd wordt (zit ook al aangesloten.)
Van daar wordt deze pin verdeeld over 4 optocouplers die mijn 4 flitsers aansturen.

Ben nu wat aan het freubelen, maar ik krijg er geen geschikte code uit.
Als ik de basis goed lees moet ik een setup maken, daarna een loop waar ik aangeef wat er moet gebeuren
Tot nu toe heb ik dit geschreven, alleen weet ik niet of ik de vertraging goed heb toegevoegd.
Heb het gevoel van niet.
Wie zou dit even willen nalezen.

Met vriendelijke groet,
Bert

int Trigger = 12; //Trigger - microfoon - op pin 12
int Flitser = 7; //Flitser - aansturen van de flitsers - op pin 7

void setup()
{
pinMode(Trigger, INPUT);
pinMode(Flitser, OUTPUT);

}
void loop()
{
val = digitalRead(Trigger);
if (val == HIGH) {
digitalWrite(Flitser, HIGH); //stuurt flitser aan
delay(100);} //tijd van aansturen 0.1 sec
{
else
digitalWrite(Flitser, LOW);
}
Hou niet van de nachtdienst, maar wel van nachtfotografie

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Arduino als delay voor high speed fotografie

Berichtdoor pjh » 21 Dec 2012, 18:23

Code: Alles selecteren
int Trigger = 12; //Trigger - microfoon - op pin 12
int Flitser = 7; //Flitser - aansturen van de flitsers - op pin 7
unsigned long tijd = millis(); // tijd wordt gelijk gezet met interne counter


void setup(){
  pinMode(Trigger, INPUT);
  pinMode(Flitser, OUTPUT);
}

void loop(){
  int val = digitalRead(Trigger);
  if ((val == HIGH) & (millis() - tijd > 200)) { // langer dan 200 ms tussen twee knop-drukken om "bouncing"te voorkomen
    delay(100); //tijd van aansturen 0.1 sec :::: heb deze voor flits gezet, want flits van 100 ms is niet mogelijk.....
    digitalWrite(Flitser, HIGH); //stuurt flitser aan
    tijd = millis();// wanneer er gedrukt wordt, staat tijd weer gelijk aan de teller
  }
  else{
    digitalWrite(Flitser, LOW);
  }
}

NB: je hebt ook delayMicroseconds();

Berichten: 44
Geregistreerd: 21 Dec 2012, 15:23
Woonplaats: Drenthe

Re: Arduino als delay voor high speed fotografie

Berichtdoor B.Meijer » 21 Dec 2012, 22:59

Bedankt voor het controleren en aanvulling.
Ga het morgen even proberen..
Heb ik nog een vraag, dit kan draaien, na het overzenden, zonder aansluiting op pc?
Gr. Bert
Hou niet van de nachtdienst, maar wel van nachtfotografie

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Arduino als delay voor high speed fotografie

Berichtdoor pjh » 22 Dec 2012, 00:09

jazeker.
Je kunt de arduino los van de computer laten functioneren.
Microcontrollers zijn juist bedoeld om 'los' de functioneren.
Embed is daar het woord voor.

7-12 volt DC op de powerplug
Daar kun je de USB bij gebruiken, of niet.
Alleen USB werkt ook, maar niet via laptop ofo.
Dan is je spanning te laag en werkt je microcontroller niet.

Berichten: 44
Geregistreerd: 21 Dec 2012, 15:23
Woonplaats: Drenthe

Re: Arduino als delay voor high speed fotografie

Berichtdoor B.Meijer » 22 Dec 2012, 00:51

Bedankt voor de antwoorden..
Ben nog steeds aan het ontdekken wat ik allemaal mee kan, maar kom steeds meer leuke dingen tegen..
Ik zal wat vaker komen in dit forum, heb er al wat van opgestoken..
Gr. Bert
Hou niet van de nachtdienst, maar wel van nachtfotografie

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Arduino als delay voor high speed fotografie

Berichtdoor pjh » 22 Dec 2012, 01:32

(Bijna) mijn eerste project, betrof ook fotografie.
Iemand had een zgn. intervaluino' gemaakt.
Een canon 350D (o.a.) met twee reed relais verbonden aan een arduino.
Kon je prima time-laps filmpjesmaken van hoge resolutie foto's.
Best leuk.

Wil wat jij doet ook nog een keer doen. Foto timen op geluid. Glas dat kapot springt. Dan werk.
Nou, blijf je vragen stellen en je antwoorden posten.

Berichten: 44
Geregistreerd: 21 Dec 2012, 15:23
Woonplaats: Drenthe

Re: Arduino als delay voor high speed fotografie

Berichtdoor B.Meijer » 22 Dec 2012, 08:17

Ik ben nu bezig met het kapotgooien en schieten van kerstballen, maar de flitstijd zit veel te snel op elkaar.
Vandaar dat een vertraging zocht.
Ben aan het freubelen geweest met de triggers van Hiviz, misschien ken je die wel.
Deze combineer ik nu dus met een arduino.

Ik heb nog wel een vraagje daarover.
Kan ik aan 1 poort 4 optocouplers hangen, lijkt mij dat dat een probleem kan opleveren..
Ik heb wel 4 poorten over op de arduino. en in mijn kastje heb ik daar ook al aansluitingen voor (lees 3,5mm jack aansluitingen)

Wanneer ik dit stukje code ervoor zet.

int Trigger = 12; //Trigger - microfoon - op pin 12
int Flitser = 7; //Flitser - aansturen van de flitsers - op pin 7
int Flitser = 8; //Flitser - aansturen van de flitsers - op pin 8
int Flitser = 9; //Flitser - aansturen van de flitsers - op pin 9
int Flitser = 10; //Flitser - aansturen van de flitsers - op pin10


en ik roep verderop FLITSER aan, worden dan alle 4 de poorten HIGH?
Dat zou mij goed uitkomen namelijk

Trouwens bedankt voor de regel tegen bouncing, daar liep ik eerder al tegenaan.. ;)
Gr. Bert
Hou niet van de nachtdienst, maar wel van nachtfotografie

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Arduino als delay voor high speed fotografie

Berichtdoor pjh » 22 Dec 2012, 11:14

Dat gaat niet werken, met 4x een variabele met dezelfde naam.
Wanneer je alle flitsers tegelijk wil laten afgaan, kun je alle optocoplers goed in serie zetten.

Een optocoplers heeft volgens mij een ledje inzich met 1 volt 'drop'. Wanneer je 4 optocoplers in serie zet, heb je een voltagedrop van 4 volt, en dat kan de arduino best aan met 5 volt.

Heb je nog 1 volt 'weg te werken' met een weerstand. Dus 5volt - 4x1volt =1 volt. Je wil je amperage op zeg 15 mA( moet je opzoeken daarheen van je optocoplers), heb je een weerstand nodig van 1000 mV / 15mA= 67 ohm.

De volgorde maakt dan niet uit.
Bijvoorbeeld:
Arduinopin 7 -> weerstand -> optoC1 -> optoC2 -> optoC3 etc.

Berichten: 44
Geregistreerd: 21 Dec 2012, 15:23
Woonplaats: Drenthe

Re: Arduino als delay voor high speed fotografie

Berichtdoor B.Meijer » 22 Dec 2012, 11:26

Vreemd, ik had hier een bericht geplaatst maar is niet te zien..
Dat van die optocouplers ga ik uitzoeken..
4 verschillende variabelen, is dat wel een optie?


Eerste instantie werkte het niet.
Nadat ik de Led als controle heb bijgevoegd heb ik het werkend gekregen.
Nu heb ik nog een code geschreven, die volgens mij ook zou moeten willen.
Ben op dit moment mijn kastje aan het modificeren, een extra jack toevoegen, optocoupler zat er al.
Het viel mij op dat mijn geluidstrigger het niet deed. Dit is een kastje watr ik al had gebouwd.
Nu heb ik het piezo element direct op ingang 12 gezet en nu werkt het.
Een piezo geeft toch niet meer dan 5V?
Dit is mijn code tot nu toe
Gr. Bert

Code: Alles selecteren
int Trigger = 12;   //Trigger - microfoon - op pin 12
int Flits1 = 9;                 //Flitser - aansturen van de flitsers - op pin 9
int Flits2 = 8;                 //Flitser - aansturen van de flitsers - op pin 8
int Flits3 = 7;                 //Flitser - aansturen van de flitsers - op pin 7
int Flits4 = 10;               //Flitser - aansturen van de flitsers - op pin 10
int LED = 13;                 // Ingebouwde LED


unsigned long tijd = millis();   // tijd wordt gelijk gezet met interne counter


void setup(){
  pinMode(LED, OUTPUT);       //Led
  pinMode(Trigger, INPUT);     //Trigger
  pinMode(Flits1, OUTPUT);    //Flits1
  pinMode(Flits2, OUTPUT);    //Flits2
  pinMode(Flits3, OUTPUT);    //Flits3
  pinMode(Flits4, OUTPUT);    //Flits4
}

void loop(){
  int val = digitalRead(Trigger);
  if ((val == HIGH) & (millis() - tijd > 200)) { // langer dan 200 ms tussen twee knop-drukken om "bouncing"te voorkomen
    delay(100); //tijd van aansturen 0.1 sec :::: heb deze voor flits gezet, want flits van 100 ms is niet mogelijk.....
    digitalWrite(Flits1, HIGH); //stuurt flitser1 aan
    digitalWrite(Flits2, HIGH); //stuurt flitser2 aan
    digitalWrite(Flits3, HIGH); //stuurt flitser3 aan
    digitalWrite(Flits4, HIGH); //stuurt flitser4 aan
    digitalWrite(LED, HIGH);   //stuurt Led aan
    delay(200);                      //Brandtijd van Led
    tijd = millis();                  // wanneer er gedrukt wordt, staat tijd weer gelijk aan de teller
  }
  else{
   digitalWrite(Flits1, LOW);  //Flits1 in rust
   digitalWrite(Flits2, LOW);  //Flits2 in rust
   digitalWrite(Flits3, LOW);  //Flits3 in rust
   digitalWrite(Flits4, LOW);  //Flits4 in rust
   digitalWrite(LED, LOW);    //stuurt Led uit
   }
}
Hou niet van de nachtdienst, maar wel van nachtfotografie

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Arduino als delay voor high speed fotografie

Berichtdoor pjh » 22 Dec 2012, 14:53

Ter leering ende vermaeck:

Ik heb je 4 Flits-pinnen in een array gezet, en werk ze steeds in een loop af.
Dat hoeft niet, zeker niet bij 4 pinnetjes,
Maar kan handig zijn bij andere projectjes.

Code: Alles selecteren
int Trigger = 12;             //Trigger - microfoon - op pin 12
int Flits[] = {
  9, 8, 7, 10}; // Arduino pinnetjes voor Flits[0], Flits[1], Flits[2], Flits[3]
int LED = 13;                          // Ingebouwde LED

unsigned long tijd = millis();       // tijd wordt gelijk gezet met interne counter

void setup(){
  pinMode(LED, OUTPUT);          //Led
  pinMode(Trigger, INPUT);        //Trigger
  for(int i = 0; i < 4; i++){
    pinMode(Flits[i], OUTPUT);    //Flits1-4
  }
}

void loop(){
  int val = digitalRead(Trigger);
  if ((val == HIGH) & (millis() - tijd > 200)) { // langer dan 200 ms tussen twee knop-drukken om "bouncing"te voorkomen
    delay(100); //tijd van aansturen 0.1 sec

    for(int i = 0; i < 4; i++){
      digitalWrite(Flits[i], HIGH);//stuurt flitser1-4 aan
    }

    digitalWrite(LED, HIGH);       //stuurt Led aan
    delay(200);                       //Brandtijd van Led

    tijd = millis();                     // wanneer er gedrukt wordt, staat tijd weer gelijk aan de teller
  }
  else{
    for(int i = 0; i < 4; i++){
      digitalWrite(Flits[i], LOW);  //Flits1 in rust
    }
    digitalWrite(LED, LOW);        //stuurt Led uit
  }
}


Verder kan de ..else... wel weg. Je kunt alle flis-pinnetjes ook na de delay(200) weer uitzetten.

Code: Alles selecteren
int Trigger = 12;   //Trigger - microfoon - op pin 12
int Flits[] = {
  9, 8, 7, 10}; // Arduino pinnetjes voor Flits[0], Flits[1], Flits[2], Flits[3]
int LED = 13;                 // Ingebouwde LED

unsigned long tijd = millis();   // tijd wordt gelijk gezet met interne counter

void setup(){
  pinMode(LED, OUTPUT);       //Led
  pinMode(Trigger, INPUT);     //Trigger
  for(int i = 0; i < 4; i++){
    pinMode(Flits[i], OUTPUT);    //Flits1-4
  }
}

void loop(){
  int val = digitalRead(Trigger);
 
  if ((val == HIGH) & (millis() - tijd > 200)) { // langer dan 200 ms tussen twee knop-drukken om "bouncing"te voorkomen
    delay(100); //tijd van aansturen 0.1 sec
    for(int i = 0; i < 4; i++){
      digitalWrite(Flits[i], HIGH);//stuurt flitser1-4 aan
    }
    digitalWrite(LED, HIGH);       //stuurt Led aan
    delay(200);                    //Brandtijd van Led
    for(int i = 0; i < 4; i++){
      digitalWrite(Flits[i], LOW); //Flits1 in rust
    }
    digitalWrite(LED, LOW);        //stuurt Led uit
  }
  tijd = millis();               // wanneer er gedrukt wordt, staat tijd weer gelijk aan de teller
}



Vervolgens lijkt de debounce ook weg te kunnen, want als de knop op HIGH staat, dan voert hij altijd ook een delay van 200ms uit. Beter is de " if ((val == HIGH) & (millis() - tijd > 200)) { " te veranderen in " if ((val == HIGH) & (millis() - tijd > 5000)) { " , zodat de flitsers 5 seconden hebben om bij te komen. Maakt het weer logisch....

Volgende

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten