Fully Featured Time Circuits Display from Back to the Future

Overview

Time Circuits Display

TCD Front

This Time Circuits Display has been meticulously reproduced to be as accurate as possible to the one seen in the Delorean Time Machine in the Back to the Future movies. The LED displays are custom made to the correct size for CircuitSetup. This includes the month 14 segment/3 character displays being closer together, and both the 7 & 14 segment displays being 0.6" high by 0.35" wide.

The Destination Time can be entered via keypad, and the Present Time can keep time via NTP. There is also a time travel mode, which moves the Destination Time to Present Time, and Present Time to Last Time Departed. The startup, keypad dial sounds, and time travel sounds are played using I2S.

To see some things in the code that could use some work, please see here.

Kits

Time Circuits Display kits can be purchased here with or without 3d printed parts.

View the instructions for assembling your CircuitSetup.us TCD Kit

Kit Parts

  • 3x Displays in (Red, Green, Yellow)
  • Gels for displays (Red, Green, Yellow)
  • Mounting hardware (37x screws for display enclosure to outer enclosure, display PCB to enclosures, speaker mount, keypad mount, 4x small screws for keypad PCB to bezel mount)
  • Connection wiring (3x 4p JST-XH for display I2C, 1 7p JST-XH for keypad)
  • ESP32 powered control board
  • ESP32 dev board (not programmed - must be flashed with Platformio or Arduino IDF with software here)
  • TRW style number keypad (must be disassembled to use number keys, pcb and rubber backing)
  • Square LED lenses (2x white, 1x red/amber/green)
  • RTC battery
  • Small 4ohm 3W speaker
  • Display time label stickers

Display Features

  • 1x 3 character 14 segment display
  • 10x 1 character 7 segment displays
  • I2C interface:
    • Red (Destination Time) is 0x71
    • Green (Present Time) is 0x72
    • Yellow (Last Time Departed) is 0x74
  • Color:
    • Red 630nm
    • Green 570nm
    • Yellow 587nm
  • Measurements: 8.5" x 1.45" (210.82 x 36.83mm)
  • Hole Spacing (same as LMB aluminum boxes):  3.75" x 1.28" - 6 total

Control Board Features

  • Measurements: 4.53" x 4.12" (115.18 x 104.62mm)
  • Real Time Clock
  • Ability to get time from NTP (via ESP32 wifi)
  • Class D Mono Audio Amplifier - 4ohm
  • Manual volume control
  • SD card slot (sd card not included)
  • 2 additional GPIO outputs (13 & 14)
  • 1 SPI output
  • On board power supply which can take input from 6-20V DC
  • ESD filtering to prevent interference Can be powered by ESP32 micro USB port

Control board pinout

  • I2C:
    • SCL - 22
    • SDA - 21
  • SD Card (SPI):
    • CS - 5
    • MOSI - 23
    • MISO - 19
    • SCK - 19
  • Real Time Clock DS3231M (I2C addr: 0x68):
    • SQW - 15 (used to blink LEDs every second)
  • Keypad PCF8574T (I2C addr: 0x20):
    • INT - 4 (can be used as an interrupt, but is not currently)
  • Mono sound output I2S / MAX98357
    • DIN - 33
    • BCLK - 26
    • LRCLK - 25
  • Other:
    • Keypad White LED - 17
    • Keypad Enter Button - 16
    • Volume - 32
    • Status LED - 2 (nodeMCU)

More to come!

