Bauanleitung Steuerung analoge Kamera mit einem Raspi

Diese Bauanleitung beschreibt den Aufbau unserer Steuerung zum schalten der analogen Meteoritenkamera. Anhand eines vorhandenen Pascal-Programms werden die Schaltzeiten berechnet und über Scripte als jobs an den Raspi übergeben. Der steuert dann über seine IO-Ports ein Relais an, welches den Auslöser der analogen Kamera betätigt.
27.03.2023

Motivation

Das Feuerkugelnetzwerk betreibt an verschiedenen Standorten in Deutschland analoge Filmkameras. Deren mechanischer Auslöser wird durch einen elektromagnetischen Schalter für eine bestimmte Zeit nachts gedrückt und wieder losgelassen (Bulb-Modus). Der elektromagnetische Schalter wird durch eine vorher manuell zu programmierende Schaltuhr nachts ein- und wieder ausgeschaltet. Die Programmierung der Schaltuhr mußte einmal in der Woche manuell durchgeführt werden (für 7 Tage). Der Zeitplan für die Schaltungen wurde vom DLR an alle Stationen monatlich über e-Mail verschickt.

Meine Idee war, diese manuelle Programmierung der Schaltuhr durch eine vollautomatische Steuerung mittels Raspberry Pi und einem Relais zu ersetzen.

Realisierung

Der Pascal Compiler

Freundlicherweise hat mir Herr Dieter Heinlein vom DLR das Programm zur Berechnung der Schaltzeiten zukommen lassen.  Meine ersten Versuche, das Pascal-Programm vollständig neu in python zu implementieren schlugen fehl. Es ist einfach zu komplex. Glücklicherweise war der verwendete Pascal-Dialekt nicht zu fremdartig. Während einer Suche nach freien Pascal-Compilern fand ich dieses Paket für den Raspberry Pi: fp-compiler. Damit - und nach ein paar kleinen Änderungen im Quellcode - konnte ich das Pascalprogramm in einen Bytecode compilieren:

Free Pascal Compiler version 3.0.4+dfsg-22+rpi1 [2019/02/04] for arm
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for ARMHF
Compiling ensz015a.pas
Assembling ensz
Linking ensz015a
289 lines compiled, 1.7 sec

Als Ergebnis erhält man ein ausführbares Binary ensz015a, welches folgenden Inhalt ausgibt:

