• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Mai 2025.
    Thema: "Grün"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Mai-Wettbewerb hier!
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
  • Unlauterer Verkäufer wieder unterwegs!

    Liebe Mitglieder,
    Florian Franzek, der seit Jahren mit verschiedensten Usernamen in allen möglichen Foren und auf etlichen Verkaufsplattformen auftritt,
    ist wieder hier im Forum und versucht, ehrliche Käufer zu betrügen.
    Wir können wenig tun, außer bei Bekanntwerden einer weiteren Registrierung eines Accounts für seine Machenschaften, diese umgehend zu sperren.
    Ich empfehle, bei Kontakt umgehend die Polizei einzuschalten.

WERBUNG

Raspberry Pi für Tropfenfotografie

sasasch

Themenersteller
Hallo zusammen,
ich weiß man muß das Rad nicht neu erfinden aber habe das Projekt trotzdem mal in Angriff genommen und einen Raspberry Pi für Tropfenfotografie herangezogen, da er auch als kleiner HTPC verwendung finden kann bei mir.
Mögliche andere Vorteile sehe ich auch da, daß der Code dafür direkt auf ihm geschrieben werden kann und natürlich ausgeführt werden kann. Man könnte das ganze zum automatischen Anzeigen der Bilder (JPG)auch erweitern aber das ist noch Zukunftsmusik.
Ich weiß auch nicht ob es dass hier schon gibt im Forum, die Suche zeigte mir jedenfalls keine Ergebnisse.

Im Grunde genommen läuft alles so ähnlich ab wie mit dem Arduino dass hier im Forum ja schon beschrieben ist. Auch die Ansteuerung der Magnetventile, Kamera etc, ist gleich. Denn der Pi verwendet wie der Arduino GPIOs mit ca 3.3V Ausgangsspannung. Eigentlich läuft schon alles bei mir, habe 2 MV, Kamera wird ausgelöst, Blitz auch. Im Moment bin ich noch am Einstellen der richtigen Verzögerungen für mein Setup.
Mein Programmcode in C ist eher einfach gehalten, da meine Kenntnisse nur elementar darin sind. Mein jetziges Programm in der Konsole sieht so aus:
Wahl zwischen 1 oder Zweiventilbetrieb, Eingabe der Parameter für MV, Verzögerungen und Auslösezeiten, Starten des Durchlaufs mit optionaler Wiederholfunktion mit den bereits eingegebenen Parameter. Andernfalls Rücksprung zum erneuten Eingeben der Parameter. Jede Funktion läuft sequentiell ab.
Wäre schön wenn sich hier jemand findet der Spaß hätte mitzumachen oder evtl. schon Erfahrung hat. Ein schöneres Steuerungsprogramm mit GUI wäre eine feine Sache, doch hier fehlt es mir am Programmmierskill:confused:


Gruß
Sascha
 
Hi Sascha,

ist ein interessantes Vorhaben. Ich hab mir das vor einigen Monaten auch überlegt, mich dann aber für Arduino entschieden. Der Grund dafür war die laut Internetrecherchen etwas zuverlässigere Zeitnähe (so jedenfalls mein Verständnis) beim Auslösen/Einfangen der Tropfen.

Mein Ansatz funktioniert mangels Magnetventilen aber mit einer Lichtschranke und einem Infusionsbeutel.. wobei das Prinzip ja gleich bleibt.

Ein RasPI ist aber unterwegs zu mir (angedacht als HTPC für Schatzi, aber man kann ihn ja mal zweckentfremden :evil:). Ich könnte also durchaus mal herumexperimentieren.

Das Ganze dann aber in C zu schreiben, geht mir dann doch etwas zu weit, gerade auf einer Plattform die erheblich modernere Programmiersprachen im Angebot hat ;-)

Bei Bedarf kannst du gerne meinen Arduino Code haben, eventuell liefert der ja Ideen.

Viele Grüsse
Elvis
 
Hi,
gibts schon :D

Hab den RasPi erst als Mediacenter angeschafft.
Aber der Spieltrieb war größer...

