{"id":28558819,"url":"https://github.com/samcfuchs/darkroom","last_synced_at":"2025-07-02T19:34:36.859Z","repository":{"id":295141180,"uuid":"989247558","full_name":"Samcfuchs/darkroom","owner":"Samcfuchs","description":"An embedded program for RP2040 to operate a relay at precise intervals specified by physical inputs","archived":false,"fork":false,"pushed_at":"2025-05-30T18:14:08.000Z","size":321,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-10T08:42:33.310Z","etag":null,"topics":["photography"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Samcfuchs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-23T18:34:00.000Z","updated_at":"2025-05-30T18:14:11.000Z","dependencies_parsed_at":"2025-06-10T08:48:33.457Z","dependency_job_id":null,"html_url":"https://github.com/Samcfuchs/darkroom","commit_stats":null,"previous_names":["samcfuchs/darkroom"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Samcfuchs/darkroom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2Fdarkroom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2Fdarkroom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2Fdarkroom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2Fdarkroom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Samcfuchs","download_url":"https://codeload.github.com/Samcfuchs/darkroom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2Fdarkroom/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263204109,"owners_count":23430162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["photography"],"created_at":"2025-06-10T08:35:30.503Z","updated_at":"2025-07-02T19:34:36.850Z","avatar_url":"https://github.com/Samcfuchs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Darkroom Timer\n\nWhen connected to a potentiometer, standard LCD display, and three buttons to an\nRP2040 chip, this embedded program runs a program to operate an enlarger (or,\npractically, any powered relay) at precise intervals.\n\n![](fritzing.png)\n\n## Instructions\n\nA time is displayed in the upper left. Pressing blue will add that time to the\nsequence. Pressing red will remove the longest time from the sequence. Pressing\nblack will move into exposure mode. While in exposure mode, the display is not\nbacklit, so it is safe to take out your paper.\n\nIn exposure mode, the remaining exposure time is displayed in the upper left.\nPressing blue will start the next exposure step, which will stop automatically when it\nreaches the next exposure interval.\n\nWhen the total exposure time has elapsed, the device will go into a waiting mode\nwhile you develop the image. Pressing blue and red simultaneously will reset to\nthe first step, turning on the display backlight.\n\n## Parts\n\n- [I2C 1602 display backpack](https://www.alibaba.com/product-detail/Iicdisplay-Modulelcd-Creen-Module-1-Piece_1601433261587.html?mark=google_shopping\u0026seo=1\u0026gQT=2)\n: Converts the standard 16-pin LCD interface to an I2C output that can be\ncontrolled by [pico_i2c_lcd.py](./pico_i2c_lcd.py).\n- [16x2 LCD display](https://www.alibaba.com/product-detail/LCD1602-Rohs-module-screen-16x2-Character_1600441231800.html?spm=a2700.galleryofferlist.normal_offer.d_price.50c413a0l1LCfv) \n: A commodity part--anything will do.\n- Momentary push-buttons (3)\n- Potentiometer (knob recommended)\n- [Outlet relay](https://www.adafruit.com/product/2935?gQT=1): For toggling\n  power according to 5V output. It really seems like there should be more of\n  these out there, but this one works great. I can't recommend an \n  [AC output SSR](https://www.sensata.com/products/relays/solid-state-relays)\n  because I'm not too interested in wiring mains myself.\n\n## Next Steps\n\nThis isn't a final product. Here are some improvements I'd like to make in the\nnext iteration on the idea:\n\n### Designed Enclosure\n\nIt's currently housed in a cardboard box, which is a little silly. I'd have to\n3D print an enclosure with mounting points for 3 buttons, 1 potentiometer, and\nthe 2x16 display. It should have terminals for the relay outputs, and an opening\nfor the Pico's micro-usb port. I'll probably design this in two parts, a top and\na bottom piece. Soldering the bits together and fitting them into a compact case\ncould be difficult. I'll probably design something in Fusion360, FreeCAD, or\nSolidWorks.\n\n### Improved Buttons\n\nI've already noticed problems with the arcade-style pushbuttons I'm using. They\nuse limit switches, and one already has intermittent signal issues. They're also\nvery high profile, which would increase size constraints.\n\n### Relay Interface\n\nI expect to continue to use a wire-pair style relay output, but I'd like to\ndivorce the wires from the design. Some kind of terminal block with a quick\nattach and detach mechanism would make the device itself a lot cleaner. I could\nsimply mimic the terminal design on the outlet relay.\n\n### Development Timing\n\nAfter exposures finish, we do another timed task--developing and fixing the\nprint. The timer could easily provide input to this task also. I'd add this to\nthe software, and add an audio output--a buzzer would be very simple to\nimplement, but voice synthesis would make the UX clearer and perhaps would not\nbe too hard to include.\n\n### Safelight Compatibility\n\nI'd like to test the display output's light for paper compatibility. I can get a\nred display, which might be usable in the dark, or use safelight filter paper to\ncover the display. Ilford has information on safelight compatibility \n[here](https://www.ilfordphoto.com/amfile/file/download/file/605/product/613/).\n\n### Integration\n\nIt would be nice to eliminate the chunky relay power strip that switches the\nenlarger and is the most expensive part of the system. This would probably\nrequire wiring some outlets for mains power, which is probably out of scope.\n\n### Remote control\n\nWhat if I could control this with RF signals? That would be pretty neat. \n[This guy](https://hblok.net/blog/posts/2012/09/02/home-automation-on-433-92-mhz-with-arduino/)\ndid some home automation with RF signals.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamcfuchs%2Fdarkroom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamcfuchs%2Fdarkroom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamcfuchs%2Fdarkroom/lists"}