pi@raspi-io:~/ensz.temp $ ./ensz015a
V 01./02. 19:38 4:50 21: 4 3:24 0:22 7:55 21: 4 1:53 21:15 1:45
V 02./03. 19:40 4:48 21: 6 3:22 1:23 9: 0 21: 6 2:37 21:15 2:30
D 03./04. 19:41 4:46 21: 8 3:20 2: 7 10:14 21: 8 3:20 21:15 3:15
D 04./05. 19:43 4:44 21:10 3:17 2:40 11:30 21:10 3:17 21:15 3:15
D 05./06. 19:44 4:43 21:12 3:15 3: 5 12:44 21:12 3:15 21:15 3:15
N 06./07. 19:46 4:41 21:15 3:13 3:24 13:56 21:15 3:13 21:15 3:00
N 07./08. 19:48 4:39 21:17 3:10 3:40 15: 6 21:17 3:10 21:30 3:00
N 08./09. 19:49 4:38 21:19 3: 8 3:55 16:14 21:19 3: 8 21:30 3:00
N 09./10. 19:51 4:36 21:21 3: 6 4: 9 17:22 21:21 3: 6 21:30 3:00
N 10./11. 19:52 4:35 21:24 3: 4 4:24 18:29 21:24 3: 4 21:30 3:00
N 11./12. 19:54 4:33 21:26 3: 1 4:40 19:38 21:26 3: 1 21:30 3:00
N 12./13. 19:55 4:32 21:28 2:59 5: 0 20:46 21:28 2:59 21:30 2:45
N 13./14. 19:56 4:30 21:30 2:57 5:24 21:53 21:30 2:57 21:45 2:45
N 14./15. 19:58 4:29 21:32 2:55 5:54 22:55 21:32 2:55 21:45 2:45
N 15./16. 19:59 4:27 21:34 2:53 6:33 23:51 21:34 2:53 21:45 2:45
N 16./17. 20: 1 4:26 21:37 2:50 7:23 99999 21:37 2:50 21:45 2:45
D 17./18. 20: 2 4:24 21:39 2:48 8:23 0:37 23:45 2:48 0:00 2:45
D 18./19. 20: 3 4:23 21:41 2:46 9:32 1:15 21:41 0:56 21:45 0:45
D 19./20. 20: 5 4:22 21:43 2:44 10:45 1:45 21:43 0:58 21:45 0:45
D 20./21. 20: 6 4:21 21:45 2:42 12: 3 2: 8 21:45 1: 0 22:00 1:00
V 21./22. 20: 7 4:20 21:47 2:40 13:22 2:29 21:47 1: 2 22:00 1:00
V 22./23. 20: 9 4:18 21:49 2:38 14:43 2:47 21:49 1: 4 22:00 1:00
V 23./24. 20:10 4:17 21:51 2:36 16: 7 3: 5 21:51 1: 6 22:00 1:00
V 24./25. 20:11 4:16 21:53 2:35 17:35 3:24 21:53 1: 8 22:00 1:00
V 25./26. 20:13 4:15 21:55 2:33 19: 5 3:46 21:55 1:10 22:00 1:00
V 26./27. 20:14 4:14 21:57 2:31 20:34 4:13 21:57 1:12 22:00 1:00
V 27./28. 20:15 4:13 21:59 2:29 21:58 4:49 21:59 1:14 22:00 1:00
V 28./29. 20:16 4:12 22: 1 2:28 23: 9 5:38 22: 1 1:16 22:15 1:15
V 29./30. 20:17 4:12 22: 3 2:26 99999 6:40 22: 3 1:18 22:15 1:15
V 30./31. 20:18 4:11 22: 4 2:25 0: 2 7:54 22: 4 1:10 22:15 1:00
V 31./01. 20:19 4:10 22: 6 2:23 0:40 9:12 22: 6 1:39 22:15 1:30

Die Filterung der Ausgabe

die benörigten Scripte:

generate_jobs.sh

ensz.py

so sieht dann zB eine Ausgabe aus, die an den "at" übergeben werden

EIN: 17:45 2022-12-08,
AUS: 20:45 2022-12-08,
EIN: 17:45 2022-12-09,
AUS: 20:45 2022-12-09,
EIN: 17:45 2022-12-10,
AUS: 20:45 2022-12-10,
EIN: 17:45 2022-12-11,
AUS: 20:45 2022-12-11,
EIN: 17:45 2022-12-12,
AUS: 20:45 2022-12-12,
EIN: 17:45 2022-12-13,
AUS: 21:30 2022-12-13,
EIN: 17:45 2022-12-14,
AUS: 23:30 2022-12-14,
EIN: 17:45 2022-12-15,
AUS: 00:45 2022-12-16,
EIN: 17:45 2022-12-16,
AUS: 02:00 2022-12-17,
EIN: 17:45 2022-12-17,
AUS: 03:15 2022-12-18,
EIN: 17:45 2022-12-18,
AUS: 06:45 2022-12-19,
EIN: 17:45 2022-12-19,
AUS: 06:45 2022-12-20,
EIN: 17:45 2022-12-20,
AUS: 06:45 2022-12-21,
EIN: 17:45 2022-12-21,
AUS: 06:45 2022-12-22,
EIN: 17:45 2022-12-22,
AUS: 06:45 2022-12-23,
EIN: 17:45 2022-12-23,
AUS: 06:45 2022-12-24,
EIN: 17:45 2022-12-24,
AUS: 06:45 2022-12-25,
EIN: 17:45 2022-12-25,
AUS: 06:45 2022-12-26,
EIN: 17:45 2022-12-26,
AUS: 06:45 2022-12-27,
EIN: 17:45 2022-12-27,
AUS: 06:45 2022-12-28,
EIN: 17:45 2022-12-28,
AUS: 06:45 2022-12-29,
EIN: 22:45 2022-12-29,
AUS: 06:45 2022-12-30,
EIN: 00:15 2022-12-31,
AUS: 06:45 2022-12-31,
EIN: 01:30 2023-01-01,
AUS: 06:45 2023-01-01,