Hab das ganze dann auch in C gemacht, aber ohne Anzeige der Bilder und so.
Die Idee mit der GUI ist auch nicht schlecht.
Mir ging es erst mal nur ums Tropfen...

Gruß
Björn
 

Anhänge

Hi Sascha,

ist ein interessantes Vorhaben. Ich hab mir das vor einigen Monaten auch überlegt, mich dann aber für Arduino entschieden. Der Grund dafür war die laut Internetrecherchen etwas zuverlässigere Zeitnähe (so jedenfalls mein Verständnis) beim Auslösen/Einfangen der Tropfen.

..
Viele Grüsse
Elvis

Hallo.
Zeitprobleme habe ich keine. Das läuft Millisekunden genau mit dem Pi. Habs mal mit dem Oszi geprüft . Das passt alles. Es gibt auch keine Schwankungen im Betrieb, Tropfensplashs lassen sich exakt reproduzieren.

Ich weiß nicht wie es beim Arduino ist, aber laufen dort Funktionen paralell als Thread?
@Björn
Schicke Platine, so ähnlich siehts auch bei mir aus. Verwendest du Threads in deinem Programm um Ventile gleichzeitig bzw. Während der Tropfphase dea anderen öffnen zu können? Werde das bei mir versuchen so umzusetzen da ea bei rein sequentieller Abarbeitung des Programms so nicht hinhaut

Gruß
Sascha
 
Hallo, ich klinke mich hier mal mit ein.
Ich habe das Projekt "DropberryPi" :D schon vor längerem für mich umgesetzt. Aufgrund mangelder Programmiertechnik bin ich über das direkte Quellcodegemurkse auch noch nicht hinaus. Ich habe mir dafür extra Python anlernen "müssen", da ich sonst noch nie programmiert habe. Aber es funktioniert super. Auch wenn Python eine recht langsame Programmiersprache ist, ist Sie dennoch schnell genug für den Pi. Ich habe jedenfalls noch keine probleme gehabt, auf 1ms genau zu triggern.

Mit C habe der Pi ne maximale Schaltfrequenz von ca 11MHz, mit Python ca 50kHz. Also deutlich flinker als 1ms. (nachzusehen hier yt /watch?v=8mLMGlzdxrE#t=1280)

Mit Codes & Bildern kann ich euch leider noch nicht versorgen, da diese auf dem Pi liegen (der fungiert bei mir als webserver, wenn er gerade nicht zum basteln missbraucht wird) und der ist umzugsbedingt noch unterwegs zu mir.

@ sasasch:

Das was du willst, geht auch ohne Threads. Mit Threads brauchst du bei dem Pi gar nicht erst anfangen, das geht technisch nicht. Der hat nur eine CPU, und die arbeitet alles auch wieder sequenziell ab. Die CPU ist aber schnell genug das alles nahezu ohne Verzögerung durchzurattern. Ich habe jedenfalls keine Verzögerung im Setup bemerkt.

Wenn ich den Pi hier habe, kann ich ja mal den Code hochladen. Ist allerdings, wie gesagt, in Pyhton geschrieben und nicht wirklich aufgeräumt.

grüße
Pille

PS: Bei mir werden übrigens 3 MV + Lichtschranke, Kamera und Blitz angesteuert. Der Pi hat genug Leistung für alles und noch mehr ;)
 
So, hier mal der Code. Viel Spass damit ;)

Code:
import RPi.GPIO as GPIO # Wird fuer GPIO benoetigt
import time		# Wird fuer Zeitverzoegerung benoetigt

# Pins als Ein- und Ausgaenge definieren
GPIO.setmode (GPIO.BOARD)# To use Raspberry Pi board pin numbers
GPIO.setwarnings(False)  # Warnmeldungen ausschalten
GPIO.setup(8, GPIO.OUT)  # Ventil 1
GPIO.setup(10, GPIO.OUT) # Ventil 2
GPIO.setup(12, GPIO.OUT) # Ventil 3
GPIO.setup(16, GPIO.IN)  # Handausloeser
GPIO.setup(22, GPIO.IN)  # Lichtschranke
GPIO.setup(24, GPIO.OUT) # Kameraverschluss
GPIO.setup(26, GPIO.OUT) # Blitzausloeser

