diff --git a/EyeTrainerLayout.diy b/EyeTrainerLayout.diy new file mode 100644 index 0000000..6dba283 --- /dev/null +++ b/EyeTrainerLayout.diy @@ -0,0 +1,2559 @@ + + + + 4 + 37 + 0 + + New Project + airac + + + + 1 + + + Board1 + 127 + + + + + + + + + + + Numbers + Bottom_Left + One_Side + Letters + + + TwoPoints + + + + + J1 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J2 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J3 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J4 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J5 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J6 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J7 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J8 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J9 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J10 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J11 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J12 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J13 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J14 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J15 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J16 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J17 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J18 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J19 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J20 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J21 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J22 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J23 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J24 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J25 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J26 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J27 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J28 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J29 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J30 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J31 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J32 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J33 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J34 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J35 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J36 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J37 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J38 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J39 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J40 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J41 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J42 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J43 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J44 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J45 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J46 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J47 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J48 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J49 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J50 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J51 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J52 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + J53 + 127 + + + + + + + + + + NAME + false + Directional + false + false + + + + 74HC595 + 127 + + DEFAULT + _16 + + + + + + + + + + + + + + + + + + + + + BOTH + + + + + NO + + + 74HC595 + 127 + + DEFAULT + _16 + + + + + + + + + + + + + + + + + + + + + BOTH + + + + + NO + + + Arduino Nano + 127 + + DEFAULT + _30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BOTH + + + + + NO + + + Arduino Nano + 127 + + DEFAULT + _30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BOTH + + + + + NO + + + R1 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R2 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R3 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R4 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R5 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R6 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R7 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R8 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R9 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R10 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R11 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R12 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R13 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R14 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R15 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R16 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + DisplayRect + 127 + + + + + + + + + + + + + + Display + 127 + + DEFAULT + _8 + + + + + + + + + + + + + BOTH + + + + + NO + + + SW1 + 127 + + _90 + + + + + + + BOTH + + + + + + R10kOhm + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + SW2 + 127 + + _90 + + + + + + + BOTH + + + + + + SW3 + 127 + + _90 + + + + + + + BOTH + + + + + + R17 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + R18 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + HALF + _5_BAND + Standard + + + D1 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D2 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D3 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D4 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D5 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D6 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D7 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D8 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D9 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D10 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D11 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D12 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D13 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D14 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D15 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + D16 + 127 + + + + + + + + + + + + NAME + false + Directional + false + false + + + + Arduino D3 to 74HC595 DS (Data Pin) + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + 74HC595 Q7* to 74HC595 DS (Data Pin) + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino GND to 74HC595 OE + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino GND to 74HC595 OE + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino GND to 74HC595 GND + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino GND to 74HC595 GND + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 To 74HC595 VCC + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 To 74HC595 VCC + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 to 74HC595 MR + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 to 74HC595 MR + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D4 to 74HC595 SH_CP (Clock Pin) + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D4 to 74HC595 SH_CP (Clock Pin) + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D5 to 74HC595 ST_CP (Latch Pin) + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + W1 + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D6 to LED Ground PWMed + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino GND to Display GND + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 to Display V5 + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D7 to Display DIO + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D8 to Display Clock + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D9 to Button 1 + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D10 to Button 2 + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino D11 to Button 3 + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 to Button 1 Vcc + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 to Button 2 Vcc + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino V5 to Button 3 Vcc + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + Arduino GND to Button PullDownResistor + 127 + + + + + + + + FOUR + + true + -1 + _22 + false + + + + + + + + + \ No newline at end of file diff --git a/GeneralViewBreadBoard.jpg b/GeneralViewBreadBoard.jpg new file mode 100644 index 0000000..25a7e91 Binary files /dev/null and b/GeneralViewBreadBoard.jpg differ diff --git a/LogDistanceCalc.ipynb b/LogDistanceCalc.ipynb new file mode 100644 index 0000000..cae324b --- /dev/null +++ b/LogDistanceCalc.ipynb @@ -0,0 +1,91 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[12.5, 14.3, 16.4, 19.0, 22.1, 25.8, 30.3, 35.7, 42.1, 49.9, 59.3, 70.6, 84.2, 100.5, 120.1, 143.8]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvZklEQVR4nO3dfXSU9Z3//9ckDAnQ3DjpN8ykJpq1VgihCGLSiN3VkoSgjVKpHmpAVj2ypUHF9CjSChhEKaxVCtJQerr2cCDW9qxQw2kjKbiga0ggKa4RirCbopXc/DQlA+QkjjPX7w+akTEBCVwzc+XK83GOba/PdeUz7/cZDK9eN5/LYRiGIQAAAAuJiXYBAAAAn0dAAQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAljMs2gVcjEAgoOPHjyshIUEOhyPa5QAAgAtgGIZOnjyptLQ0xcSc/xzJoAwox48fV3p6erTLAAAAF+GDDz7Q5Zdfft5jBmVASUhIkHSmwcTERFPn9vl82rFjhwoLC+V0Ok2d24ro197o197o197s2K/X61V6enrw7/HzGZQBpfeyTmJiYlgCysiRI5WYmGibPxDnQ7/2Rr/2Rr/2Zud+L+T2DG6SBQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAlkNAAQAAljMoF2oDAADh4Q8Yqm/uUPvJbqUmxCsn06XYmMi/946AAgAAJEnVTS0qrzqols7u4JgnKV7LirNUlO2JaC1c4gEAAKpuatH8zY0h4USSWju7NX9zo6qbWiJaDwEFAIAhzh8wVF51UEY/+3rHyqsOyh/o74jwIKAAADDE1Td39DlzcjZDUktnt+qbOyJWEwEFAIAhrv3kucPJxRxnBgIKAABDXGpCvKnHmYGAAgDAEJeT6ZInKV7nepjYoTNP8+RkuiJWEwEFAIAhLjbGoWXFWZLUJ6T0bi8rzoroeigEFAAAoKJsjypmT5I7KfQyjjspXhWzJ0V8HRQWagMAAJLOhJSCLLclVpId8BmUPXv2qLi4WGlpaXI4HNq2bds5j/3+978vh8OhNWvWhIx3dHSopKREiYmJSk5O1v33369Tp04NtBQAAGCy2BiH8q5K0e3XfkV5V6VEJZxIFxFQTp8+rQkTJmj9+vXnPW7r1q3au3ev0tLS+uwrKSnRu+++q5qaGm3fvl179uzRvHnzBloKAACwqQFf4pk+fbqmT59+3mM+/PBDPfjgg3rttdd06623huw7dOiQqqurtW/fPk2ePFmStG7dOt1yyy169tln+w00AABgaDH9HpRAIKA5c+bo0Ucf1bhx4/rsr62tVXJycjCcSFJ+fr5iYmJUV1en73znO31+pqenRz09PcFtr9crSfL5fPL5fKbW3zuf2fNaFf3aG/3aG/3amx37HUgvpgeUVatWadiwYXrooYf63d/a2qrU1NTQIoYNk8vlUmtra78/s3LlSpWXl/cZ37Fjh0aOHHnpRfejpqYmLPNaFf3aG/3aG/3am5367erquuBjTQ0oDQ0N+tnPfqbGxkY5HObdVLN48WKVlZUFt71er9LT01VYWKjExETTPkc6k+5qampUUFAgp9Np6txWRL/2Rr/2Rr/2Zsd+e6+AXAhTA8obb7yh9vZ2ZWRkBMf8fr9++MMfas2aNfrrX/8qt9ut9vb2kJ/79NNP1dHRIbfb3e+8cXFxiouL6zPudDrD9qWFc24rol97o197o197s1O/A+nD1IAyZ84c5efnh4xNmzZNc+bM0b333itJysvL04kTJ9TQ0KDrrrtOkrRr1y4FAgHl5uaaWQ4AABikBhxQTp06paNHjwa3m5ubdeDAAblcLmVkZCglJSXkeKfTKbfbrWuuuUaSNHbsWBUVFemBBx7Qhg0b5PP5tGDBAs2aNYsneAAAgKSLWAdl//79mjhxoiZOnChJKisr08SJE7V06dILnmPLli0aM2aMpk6dqltuuUU33nijNm7cONBSAACATQ34DMpNN90kwzAu+Pi//vWvfcZcLpcqKysH+tEAAGCI4GWBAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAABYjD9gqK65Qw0fOVTX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n", + "# xs = [0, 1, 2, 3, 4]\n", + "\n", + "ys = []\n", + "current_y = 0\n", + "max_x = float(max(xs))\n", + "base = 16.0\n", + "length = 1.40\n", + "start_offset = 0.125\n", + "for x in xs:\n", + " current_y = base**(x/max_x) / base * length\n", + " ys.append(current_y)\n", + "\n", + "offset = start_offset - ys[0]\n", + "for i in range(0, len(ys)):\n", + " ys[i] += offset\n", + " ys[i] *= 1000\n", + " ys[i] = round(ys[i])\n", + " ys[i] /= 10\n", + "\n", + "plt.plot(xs, ys,'o')\n", + "plt.grid()\n", + "print(ys)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "my_python_env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..390237f --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +# Eye Trainer + +## Description + +This is a simple eye trainer which is supposed to reduce muscle stress after focusing on same distance for a long time. The constraction is long stick (1.0-1.5m) with LEDs placed along. LEDs turn on with choosen order after selected switch time is passed. Display helps to control the device. + +## Controls + +**Buttons:** + +1. Main +2. Up +3. Down + +## Usage + +Device starts in "run" mode. but inactive. Click "Up" button to start with default settings. Click "Down" button to pause. Click "Main" button to switch displayed info. On other screens than "run" press "Up" or "Down" buttons to change settings. + +On "Test" screen any button except "Main" will trigger test sequence to check display and LEDs. + +## Device Settings + +**LEDS order modes (rnod):** + +1. Forward (FrWd) +2. Backward (bAC-) +3. Ping-Pong (PInG) +4. Random (rnd) (default) + +**Brightness (brgh):** + +Number from 25 to 255. + +**Switch Time (time):** + +Number between 25 and 1500 measured in milliseconds x10, i.e. 25 means 250 ms and 1500 means 15000 ms (15 seconds). +Default value 300 (3 seconds). + +**Time mode (tmod):** + +1. Constant (CnSt) +2. Manusl (nAnL) +3. Decremental (dECr) (not implemented) + +## Components Used +1. Arduino Nano (ATMega328PB) x1 +2. ShiftRegister 74HC595N x2 +3. LED x16 +4. Resistor 220Ohm x16 +5. Resistor 10kOhm x3 +6. Segment Display TM1637 x1 +7. Tact Button x3 +8. Solderless breadboards x3 +9. Wires (a lot) + +## Connection Scheme + +To be added. Hints are in file EyeTrainerLayout.diy (can be opened with DIY Layout Creator). + +### Text description + +**Arduino's BreadBoard:** + +1. Contains Arduino Nano, TM1637 Display, 3 tact buttons with 10kOhm resistors, connectors +2. Pins D7, D8 controlls display (see Defines.h) +3. Pins D9, D10, D11 receives buttons signals (see Defines.h) +4. Pins D3, D4, D5 controlls shift registers (see Defines.h) +5. Ping 6 controlls brightness of LEDs (see Defines.h) +6. D6, D3, D4, D5, GND and 5V pins are passed to ShiftRegisters' BreadBoard + +**ShiftRegisters' BreadBoard:** + +1. Contains two 74HC595N shift registers, x16 220Ohm resistors and connectors +2. Pins Q0..Q7 of both shift registers are used to controll LEDs. +3. Two 74HC595N are connected sequentially. Latch, Data and Clock connections to Arduino board are defined in Defines.h + +**IMPORTANT: Arduino's pins are different in EyeTrainer project!** + +![Shift registers sequential connection](ShiftRegisterSequentialConnection.png) + +Source: https://blog.timodenk.com/shift-register-arduino-library/ + +## General View + +![GeneralView image](GeneralViewBreadBoard.jpg) + +## Notes + +Python script (LogDistanceCalc.ipynb, Jupyter Notebook) can be used to define distances between LEDs on stick. + +## Known Problems + +1. Sometimes buttons click are not registered or skipped. + +## Possible Improvements + +1. Lighten small printed and high contrast images with white LEDs. Probably it would be easier and healthier to focus eyes on, than watching LEDs directly. diff --git a/ShiftRegisterSequentialConnection.png b/ShiftRegisterSequentialConnection.png new file mode 100644 index 0000000..69d7ba2 Binary files /dev/null and b/ShiftRegisterSequentialConnection.png differ