Comments
  • unable to load sounds via SD and web portal or save settings in web portal for v2

    unable to load sounds via SD and web portal or save settings in web portal for v2

    the device either does not recognize the SD card or the web portal is not recognizing the content. Unable to load sounds via the enter key command instructed either. unable to save settings in the web portal. *upon clicking save, nothing changes.

    opened by thecolor 69
  • Allow music to be played from sd card

    Allow music to be played from sd card

    • Add a settings menu option to play sounds/music from the SD card if mp3 files are detected.
    • Set a sound to play if a GPIO is pulled high. 13 and 14 have headers on the control board.
    enhancement help wanted 
    opened by CircuitSetup 5
  • Time Travel: Make PresentTime a real clock

    Time Travel: Make PresentTime a real clock

    By using a "fake" year, it is pretty straight forward to use presentTime as a normal clock:

    In tc_time.cpp, replace timeTravel with the following:

    /* Time Travel: User enters a destination time.
     *  
     *  -) copy present time into departed time (where it freezes)
     *  -) copy destination time  to present time (where it continues to run as a clock)
     *
     *  This is called from tc_keypad.cpp 
     */
    
    void timeTravel() {
        int tyr = 0;
        int tyroffs = 0;
            
        timetravelNow = millis();
        timeTraveled = true;
        beepOn = false;
        play_file("/timetravel.mp3", getVolume());
        allOff();
    
        // Copy present time to last time departed
        departedTime.setMonth(presentTime.getMonth());
        departedTime.setDay(presentTime.getDay());
        departedTime.setYear(presentTime.getYear());
        departedTime.setHour(presentTime.getHour());
        departedTime.setMinute(presentTime.getMinute());
        departedTime.save();
    
        // Copy destination time to present time
        // DateTime does not work before 2000 or after 2159
        // so we use yearOffs to fake a year with identical calendar within 2000-2159
        // RTC keeps running on 2000-2159, but display is skewed by yearOffs
        // upper limit 2150 to avoid overflow while clock running
    
        tyr = destinationTime.getYear();
        if (tyr < 2000) {
            while(tyr < 2000) {
                tyr += 28;
                tyroffs += 28;
            }
        } else if(tyr > 2150) {
            while(tyr > 2150) {
                tyr -= 28;
                tyroffs -= 28;
            }
        }
        
        if (!presentTime.isRTC()) presentTime.setRTC(true);
        
        presentTime.setYearOffset(tyroffs);
        
        rtc.adjust(DateTime(
                tyr,
                destinationTime.getMonth(),
                destinationTime.getDay(),
                destinationTime.getHour(),
                destinationTime.getMinute()
                )
        );
    
        Serial.println("timeTravel: Success, good luck!");
    }
    

    In clockdisplay.cpp:

    void clockDisplay::setYear(uint16_t yearNum) {
        // Place LED pattern in year position in buffer, which is 4 and 5.
        _year = yearNum;
        yearNum -= _yearoffset;
        _displayBuffer[4] = makeNum(yearNum / 100);
        _displayBuffer[5] = makeNum(yearNum % 100);
    }
    
    void clockDisplay::setYearDirect(uint16_t yearNum) {
        // Place LED pattern in year position directly, which is 4 and 5.
        // useful for setting the year to the present time
        _year = yearNum;
        yearNum -= _yearoffset;
        directCol(4, makeNum(yearNum / 100));
        directCol(5, makeNum(yearNum % 100));
    }
    
    void clockDisplay::setYearOffset(int16_t yearOffs) {
        _yearoffset = yearOffs;
    }
    

    In clockdisplay.h add the marked lines:

        void setYear(uint16_t yearNum);
        void setYearOffset(int16_t yearOffs); // <----
        void setYearDirect(uint16_t yearNum);
    
    [...]
    
        uint16_t _displayBuffer[8];  // Segments to make current time.
    
        uint16_t _year = 2021;     // keep track of these
        int16_t  _yearoffset = 0;  // Offset for faking years < 2000 or > 2159 <----
        
        uint8_t _month = 1;
    

    I possibly omitted other definitions/declarations needed, but these are straight forward.

    The RTC is loaded with a year with an identical calendar (as apparently happens every 28 years), and the year displayed is faked by _yearoffset.

    opened by realA10001986 4
  • Fix settings in web interface

    Fix settings in web interface

    Currently the web interface has fields for:

    • Beep Sound
    • NTP Time Server
    • Brightness per display

    Currently these are placeholders and do not affect anything. They need to be tied into the actual variables that control these parameters. Web interface variables are defined in tc_wifi.cpp

    help wanted 
    opened by CircuitSetup 4
  • Cannot Compile 'clockdisplay.h'

    Cannot Compile 'clockdisplay.h'

    I keep getting the following error when I try to compile the sketch and program the board. I can see the file in ...software/src/timecircuits and its open in a tab in IDE but for some reason it keeps fizzing out on me.... Any help please?? :-) Thanks!

    tc_wifi.h:23:26: fatal error: clockdisplay.h: No such file or directory compilation terminated. exit status 1 clockdisplay.h: No such file or directory

    opened by Ricky3Nut 3
  • Print Instructions for Keypad Body

    Print Instructions for Keypad Body

    New user so apologies if this is not the right area...

    But can you please explain what you mean in the README instructions for the keypad_body where you say "...with top perpendicular to bed."? By the rest of the instructions I assume you mean to print key side up (back of body laying flat on the bed) so the front exposed surface can be ironed. But you also say 'iron top surface' so I assume you mean the side facing out with the keys vs the top of the body (which is attached to the bottom of the display enclosure). So if that is correct, then the top of the body is perperpendicular to the bed while the face is parallel, correct??? Its just that it seems the word "top" is used twice referring to 2 different surfaces and that is what is confusing me.

    Sorry if that seems obvious and I am over-thinking it but it just got me a little confused.

    Thanks!

    opened by Ricky3Nut 3
  • V2 - Lots of new functionality & bug fixes thanks to Thomas Winischhofer (A10001986)

    V2 - Lots of new functionality & bug fixes thanks to Thomas Winischhofer (A10001986)

    Update to v2 of software. Includes a lot of new features and bug fixes, including:

    New Functionality:

    • Added alarm functionality (enable by holding down "1", disable by holding "2")
    • 24 hour mode added
    • New Keypad menu for adjusting various settings
    • Configurable WiFi connection timeouts and retries
    • Return from Time Travel (hold "9" for 2 seconds)
    • Support for time zones and automatic DST
    • "present time" now functions as a clock (not stale) after time travel
    • Added incorrect date sound
    • Selectable "persistent" time travel mode (any changed dates are stored in memory upon reset, otherwise they will rotate preset times from the movie, and display the real time on reset)
    • Added night mode (enable by holding "4", disable by holding "5")
    • An SD card can now be inserted so custom sounds are played
    • Added ability to trigger a time travel event (pull io14 low)
    • Added "fake power on" and off facility (TCD will boot, setup WiFi, sync time with NTP, but not start displays until an active-low button is pressed connected to io13)
    • Show "BATT" during booting if RTC battery is depleted and needs to be changed
    • Sounds cleaned up, volume normalized, and updated

    Bug fixes:

    • More stable sound playback
    • Fix for flakey i2c connection to RTC (check data and retry)
    • Fix "animation" (ie. month displayed a tad delayed)
    • Integrate a modified Keypad_I2C into the project in order to fix the "ghost" key presses
    • After a time travel, entering a new date now works correctly
    opened by CircuitSetup 2
  • Month is possibly off by one when stored to the RTC

    Month is possibly off by one when stored to the RTC

    If I am not mistaken, the hardware RTC expects the month in the range from 1 to 12, not 0 to 11. TimeInfo, however, uses 0-11, so month needs to incremented before storing in getNTPTime().

    Consequently, in clockDisplay::setMonth, the decrement of monthNum must be done regardless of isRTC.

    opened by realA10001986 2
  • Add alarm clock functionality

    Add alarm clock functionality

    Just some ideas:

    • Set time from web interface or from settings menu
    • Can be turned on or off by holding down a button on the keypad
    • Sound from sd card can be chosen to play as the alarm via web interface
    • Alarm can be turned off by pressing any button on the keypad
    enhancement help wanted 
    opened by CircuitSetup 1
  • Add display flicker when time traveling

    Add display flicker when time traveling

    In order to add some additional effect to the time traveling:

    • Turn random displays on and off and random rates
    • Dim random displays at random amounts
    • Scramble different displays at random
    • Combo of all 3, where a display can turn off, come back on at a dim level, all segments turn on, then back into a number, etc.
    • Turn enter button led on and off at random
    enhancement help wanted 
    opened by CircuitSetup 1
  • Pressing enter in settings menu mode goes to next settings item

    Pressing enter in settings menu mode goes to next settings item

    Currently only the present time is updated via the settings menu. Hitting enter after the min field should go to the next display, then other mis settings, then SAVE Need to fix/add:

    • last time departed
    • brightness per display
    • Add beep on/off (the tone that sounds in sync with the second leds)
    • Add wifi on/off (to get NTP time)
    help wanted 
    opened by CircuitSetup 1
  • Add beep sound to sync with seconds led blink

    Add beep sound to sync with seconds led blink

    With the audio mixer library being used, there is a way to play 2 sounds at once, but it currently does not work. It may be necessary to not play the beep sound when a keypad tone or time travel sound is played. So...

    • the beep sound only plays if other sounds are not played, and the beep option is turned on
    • the beep sound should be played softer than other sounds as to not be totally annoying
    enhancement help wanted 
    opened by CircuitSetup 1
