{"id":17816460,"url":"https://github.com/zebrajaeger/panohead-ng","last_synced_at":"2025-07-11T20:32:36.066Z","repository":{"id":97329103,"uuid":"242318283","full_name":"zebrajaeger/panohead-ng","owner":"zebrajaeger","description":null,"archived":false,"fork":false,"pushed_at":"2020-04-19T15:11:58.000Z","size":701,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-02T08:31:17.779Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zebrajaeger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-22T10:00:02.000Z","updated_at":"2020-04-19T15:12:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"f7c02778-8d0a-4882-9afe-62d5f57e0717","html_url":"https://github.com/zebrajaeger/panohead-ng","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zebrajaeger/panohead-ng","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fpanohead-ng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fpanohead-ng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fpanohead-ng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fpanohead-ng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zebrajaeger","download_url":"https://codeload.github.com/zebrajaeger/panohead-ng/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zebrajaeger%2Fpanohead-ng/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264892720,"owners_count":23679348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-27T16:38:12.261Z","updated_at":"2025-07-11T20:32:36.044Z","avatar_url":"https://github.com/zebrajaeger.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# panohead-ng\n\nMotorized panoramic head based on\n\n## Current prototype setup\n\n- [ESP32 WROOM](https://www.espressif.com/en/products/hardware/esp-wroom-32/overview) (dual core) as controller.\n- [TMC429](https://www.trinamic.com/fileadmin/assets/Products/ICs_Documents/TMC429_datasheet.pdf) (ramp generator) for smooth and software independent realtime movement of the stepper motors.\n  - ESP works as clock source.\n- [TMC2208](https://shop.watterott.com/SilentStepStick-TMC2208_1) (stepper driver) modules.\n  - Low noises.\n  - Low power cause of coolstep.\n  - Available as 3D printer compatible module.\n- [Stepper 11HS12-0674D1-PG27](https://www.omc-stepperonline.com/download/11HS12-0674D1-PG27.pdf) (NEMA 11, ~27:1 gearbox, 0.67A, 5.6ohms).\n- Additional GT2 belt gear 1:5 to increase torque and reduce backlash.\n- Optocouplers for Focus/Trigger.\n- [ADS1115](http://www.ti.com/lit/ds/symlink/ads1115.pdf) (I²C 4-channel ADC) for joystick, ~~battery voltage and current.~~ This will do INA219.\n- ~~Joystick read via [ESP32 ADC](https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/).~~ ESP32 ADC is horrible bad, extremely noisy (up to +-10% of value!!) and ist even to bad for a joystick. The real resolution with capacitors and filtered supply voltage are 5..6Bits.\n- [INA219](http://www.ti.com/lit/ds/symlink/ina219.pdf) (I²C current and voltage sensor, 12Bit resolution) for battery voltage and current.\n- OLED Display (I²C) for menu and status.\n  - 128x64 Pixel\n- Rotary encoder with knob for menu.\n- Analog console joystick for jogging.\n- Some status LED's for focus, trigger, ...\n- [MPU9255](https://stanford.edu/class/ee267/misc/MPU-9255-Datasheet.pdf) (I²C; 3-Axis gyroscope, 3-Axis accelerometer,3-Axis magnetometer) for motion sensing.\n- [PlatformIO](https://platformio.org/) / Arduino for software.\n- Maybe [Angular](https://angular.io/) (10+ with ivy) and websockets on JSON base for remote interfacing.\n\n![Prototype](doc/IMG_20200315_144253_537-1600.jpg \"Prototype\")\n\n## Power supply\n\n- Battery from [4 - 12.6]V (4-8 NiMH or 2-3 LiPo in series).\n  - Single NiMH cell [1 - 1.5]V.\n  - Single LiPo cell [2.5 - 4.2]V.\n- 2 x Step-Up (to ~12V) module based on [MT3608](https://prom-electric.ru/media/MT3608.pdf) to power stepper driver.\n- Step Down (to ~3.3V) module based on [MP2315](https://www.monolithicpower.com/en/documentview/productdocument/index/version/2/document_type/Datasheet/lang/en/sku/MP2315/document_id/513/) to power logic.\n\n## Multible Modules\n\n### Stepper Module (one for every axis)\n\nClose to the stepper Motor.\n\nConnections to main module: GND, V_bat, !EN_V_m, !EN_stepper, Step, Dir, Uart\n\n- TMC2208 Driver.\n- Step up MT3608 Module for TMC2208 V_m.\n- Linear 3.3V AMS1117-3.3 for TMC2208 V_io connected to V_m or V_bat.\n- Big capcitor for V_bat.\n\n### Camera Module\n\nClose to the camera as possible for short trigger cable and good movement detection.\n\nConnections to main module: GND, V_33, DSA, SCL, Focus, Trigger\n\n- I²C Movement detection: MPU9255.\n- Focus/Trigger Plug: 3,5mm stereo earphone plug.\n- Optocouplers to keep cam save: with transistor output and low leakage current.\n\n### Development Module\n\nConnections to main module: GND, V_33, !EN, !RESET, TX, RX\n\n- CH340 USB to serial converter.\n- !EN/!RESET logic (2 transistors and capacitor on !EN).\n- 3.3V Step down V_usb to V_33: MP2315 based module.\n- USB-Connector\n- Programming connector.\n\n### Main Module\n\nConnection to stepper module X, stepper module Y, cam module, battery\n\n- Power.\n  - I²C Current/Voltage/Power meter: INA219.\n  - Step down V_bat to V_33: MP2315 based module.\n  - Voltage Supervisor: see TODO section.\n- Controller.\n  - ESP32 dual core 240MHz, 16Mbit flash (WROOM module).\n    - Programming connector.\n    - [JTAG connector].\n    - 'Reset' and 'Program' Button.\n  - SPI Stepper controller: TMC429.\n  - [SDCard].\n- UI.\n  - I²C OLED Display 128x64.\n  - I²C IO Expander: PCF8574.\n    - LED Power.\n    - LED Jogging.\n    - LED Focus and Camera module 'Focus'.\n    - LED Trigger and Camera module 'Trigger'.\n  - A/B Rotary encoder with switch.\n  - XY-analog Joystick.\n    - Voltage referenz 2,5V: TL431.\n    - I²C A/D: ADS1115.\n\n## TODO Bugs\n\n- After a while joystick stops working.\n- pano bounds menu ignores diesabled borders.\n\n## TODO Features\n\n- Schematic\n- ~~[print out heapt statistics](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/heap_debug.html#heap-information)~~\n- ~~Improve voltage supply for joystick. TL431 + Resistor and Capacitor for 2.5V joystick voltage.~~\n- ~~Change SPI pins due to firmware flash error~~\n- ~~Sliding menu.~~\n- Voltage supervisor for defined Reset\n  - First try: ~~TL7702ACP~~ Does not work. Needs higher supply voltage (~5V) to work properly and detect undervoltage.\n  - Next canidate: MAX809S / IMP809S (JLPCB 33k)\n    - To evaluate: MIC1832, DS1832, MAX803T, MAX803S, MAX803R, AIC809N-26PU, AIC809N-29PU\n    - To check:  , TPS3823, TPS383x, APX803, CAT823STDI-GT3, CN61CN33, MAX809S(JLPCB 33k), SGM809-RXN3L/TR(JLPCB 10k),LP5300B6F 10k, TLV803SDBZR 8k\n- Store joystick calibration.\n- ~~Power menu.~~\n- ~~Status LED~~\n- PWM timer instead of SingleTimer for flashing;\n- Consider backlash on movement.\n- Integrate TMC2208 UART connection into motor driver class\n  - Set Enabled/Disabled\n  - Set µSteps to 256\n- Menu shows always.\n  - Battery level. (Font: battery19)\n  - Mode.\n- ~~Main Menu to switch between IDLE, LEVELING, JOGGING and PANO mode.~~\n- ~~SubMenu for LEVELING.~~\n- ~~Sub Menu for JOGGING.~~\n  - ~~Show pano bounds.~~\n  - ~~Show current pos.~~\n  - ~~Show leveling.~~ Display to small...\n- ~~JOGGING in velocity Mode!?. Maybe that works better than in position mode.~~\n  - Also Encoder for jogging!? For more accurate movement.\n- ~~Sub Menu for PANO Settings.~~\n  - ~~Number of shots per position.~~\n  - ~~Focus time per shot.~~\n  - ~~Trigger  time per shot.~~\n  - ~~Delay after movement.~~\n  - ~~Delay between shots.~~\n- Sub Menu for PANO.\n  - Pause and Stop for PANO mode.\n  - Show current position, ~~column,row,~~ shot; ~~focus,trigger~~; State; current image of all images.\n- ~~SubMenu to show battery Voltage.~~\n  - Edit Battery level warning.\n- Shaking sensor.\n- ~~Leveling sensor.~~\n- SubMenu to calibrate Motor speed and accleration values.\n- ~~Scopes for Logger.~~\n  - ~~Static map to see/reach all loggers for changing level.~~\n  - ~~Check current level to avoid useless calculations. isDebug(), isInfo(), ...~~\n  - Using Lambdas? LOG.onDebug([]{ LOG.d(\"foo: %f\", myComplicatedCalculation(); )})\n- WiFi\n  - Websockewt and/or REST Server.\n  - Angular Frontend 10+ (ivy renderer).\n\n## Technical stuff\n\n### Camera\n\n- Measured on Canon EOS 7d MARK II\n  - Trigger and focus voltages are 3.3V.\n  - Current to switch is ca. 60µA.\n- Nearly every optocoupler with transistor or fet output should be ok.\n\n### Battery\n\n- I plan to use [INR18650-29E](https://irp-cdn.multiscreensite.com/80106371/files/uploaded/file9.pdf) because of its weight and price.\n- Two 3S packs. I calculate with 9Wh/Cell. A pack has 27Wh.\n  - I destroyed one cell so there is a 2S and a 3S pack...\n- Power consumption\n  - ca 1W with disabled steppers\n  - ca. 5W with stopped steppers (and TMC2208 coolstep2)\n  - ca. 17W peak with both stepepers moving.\n\n## Mechanical\n\n### decrease swinging and weigth\n\n- decrease mass/weighth.\n  - Carbon tubes instead aluminium generic profiles.\n  - Mass more close to rotation axis.\n  - Worm gear 1:60 instead planetary gear (self-locking, 90° motor angle, no wired transmit ration).\n  - shorter steel axis, maybe replace steel by carbon and/or tube.\n- stiffness.\n  - Carbon tubes instead aluminium generic profiles.\n  - More connection between the two rods.\n  - Better 90° connection with carbon rods and glued aluminium tubes (connectable).\n- backlash.\n  - Bigger last GT2 gear ~120 tooth instead 60 (more resolution, more torque).\n  - Worm gear 1:60 instead planetary gear (self-locking, 90° motor angle, no wired transmit ration).\n\n### Place and protect electronics\n\nTODO\n\n### Place user interface\n\nTODO\n\n### Place Battery\n\nTODO\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzebrajaeger%2Fpanohead-ng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzebrajaeger%2Fpanohead-ng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzebrajaeger%2Fpanohead-ng/lists"}