A project to increase awareness of the climate emergency.
When no action is done, the seven segment displays will show the temperature of major cities now with the global average temperature. When the 'pre-industrial era' button is pressed, the board will display temperatures of major cities around the world during that time. When the 'Year 2100' button is pressed, the board will display temperature rises of all the cities based on credible data. The aim is for users that interacted with the display to quickly acknowledge the seriousness of the situation and encourages them to act. Such actions can be taken straight away by learning more about climate emergency through the QR code readily provided. The QR code links to -> this website
The main powerpoint file is -> Contextual Challenge 2020-2021 Kahngjoon Koh.pptx
Any other files in this repository are resources that I have used during the iterative design process.
The final design has been documented here. For more details check the powerpoint.
Designed with SketchUp
-> Final Design
-> Exploded View
Designed with 2D Design
-> src
- Birch-veneered plywood (4 x 440 x 440mm)
- Birch-veneered plywood (4 x 250 x 440mm)
- Oak x2 (40 x 30 x 660mm)
- Oak x 2 (40 x 30 x 460mm)
- MDF (4 x 420 x 620mm)
- 6V 1A AC/DC power supplier
- Arduino or Arduino Uno
- Sn74hc595 Shift Register x 10
- DIP 16 socket x 10
- CD4514 Demultiplexer x 6
- DIP 24 socket x 6
- Seven Segment Displays x 24 (50.3 x 19 x 8mm with a 0.56 inch digit size; Red; common cathode; 10561k)
- Seven Segment Displays x 1 (71.6 x 25.8 x 7.4mm with a 0.8 inch digit size; Red; common cathode; 10561k)
- Push Buttons x 2
- 2N2222A Transistors x 100
- 100Ω, 200Ω, 1kΩ Resistors
- Acrylic (5 x 400 x 600mm)
- Epoxy Resin and hardener
- PVA glue
- Mounting brackets x 2
- Screws x 8
- Water-based varnish (matt)
Designed with KiCad
-> src
Code for Arduino -> main.ino
The Arudino has a pin limit. However, there are 25 seven segments displays that require signals. Instead of sending signals to all of the displays simultaneously, 6 displays will be displayed at a time. The time between frames was made short using
#define portOfPin(P) (((P)>=0&&(P)<8)?&PORTD:(((P)>7&&(P)<14)?&PORTB:&PORTC))
#define ddrOfPin(P) (((P)>=0&&(P)<8)?&DDRD:(((P)>7&&(P)<14)?&DDRB:&DDRC))
#define pinOfPin(P) (((P)>=0&&(P)<8)?&PIND:(((P)>7&&(P)<14)?&PINB:&PINC))
#define pinIndex(P)((uint8_t)(P>13?P-14:P&7))
#define pinMask(P)((uint8_t)(1<0)
This sped up digitalRead
by 60 times and digitalWrite
by 28 times. (Credit)