Tropfenfotografie Teil 2

      Tropfenfotografie Teil 2

      Moin :huhu:
      Zitat aus dem Revolver:
      neulich habe ich mir mal wieder eine „Make:“ gekauft, diese Bastelzeitschrift von Heise. Es wird ja nicht mehr gebastelt sondern gemaked, ganz modern :hihi:
      Da ist eine Anleitung drin, wie man mit einem Arduino und ein paar zusätzlichen Teilen eine Steuerung für Tropfenfotos baut.
      Vor einiger Zeit habe ich mal Tropfenfotos gemacht und für die Tropfen einen Infusionsschlauch benutzt, da ist allerdings die Trefferquote „per Hand“, mit Auslösen auf Sicht, sehr gering :whistle: Jetzt habe ich alle Teile beisammen und werde das mal zusammenschustern :whistling: bin schwer gespannt.
      Habe das Ganze auch direkt um ein paar Dinge erweitert, mehrere Taster und Bildschirm, damit die Einstellungen auch autark, ohne Rechner, geändert werden können.

      Es gibt erste Ergebnisse ^^ Noch nicht reproduzierbar und mit etwas Tuning ist noch reichlich Spiel nach oben, aber auf dem richtigen Weg 8)
      Der Aufbau:

      Ein erstes Ergebnis „Tropfen auf Tropfen“:
      Faszinierend! Bin gespannt, was Du damit in Zukunft für Bilder produzierst! Das erste sieht ja schon mal sehr vielversprechend aus. Stimmen die Exif-Daten im Bild? Bin erstaunt, dass der Tropen gar nicht verschmiert ist bei 1/60s... Muss allerdings auch zugeben, dass ich mir noch nie Gedanken gemacht habe, wie schnell (oder langsam) so ein Tropfen überhaupt unterwegs ist. ;)
      --
      Signature is futile.
      Die Exif stimmt :) Bei der Verschlusszeit der Kamera kommt es allerdings nur darauf an, dass der Verschluß geöffnet ist. Die Belichtung findet im „Dunkeln“ statt und die tatsächliche Belichtungszeit bestimmt die Brenndauer vom Blitz. Der steht auf manuell und wird heruntergeregelt auf 1/16 bis 1/64 Leistung. So ist die Belichtungszeit erheblich kürzer als es die Kamera (1/8000) je schaffen könnte, etwa 1/20.000 =O Hier sind es zwei Blitze, ein „farbiger“ von hinten, in einer Softbox, und einer von der Seite. Der orangene Hintergund ist praktisch die Softbox.
      Die Elektronik mit Arduino-Clone :whistling:


      Der Programmcode vom Arduino

      C-Quellcode

      1. #include <LCD.h>
      2. #include <LiquidCrystal_I2C.h>
      3. LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
      4. int dropDelay = 75;
      5. int cameraDelay = 125;
      6. int modus = 1;
      7. int set1 = 0; // Mode-Entpreller
      8. int set2 = 0; // Auslöser-Entpreller
      9. int set3 = 0; // Mode-Plus-Entpreller
      10. int set4 = 0; // Mode-Minus-Entpreller
      11. void setup() {
      12. // put your setup code here, to run once:
      13. pinMode(8, INPUT); digitalWrite(8, HIGH); // Auslöser
      14. pinMode(9, INPUT); digitalWrite(9, HIGH); // Modus Wechsel
      15. pinMode(10, INPUT); digitalWrite(10, HIGH); // Plus
      16. pinMode(11, INPUT); digitalWrite(11, HIGH); // Minus
      17. pinMode(2, OUTPUT); digitalWrite(2, LOW); // Tropfen auslösen
      18. pinMode(3, OUTPUT); digitalWrite(3, LOW); // Kamera auslösen
      19. // pinMode(12, OUTPUT); digitalWrite(12, HIGH); //Testauslöser
      20. lcd.begin(20,4);
      21. lcd.setBacklightPin(3,POSITIVE);
      22. lcd.setBacklight(HIGH);
      23. ausgabe_0();
      24. }
      25. void loop() {
      26. // put your main code here, to run repeatedly:
      27. ausgabe_1(dropDelay, cameraDelay, modus);
      28. // Auslöser Abfragen
      29. if (digitalRead(8) == LOW && set2 == 0) {
      30. shutterRelease(dropDelay, cameraDelay);
      31. set2=1;
      32. }
      33. if (digitalRead(8) == HIGH && set2 == 1) {
      34. delay(100);
      35. set2=0;
      36. }
      37. // Mode-Taste Auslesen
      38. if (digitalRead(9) == LOW && set1 == 0) {
      39. modus = changeMode(modus);
      40. set1=1;
      41. }
      42. if (digitalRead(9) == HIGH && set1 == 1) {
      43. delay(100);
      44. set1=0;
      45. }
      46. // Mode-Plus-Taste Auslesen
      47. if (digitalRead(10) == LOW && set3 == 0) {
      48. if (modus == 1) {
      49. dropDelay ++;
      50. }
      51. else {
      52. cameraDelay ++;
      53. }
      54. set3=1;
      55. }
      56. if (digitalRead(10) == HIGH && set3 == 1) {
      57. delay(100);
      58. set3=0;
      59. }
      60. // Mode-Minus-Taste Auslesen
      61. if (digitalRead(11) == LOW && set4 == 0) {
      62. if (modus == 1) {
      63. dropDelay --;
      64. }
      65. else {
      66. cameraDelay --;
      67. }
      68. set4=1;
      69. }
      70. if (digitalRead(11) == HIGH && set4 == 1) {
      71. delay(100);
      72. set4=0;
      73. }
      74. }
      75. void ausgabe_1(int dropDelay, int cameraDelay, int modus) {
      76. lcd.setCursor(0,1);
      77. lcd.print("Drp Cnt: n.a.");
      78. lcd.setCursor(0,0);
      79. lcd.print("Mode: ");
      80. if (modus == 1){lcd.print("Drop-Setup ");
      81. }
      82. if (modus == 2){lcd.print("Camera-Setup");
      83. }
      84. lcd.setCursor(0,2);
      85. lcd.print("Drp Dly: ");lcd.print(dropDelay);lcd.print("ms");
      86. lcd.setCursor(0,3);
      87. lcd.print("Cam Dly: ");lcd.print(cameraDelay);lcd.print("ms");
      88. }
      89. void ausgabe_0() {
      90. lcd.setCursor(0,0);
      91. lcd.print(" *** Drop-Photo *** ");
      92. lcd.setCursor(0,2);
      93. lcd.print("Version: 0.0.13a");
      94. lcd.setCursor(0,3);
      95. lcd.print("by 'UFo'");
      96. delay(5000);
      97. lcd.setCursor(0,0);
      98. lcd.print(" ");
      99. lcd.setCursor(0,1);
      100. lcd.print(" ");
      101. lcd.setCursor(0,2);
      102. lcd.print(" ");
      103. lcd.setCursor(0,3);
      104. lcd.print(" ");
      105. delay(1000);
      106. }
      107. int changeMode(int modus){
      108. if (modus == 1){
      109. modus = 2;
      110. }
      111. else {
      112. modus = 1;
      113. }
      114. return (modus);
      115. }
      116. void shutterRelease(int dropDelay, int cameraDelay){
      117. lcd.setBacklight(LOW); //Displaybeleuchtung für Foto ausschalten
      118. delay(100);
      119. digitalWrite(2, HIGH);
      120. delay(100);
      121. digitalWrite(2, LOW);
      122. delay(dropDelay);
      123. digitalWrite(2, HIGH);
      124. delay(75);
      125. digitalWrite(2, LOW);
      126. delay(cameraDelay);
      127. digitalWrite(3, HIGH);
      128. delay(100);
      129. digitalWrite(3, LOW);
      130. delay(500);
      131. lcd.setBacklight(HIGH);
      132. }

      Ahh, das erklärt das! An den Blitz hatte ich gar nicht gedacht...

      Und: Was man mit Arduinos alles so machen kann. Sollte ich mich auch mal mit beschäftigen.

      PS: Der Code ist ja übersichtlich. Muss man das alles in der Main Loop machen oder kann der auch sowas wie Interrupts, dass also sozusagen ein Event getriggert wird, wenn man eine Taste drückt?
      --
      Signature is futile.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „janjan“ ()

      Ja, das Meiste, was ich so an Beispielen gesehen habe, benutzt den Loop, das ist wohl auch grundsätzlich so gedacht. Interrupts und Event Handler gibt es wohl auch, da habe ich zumindestens was von gelesen. Es gibt auch jede Menge Bibliotheken, die man einbinden kann, wie hier z.B. für das LCD-Display. Ein Arduino hat nur 32Kb Ram wovon 5Kb vom Bootloader geschluckt werden, da wird es mit mehreren Bibliotheken schnell knapp, denke ich.

      Hier noch der Schaltplan :)
      Bilder
      • Drop_Controller_1_Steckplatine.jpg

        1,17 MB, 3.426×1.551, 13 mal angesehen
      Faszinierend, was Du so baust! Würde mich ja auch schon wieder interessieren... Aber nicht noch ein Projekt! Ich bin gerade beschäftigt, die Yashica, von der ich berichtet hatte, wieder ans Laufen zu bekommen, und nebenbei hab ich sowieso immer noch ein oder zwei andere Projekte laufen! ;)

      Aber 32k, das ist ja schon viel! Ich hab meine ersten Programmierschritte damals auf dem alten VC20 meines Bruders gemacht, da hatte ich glaube ich 4k für Basic zur Verfügung. Da kann man einiges mit machen, wenn man effektiv programmiert. ;) Ich fürchte, da kommt meine Affinität zu verschwurbeltem Spaghetti-Code her... :D (Ich habe nie verstanden, warum die im Studium immer meinten, dass das böse GOTO böse wäre... Pfff... Weicheier! :clown: )
      --
      Signature is futile.
      ...und heute bezahlste Dich dumm und dusselig für 'nen Feld-, Wald- und Wiesen-C64. ;) Hm, müssten den VC20 mal aus Mutterns Keller holen und testen, ob er noch geht, oder ob ich mal ein paar alte Elkos austauschen müsste.
      --
      Signature is futile.
      Ein kleines Update :)
      nachdem der Aufbau mit der Steckplatine soweit funktioniert, habe ich das Ganze nun in ein Gehäuse verfrachtet. Den Arduino „Uno“ habe ich durch einen „Nano“ ersetzt und auf eine Lochrasterplatine gelötet.
      Beim Löten habe ich festgestellt, dass ich meine „dritte Hand“ unbedingt durch eine neue Version mit Lupe ersetzen sollte... 8o
      Bilder
      • Drop_Controller_2a_Steckplatine.jpg

        515,53 kB, 1.029×921, 10 mal angesehen
      • Tropfen_Arduino_nano_001.jpg

        396,41 kB, 2.048×1.536, 12 mal angesehen