Design of a modular, cost‑effective robot for mapping magnetic fields within a defined volume.
- CPU: 64‑bit dual‑core (modern)
- RAM: ≥ 8 GB (PyCharm needs 2 GB free)
- Storage: ≥ 5 GB free SSD (PyCharm ≈ 3.5 GB + projects)
- OS: Windows 10 64‑bit +, macOS 10.15 +, Ubuntu 20.04 +
- Basic jumper wires for Arduino
- M3 screws with nuts
- USB‑C ↔ USB‑C / USB‑A ↔ USB‑C cable (Arduino Uno R4)
- Wire cutter/stripper
- Precision screwdriver set
| Component | Qty | Unit Price (USD) | Link |
|---|---|---|---|
| Linear stages (Z 300 mm, XY 300 mm – 12 mm pitch) | 1 | 338.54 | Product |
| TB6600 stepper driver | 3 | 5.60 | Product |
| Arduino UNO R4 Minima | 1 | 16.00 | Product |
| Gaussmeter GM2 | 1 | 902.00 | Product |
| Total | 1262.14 |
- Clone the repository:
git clone https://github.com/SipanHovsep/Field_mapper_robot
- Install dependencies:
pip install -r requirements.txt
- Connect the hardware as described in the wiring diagram.
- Print the files in 3D print files
- Connect and upload
Arduino_script.inoto Arduino - Run
Arduino_finder.py - Run
Path_maker.py - Run
Arduino_runner.py - Check out
Supporting imagesfor further images
- Run once the arduino is connected
- Finds the connection port name and writes it in Arduino_port.txt file
- Generates the path trajectory with discrete points
- Allows user to modify the trajectory and spacing between individual points
- Visualizes the path in 3D with exact sequence the robot would follow, for user to validate
- Writes the x y z coordinates of the path in the right order in "path.CSV" file
- Allows user to input delay time for sensor read at each desired point and control the speed of robot movement
- Retrieves the coordinates from "path.CSV" file
- Generates text commands to move the robot according to the path
- Sends text commands to arduino at 9600 baud (defined by user) via Arduino port retrieved from Arduino.txt file
- Establishes a serial connection with Gaussmeter through usb port
- Records voltage readings of Gaussmeter per data point and appends to corresponding coordinate
- Generates Data.CSV, containing x y z reading values for each coordinates
- Defines Pin map of the arduino
- Listens for simple text commands (X+, X-, Y+, Y-, Z+, Z-,) sent over USB at 9600 baud (Links
Arduino_runner.pywith Arduino) - Moves the robot 1 mm per command by pulsing the chosen step pin 533.34 times (defined by callibration)
Attaching a printed ruler minimises calibration time and ensures precise step‑to‑millimetre mapping. Secure the frame to a **≥ 40 × 60 × 1.5 cm** wooden panel for stability during operation. A low‑cost variable supply (~15 USD) simplifies testing different motor voltages and current limits. Set switches **S1–S6 = OFF** to match the firmware micro‑stepping and protect the motors.






