Note also 36 exposure film. ------------------ Film ------------------------- Speed: 100 ISO Rewound into cartridge: False Exposed frames: 0 (of 24) Ruined: False
On Sun, Mar 7, 2021 at 5:20 AM D.M. Procida < real-not-anti-spam-addr...@apple-juice.co.uk> wrote: > Hi everyone, I've created <https://github.com/evildmp/C-is-for-Camera> - > a representation of a Canonet G-III QL17 in Python. > > There's also documentation: <https://c-is-for-camera.readthedocs.io>. > > It's a pure Python model of the physical sub-systems of a camera and > their interactions. So far it's at a fairly high level - I haven't yet > got down to the level of individual springs and levers yet. > > I spend quite a bit of my time repairing old cameras. To me they feel > like computer programs encoded into physical objects, and figuring out > how a mechanism works feels like working out how code works (but more > fun). > > The Canonet G-III QL17 is one of my favourites. One of my reasons for > writing this code is to appreciate the intricate mechanical logic > embodied in the machine. > > You can do things like advance the film, release the shutter, meter the > scene with the built-in light meter (if the camera has a battery of > course) and even spoil your film if you make the mistake of opening the > back in daylight. > > >>> from camera import Camera > >>> c = Camera() > > >>> c.state() > ================== Camera state ================= > > ------------------ Controls --------------------- > Selected speed: 1/120 > > ------------------ Mechanical ------------------- > Back closed: True > Lens cap on: False > Film advance mechanism: False > Frame counter: 0 > Shutter cocked: False > Shutter timer: 1/128 seconds > Iris aperture: ƒ/16 > Camera exposure settings: 15.0 EV > > ------------------ Metering --------------------- > Light meter reading: 4096 cd/m^2 > Exposure target: 15.0 EV > Mode: Shutter priority > Battery: 1.44 V > Film speed: 100 ISO > > ------------------ Film ------------------------- > Speed: 100 ISO > Rewound into cartridge: False > Exposed frames: 0 (of 24) > Ruined: False > > ------------------ Environment ------------------ > Scene luminosity: 4096 cd/m^2 > > >>> c.film_advance_mechanism.advance() > Cocking shutter > Cocked > > >>> c.shutter.trip() > Shutter opens > Shutter closes > Shutter opened for 1/128 seconds > Shutter uncocked > > You can't do impossible things: > > >>> c.shutter_speed = 1/33 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/Users/daniele/Repositories/camera/camera.py", line 29, in > shutter_speed > raise self.NonExistentShutterSpeed(f"Possible shutter speeds are > {possible_settings}") > camera.NonExistentShutterSpeed: Possible shutter speeds are 1/4, > 1/8, 1/15, 1/30, 1/60, 1/120, 1/240, 1/500 > > But you can also do things that you shouldn't do, like opening the back > of the camera in daylight with a partially-exposed roll of film inside - > which will spoil the film:: > > >>> c.back.open() > Opening back > Resetting frame counter to 0 > 'Film is ruined' > > I hope this interesting to someone. > > Daniele > -- > https://mail.python.org/mailman/listinfo/python-list > -- +1-202-507-9867, Twitter @lcongdon -- https://mail.python.org/mailman/listinfo/python-list