Climbing Wall Timer

Okay, heres the scoop.

I want to build a digital timer for a climbing wall. The idea is that the moment the climber lifts off the pressure pad the timer starts, it stops when they wack a button at the top of the wall. The time is displayed live on a 7 segment display showing up to a tenth of a second. I want to make the display out of WS2812B strip with each of the segments being 3 pixels wide.

I've been sat here, with very minimal knowledge as it is, trying to figure this out for the last 4 hours... I'm lost!

Could anyone help me?

Thank you :slight_smile:

Could anyone help me?

With what? You have not told us what you are having problems with!

Lmao my bad..I basically have no idea where to start! Any guide to what I need to look into would be great. Any guides, videos etc etc...

alan1180:
Lmao my bad..I basically have no idea where to start! Any guide to what I need to look into would be great. Any guides, videos etc etc...

Arduino links of interest.

How to use this forum:
https://forum.arduino.cc/index.php?topic=149014.0

Getting started:

Listing of downloadable 'Arduino PDFs' :
Either Google >>>- - - - > arduino filetype: pdf
Or
https://www.google.ca/search?q=arduino+filetype%3A+pdf&rlz=1C9BKJA_enCA739CA739&oq=arduino+filetype%3A+pdf&aqs=chrome..69i57j69i65.1385j0j7&hl=en-US&sourceid=chrome-mobile&ie=UTF-8

Listing of downloadable 'C++ PDFs' :
Either Google >>>- - - - > C++ filetype: pdf
Or
https://www.google.ca/search?q=c%2B%2B+filetype%3A+pdf&rlz=1C9BKJA_enCA739CA739&oq=c%2B%2B+filetype%3A+pdf&aqs=chrome..69i57.22790j0j7&hl=en-US&sourceid=chrome-mobile&ie=UTF-8

Arduino cheat sheet:

Watch these:
Arduino programming syntax:

Arduino arithmetic operators:

Arduino control flow:

Arduino data types:

Understanding Destructive LC Voltage Spikes:

OR

Why MOSFET gate resistors:

Some things to read

LCD information:

OR

Reading a schematic:
https://learn.sparkfun.com/tutorials/how-to-read-a-schematic

Language Reference:
https://www.arduino.cc/en/Reference/HomePage

Foundations:

How and Why to avoid delay():
http://playground.arduino.cc/Code/AvoidDelay

Demonstration code for several things at the same time.
http://forum.arduino.cc/index.php?topic=223286.0

Multitasking:
Part 1:

Part 2:

Part 3:

Sparkfun Tutorials:
https://learn.sparkfun.com/tutorials?page=all

Micro Controllers:

Useful links:

Arduino programming traps, tips and style guide:
http://www.gammon.com.au/forum/?id=12153

Arduino programming course:
https://startingelectronics.org/software/arduino/learn-to-program-course/

Jeremy Blume:

Arduino products:
https://www.arduino.cc/en/Main/Products

Motors/MOSFETs
http://www.gammon.com.au/motors

Making a library
https://www.arduino.cc/en/Hacking/libraryTutorial

Switches:
http://www.gammon.com.au/forum/?id=11955

Share tips you have come across, 700+ posts:

Debug discussion:

Frequently Asked Questions:
https://www.arduino.cc/en/main/FAQ#toc10

Number 'type's.

  • boolean (8 bit) - simple logical true/false, Arduino does not use single bits for bool
  • byte (8 bit) - unsigned number from 0 to 255
  • char (8 bit) - signed number from -128 to 127. The compiler will attempt to interpret this data type as a character in some circumstances, which may yield unexpected results
  • unsigned char (8 bit) - same as 'byte'; if this is what you're after, you should use 'byte' instead, for reasons of clarity
  • word (16 bit) - unsigned number from 0 to 65535
  • unsigned int (16 bit)- the same as 'word'. Use 'word' instead for clarity and brevity
  • int (16 bit) - signed number from -32768 to 32767. This is most commonly what you see used for general purpose variables in Arduino example code provided with the IDE
  • unsigned long (32 bit) - unsigned number from 0 to 4,294,967,295. The most common usage of this is to store the result of the millis() function, which returns the number of milliseconds the current code has been running
  • long (32 bit) - signed number from -2,147,483,648 to 2,147,483,647
    float (32 bit) - signed number from -3.4028235E38 to 3.4028235E38. Floating point on the Arduino is not native; the compiler has to jump through hoops to make it work. If you can avoid it, you should. We'll touch on this later. Sparkfun.

You select the 'type' best suited for your variables.

ex:

  • your variable does not change and it defines a pin on the Arduino. const byte limitSwitchPin = 34;
  • since an analog variable can be 0 to 1023, a byte will not do, you can select 'int'. int temperature;
  • if your variable needs to be within -64 to +64 a 'char' will do nicely. char joystick;
  • if your variable is used for ASCII then you need type 'char', char myText = {"Raspberry Pie Smells"};
  • if your variable enables some code then boolean can be used. boolean enableFlag = false;
  • millis() returns the time in ms since rebooting, unsigned long currentTime = millis();
    etc.

start with a couple switches and the free exampes in the IDE.

then watch youtube videos and search for the LEDs you chose.

between the two, you will have enough to get started.

As they say so often, start at the beginning.

The basis of what you need cto do can be done with a simple Arduino UNO and a couple of switches.

One switch to start a timer running the other to stop it, no need to worry about 7 segment displays at this point, just print the results to the serial monitor.

Agreed, start with the buttons, and make the timer part work. Print to the Serial monitor first, then when you have that working you can use the output and start driving your display instead.

For the 7-segment part (assuming you don't want to use those LEDs for additional fancy light effects) I'd be using a set of regular 12V LED strips. One strip (or series of strips) per segment. Drive those through a MOSFET and 74HC595 port extender - one 595 and 7 MOSFETs per digit..

It sounds like you want to make the display pretty big. Note that an Arduino can control no more than a couple hundred WS2812B LEDs, and it takes time to write that many of them, possibly enough to upset your 100 ms intervals. You will also run into power supply issues with that many LEDs.

Hi Alan.

Wireless connection between the switches and the Arduino would be neat.

John.

If the switches were wired into the Arduino they don’t have to be two independent switches. They could both be connected to the same input pin on the Arduino. Stepping off the pressure plate would open the circuit, hitting the button at the top of the wall would close the circuit.

They could be connected to an Arduino with Bluetooth which would connect to a phone or tablet.

A tablet could also do the job of displaying the time.

each of the segments being 3 pixels wide.

Did you mean "long"?

Assuming you did, you might find ws2811 strips a little cheaper than ws2812. They are generally 12V rather than 5V, and you can only cut the strip after each group of 3 leds, but that won't be a problem in your case.

I would recommend ws2811/2 over regular led strips, shift registers and mosfets, to keep the circuit simple.

Some "don'ts": Don't buy an Uno or Mega. So many beginners make that mistake. Just get a Nano, and use the saving to buy a larger breadboard. Don't get a starter kit, they are full of junk. Don't get dupont cables, they are unreliable. Use solid-core wire, you can buy packs with a metre each of a few different colours.

Wireless doorbells.

Very cheap.