# Pin-level im Ausgangszustand definiert
GPIO.output(8, False)  # Ventil 1 aus
GPIO.output(10, False) # Ventil 2 aus
GPIO.output(12, False) # Ventil 3 aus
GPIO.output(24, False) # Kameraverschluss geschlossen
GPIO.output(26, False) # Blitze nicht ausloesen

##############################################################################################################################

ventil_1_1verzoegerung = 0		# Verzoegerung in sec des ersten Tropfens aus Ventil 1 ab gedruecktem Ausloeser.
ventil_1_2verzoegerung = 0.1		# Verzoegerung in sec des zweiten Tropfens aus Ventil 1 ab gedruecktem Ausloeser.
ventil_1_3verzoegerung = 0		#
ventil_1_4verzoegerung = 0		#
ventil_1_5verzoegerung = 0		#

ventil_2_1verzoegerung = 0.03		# 
ventil_2_2verzoegerung = 0.13		# 
ventil_2_3verzoegerung = 0		#
ventil_2_4verzoegerung = 0		# 
ventil_2_5verzoegerung = 0		#
			
ventil_3_1verzoegerung = 0.06		# 
ventil_3_2verzoegerung = 0.16		# 
ventil_3_3verzoegerung = 0		#
ventil_3_4verzoegerung = 0		#
ventil_3_5verzoegerung = 0		# 


ventil_1_1offen = 0.05			# Oeffnungszeit in sec -> Tropfengroesse
ventil_1_2offen = 0.05			#
ventil_1_3offen = 0.08			#
ventil_1_4offen = 0.08			#
ventil_1_5offen = 0.08			#

ventil_2_1offen = 0.05			# 
ventil_2_2offen = 0.05			# 
ventil_2_3offen = 0.08			# 
ventil_2_4offen = 0.08			#
ventil_2_5offen = 0.08			#

ventil_3_1offen = 0.05			# 
ventil_3_2offen = 0.05			# 
ventil_3_3offen = 0.08			#
ventil_3_4offen = 0.08			#
ventil_3_5offen = 0.08			#


kamera_verzoegerung = 0.1			   # Verzoegerung ab Lichtschranke ## braucht man nicht wenn BULB
blitz_verzoegerung = 0.15			   # Verzoegerung ab Lichtschranke ## default = 0.3
lichtschranke_timeout = 0.1

print ()
print ("--- Triggersoftware Tropfenfotografie ---")
print ()
print ("  Einstellungen:")
print ("    Modus: Manuell")
print ("    Autofocus: off")
print ("    Verschlusszeit: BULB")
print ("    Blende: >=f11")
print ("    ISO: 100-200")
print ()
print ("-- Bitte Ausloeser betaetigen --")
print ()

def ventil (vv, vo, s_nr, pin_nr): # (ventilverzoegerung= 1_1 - 3_5, ventiloeffnungszeit= 1_1 - 3_5, statusnummer= 1-5, pinnummer= 8;10;12)
	if (time.time() >= ausloeser_gedrueckt + vv and status[s_nr] == 0):
		GPIO.output(pin_nr, True)
#		print ("--- ventil", s_nr, "oeffnen ---", time.time())
		status[s_nr] = 1
	if (time.time() >= ausloeser_gedrueckt + vv + vo and status[s_nr] == 1):
		GPIO.output(pin_nr, False)
#		print ("--- ventil", s_nr, "schliessen ---", time.time())
		status[s_nr] = 2


status_lichtschranke = 0

while True:

# Lichtschranke betriebsbereit	
	if (GPIO.input(22) and status_lichtschranke == 0):
		print ("--- Lichtschranke unterbrochen ---")
		status_lichtschranke = 1
	if not(GPIO.input(22)) and (status_lichtschranke == 1):
		print ("--- Lichtschranke bereit ---")
		status_lichtschranke = 0


	ausloeser = GPIO.input(16)
	if (ausloeser and status_lichtschranke == 0): # or input() != 0
