| Literature DB >> 35495216 |
Thomas Campbell1, James F X Jones1.
Abstract
In recent years, open-source 3D printing technologies have become increasingly applied to biological research. We have created a fully open-source, versatile and low cost XYZ positioning system using 3D printer components. As this system is controlled by a Python3 based operating system running on a Raspberry Pi 3 Model B, its behaviour can be adapted to meet multiple needs in neurophysiology. We have developed two main applications of this system. First, we have created an automated microscopy script that links seamlessly with image stitching plugins in ImageJ (Fiji) allowing the user to create high resolution montages. Second, we have created a series of movement scripts allowing the application of graded rates of stretch to muscle spindles. Here we outline the construction and implementation of this system and discuss how we have utilised this tool in our research.Entities:
Keywords: 3D, Three Dimensional; AC, Alternating Current; Arduino; Automated microscopy; CNC, Computed Numerical Code; DC, Direct Current; EMI, Electromagnetic Interference; FDM, Fused Deposition Modelling; FFF, Fused Filament Fabrication; GPIO, General-Purpose Input/Output; IDE, Integrated Developer Environment; LCD, Liquid Crystal Display; Mechanotransduction; NEMA17, National Electrical Manufacturers Association (stepper motor with faceplate dimensions of 1.7 × 1.7 in.); Neurophysiology; OpenCV, Open Computer Vision; PLA, Polylactic Acid; PVA, Polyvinyl Acetate; RAMPS 1.4, Reprap Arduino Mega Pololu Shield (version 1.4); Raspberry Pi; SD Card, Secure Digital Card; STEM, Science, Technology, Engineering and Mathematics; STL, Stereolithography; USB, Universal Serial Bus; UTF-8, Unicode Transformation Format, 8-bit blocks; VAT, Value Added Tax; XYZ positioning system
Year: 2020 PMID: 35495216 PMCID: PMC9041220 DOI: 10.1016/j.ohx.2020.e00098
Source DB: PubMed Journal: HardwareX ISSN: 2468-0672
Fig. 1Calibration of 3D Printer. (A) Digital model of calibration cube created using Autodesk Fusion 360. (B) Completed print of three calibration cubes before their removal from the build plate. (C) Measurement of calibration cubes using a digital micrometer. (D) Dimensional accuracy of calibration cubes in X, Y and Z axes. Six measurements were taken for each axis per cube, totalling 18 measurements for X, Y and Z axes. For the X-axis, the mean was 20 mm (min 19.97 mm, maximum 20.04 mm, SD 0.02). For the Y-axis the mean measurement was 20 mm (min 19.97 mm, max 20.02 mm, SD 0.02. For the Z Axis, the mean was 20.04 mm (min 20.0 mm, max 20.07 mm, SD 0.02. (E) Details of print settings used to print the calibration cubes.
Fig. 2Y-Axis Assembly. (A–I) Step by step guide to Y-axis assembly. All images generated using Autodesk Fusion 360.
Fig. 3Assembly of X & Z Axes. (A–N) Step by step guide to X & Z axis assembly. All images generated using Autodesk Fusion 360.
Fig. 4Wiring of XYZ System. (A) RAMPS 1.4 shield (top) and Arduino Mega (bottom). (B) RAMPS 1.4 shield and microstepping jumpers (top). RAMPS 1.4 shield with microstepping jumper pins installed (bottom). Note, to enable 1/16 microstepping for each stepper motor, it is necessary to install three jumpers per motor as encircled. (C) A4988 stepper motor drivers shown individually (top) and installed on RAMPS 1.4 shield (bottom). (D) Connecting the LCD screen to the RAMPS 1.4 shield. First the smart adapter module is seated on the pins at the end of the RAMPS 1.4 shield. Next, EXP1 and EXP2 on the smart module should be connect to their corresponding ports on the reverse of the LCD screen. (E) The Arduino Mega and Raspberry Pi 3 can be connected over USB using a type A male to type B male connector. (F) Wiring of limit switches and stepper motors to RAMPS 1.4 shield. Note both the colour orientation for stepper motor wiring and the highlighted pins for limit switch wiring.
Bill of Materials: The total cost for this assembly was $670.24 inclusive of local VAT (23%). Prices have been converted to United States Dollar ($) at a rate of £1.00:$1.27 (correct as of 9th January 2019). The above listed components conform to industry standards and should any component become unavailable for purchase, it may be sourced from an alternative manufacturer.
| Name as listed on Amazon.co.uk | Assembly name | Cost ($) | Quantity | Total ($) |
|---|---|---|---|---|
| Raspberry Pi 3 Model B | Raspberry Pi 3 | 66.34 | 1 | 66.34 |
| Kuman Upgraded 3D Printer Controller Kit w/Tutorial For Arduino electronic projects robot kits With Mega 2560 R3 + RAMPS 1.4 + A4988 Stepper Motor Driver + LCD 12864 K17 | Arduino Mega/RAMPS 1.4 | 47.20 | 1 | 47.20 |
| 620 pcs 0.1″ Dupont Crimp Pin Connector Pin Header Wire Jumper and M/F Crimp Pins | 13.00 | 1 | 13.00 | |
| Amtech I8750C Hex Key Set and Keyring, 10-Piece | 3.93 | 1 | 3.93 | |
| Signstek Pin Full Cycle Ratchet Wire Crimping Tool Crimper 2.54 mm 3.96 mm KF2510 28–18 AWG Wire Cutter | 13.50 | 1 | 13.50 | |
| 3 mm A2 Stainless Steel Nylon Insert Nyloc Nylock Lock Nuts M3 X 0.5 mm Pitch – 75 | M3 nyloc nut | 4.84 | 1 | 4.84 |
| 10 × 6 × 4 mm 20 Series European Aluminum Hammer HeadDrop In M5 T Nut Slot Pack of 50 | T-nuts | 4.96 | 3 | 14.89 |
| 20 × 20 mm Grey Aluminium 90°Double Side L Shape Corner Brace Angle Bracket Pack of 10 | Corner Brace | 4.27 | 2 | 8.55 |
| 8 m of 20 × 20 mm Aluminium Extrusion | Aluminium extrusion | 12.76 | 8 | 102.08 |
| 2020 Aluminium Right Bracket, Slot 6 Profile 20 mm (Only Bracket ×8) | Right-angled bracket | 40.83 | 1 | 40.83 |
| 2020 Aluminium T-Bracket Slot 6 Profile 20 mm for 3DPrinter CNC Frame (Bracket Only ×2) | T-bracket | 12.76 | 1 | 12.76 |
| Owfeel Pack of 50 pcs M5 * 8MM Button Head Hex Socket Cap Screws 304 stainless steel bolts | 5 mm Hex Bolt | 3.83 | 3 | 11.48 |
| Walfront 160 pcs 304 Stainless Steel Metric Thread Hex Socket Cap Head Screws Bolts with Storage Box, M3 × 6/8/10/12/16/20/25/30 mm | M3 Hex Bolt | 12.75 | 1 | 12.75 |
| M3 (3 mm) Hex Nut - Steel (Pack of 40) | M3 nut | 6.86 | 1 | 6.86 |
| Walfront 230 pcs M2 Stainless Steel SS304 Hex Socket Button Head Bolts Screws Nuts Assortment Kit with Storage Box | M2 bolt/M2 nut | 8.03 | 1 | 8.03 |
| Cable Tie Wraps/Zip Ties Colour: Black Size: 100 mm × 2.5 mm 1000 pcs | Small zip ties | 4.22 | 1 | 4.22 |
| 1.75 mm diameter Black PLA filament 1 kg | 23.47 | 1 | 23.47 | |
| 12 V 30 A 360 W Dc Universal Regulated Switching Power Supply for CCTV, Radio, Computer Project | 20.40 | 1 | 20.40 | |
| 5 pcs Nema 17 Stepper Motor 26 Ncm 12 V 0.4A w/1 m Cable & Connector 4-Wire 42 × 42 × 34 mm 1.8°for DIY CNC 3D Printer | NEMA17 bipolar stepper motor | 43.37 | 1 | 43.37 |
| 2 pcs 2GT 20 Teeth Timing Pulley Wheel + 5 M 2GT-6 mm Rubber Opening Belt | 2GT timing pulley/2GT timing belt | 10.20 | 1 | 10.20 |
| GT2 3 mm Bore Toothless Timing Belt Idler Pulley for 3D Printer GT2 Width 6 mm Timing Belt (Pack of 5 pcs) | GT2 idler pulley | 12.73 | 1 | 12.73 |
| 2 pcs Flexible Couplings 5 mm to 8 mm NEMA 17 Shaft for RepRap 3D Printer or CNC Machine | Flexible shaft coupling | 8.03 | 2 | 16.06 |
| EsportsMJJ T8 100/200/300/400/600 mm 8 mm Lead Screw with Anti-Backlash Nut −600 mm | Lead screw (Z-axis assembly) | 22.05 | 2 | 44.10 |
| T8 Stainless Steel Threaded Rod Lead Screw with Anti-Backlash Spring Loaded Nut for 3D Printer Milling Machine (400 mm) | Lead screw (Y-axis assembly) | 12.75 | 2 | 25.49 |
| 600 mm 8 mm linear rod | Linear Rod | 7.02 | 4 | 28.07 |
| Linear Ball Bearing - SODIAL(R) 4 pcs LM8UU 8 mm Inside Dia Rubber Sealed Linear Ball Bearing Bushing | LM8UU linear slide bearing | 2.34 | 2 | 4.67 |
| Skateboard Scooter Bearings Longboard Roller Skate Bearings Skate Wheels, Silver | Radial ball bearing | 3.83 | 1 | 3.83 |
| Silver 12 mm Shaft Dia 400 mm Linear Bearing Support Rail CNC Linear Motion and Open Linear Bearing Slide Linear Motion Block 2 Sets | Linear rail/Linear rail carriage | 52.69 | 1 | 52.69 |
| Micro Limit Switch V-156-1C25 Long Roll Hinge Lever Arm Momentary SPDT Snap Action LOT Pack of 5 | Large limit switch | 6.10 | 1 | 6.10 |
| 10 pcs × Roller Lever Arm PCB Terminals Micro Limit Switch Normal Close/Open Switch Switches 5A 3 pins SS-5GL2 | Small limit switch | 7.81 | 1 | 7.81 |
Modifications to Marlin Firmware. All of the above modifications are required for correct functioning of the XYZ positioning system. Changes included the inclusion of the U8glib graphical library, adjustments to numerical values and the uncommenting of code lines. Calculations pertaining to steps per mm are available in Appendix B.
| Tab and Entry | Note | |
|---|---|---|
| #include <U8glib.h> | This entry should be added to the top line of the Marlin.h tab | |
| Endstop Settings Section | ||
| #define USE_XMIN_PLUG | Remove the “//” to uncomment this line | |
| #define USE_YMAX_PLUG | Remove the “//” to uncomment this line | |
| #define USE_ZMAX_PLUG | Remove the “//” to uncomment this line | |
| Movement Settings Section | ||
| #define DEFAULT_AXIS_STEPS_PER_UNIT | (80, 400, 400, 400) | |
| #define DEFAULT_MAX_FEEDRATE | (100, 2, 5, 5) | |
| #define DEFAULT_MAX_ACCELERATION | (100, 100, 100, 100) | |
| #define DEFAULT_XJERK | 0.3 | |
| #define DEFAULT_YJERK | 0.3 | |
| #define DEFAULT_ZJERK | 0.3 | |
| Homing Section | ||
| #define X_HOME_DIR | −1 | |
| #define Y_HOME_DIR | 1 | |
| #define Z_HOME_DIR | 1 | |
| Machine Dimensions Section | ||
| #define X_BED_SIZE | 430 | |
| #define Y_BED_SIZE | 150 | |
| #define X_MIN_POS | 0 | |
| #define Y_MIN_POS | 0 | |
| #define Z_MIN_POS | 0 | |
| #define Z_MAX_POS | 430 | |
| LCD and SD Support Section | ||
| #define SDSUPPORT | Remove the “//” to uncomment this line | |
| #define REVERSE_ENCODER_DIRECTION | Remove the “//” to uncomment this line | |
| LCD/Controller Selection (Graphical LCDs) Section | ||
| #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER | Remove the “//” to uncomment this line | |
| #define Y_DUAL_STEPPER_DRIVERS | Remove the “//” to uncomment this line | |
Fig. 5Details pertaining to the XYZ Operating System. (A) List of commands to launch the XYZ operating systems. Users should enter the top command first and proceed until the bottom command has been entered. (B) Screenshot of main menu for XYZ operating system. Users can navigate to submenus by typing the respective number and pressing enter.
Fig. 6Positional Repeatability & Axis Deviation. (A) Arrangement of apparatus for X and Y axis repeatability tests. Shown is the USB camera and 3D printed bracket mounted to the X-carriage with a measurement reticle underneath. (B & C) Mean positional deviation for both end stop and point to point repeatability tests. Respective coefficient of error measurements are shown adjacent to these graphs. (D). Mean positional deviation in the X, Y and Z axes occurring due to movement in the other axes (+100 mm followed by −100 mm).
Fig. 7Area Scanning Logic. (A) The user defines the position of three coordinates (X1, Y1), (X2, Y2) and (X3, Y3). (B) A rectangular area is defined by the minimum and maximum X and Y values entered. The boundaries of this area are parallel to the X and Y axes respectively. (C) The rectangular area is populated by nodes. The first node is located at the minimum X and Y value entered (Xmin, Ymin). Additional nodes are populated parallel to the X and Y axes based on the user defined X and Y node spacing. Where an uneven amount of nodes fit within the scanning area, no node is generated for the modulo, (e.g. if there are 17.6 nodes in X direction, there will be 17 nodes spaced as per the user defined X node spacing with the first node placed at Xmin). (D) Scanning begins at (Xmin, Ymin) and cycles through adjacent nodes in the X direction. Once all nodes in a given row have been scanned, the camera moves up one row and begins again at the Xmin position. This process repeats until the final node has been scanned, after which the system returns to the home position. (E) Example of a 5 × 4 stitched image, stitched using the Grid/Collection stitching plugin (pixel coordinate method) for ImageJ developed by Preibisch et al. 2009 [16].
Fig. 8Simplified schematic of mechanotransduction experiments. The XYZ positioning system was used to repeatedly stretch lumbrical muscles whilst spike activity in the afferent nerve was recorded in Spike2 (Cambridge Electronic Design) on a laptop.
Fig. 9Stretching the muscle spindle to study mechanotransduction. (A) Afferent nerve activity from a stretched muscle spindle. Brief pulses of stretch were applied to the lumbrical every two seconds in order to elicit mechanotransduction from the muscle spindle. Each Stimulus pulse indicates the initiation of a stretch. Filtered nerve activity is represented in blue, unfiltered in green. (B) Mechanotransduction activation thresholds were assessed with gradual increments in stretch distance, speed or acceleration. For this filtered unit, activation thresholds were observed at 14.0 mms−1 and 50 mms−2. Increased stretch distance, speed or acceleration are associated with increased nerve activity (Filtered Spike Rate). (C) Overdraw of filtered nerve activity observed in (B) indicates that this was a single unit recording. All data was recorded in Spike2 (Cambridge Electronic Design). ENG, Electroneurogram. (For interpretation of the references to colour in this figure legend, the reader is referred to the web version of this article.)
| Hardware name | XYZ Positioning System |
|---|---|
| Subject area | Please select the subject area most relevant to the original community for which this hardware was developed Neuroscience General Biological Sciences (e.g. Microbiology and Biochemistry) |
| Hardware type | Imaging tools Mechanotransduction |
| Open Source License | CC-BY-NC-SA (Creative Commons 4.0) |
| Cost of Hardware | $600–$1200 |
| Source File Repository |
| Design file name | File type | Open source license | Location of the file |
|---|---|---|---|
| Fusion 360 Master File for Online Sharing | CAD file (.f3d format) | Not open-source, but Autodesk Fusion 360 free license is available to students, educators, and hobbyists for non-profit usage | |
| STL Files for 3D Printed Components | ZIP folder containing Stereolithography (STL) files | NA | |
| Marlin Firmware for XYZ Positioning System | ZIP folder containing Firmware Files | Open-source, license unspecified | |
| XYZ_Operating_System.py | Python3 Script | Open-source (Python License (Python-2.0) |