Iterative Design
Iterations
Iteration 1 - Proof of concept - Dispense coins on command
- ✅ Restore the Master programmer I accidentally burned
- ✅ Mill it
- ✅ Solder it
- ✅ Program it
- ✅ Program SAMD11D14AS board
- ✅ Controlling Servos
- ✅ Find how to program it
- ✅ via programmer
- ✅ via USB
- ✅ Find how to make it set pins to HIGH LOW
- ✅ Find which pins support PWM
- ✅ Find how to use PWM to control Servo using D11D (which does not support the Servo Library)
- ✅ Find how to program it
- ✅ Receiving Inputs from UI
- ✅ Receive commands from SerialUSB (computer serial monitor, in iteration 1)
- ✅ Acting on UI commands
- ✅ connect incoming Serial commands to outgoing Servo Movements
- ✅ Controlling Servos
- ✅ 3D print Coin holders
- ✅ 10 cents
- ✅ 20 cents
- ✅ 50 cents
- ✅ 1 eur
- ✅ 2 eur
Iteration 2 - Add more basic functionality and start packaging it nicely
- ✅ Arduino
- ✅ Create simple web Java app for the RaspberryPi
- ✅ Make RaspberryPi send Serial commands to board
- ✅ Add Screen to RaspberryPi
- ✅ Display website on RaspberryPi Touchscreen
- [ ] System integration and packaging
- ✅ Design simple box that contains all of the components
- ✅ It can hold the coin acceptor
- ✅ It can hold the touchscreen, in the correct orientation
- ✅ The coins that fall from the coin acceptor are direct down the coin selector ramp
- ✅ There is a coin selector ramp with the right coin sizes
- [ ] And it works properly and consistently
- ✅ There is a coin ejection ramp that collects coins as they are ejected
- ✅ The ejection ramp deposits coins outside of the case
- [ ] There is a coin collection tray outside of the case to receive the coins as they are ejected
- ✅ Design simple box that contains all of the components
- ✅ Coin acceptor
- ✅ Program it so it recognises and allows pass-through for all supported coins:
- ✅ 10c (code 1)
- ✅ 20c (code 2)
- ✅ 50c (code 3)
- ✅ 1eur (code 4)
- ✅ 2eur (code 5)
- ✅ reject all other coins (default behaviour for unknown coins)
- ✅ Program it so it recognises and allows pass-through for all supported coins:
- [ ] Coin acquisition funnel
- ✅ Prototype a coin extension funnel that reaches up to the coin selector ramp and does not allow coins to fall outside
- [ ] Each of the coin cylinders has an extension funnel
- [ ] Bonus, it also provides larger holding capacity to each of the cylinders
- ✅ Prototype a coin extension funnel that reaches up to the coin selector ramp and does not allow coins to fall outside
- [ ] Coin Ejection Funnel
- [ ] 3D print the ejected collector funnel (lower ramp)
- [ ] Expand electronics:
- ✅ Create a secondary board to connect all the servos together
- ✅ Design the board
- ✅ Mill it, solder it
- ✅ Create a secondary board to connect all the servos together
- ✅ Program SAMD11D14AS
- ✅ To control all 5 Servos concurrently
- ✅ To parse commands for each of them
- ✅ Wire PWM servos
- ✅ System Integration
- ✅ Prototype a case to contain all the moving parts
- ✅ Security is not a concern (the touchscreen alone is probably more valuable than the coins inside the machine!)
- ✅ Design
- ✅ Cut it
- ✅ Assemble it
- ✅ Reinforce it
- ✅ Wire AC power to feed all the components
- ✅ Cable management
- ✅ Touchscreen to Arduino
- ✅ Arduino to Board
- ✅ Board to Servo Driver
- ✅ Servo Driver board to 5 Servos
- ✅ Power to Arduino and Touchscreen
- ✅ Power to board and Servos
- ✅ Package and integrate the 2 boards into the case so they dont flail around
- ✅ Embed coin acceptor into the side of the case
- ✅ Prototype a case to contain all the moving parts
Iteration 3 - Detect and sort incoming coins
- [ ] Program D11D14AS board
- [ ] Find how to receive SERIAL from Coin Acceptor
- [ ] Wire Coin commands to stateful mode
- [ ] Persistence
- [ ] Store coin state (number of coins for each denomination) in EEPROM so it survives power loss
- [ ] Find how to receive SERIAL from Coin Acceptor
- [ ] Have a mechanism to detect coins
- [ ] Have the board report coin status (a count for each type of coin) via serial
- [ ] Have the website display this count
- [ ] PULL information: Have the UI frequently check coin status (once per minute) to update the display
- [ ] Bonus - PUSH information: Have the board notify the UI whenever a new coin is inserted (instead of polling)
- [ ] Have the UI smartly control the coin distribution and autonomously decide how the change will be given if there are low/no coins of one type (eg. give 1 eur as 1x1 eur coin, or as 2x50 cent, or as 5x20 cents, etc…)