schalte_ein.py

schalte_aus.py

Die jobs sehen dann so aus

atq|sort
1356 Thu Dec 8 17:45:00 2022 a pi
1357 Thu Dec 8 20:45:00 2022 a pi
1358 Fri Dec 9 17:45:00 2022 a pi
1359 Fri Dec 9 20:45:00 2022 a pi
1360 Sat Dec 10 17:45:00 2022 a pi
1361 Sat Dec 10 20:45:00 2022 a pi
1362 Sun Dec 11 17:45:00 2022 a pi
1363 Sun Dec 11 20:45:00 2022 a pi
1364 Mon Dec 12 17:45:00 2022 a pi
1365 Mon Dec 12 20:45:00 2022 a pi
1366 Tue Dec 13 17:45:00 2022 a pi
1367 Tue Dec 13 21:30:00 2022 a pi
1368 Wed Dec 14 17:45:00 2022 a pi
1369 Wed Dec 14 23:30:00 2022 a pi
1370 Thu Dec 15 17:45:00 2022 a pi
1371 Fri Dec 16 00:45:00 2022 a pi
1372 Fri Dec 16 17:45:00 2022 a pi
1373 Sat Dec 17 02:00:00 2022 a pi
1374 Sat Dec 17 17:45:00 2022 a pi
1375 Sun Dec 18 03:15:00 2022 a pi
1376 Sun Dec 18 17:45:00 2022 a pi
1377 Mon Dec 19 06:45:00 2022 a pi
1378 Mon Dec 19 17:45:00 2022 a pi
1379 Tue Dec 20 06:45:00 2022 a pi
1380 Tue Dec 20 17:45:00 2022 a pi
1381 Wed Dec 21 06:45:00 2022 a pi
1382 Wed Dec 21 17:45:00 2022 a pi
1383 Thu Dec 22 06:45:00 2022 a pi
1384 Thu Dec 22 17:45:00 2022 a pi
1385 Fri Dec 23 06:45:00 2022 a pi
1386 Fri Dec 23 17:45:00 2022 a pi
1387 Sat Dec 24 06:45:00 2022 a pi
1388 Sat Dec 24 17:45:00 2022 a pi
1389 Sun Dec 25 06:45:00 2022 a pi
1390 Sun Dec 25 17:45:00 2022 a pi
1391 Mon Dec 26 06:45:00 2022 a pi
1392 Mon Dec 26 17:45:00 2022 a pi
1393 Tue Dec 27 06:45:00 2022 a pi
1394 Tue Dec 27 17:45:00 2022 a pi
1395 Wed Dec 28 06:45:00 2022 a pi
1396 Wed Dec 28 17:45:00 2022 a pi
1397 Thu Dec 29 06:45:00 2022 a pi
1398 Thu Dec 29 22:45:00 2022 a pi
1399 Fri Dec 30 06:45:00 2022 a pi
1400 Sat Dec 31 00:15:00 2022 a pi
1401 Sat Dec 31 06:45:00 2022 a pi
1402 Sun Jan 1 01:30:00 2023 a pi
1403 Sun Jan 1 06:45:00 2023 a pi

Cronjob

cronjob zum Erzeugen der Schaltzeiten, immer am 1. des Monats um 12 Minuten nach Mitternacht:

0 12 1 * * /home/pi/ensz.neu/generate_jobs.sh

Hardware

die Hardware, die wir verwendet haben:

RASP_3_BDL_DIN_NEU_01_20210420.jpg

GRV_RELAY_2CH_01.jpg

Risiken

  • Ausfall WLAN, keine Verbindung mehr zum Raspi (aber die Schaltungen werden weiterhin ausgeführt)
  • Absturz Raspi (Todo: watchdog einrichten)
  • Uhrzeit muß exakt stimmen während des Betriebs (jobs) und bei der Berechnung der Schaltzeiten

Neuen Kommentar hinzufügen

Sie können einen Kommentar abgeben, indem Sie das unten stehende Formular ausfüllen. Nur Text. Kommentare werden moderiert.