Releases(v2.5)
  • v2.5(Dec 7, 2022)

    This release contains a number of bug fixes and support for new features, again, thanks to Thomas Winischhofer @realA10001986:

    Changes Since v2.0

    (notable changes bolded) v2.5

    • Add support for BMx820 sensor in speedo (temperature only).
    • Modify former "light sensor" keypad menu to not only show measured lux level from a light sensor, but also current ambient temperature as measured by a connected temperature sensor. Rename menu to "Sensors" accordingly.
    • Add temperature offset value. User can program an offset that will be added to the measured temperature for compensating sensor inaccuracies or suboptimal sensor placement. In order to calibrate the offset, use the keypad menu "SENSORS" since the temperature shown there is not rounded (unlike what is shown on a speedo display if it has less than three digits).

    v2.4

    • Added Extended Sound on the Hour: User can now put "hour-xx.mp3" files for each hour on the SD card (hour-00.mp3, hour-01.mp3, ..., hour-23.mp3). If one of the files is missing, "hour.mp3" will be played (if it exists on the SD card)
    • Added support for a light sensor to automatically switch TCD to night mode
    • Soft-reset the clock by entering 64738 and ENTER
    • Minor optimizations for Wifi
    • Fixed bug with Destination Time not coming back on after a time travel event

    v2.3

    • Added auto night-mode presets
    • Support for speedo GPS, and getting time/speed
    • Re-order Config Portal options
    • Add short-cut to set alarm by typing 11hhmm+ENTER (weekday selection must still be done through keypad menu)
    • Change default time zone to UTC;
    • Change default "time travel persistence" to off to avoid flash wear
    • Add weekday selection for alarm
    • Enhancements to DST logic
    • Add option to disable time travel sounds (in order to have other props play theirs. This is only useful in connection with compatible props, triggered by IO14.)
    • Allow time travel to (non-existing) year 0, so users can simulate the movie error (Dec 25, 0000).
    • Remove dependency on OneButton and Keypad libraries - integrated and optimized code

    v2.2

    • Added support for MTK3333 based GPS receivers connected through i2c. These can act as a source of authoritative time (just like NTP), as well as for calculating current speed, to be displayed on a speedo display.
    • Implemented completely native time system, handling NTP/GPS, time zones and DST calculation all by itself. This allows using this firmware with correct clocking until the year 9999 (at which point it rolls over to 1), with NTP support until around 2150. Also, DST is now automatically switched in stand-alone mode (ie without NTP or GPS).
    • Defer starting the Config Portal so that async WiFi scans don't disrupt our initial NTP request

    v2.1:

    • Added support for triggering time travel on external props like a flux capacitor, and SID (now IO14)
    • Added support for upcoming Time Machine Speedo, complete with time travel, GPS & temp sensor functionality - if connected, the speedo will go up to 88mph, then the time travel sequence will trigger on the TCD. If the speedo reaches 88 via GPS, it will trigger a time travel sequence.
    • Added option to re-format SD card
    • Added feature to disable WiFi to save power
    • Added CPU power save feature
    • Added sound when volume is set in the menu
    • Reworked keypad and enter key debouncing
    • Removed dependency on RTCLib, and added a native slimmed down version
    • Changing the brightness in the menu no longer saves immediately afterwards
    • Fixed a bug with leap years

    Full Changelog: https://github.com/CircuitSetup/Time-Circuits-Display/compare/v2.0...v2.5

    Source code(tar.gz)
    Source code(zip)
    v2.5.0_tcd_firmware_12-2-22.bin(1.17 MB)
  • v2.0(Sep 5, 2022)

    This release contains lots of new functionality & bug fixes thanks to Thomas Winischhofer @realA10001986 !

    Instructions for updating from v1.0 are located here.

    New Functionality:

    • Added alarm functionality (enable by holding down "1", disable by holding "2") (#7)
    • Support for time zones and automatic DST
    • 24 hour mode added
    • New Keypad menu for adjusting various settings (#1 #2)
    • Configurable WiFi connection timeouts and retries
    • Return from Time Travel (hold "9" for 2 seconds)
    • "Present Time" now functions as a clock (not stale) after time travel (#15)
    • Selectable "persistent" time travel mode (any changed dates are stored in memory upon reset, otherwise they will rotate preset times from the movie, and display the real time on reset)
    • Added night mode (enable by holding "4", disable by holding "5")
    • Added "auto night mode" to automatically turn night mode on/off based on Present Time's time
    • Added ability to trigger an external time travel event on another prop (io27 pulled low)
    • Added ability to trigger a time travel event from another prop (pull io14 low)
    • Added "fake power on" and off facility (TCD will boot, setup WiFi, sync time with NTP, but not start displays until an active-low button is pressed connected to io13)
    • Added ability to set a static IP
    • Show "BATT" during booting if RTC battery is depleted and needs to be changed
    • Display connection status and IP address in display settings menu
    • Time travel sequence now longer and includes display "noise" (#5)
    • Added intro with sound as the displays show "Back to the Future", and option to turn on/off
    • Added incorrect date sound
    • Added alarm sound, and on and off sounds
    • Added fake power off sound
    • Sounds cleaned up, volume normalized, and updated
    • Sound file "hour.mp3" is played hourly on the hour, if the file exists on the SD card
    • Holding "3" or "6" plays sound files "key3.mp3"/"key6.mp3" if these files exist on the SD card (#4)
    • Added mechanism to copy sound files to the control board mcu from an SD card
    • Better volume control - ability to specify volume via software or hardware
    • An SD card can now be inserted so custom sounds are played
    • Added easter eggs

    Bug fixes:

    • More stable sound playback
    • Fix for flakey i2c connection to RTC (check data and retry)
    • Fix "animation" (ie. month displayed a tad delayed)
    • Integrate a modified Keypad_I2C into the project in order to fix the "ghost" key presses
    • After a time travel, entering a new date now works correctly (#9)
    • Month off by one when stored to the RTC (#14)
    • Now uses new LittleFS instead of deprecated SPIFFS for storing config and sound files
    • Fix added to v2.0 for upgrading issues related to (#17)
    Source code(tar.gz)
    Source code(zip)
    v2.0.0_tcd_firmware_9-7-22.bin(1.17 MB)
  • v1.0(Jan 4, 2022)

    Major release that fixes the settings in the web interface, including:

    • NTP Server to get time from
    • GMT Offset (time zone)
    • Daylight savings time offset
    • Set auto time rotation off or on at 5, 15, 30, or 60 min intervals
    • Brightness per display

    Other fixes:

    • Years after 2159 are now properly time traveled to
    • M character fixed to look like the TCD as seen in a behind the scenes shot that shows a May month
    • Added build flags for A Car 2 digit month displays & GTE keypad control board
    Source code(tar.gz)
    Source code(zip)
    tcd_firmware_v1.0.bin(1020.67 KB)
This is the Arduino® compatible port of the AIfES machine learning framework, developed and maintained by Fraunhofer Institute for Microelectronic Circuits and Systems.

AIfES for Arduino® AIfES (Artificial Intelligence for Embedded Systems) is a platform-independent and standalone AI software framework optimized for e

null 166 Jan 4, 2023
Had a tough time playing Microsoft Wordament ? Well WORDament_Solver has your back. It suggests you meaningful words you can use while playing the game and help you top the leaderboard.

WORDament_Solver Had a tough time playing Microsoft Wordament ? Well WORDament_Solver has your back. It suggests you meaningful words you can use whil

Tushar Agarwal 3 Aug 19, 2021
Display array is a board that sets 6 ST7735 display with a resolution of 80x160px in a linear array sharing the clock, data, rs, backlight pins together

The display array is a board that sets 6 ST7735 display with a resolution of 80x160px in a linear array sharing the clock, data, rs, backlight pins together, and leaving individual access to the cs lines of each display, This board allows you to display images with a resolution of 480x160px.

Josue Alejandro Gutierrez 70 Dec 19, 2022
CQC (Charmed Quark Controller) a commercial grade, full featured, software based automation system. CQC is built on our CIDLib C++ development system, which is also available here on GitHub.

The CQC Automation System What It Is CQC is a commercial quality, software based automation system, suitable for residential or commercial application

Dean Roddey 61 Dec 13, 2022
PoC: Rebuild A New Path Back to the Heaven's Gate (HITB 2021)

wowGrail Rebuild a new to Abuse the conversion layer embedded in WOW64(Windows 32 on Windows 64), that makes malware able to launch 32-bit NTAPI inter

Sheng-Hao Ma 91 Dec 11, 2022
This was the first ever Computer Science project that I made back in Class XII (2016). I thought I should upload it on GitHub so that it does not get lost. :)

First Ever Project This was the first ever Computer Science project that I made back in Class XII (2016). I thought I should upload it on github so th

Kshitiz Srivastava 3 Jun 7, 2021
Not a big fan of git. May create a nicer repo in the future.

os My x86-64 hobby operating system. Cooperative multitasking system with no user-mode support, everything runs on ring 0 (for now). Packed with a rea

tiagoporsch 13 Sep 9, 2022
Emulation of classic VA synths of the late 90s/2000s that featured the Motorola 56300 family DSP

Gearmulator Emulation of classic VA synths of the late 90s/2000s that used the Motorola 56300 family DSP This project aims at emulating various musica

null 167 Jan 5, 2023
This project aims to bring back a productive working environment on Windows 11

This project aims to bring back a productive working environment on Windows 11

Valentin-Gabriel Radu 10.4k Dec 30, 2022
Cobalt Strike is a commercial, full-featured, remote access tool that bills itself as "adversary simulation software designed to execute targeted attacks and emulate the post-exploitation actions of advanced threat actors".

COBALT STRIKE 4.4 Cobalt Strike is a commercial, full-featured, remote access tool that bills itself as "adversary simulation software designed to exe

Trewis [work] Scotch 104 Aug 21, 2022
A repository that includes common helper functions for writing applications in the DPDK. I will be using this for my future projects in the DPDK.

The DPDK Common (WIP) Description This project includes helpful functions and global variables for developing applications using the DPDK. I am using

Christian Deacon 19 Dec 27, 2022
Future-proof NvENC & NvFBC patcher (Linux/Windows)

nvlax Future-proof NvENC & NvFBC patcher Requirements Working internet connection during configuration (i.e cloning does NOT include dependencies) CMa

Illyan Garte 117 Dec 28, 2022
A tiny but (will be) featured rasterizer

Introduction This is my own rasterizer implementation. Developed in C++17. Usage compile ./rasterizer [model], model names plz refer to this README Ro

Hyiker 8 Aug 22, 2022
VEX v5 Pro program that records driver movements and plays them back during the autonomous period.

Autonomous Recorder This code was written for team 5588R, but it can be easily modified to work with your team's robot. Notes Code isn't fully finishe

brett 2 Jun 21, 2022
CredBandit - Proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process and send that back through your already existing Beacon communication channel

CredBandit CredBandit is a proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process a

anthemtotheego 188 Dec 25, 2022
Text - A spicy text library for C++ that has the explicit goal of enabling the entire ecosystem to share in proper forward progress towards a bright Unicode future.

ztd.text Because if text works well in two of the most popular systems programming languages, the entire world over can start to benefit properly. Thi

Shepherd's Oasis 228 Dec 25, 2022
pluggable tool to convert an unrolled TritonAST to LLVM-IR, optimize it and get back to TritonAST

it is fork from https://github.com/fvrmatteo/TritonASTLLVMIRTranslator *WARNINGS: tested only linux(ubuntu 20.04) and only llvm and clang version 10*

pr4gasm 5 Jun 10, 2022
Masters degree research project source code. Might come back to it later.

Camflow Network Provenance Authors Tray Keller and Austin Waddell CamFlow and the Linux Provenance Module (LPM) framework are both an excellent step i

Tray Keller 2 Mar 14, 2022
bl_mcu_sdk is MCU software development kit provided by Bouffalo Lab Team for BL602/BL604, BL702/BL704/BL706 and other series of RISC-V based chips in the future.

bl mcu sdk is an MCU software development kit provided by the Bouffalo Lab Team for BL602/BL604, BL702/BL704/BL706 and other series of chips in the future

Bouffalo Lab 165 Dec 23, 2022