When you add a sensor to the bot, the notebook entry has a specific shape: which sensor, why, install, test, results.
flowchart TD
Start([Decided to add a sensor]) --> Why[Document WHY:
what problem does it solve?
which question does it answer?]
Why --> Pick[Pick sensor type:
use sensors-roadmap flowchart]
Pick --> Install[Document INSTALL:
port number, mounting,
wire color/length]
Install --> Code[Document CODE:
declaration in main.cpp
helper function if any]
Code --> Test[Document TEST:
what value range observed
at what physical position?]
Test --> Threshold[Document THRESHOLD:
chosen value + why
e.g. 200 = our cones detect]
Threshold --> Done([Sensor entry complete])
style Start fill:#1e293b,stroke:#22d3ee,stroke-width:2px,color:#e2e8f0
style Done fill:#1e293b,stroke:#22c55e,stroke-width:2px,color:#e2e8f0
The standard engineering notebook template (covered in Notebook Template guide) handles general design entries well, but sensor work has rhythms that don't fit cleanly:
The five templates in this guide are designed to be reused across the season. Pick the right one for the work you did, fill it in, paste sensor data, photo of the mount.
| Build Entry | You mounted a sensor. What part, where, why, with what hardware, and what does it look like? — Section 02. |
| Calibration Entry | You measured live values from a sensor and built a lookup. Hue ranges, pot angles, GPS reference points. — Section 03. |
| Programming Entry | You wrote or revised code that uses a sensor. Pseudocode (NOT actual code per EN4), test results, integration with chassis library. — Section 04. |
| Debug Entry | A sensor wasn't working. You traced the cause. Symptom, hypotheses, tests, root cause, fix. — Section 05. |
| Tournament Log | What sensor performance looked like at a real event. Venue conditions, recalibrations needed, failures observed. — Section 06. |
Question: what problem does this sensor solve that we couldn't solve without it?
Your answer: ___________________________________________________________________
_______________________________________________________________________________
List at least two other ways the team could have solved the same problem, and why you picked this sensor over them:
Where on the robot is it mounted? Why this location?
Location description: ___________________________________________________________
Reason for this location: _______________________________________________________
Photo / Sketch (paste below):
| Part | Part # | Quantity | Purpose |
|---|---|---|---|
| __________ | __________ | __ | __________________ |
| __________ | __________ | __ | __________________ |
| __________ | __________ | __ | __________________ |
Brief sequence of how the team mounted it. Bullet points are fine. Include any improvisation:
Did the sensor return live data when first powered on? What did the V5 Brain screen show?
Result: ______________________________________________________________________
If it didn't work first time, what did you change? ____________________________________
The next step for this sensor is: __________________________________________________
(Likely: a calibration entry, see Section 03.)
What are we trying to learn?
_______________________________________________________________________________
_______________________________________________________________________________
How were values collected? (e.g., "Held each ring 5cm from sensor face, recorded value from V5 Brain screen, repeated 3 times per ring.")
_______________________________________________________________________________
| Trial / Position / Object | Value 1 | Value 2 | Value 3 | Average |
|---|---|---|---|---|
| _______________________ | ______ | ______ | ______ | ______ |
| _______________________ | ______ | ______ | ______ | ______ |
| _______________________ | ______ | ______ | ______ | ______ |
| _______________________ | ______ | ______ | ______ | ______ |
| _______________________ | ______ | ______ | ______ | ______ |
From the measurements above, the team will use these constants in code:
| Constant Name | Value | Used In |
|---|---|---|
| _______________________ | ______ | __________________ |
| _______________________ | ______ | __________________ |
| _______________________ | ______ | __________________ |
How consistent were the measurements? Did any outlier values show up?
_______________________________________________________________________________
When will we need to re-do this calibration?
Anything surprising? Anything we'd do differently next time?
_______________________________________________________________________________
This shows roughly what a filled-in version might look like. The student writes the actual content; this is illustrative only.
The team mounted the Optical Sensor inside the intake throat to detect ring colors. They held a red ring at the sensor face three times, recording hue (~5°), saturation (~0.85), proximity (~225). Repeated for blue rings (~230° hue). Built a hue range table: red rings = 350–15°, blue rings = 215–245°. Saturation gate of > 0.3 used to reject grayscale readings. Proximity gate > 200 used to reject distant objects.
Re-calibration triggers: any new venue, any time the LED PWM is changed.
What is this code supposed to do? Describe the outcome, not the implementation.
_______________________________________________________________________________
_______________________________________________________________________________
How does the code achieve the goal? (Natural language description, no source code.)
_______________________________________________________________________________
_______________________________________________________________________________
Step-by-step logic in plain language. Example structure:
Your pseudocode here:
If this code interacts with the chassis library (EZ-Template / LemLib), describe the composition pattern:
Brief description: _____________________________________________________________
What did you test, and how?
| Test Case | Expected Result | Actual Result | Pass / Fail |
|---|---|---|---|
| _______________________ | __________ | __________ | ______ |
| _______________________ | __________ | __________ | ______ |
| _______________________ | __________ | __________ | ______ |
What worked, what didn't, what's next?
_______________________________________________________________________________
_______________________________________________________________________________
RECF EN4 specifically prohibits AI-generated programming code in engineering notebooks. The intent of the rule is to ensure students understand and can explain their code, not just paste it. Pseudocode forces you to articulate the logic in your own words — which is what judges want to see anyway.
The actual C++ implementation lives in your Git repository, with a commit hash referenced from the notebook entry. Judges can ask to see the repo if they want; they typically don't.
What was wrong? Be specific. "Doesn't work" is not a symptom; "Pot reads 0 constantly even when arm moves" is.
_______________________________________________________________________________
_______________________________________________________________________________
Was this a new failure, or had we seen it before? What changed since it last worked?
_______________________________________________________________________________
What could cause this symptom? List at least three:
| # | Hypothesis | How to test |
|---|---|---|
| 1 | _______________________ | _______________________ |
| 2 | _______________________ | _______________________ |
| 3 | _______________________ | _______________________ |
| Hypothesis | Test | Result | Conclusion |
|---|---|---|---|
| ____ | __________ | __________ | __________ |
| ____ | __________ | __________ | __________ |
| ____ | __________ | __________ | __________ |
What was actually causing the symptom?
_______________________________________________________________________________
What did you change to fix it?
_______________________________________________________________________________
Verification that fix worked: _____________________________________________________
How do we prevent this from happening again?
Most engineering work is debugging, but most teams don't notebook it. Debug entries hit several rubric criteria simultaneously:
Even small debugging episodes (5 minutes, simple cause) deserve an entry if they were memorable. They show judges your team thinks systematically, not by trial and error.
| Sensor | What changed | Old value | New value |
|---|---|---|---|
| __________ | __________ | __________ | __________ |
| __________ | __________ | __________ | __________ |
| Match # | Auton selected | Sensor performance | Issues observed |
|---|---|---|---|
| ____ | __________ | __________ | __________ |
| ____ | __________ | __________ | __________ |
| ____ | __________ | __________ | __________ |
| ____ | __________ | __________ | __________ |
| ____ | __________ | __________ | __________ |
(For each failure: link to a Debug Entry if substantial; brief inline note if quick.)
_______________________________________________________________________________
_______________________________________________________________________________
What will we do differently? What new failure modes did we discover?
_______________________________________________________________________________
_______________________________________________________________________________
The EN4 rule (Engineering Notebook Authentic Work) requires that the content of the engineering notebook be the team's own work. Specifically prohibited: AI-generated text, AI-generated code, copy-pasted content from third-party sources without attribution.
| These templates ARE | Question prompts. Section headings. Field labels. Suggested table structures. The same as a printed lab notebook with section dividers. |
| These templates are NOT | Pre-written content. Filled-in answers. Anything the team can paste verbatim and submit as their own. |
Using a template for structure is the same as using a graph paper notebook with pre-printed grid lines. The grid is provided; the data and analysis are yours.
arm_to_angle() function" without pasting the function body.If your team referenced an external resource (a VEX KB article, the PROS docs, a competitor's reveal video), cite it. Examples:
pros::adi::DigitalIn::get_value() returns 1 when released."Citations strengthen your notebook by showing you researched. They're EN4-compliant because you're acknowledging the source.
Here are 12 entries that any V5RC team using sensors might write across a season. These aren't mandatory; they're just realistic data points:
Each one is 1–2 notebook pages. Across the season, that's ~20 pages of high-quality, sensor-specific evidence in your notebook — substantial enough to influence judging awards.