At Tufts
ES 4 — Introduction to digital logic circuits
Today you can find a microprocessor in almost anything electronic, and yet even those of us who can program them often have very little understanding of their inner workings. In ES 4, we will study microprocessors — and digital electronics more generally — from the ground up. From your past courses, you know how computers work at the physical level (voltages and currents) and at the application level (C and other languages); the objective of this course is to connect the dots between the two.
To do this, we begin with the basics of manipulating zeros and ones with circuitry, and start building combinational circuits, which produce outputs based on some mathematical combination of their inputs. Then we make a major turn and explore sequential circuits, which can store information or step through a sequence of states. With these building blocks in hand, we will take a brief look at the ARM instruction set (which powers your cell phone and a few billion other devices), and learn how to build circuits which can actually interpret and execute software instructions.
EE 153 — Networked Embedded Systems
This course is a learning-by-doing introduction to building and deploying real embedded systems. We talk about some theory — how to pick a microcontroller, comparisons between various wireless protocols for IoT, software development patterns for embedded devices, and more. But the bulk of the learning comes from working in a team to rapidly develop and iterate on a real embedded system. For the past couple iterations of the course, we developed a wireless sensor network to gather dense temperature readings across campus. Each node was designed to report temperature every hour, while running on a battery for at least six months with no intervention.
EN 1 — Engineering in the kitchen
In this course, we explore engineering through the lens of food and kitchen gadgets. Although humans have been cooking for millennia, we now have countless electrified gadgets to measure, mash, melt, mix, and microwave our food. During the semester, we will disassemble every kitchen gadget we can get our hands on, learn how they work, and use our newfound skills to build a few of our own. Along the way, you’ll analyze and design basic electrical circuits, program microcontrollers to take measurements and respond to them, and connect the Things you build to the Internet. We’ll also explore some of the complex social and ethical issues at the intersection of technology and food: at what level is it appropriate to ”engineer” our food? Does a cloud-connected refrigerator make us more efficient, or more lazy, or does it just result in more e-waste? And what responsibility do engineers have when working with something so deeply human as food?
EE 200 — Accelerated programming for graduate students
Programming in C and C++ with coverage of data structures (linked lists, binary trees, hash tables, graphs), abstract data types (stacks, queues, maps, sets) and algorithms (sorting, graph search, minimal spanning tree). Efficiency of these structures and algorithms is compared via Big-O analysis. Brief coverage of concurrent (multi-threaded) programming. Object-oriented design: inheritance, templates and virtual methods. Embedded, high-performance and close-to-hardware applications. Defensive coding and use of standard UNIX development tools.
EE 201 — Fundamentals of computer systems and engineering
This course provides a fast-paced introduction to digital systems and computer architecture for graduate students whose undergraduate background did not include this material. We start with the basics of ones and zeros, then move quickly to more complex digital systems and ultimately implement a fully-functional microprocessor using VHDL on an FPGA. Along the way, we explore instruction set architectures and assembly programming, memory and caches, operating systems, and various techniques for interfacing computers to sensors, other computers, and the “real world”.
EE 193 — Imaging systems: From photons to bits and back
Cameras and displays may seem straightforward, but it takes an amazing amount of engineering to go from light striking a camera lens to an image on a screen. We begin this journey by studying the fascinating abilities (and surprising inabilities) of the human visual system and the fundamentals of light and color. Then we enter the lens of a camera and travel down the image processing pipeline, discussing how pixels are created, processed, and compressed. Finally, we discuss systems for transmitting and displaying images on screens of all kinds. Based on this foundation, we conclude with a survey of cutting edge topics in imaging, including computational cameras, image forensics, and virtual reality.
EE 105 — Feedback control systems
I’ve filled in a couple semesters while the usual instructor for EE 105 was on leave.
Modern control and fundamentals of state-feedback including matrix differential equations, controllability, state transformations, canonical forms, and control matrix design. Classical control and output-feedback with topics including transfer functions, s-plane analysis, stability criteria, PID controllers, root locus, controller design using op-amps, and compensation networks.
ES 2 — Introduction to computing in engineering
At Stanford
I helped to create and teach ENGR 40M, Stanford’s new introductory electrical engineering class primarily for non-majors. We broke from the traditional linear circuits pedagogy and arranged the course around a set of four lab projects where students get to build something fun and (maybe) useful: a solar-powered cell phone charger, an electromechanical “useless box”, an LED cube, and an electrocardiograph.