Jag började med att söka runt på nätet efter hur man skulle kunna gå till väga. Tilläggas bör kanske, att jag själv är inte minsta fotointresserad (men frugan hade en period för några år sedan).
Det verkade iaf finnas en del lösningar, men jag fastnade för att fotografera av dem med frugas digitala systemkamera. Jag hade sett att det fanns de som använt en diabildsprojektor för att automatisera jobbet och det blev således planen, kanske mest för att det är sånt jag själv tycker är kul. Jag spenderar hellre en vecka på att bygga automatik, än en vecka med manuellt arbete.
Till det här behövs ett makroobjektiv. Frugan hade inget makro och jag hade ingen lust att hosta upp stålarna för att köpa ett. Så, första problemet var att fixa makro på en budget.
Lösningen blev mellanringar. För 135kr, ropade jag in en uppsättning mellanringar av lägsta möjliga made-in-china kvalitet från eBay UK.
Medan jag väntade på på leverans, så kunde jag inte hålla mig, utan köpte även en beg. projektor på blocket för 400kr. Har var det västtysk kvalitet istället. Byggd för att hålla kan man lugnt säga. Jag fick testköra projjen vid inköpstillfället, men naturligtvis gick lampan så fort jag skulle dra igång den hemma.
Ingen jättepanik, för det sitter normalt en 150W halogen i den. Det är lite i mesta laget för det jag vill använda den till, så jag började leta ersättningslampa. Det var inte helt enkelt, men till slut hittade jag den här:
https://e-lampor.se/osram-halostar-24v-gy6-35-50w.html
Linsen på projektorn kan man bara skruva ur, så det som var kvar att lösa på projektorn, var diffusering av ljuset bakom diabilden. Nu var det så fint löst, att i (iaf den här) projektorn fanns det en ledig plats för ett filter. Så jag klippte helt sonika ut en passande plastbit ur ett gammalt glasspaket (av märket Sia) och stoppade in det på rätt plats. Och nu kommer vi till själva projektet med automatiseringen. Projektorn har en fjärrkontrollingång av typen DIN-6 hona. Efter en hel del googlande, lyckades jag ändå inte hitta en pinout. Det enda jag lyckades hitta var att det möjligen kunde röra sig om pin 1, 2 och 3 och att det antagligen är så enkelt som att kortsluta några av dessa tåtar för att byta bild. Med multimeter och knapparna på projjen, mätte jag mig fram till att 3 antagligen var 'common', 2 framåt, och 3 bakåt. (För att vara helt ärlig, så lyckades jag ändå blanda ihop framåt och bakåt när jag lödde ihop prylarna, så tittar man på filmen längre ner, så går karusellen baklänges...)
Kameran har också en remote-ingång (2.5mm stereoplugg) Och samma där, det ska tydligen duga med att kortsluta pinnarna för att simulera knapptryck.
Så det som behövs göras är att sluta en kontakt (till projektorn) i några hundra millisekunder för att byta bild, vänta (ca 1 sekund) på att bilden byts, sluta en annan kontakt till kameran för att ta bilden (och sen börja om).
Det går säkert att göra med optokopplare eller annat, men jag körde med reläer, för det borde garanterat kunna fungera istället för en fysisk knapp.
Nu fick jag dessutom lite hybris och tänkte jag skulle bygga nåt som var lite snyggt (nåja, utvändigt iaf) och inbyggt i en liten låda.
Så för att få plats i lådan, köpte jag dessa reläer:
https://www.kjell.com/se/sortiment/el-v ... 0-v-p36111
Och så en Arduino Pro Mini för att sköta timingen. Inga bilder på själva bygget, men så här blev resultatet. Lådan strömmatas med en 12V väggvårta, denna 12V går in på RAW till Arduinon och reläerna dras vardera (via ett 1k motstånd på basen) av en transistor från Arduinon. Jag vet inte om det behövs en skyddsdiod för så här små reläer, men jag kastade in det ändå.
Tryckknapparna på ena sidan byter bild på projektorn (framåt, bakåt) och på andra sidan tar en bild samt fokus på kameran. Reläerna är kopplade parallellt med 'framåt' och 'ta bild' knapparna. Lite extra omständigt kanske, men det fina är nu att 'lådan' kan (även utan strömmatning) användas som färrkontroll till både kameran och projektorn om så skulle önskas. Och dessutom att manuellt kunna byta bild framåt/bakåt, samt ta kort utan att skaka kameran är väldigt trevligt när fokus och bländare ska justeras in.
Sen har jag även en pot och det är för att kunna ställa in antalet bilder, samt fördröjningen mellan bilder. Precis under pot:en finns ytterligare en knapp som är inkopplad till Arduinon, för att kontrollera automatiken.
Funktionen är som sådan, att med potten kan man ställa in mellan 0,5 till 4,5 sekunders fördröjning efter att en bild tagits tills det att nästa matar fram. Sen håller man knappen intryckt > 400ms (alltså "lång" knapptryckning) för att spara detta värde till EEPROM.
En kort knapptyckning (<400ms) startar istället automatiken. Då läses potten av och omvandlas till ett värde mellan 10 och 80. Detta är det antal bilder som kommer tas. Den kommer dock alltid att mata fram karusellen 81 gånger, då dessa rymmer 80 bilder + en tom position och man kan bara ta i/ur karusellen när den är frammatad till den tomma positionen. Men man sparar lite tid (och plats) om man inte behöver ta en massa onödiga kort om karusellen är t.ex. bara är halvfull.
När den kör automatiken, kan man även pausa (kort knapptryck) eller avbryta (långt knapptryck).
Åsså, lite arduino kod då
Kod: Markera allt
#include <EEPROM.h>
#define POTPIN A0
#define BUTTONPIN A1
#define OUT1PIN A2
#define OUT2PIN A3
unsigned char slidedelay;
void setup() {
pinMode(BUTTONPIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("Wait for keypress...");
slidedelay = EEPROM.read(0);
}
void loop(){
static unsigned int lastMillis = millis();
static unsigned char carouselcounter = 0;
static unsigned char slidecounter = 0;
static unsigned char delaycounter = 0;
static unsigned char state = 0;
static unsigned char button = 255;
static unsigned char pause = 0;
unsigned int nowMillis = millis();
if(nowMillis - lastMillis > 50){
button = (button << 1) | digitalRead(BUTTONPIN);
if(carouselcounter == 0){
if(button == 0x1){
int analogv = analogRead(POTPIN);
slidedelay = map(analogv, 0, 1024, 91, 10);
EEPROM.write(0, slidedelay);
Serial.print("Slidedelay: ");
Serial.println(slidedelay);
} else if((button & 0x3) == 0x1){
int analogv = analogRead(POTPIN);
slidecounter = map(analogv, 0, 1024, 81, 10);
Serial.print("Slides: ");
Serial.println(slidecounter);
carouselcounter = 81;
state = 3;
delaycounter = 0;
pause = 0;
}
digitalWrite(OUT1PIN, LOW);
digitalWrite(OUT2PIN, LOW);
} else {
if(button == 0x1){
carouselcounter = 0;
Serial.println("Reset, waiting for keypress...");
} else if ((button & 0x3) == 0x1) {
pause = !pause;
Serial.print("Pause: ");
Serial.println(pause);
} else if(!pause) {
if(delaycounter > 0){
delaycounter--;
} else {
switch(state & 0x3){
case 3:
digitalWrite(OUT1PIN, HIGH);
delaycounter = 4;
state = 2;
break;
case 2:
digitalWrite(OUT1PIN, LOW);
delaycounter = 25;
carouselcounter--;
Serial.print("Loop: ");
Serial.println(carouselcounter);
state = (slidecounter == 0) ? 3 : 1;
break;
case 1:
digitalWrite(OUT2PIN, HIGH);
delaycounter = 4;
state = 0;
break;
case 0:
digitalWrite(OUT2PIN, LOW);
delaycounter = slidedelay;
slidecounter--;
Serial.print("Slides: ");
Serial.println(slidecounter);
state = 3;
break;
}
}
}
}
lastMillis = nowMillis;
}
}
Då kan man välja att spara bilderna till kamerans interna RAM istället för på minneskortet, samt att den automatiskt laddar hem bilderna från RAM.
Det tar dock lite extra tid att föra över bilderna från kameran (därav möjligheten att ställa in fördröjning mellan bilderna på Arduinon).
Kod: Markera allt
gphoto2 --capture-tethered --filename DIA_%H%M%S.%C
På det hela taget måste jag säga att jag är jag är nöjd med den här lösningen.
Och till sist några exempel på resultatet (dock nedskalade för presentation på forument)