Syllabus

Microcontroller Programming Projects #

ME 193, Microcontroller Programming Projects, Section MPP, class number 23715

This is a new course, so we are attaching the wings to the plane as the plane is accelerating down the runway. #

If you see weird references to ME 30, that’s because this website is based off the ME 30 website, and I’m still revising it.

Course description #

Project-based investigation of embedded systems programming in Python, C and assembly. Distributed version control. Building firmware, bootloaders, and watchdogs. Microcontroller hardware peripherals, with emphasis on the Arduino and Raspberry Pi families. TCP/IP, ARP, 802.1x protocols and packet sniffing. Independent final project of student’s choosing.

Projects and skill-building exercises #

The primary component of the course is a series of roughly 8 projects, each 1-2 weeks in length. Projects will mostly involve programming in C and Python, but will also include the design and fabrication of a printed circuit board that interfaces with a Raspberry Pi.

Interspersed with the project work will be skill-building exercises. These are short, ungraded activities that teach you a practical skill needed for microcontroller programming. Examples include learning the basics of git, the dominant distributed version control system, or customizing the Linux boot process on your Raspberry Pi.

Course goals #

Key topics (more details soon) #

• Arduino hardware • Arduino programming • Microcontroller peripherals: PWM module, serial port module, i2c module • Frequency domain and digital filter basics • IoT basics • Raspberry Pi hardware • Raspberry Pi programming • Ethics in electronics and robotics • Professional responsibilities and decision-making; career trajectories

Other topics we may or may not cover:

  1. git, Github (we’re doing this)
  2. Linux, shell scripting
  3. something like Puppet, Chef, or Ansible
  4. maybe VMs/Docker?
  5. security: passwords, hashes, buffer overflows, fuzzing
  6. automated testing, continuous integration, verification, validation
  7. functional programming, idempotency, reproducible builds
  8. assembly
  9. machine code, compilation, instruction sets, computer architecture
  10. linking, loading, memory maps
  11. open source licenses, copyright, patents, trademarks, and trade secrets
  12. compilers vs. interpreters
  13. SSH tunnels
  14. state machines
  15. reverse engineering binary blobs

Teachers #

Brandon Stafford, brandon.stafford@tufts.edu

Class meetings #

Tuesdays and Thursdays, 10:30 AM - 11:45 AM in Brandon’s Zoom room: https://tufts.zoom.us/my/brandon.of.nolop

We have at least one student in the class who will be remote, so the course will remain virtual, even if the virus is vanquished over the course of the semester.

Office hours #

Brandon’s office hours are:

Learning assistants #

Nobody has taken this class before. There are no learning assistants. We are deep in the desert.

I aspire to convince the class to schedule something like “Peer office hours,” sort of a Zoom study hall, where every Monday and Wednesday night at 7 PM, a subset of the class converges on Zoom and helps each other through the projects.

(A note to the more advanced students: you may think to yourself, “Why would I want to go help a bunch of clueless people understand something that I already understand?” There are two reasons: you are a kind, generous person, but also, I guarantee you that you will vastly deepen your understanding of technical topics by explaining them to other people.)

Grading #

We have a very wide range of skills in this course– we have people who have not taken ME 30 (the ME electronics course), plus people who just completed ME 30, plus all three of the LAs from ME 30, plus a few grad students. Those of you who have never made a PCB before will struggle just to make any board at all; for others of you, you’ll be disappointed if the thing doesn’t work perfectly. Similarly, in the realm of programming, we have some CS folks in the class who I hope I can cajole into presenting a few advanced topics to the rest of us; we also have people who wrote their first Arduino program a few months ago. You’re all welcome here; I hope that the more advanced students can help the rest of us.

Your grade in the course will be based entirely on your project work. To pass the course, you need to complete something like 5 of the 8 projects. Completing all 8 earns you an A. The weight of each project is scaled in proportion to its duration in weeks. The best outcome is that you all dive into the projects, complete them all, and you all get A’s.

Extensions #

We are living in turbulent times, and some of us feel the turbulence more than others. If, for whatever reason, you can’t finish a project on time, please send me an email asking for an extension. Your health, both physical and mental, is much more important than school.

One scenario to watch out for: if you find yourself lagging behind by a lot, you might consider skipping a project, rather than being continuously one project behind the rest of the class for the rest of the semester. I want you to maximize your learning, not just strive to hit some arbitrary deadlines.

Honesty #

I take honesty very seriously. Not only am I required to report violations of academic integrity, I am glad to do so. We are all fortunate to be at Tufts; there is no excuse for squandering that opportunity by representing someone else’s work as your own. If you’re unsure about the details, read the Tufts Academic Integrity Policy.

Sharing #

Tufts has asked me to include this statement: “It is against Tufts policy for anyone to share any content made available in this course including course syllabi, reading materials, problems sets, videos, handouts, and exams, with anyone outside of the course without the express permission of the instructor.” I hereby grant you, and everyone else in the world, express permission to share all materials from this course, including the course syllabus, reading materials, problem sets, videos, handouts, and exams, as widely as you like, under the CC-BY-SA Creative Commons License linked at the bottom of the page. In fact, I encourage you to do so.

“He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me.” –Thomas Jefferson

Mental health #

There may be times when personal stressors or emotional difficulties interfere with your academic performance or well-being. The Counseling and Mental Health Service (CMHS) provides confidential consultation, brief counseling, and urgent care at no cost for all Tufts undergraduates as well as for graduate students who have paid the student health fee. Call 617-627-3360 if you need help.

Accommodations for students with disabilities #

Tufts is committed to providing equal access and support to all qualified students through reasonable accommodations so that each student may fully participate in the Tufts experience. If you have a disability that requires accommodations, please email accessibility@tufts.edu or call 617-627-4539 to make an appointment to talk with a Student Accessibility Services representative about appropriate accommodations. Accommodations cannot be enacted retroactively.

Financial hardship #

Because this course is project-based, there will be some expenses for materials. You’ll need to buy at least a Raspberry Pi microcontroller, plus pay for the fabrication of at least one printed circuit board. In all, I would expect a total cost on the order of $100. If this is a financial hardship for you, please DM/email/whatever me; I’ll find a way to get you what you need. Nobody should find a way to pay $70,000 for Tufts, and then be held back because they’re short $50.