Neil's assignment for this week:
   Complete your final project, tracking your progress:
      what tasks have been completed, and what tasks remain? 
      what's working? what's not?
      what questions need to be resolved?
      what will happen when?
      what have you learned?
   

Project Status

In the interest of full disclosure, during this week I was working on the final project and documenting it on the final project pages, rather than here. So this page is a bit of an after-the-fact reconstruction of where I was on June 7, when this weekly assignment was due.

As of June 7, I had completed the following major project components, which were laid out in Week 16:

  1. Finish board design. ----
    DONE
  2. Mill prototype board.----
    DONE
  3. Install just enough sensors to test I2C address reprogramming. ---
    DONE
  4. Solder prototype board. ---
    DONE
  5. Test field sensing without GUI. ---
    DONE
  6. Modify existing touchscreen GUI to work with 24 sensors. ---
    DONE
  7. Rebuild / modify board to remove pin-and-socket header connections, permanently solder TFT display. ---
    DECIDED AGAINST
  8. Design case --
    NOT DONE
  9. Print case --
    NOT DONE
  10. Final assembly --
    NOT DONE
  11. Next spiral: draw field lines as lines rather than arrows. --
    WILL NOT COMPLETE
  12. Next spiral: 3-d "field camera" mode. --
    WILL NOT COMPLETE

What's Working? What's not?

In short, at this point I had completed the circuit board and the first draft of code to control it. I was able to test it at the very end of the day on June 7. The photo below is from June 8, and shows a very slightly more advanced UI than what I had on June 7. working prototype At this point in the project I considered myself well ahead of schedule. I had planned ahead for major technical disasters, such as having to rebuild the entire board from scratch, but instead had reached the point where the core functionality was operational, a week before it was due.

Next Steps

I was optimistic that this would leave me enough time to complete a number of remaining crucial tasks, some of which were laid out in the work plan and some not.

  1. UI Final Design. I had a basic display of vector arrows completed, but work needed to be done to show the UI correctly on the larger screen at the right size. Appropriate arrow scales need to be chosen.
  2. Code Refactor. The working code was an ugly frankenstein combination of earlier codes, very long and disorganized. I needed to move code blocks to separate files, add documentation, etc.
  3. Calibration. Early tests showed the device was unable to reliably detect the Earth's magnetic field, because of zero-offsets in the magnetic field sensors. I would have to create a calibration system to fix this problem.
  4. Removal of Steel Parts. I had confirmed that the SD card reader underneath the LCD screen was made of steel, and kept a residual magnetism to affect the sensors. I would have to remove this, but I was reluctant to do so because it might ruin the screen.
  5. StickerI will put a label on the case with the name of the device and a few helpful instructions, using the vinyl printed sticker material I used in Week 12.
  6. Final assembly
  7. Video Production
  8. Poster Production

what questions need to be resolved?

Calibration is a key problem. The magnetometer array works great with powerful magnets, but the sensors have small random values when there is no applied field apart from the Earth's field. To solve this, I will create a magnetometer calibration code. The user will be asked to hold the sensor board facing north, then east, south, and west, then flipped over on its back and repeat, so that the ambient field acts equally in all sensor axes. The average field over this process is an offset internal to the sensor, that should be subtracted out. I will hard-code these calibration values into the final project code.

what will happen when?

From here on out, I planned to become extremely paranoid about documentation. I took photos and videos of the project working at every stage of the build, so that if it stopped working I would have some video to present anyway.

Project goal timeline:

  • Wednesday June 7: Calibration systems
  • Thursday June 8: Case design and printing
  • Friday June 9: Code refactoring
  • Saturday June 10: Assembly and tweaking
  • Sunday June 11: Break or disaster recovery
  • Monday June 12: Poster design (and disaster recovery)
  • Tuesday June 13: Video production (and disaster recovery)
  • what have you learned?

    Probably my biggest learning gain was in developing the capability to make 2-sided PCBs. This is a skillset that nobody in my lab has yet tackled, and since I'll be teaching Fab Academy in the future it's a great skill to be able to show future students.