\newcommand{\stepper}{\citetalias{stepper}}
\newcommand{\unfoldprotein}{\citetalias{unfold-protein}}
+% draw a line TikZ (useful for captions explaining figures)
+% usage: \tikzline{style}
+\DeclareRobustCommand{\tikzline}[1]{%
+ \protect\tikz \draw[#1] (0,0) -- (14pt,6pt);}
+
% draw a thermometer in TikZ
% usage: \thermometer{bulb-location}
\newcommand{\thermometer}[1]{
\begin{figure}
\tikzstack{}{black!20}
- \caption{Dependency graph for my modular experiment control
- stack.\label{fig:pyafm:stack}}
+ \caption{Dependency graph for my modular experiment control stack.
+ The dashed line (\tikzline{black!20,dashed}) separates the
+ software components (on the left) from their associated hardware
+ (on the right). The data flow between components is shown with
+ arrows. For example, the \stepper\ package calls \pycomedi, which
+ talks to the DAQ card, to write digital output that controls the
+ stepper motor (\tikzline{blue,->}, \cref{sec:pyafm:stepper}). The
+ \pypiezo\ package, on the other hand, uses two-way communication
+ with the DAQ card (\tikzline{red,<->}), writing driving voltages
+ to position the piezo and recording photodiode voltages to monitor
+ the cantilever deflection (\cref{sec:pyafm:pypiezo}). The
+ \pypid\ package measures the buffer temperature using a
+ thermocouple inserted in the fluid cell (\tikzline{purple,<-},
+ \cref{sec:pyafm:pypid}).\label{fig:pyafm:stack}}
\end{figure}
\subsection{Pycomedi}