Инструкция на русском. С более удобными ссылками на компоненты
This project is inspired by this one, but improve it and extend functions
Main idea: You prepare everything in light and click only Start btn during printing
Online simulator. Note, you can use keyboard to control timer
- Click view btn to turn on/off a lamp
- Hold mode btn and turn encoder, to switch mode
- Click mode btn to navigate inside mode
- Hold encoder btn to reset current printing at any mode (inside mask mode you can fast travel between masks)
- Turn encoder in time table to scroll it
- Click start btn to start printing at any mode
- Hold view and change mode btns to go to settings
- Lamp's heatup time (Lag time)
- LED Backlight
- Beep volume
- Auto turn off lamp time in view mode
- Start with settings or not
- F Stop test mode: increae testing time in stops
- Linear test mode: simple mode for linear testing
- Print mode: ability to pause printing at any time. It's creative mode and usefull for thoughtless printing
- Mask mode: for printing with accurate masks. Click encoder btn to go to the next mask. Hold encoder btn and turn encoder to fast travel between masks. Click start btn when set mask to play melody after printing this mask -- usefull, when you don't want to forgot to do something. For example, change filter.
- Rel mask mode: the same as mask mode, but operates with relative times: you set base time and relative times (in stops) to it. Notification system is disabled. To see real time in seconds: click on encoder during run
- Split grade test modes: the same as fstop and linear test modes, but allows to set base time. After printing base, the melody is playing to not forget change filter
- Split mask and rel mask modes: the same as mask and rel mask modes, but allows to set mask for two filtres (0 and 5). Notification system is disabled.
- Localized test modes the same as fstop and linear test modes, but used to test the same region on photo. The time you see -- it's whole printing test time. 3D model of the test-strip maker
- Expert tests modes (disabled by default): include functionality of all test modes. Allows to set custom time of first exposure (preflash. Part of split-grade). Specify type of the test (localized or generic). You could use them instead of all standard modes. Only one disadvantage of this modes is a bug number of sum menues
- Ability to stop any mode, during printing. Just hold encoder button. Usefull to stop process, if you forgot something
- Ability to set lag time: lamp. It's could be usefull to get accurate results. To find it go to settings, choose minimum lag time and click start btn. Increase it till the moment of seeing that lamp is actually turn on
- Autoturn off in view mode. It could preserve lamp on your enlarger if you forgot to turn off it
- Buzzer that beep every second. Usefull to control the process, not looking at display
- Simple architecture of the project allows easily extend functionality
Note: Dashed part is power supply block. It's not a part of main body. The datailed scheme of power supply is shown lower
Note: this circuit shows only how to connect I2C adapter to arduino. Everything else is connected the same way
Note: Not forget to set
LCD_VERSIONmacro toLCD_VERSION_I2Cat UserConfig.h
My friend just create the coolest version of body for this project!!! You can find it here
Note: This is a list of items that I used during building. You could try other similar offers if they are chipper for you, but I couldn't garantee they fit.
- Encoder EC11 module
- Buttons 3 pcs
- Active Buzzer 5V
- Toggle switch SS12F15G5 2 pcs
- 5V Transformer 700mA (still don't check it properly). Also you can just disassamble any 5V USB phone adapter
- Arduino Nano ATMEGA328P/Type-C or Mini USB/WITHOUT WELDING
- Jack 6.35 (mono)
- SSR:
- If you want to use timer with any lamp (LED, halogen). You can buy any of it:
- If you don't want to use timer with low wattage lamps (LED): you can buy this popular 5V SSR. This one has leakage in turned off state, and it's enough to power on the lamp
- Red LCD 1602:
- LCD without I2C adapter. Has really good angle of view compare to next one, but harder to solder. Requires additional resistor 2.2kOm (value could be differ from mine). You could solder with own I2C adapter
- LCD with I2C adapter. Most convinient option, but not so good contrast. Need to soldure just 5 pins. You can adjust contrst on the I2C module
- Sustain pedal as footswitch (Optional). You could buy other one. It has to be normally-open or has polarity switch.
WARNING: Don't use solenoid relays. It can lead to hieroglyphs on the display and even kill Arduino
This body has not enought space to keep transformer and SSR inside. You should put in special box for electronic. You could connect it with the body using, for example, XLR.
Body extra components:
- XLR male and female -- is used to connect main part with power block
- 3mm black transparent acrilic glass -- cover display
- Power block sockets
- Rocket switcher for power block
- M2 6mm screws 10 pcs
- M3 screw and nuts also needed but you could buy it everywhere you want
- 3 wire cabel 0.75 with AC Plug (Not tested)
- 24AWG cabel 6 color set (5 meters each)
- Heat shrink tube 2 meters 4.8mm (Not tested)
- Transparent two sides tape 3mm
You can made body cheeper if
- Don't install acrilic black glass. Just dim display in settings
- Connect body to power supply directly without XLR
- Use single color filament printed with 0.4 nozzle
- Don't print text on body
- Not use our version of power supply. Just put SSR and transformer into simple electrical enclosure and connect AC socket using wire to it
If you want just upload code to your arduino without modification, then the simpliest way to do it is using of Arduino IDE
- Install Arduino IDE
- Clone this git project to any folder
- Open ino file from Arduino IDE (
File->Open...->path to .inofile) - Install dep libreries (
Tools->Manage Libraries...):- EncButton
- CRC32 (by Crystopher Baker)
- Choose your board -- Arduino Nano and processor -- ATmega328P
- Click Upload button
If you want to modify this code, then I recomment to use PlatfromIO:
# build from command line
pio run -t build
# upload to device
pio run -t uploadYou can configure the firmware by your needs. For this, you have to create a file UserConfig.h in near to 'DarkroomTimer.ino' file and define needed macroses. All possiable values and description specified in UserConfig.example.h. Example configuration:
// UserConfig.h
// Change SSR input PIN
// You need to specify it, if assamble Timer by guide of 0.5.1 version or lower
#define RELAY_PIN A4
// Change encoder direction
#define ENCODER_DT_PIN 3
#define ENCODER_CLK_PIN 2
// make encoder move faster
#define ENCODER_FAST_TIMEOUT 34
#define ENCODER_FAST_FAST_TIMEOUT 9
// Dim LCD if we not install acrylic cover
#define LCD_BACKLIGHT_STEP 2
// Make beeper quieter
#define BEEPER_VOLUME_MIN 10
// Fix beeper make a noise in turned off state
#define BEEPER_VOLUME_SILENT 0
// Switch to I2C implementation for LCD
#define LCD_VERSION LCD_VERSION_I2C
// 1. Disable local and split grade test modes and rel mask modes
// 2. Enable expert test modes
// 3. Change standard order of modes
#define TIMER_MODES \
fStopTest, \
linearTest, \
print, \
mask, \
splitGradeMask, \
expertFStopTest, \
expertLinearTest, \
last_, \
localizedFStopTest, \
localizedLinearTest, \
splitGradeFStopTest, \
splitGradeLinearTest, \
relMask, \
splitGradeRelMaskWe will try not change name of config macroses. So, you can use this file for different versions of firmware
Define this at UserConfig.h:
#define BEEPER_VOLUME_SILENT 0After 0.5.1 version default Relay pin was moved from A4 to D4 pin. You can add this line to UserConfig.h to fix it:
#define RELAY_PIN A4UserConfig.h should be created near to DarkroomTimer.ino. You can find info about configuration at UserConfig.example.h
If you have any questions, problems or suggestions, you are welcome to write us:)
Bogdan (design, 3d pringing):
tg: @bogdanbogvzyan
email: panasyukbv@yandex.ru
Petr (code, assembling):
github: create issue on github if you have any questions and suggestions
tg: @lo1ol
email: myprettycapybara@gmail.com