#		print ("--- Ausloeser gedrueckt  ---", time.time())
		ausloeser_gedrueckt = time.time() # Zeitstempel fuer Handausloesung setzen
#		GPIO.output(24, True)
		lichtschranke_ausgeloest = 0
		status = [0, 0, 0, 0, 0, 0 ,0] # 1.nr=Lichtschranke ; Rest=Ventil ; 0=zu ; 1=offen ; 2=wieder zu ; 4=Endstatus Lichtschranke
		while True:
# Lichtschranke
			lichtschranke = GPIO.input(22)
			
			if (lichtschranke and status[0] == 0):
				lichtschranke_ausgeloest = time.time() # Zeitstempel fuer Lichtschranke setzen
#				print ("--- Lichtschranke ausgeloest ---", time.time())
				status[0] = 1

			if (time.time() >= lichtschranke_ausgeloest + kamera_verzoegerung and status[0] == 1):
				GPIO.output(24, True)
#				print ("--- Kameraverschluss oeffnen ---", time.time())
				status[0] = 2

			if (time.time() >= lichtschranke_ausgeloest + blitz_verzoegerung and status[0] == 2):
				GPIO.output(26, True)
#				print ("--- Blitz ausgeloest ---", time.time())
				status[0] = 3

			if (time.time() >= lichtschranke_ausgeloest + blitz_verzoegerung + 0.05 and status[0] == 3):
				GPIO.output(26, False) # Blitz ausschalten
				GPIO.output(24, False)
#				print ("--- Kameraverschluss schliessen ---", time.time())
				status[0] = 4

				print ("--- Kamera & Blitz wurden ausgeloest ---", time.time())
	#			time.sleep(4)
				print ()
				print ("--- Ausloeser bereit ---", time.time())
				print ()

# Sonderbedingung wenn der Tropfen die Lichtschranke verfehlt
			if (time.time() >= ausloeser_gedrueckt + lichtschranke_timeout and status[0] == 0):
				GPIO.output(8, False)
				GPIO.output(10, False)
				GPIO.output(12, False)
				print ()
				print ("++++++++++++++++++++++++++++++++++++++++++")
				print ("       --- Tropfen nicht erkannt ---      ")
				print ("--- Lichtschranke/Ventile ueberpruefen ---")
				print ("++++++++++++++++++++++++++++++++++++++++++")
				time.sleep(1.5)
				print ()
				print ("--- Ausloeser bereit ---")
				break

#Ventilverzoegerung-Nummer == Ventiloeffnung-Nummer[1_1 - 3_5], Status-nummer[1-5](wird einfach durchnummeriert), RPi-pin-nummer[8;10;12]
			ventil(ventil_1_1verzoegerung, ventil_1_1offen, 1, 8)
			ventil(ventil_1_2verzoegerung, ventil_1_2offen, 2, 8)
			ventil(ventil_2_1verzoegerung, ventil_2_1offen, 3, 10)
			ventil(ventil_2_2verzoegerung, ventil_2_2offen, 4, 10)
			ventil(ventil_3_1verzoegerung, ventil_3_1offen, 5, 12)
			ventil(ventil_3_2verzoegerung, ventil_3_2offen, 6, 12)
# Abbruchbedingung
#
			if (status == [4, 2, 2, 2, 2, 2, 2]):
				break

guckst du

und so schauts in der Steuerbox aus ;)
 
Zuletzt bearbeitet:
Hallo
Ich habe vor kurzem ein Projekt gestartet wie Sascha und im Internet bin ich auf diesen Beitrag gestoßen.

Ich hätte jetzt die Frage wie ich den Code ändern müsste dass ich keine Lichtschranke mehr anschließen muss?
Oder gibt es auch eine einfachere Lösung die Lichtschranke zu umgehen?

Meine letzte Frage wäre noch ob es möglicher weiße schon eine Art Programm mit grafischer Oberfläche für die Tropfenfotografie mit dem raspy gibt?


Mfg maschimotho
 
WERBUNG
Zurück
Oben Unten