{"id":579,"date":"2014-07-07T14:22:36","date_gmt":"2014-07-07T18:22:36","guid":{"rendered":"https:\/\/itp.nyu.edu\/physicalcomputing\/?page_id=579"},"modified":"2022-11-06T17:30:14","modified_gmt":"2022-11-06T22:30:14","slug":"analog-output","status":"publish","type":"page","link":"https:\/\/itp.nyu.edu\/physcomp\/lessons\/analog-output\/","title":{"rendered":"Analog Output"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Introduction\"><\/span>Introduction<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This is an introduction to basic analog output&nbsp;on a microcontroller. In order to get the most out of it, you should know something about&nbsp;the following concepts.&nbsp; You can check how to do so in the links below:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/electronics\/electricity-the-basics\/\">Electrical circuits<\/a><\/li><li><a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/microcontrollers-the-basics\/\">What a microcontroller is&nbsp;and what it can do<\/a><\/li><li><a title=\"Digital Input &amp; Output\" rel=\"noopener noreferrer\" href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/digital-input-output\/\" target=\"_blank\">Digital input and output on a microcontroller<\/a><\/li><li><a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/analog-input\/\">Analog input on a microcontroller<\/a><\/li><\/ul>\n\n\n\n<p>The following video links will help in understanding analog output:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noopener noreferrer\" href=\"https:\/\/vimeo.com\/372276550\" target=\"_blank\">Analog Output &#8211; Intro<\/a><\/li><li><a rel=\"noopener noreferrer\" href=\"https:\/\/vimeo.com\/372277977\" target=\"_blank\">Analog Output &#8211;&nbsp;Motor Control<\/a><\/li><li><a rel=\"noopener noreferrer\" href=\"https:\/\/vimeo.com\/372278570\" target=\"_blank\">Analog Output &#8211; Servo<\/a><\/li><li><a rel=\"noopener noreferrer\" href=\"https:\/\/vimeo.com\/372279218\" target=\"_blank\">Analog Output &#8211; Tone<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Analog_Output\"><\/span>Analog Output<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Just as with input, there are times when you&nbsp;want greater&nbsp;control over &nbsp;a microcontroller&#8217;s output than a <a rel=\"noopener noreferrer\" href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/microcontrollers\/digital-input-output\/#Digital_output\" target=\"_blank\">digital output<\/a> affords.&nbsp;You&nbsp;might want to control the brightness of a lamp, for example, or the turn of a pointer on a dial, or the speed of a motor. In these&nbsp;cases, you&nbsp;need &nbsp;an analog output. The most likely things that you&nbsp;might want to vary directly from a microcontroller are lights, sound devices, or things controlled by motors. For many of these, there will be some other controller&nbsp;in between your&nbsp;microcontroller and the final output device. There are lighting dimmers, motor controllers, and so forth, most of which can be controlled using some form of serial digital communication. What&#8217;s covered here are simple electrical devices that can be controlled by a changing voltage. The Arduino and other digital microcontrollers generally can&#8217;t produce a varying voltage, they can only produce a high voltage or low voltage. Instead, you&nbsp;&#8220;fake&#8221; an analog voltage by producing a series of voltage pulses at regular intervals, and varying the width of the pulses. This is called<b> <\/b><strong>pulse width modulation (PWM)<\/strong>. The resulting average voltage is sometimes called a <strong>pseudo-analog voltage<\/strong>. The graph in Figure 1 shows how PWM works.&nbsp;You&nbsp;pulse the&nbsp;pin high for the same length of time that you&nbsp;pulse it low. The time the pin is high (called the <strong>pulsewidth<\/strong>) is about half the total time it takes to go from low to high to low again. This ratio is called the <strong>duty<\/strong> <strong>cycle<\/strong> and the total time from off through on to off again is the <strong>period<\/strong>. The duty cycle in this case&nbsp;50%, and the effective&nbsp;voltage is half the total voltage.<\/p>\n\n\n\n<p>Related video:&nbsp;<a href=\"https:\/\/vimeo.com\/372276550#t=0m0s\">Pseudo-Analog Explained<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image alignnone size-full is-style-default\"><a href=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_50_percent.png\"><img loading=\"lazy\" decoding=\"async\" width=\"517\" height=\"286\" src=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_50_percent.png\" alt=\"Graph of pulse-width-modulation (PWM) with a 50% duty cycle\" class=\"wp-image-1691\" srcset=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_50_percent.png 517w, https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_50_percent-300x165.png 300w\" sizes=\"(max-width: 517px) 85vw, 517px\" \/><\/a><figcaption>Figure 1. PWM with a 50% duty cycle has an effective voltage of 50% of the maximum output voltage. Over time, the voltage is on half the time and off half the time.<\/figcaption><\/figure>\n\n\n\n<p>If you&nbsp;make the duty cycle less than 50% by pulsing for a shorter amount of time than you&nbsp;pause, you&nbsp;get a lower effective voltage as shown in Figure 2:<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone size-full is-style-default\"><a href=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_33_percent.png\"><img loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"285\" src=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_33_percent.png\" alt=\"Graph of pulse-width-modulation (PWM) with a 33% duty cycle. Effective voltage is a third of the maximum voltage\" class=\"wp-image-1692\" srcset=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_33_percent.png 516w, https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/pwm_33_percent-300x165.png 300w\" sizes=\"(max-width: 516px) 85vw, 516px\" \/><\/a><figcaption>Figure 2. Graph of pulse-width-modulation (PWM) with a 33% duty cycle. Effective voltage is a third of the maximum voltage. <meta charset=\"utf-8\">Over time, the voltage is on one third the time and off two thirds of the time.<\/figcaption><\/figure>\n\n\n\n<p><a rel=\"noopener noreferrer\" href=\"https:\/\/vimeo.com\/372276550#t=1m06s\" target=\"_blank\">Related video: PWM graphed and see it on the scope<\/a><\/p>\n\n\n\n<p>The period&nbsp;is usually a very small time, on the order of a few microseconds or milliseconds at most. The Arduino boards have a few pins which can generate a continuous PWM signal. On the Arduino Nano 33 IoT. they&#8217;re pins 2, 3, 5, 6, 9, 10, 11, 12, A2, A3, and A5. On the Arduino Uno, they&#8217;re pins 3, 5, 6, 9, 10, and 11. To control them, you use the <tt><a rel=\"noopener noreferrer\" href=\"https:\/\/www.arduino.cc\/en\/Reference\/AnalogWrite\" target=\"_blank\">analogWrite()<\/a><\/tt> command like so:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nanalogWrite(pin, duty);\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\"><li><i>pin<\/i> refers to the pin you&#8217;re going to pulse<\/li><li><em>duty<\/em>&nbsp;is a value from 0 &#8211; 255. 0 corresponds to 0 volts, and 255 corresponds to 5 volts. Every change of one point changes the pseudo-analog output voltage by 5\/255, or &nbsp;0.0196 volts.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Applications_of_Pulse_Width_Modulation\"><\/span>Applications of&nbsp;Pulse Width Modulation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"LED_dimming\"><\/span>LED dimming<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The simplest application of <tt>analogWrite()<\/tt> is to change the brightness of an LED. Connect the LED as you did for a digital output, as shown in Figure 3, then use <tt>analogWrite()<\/tt> to change its brightness. You&#8217;ll notice that it doesn&#8217;t change on a linear scale, however.<\/p>\n\n\n\n<p>Related video: <a href=\"https:\/\/vimeo.com\/372276550#t=3m59s\">See the effect of PWM on the LED<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image alignnone is-style-default\"><a href=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/digital_out_schem.png\"><img loading=\"lazy\" decoding=\"async\" width=\"223\" height=\"179\" src=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/digital_out_schem.png\" alt=\"Digital output schematic. A 220-ohm resistor is connected to an output from a microcontroller. The other end of the resistor is connected in series with the anode of an LED. The cathode of the LED is connected to ground.\" class=\"wp-image-1658\"\/><\/a><figcaption>Figure 3. You can dim an LED with the same circuit as you used for digital output. Just use <tt>analogWrite()<\/tt> on the pin to which the LED is connected.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DC_Motor_Speed_Control\"><\/span>DC Motor Speed Control<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>You can&nbsp;vary the speed of a DC motor using the <tt>analogWrite()<\/tt> command as well. The schematic is in Figure 4. You&nbsp;use the <a rel=\"noreferrer noopener\" href=\"https:\/\/itp.nyu.edu\/physcomp\/labs\/motors-and-transistors\/using-a-transistor-to-control-high-current-loads-with-an-arduino\/\" target=\"_blank\" data-type=\"page\" data-id=\"405\">same transistor circuit<\/a> as you would&nbsp;to turn on and off the motor, shown in Figure 4, but instead of setting&nbsp;the output pin of the microcontroller high or low, you&nbsp;use the&nbsp;<tt>analogWrite()<\/tt>&nbsp;on it.&nbsp;The transistor turns on and off at a rate faster than the motor can stop and start, so the result is that the motor appears to smoothly speed up and slow down.<\/p>\n\n\n\n<p>For more on DC motor control, see the following links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/dc-motors-the-basics\/\" data-type=\"page\" data-id=\"819\" target=\"_blank\" rel=\"noreferrer noopener\">DC motor control notes<\/a><\/li><li>Related video: <a href=\"https:\/\/vimeo.com\/372277977#t=2m56s\">Why use PWM on DC Motors?<\/a><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image alignnone wp-image-1694 size-medium is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"285\" src=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/Motor_control_schem-300x285.png\" alt=\"Schematic of motor control with an Arduino, using a MOSFET. One terminal of the motor is connected to +5 volts. The other side is connected to the source pin of a MOSFET transistor. The gate of the transistor is connected to a microcontroller's output pin. The drain pin of the MOSFEt is connected to ground. There is a diode connected in parallel with the transistor. its anode is connected to the drain, and its cathode is connected to the source. \" class=\"wp-image-1694\" srcset=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/Motor_control_schem-300x285.png 300w, https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/Motor_control_schem.png 318w\" sizes=\"(max-width: 300px) 85vw, 300px\" \/><figcaption>Figure 4. Schematic of motor control with an Arduino, using a MOSFET. One terminal of the motor is connected to a high-current power supply and the other is connected to the MOSFET&#8217;s drain pin. The MOSFET&#8217;s source pin is connected to ground and its gate is connected to a microcontroller output pin. A protection diode&#8217;s cathode is attached to the source of the MOSFET, and the anode is connected to the drain.<\/figcaption><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Note_Filter_circuits\"><\/span>Note: Filter circuits<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<p>Filter circuits are circuits which allow voltage changes of only a certain frequency range to pass. For example, a low-pass filter would block frequencies above a certain range. This means that if the voltage is changing more than a certain number of times per second, these changes would not make it past the filter, and only an average voltage would be seen. Imagine,&nbsp;for example, that your PWM is operating at 1000 cycles per second, or&nbsp;1000 <strong>Hertz (Hz)<\/strong>. &nbsp;If you&nbsp;had a filter circuit that blocked frequencies above 1000 Hz, you&nbsp;would see only an average voltage on the other side of the filter, instead of the pulses. A basic low-pass filter consists of a resistor and a capacitor, connected as shown in Figure 5:<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone is-style-default\"><a href=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/low_pass_filter_led_schem.png\"><img loading=\"lazy\" decoding=\"async\" width=\"236\" height=\"204\" src=\"https:\/\/itp.nyu.edu\/physcomp\/wp-content\/uploads\/low_pass_filter_led_schem.png\" alt=\"Schematic drawing of a low-pass filter for an LED. The LED's anode is connected to +5 volts. Its cathode connects to a resistor. The resistor's other end connects to the PWM output of a microcontroller. The junction where the cathode of the LED and the resistor meet is also connected to a capacitor. The other terminal of the capacitor is connected to ground. \" class=\"wp-image-1696\"\/><\/a><figcaption>Figure 5. Schematic: A basic low-pass filter. An LED&#8217;s anode is connected to voltage and its cathode is attached to one terminal of a capacitor. The capacitor&#8217;s other terminal is connected to ground. A resistor connects to the junction where the the LED and the capacitor meet. The other end of the resistor is connected to a microcontroller&#8217;s output pin.<\/figcaption><\/figure>\n\n\n\n<p>The relationship between frequency blocked and the values of the capacitor and resistor is as follows:<\/p>\n\n\n\n<p class=\"lang:arduino decode:true\"><strong>frequency = 1\/ (2\u03c0 *resistance * capacitance)<\/strong><\/p>\n\n\n\n<p>A 1.5-kilohm resistor and a 0.1-microfarad capacitor will cut off frequencies above around 1061 Hz. If you&#8217;re interested in filters, experiment with different values from there to see what works best.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Servomotors\"><\/span><b>Servomotors<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Perhaps the most exciting thing you can do as analog output is to control the movement of something. One simple way to do this is to use a servomotor. <strong>Servomotors<\/strong> are motors with a combination of gears and an embedded potentiometer (variable resistor) that allows you to set their position fairly precisely within a 180-degree range. They&#8217;re very common in toys and other small mechanical devices. They have three wires:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>power (usually +5V)<\/li><li>ground<\/li><li>control<\/li><\/ul>\n\n\n\n<p>Connect the +5V directly to a 5V power source (the Arduino&#8217;s 5V or 3.3V output will work for one servo, but not for multiple servos). Ground it to the same ground as the microcontroller. Attach the control pin to any output pin on the microcontroller. Then you need to send a series of pulses to the control pin to set the angle. The longer the pulse, the greater the angle.<\/p>\n\n\n\n<p>To pulse the servo, you generally give it a 5-volt, positive pulse between 1 and 2 milliseconds (ms) long, repeated about 50 times per second (i.e. 20 milliseconds between pulses). The width of the pulse determines the position of the servo. Since servos&#8217; travel can vary, there isn&#8217;t a definite correspondence between a given pulse width and a particular servo angle, but most servos will move to the center of their travel when receiving 1.5-ms pulses. This is a special case of pulse width modulation, in that you&#8217;re modifying the pulse, but the period remains fixed at 20 milliseconds. You could write your own program to do this, but Arduino has a library for controlling servos. See the <a href=\"https:\/\/itp.nyu.edu\/physcomp\/labs\/labs-arduino-digital-and-analog\/servo-motor-control-with-an-arduino\/\" data-type=\"page\" data-id=\"1066\" target=\"_blank\" rel=\"noreferrer noopener\">Servo lab<\/a> for more on this.<\/p>\n\n\n\n<p>Related video: <a href=\"https:\/\/vimeo.com\/372278570\">Analog Output &#8211; Servo<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Changing_Frequency\"><\/span>Changing Frequency<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Pulse width modulation can generate a pseudo-analog voltage for dimming and motor control, but&nbsp;can you use it to generate pitches on a speaker? Remember that you&#8217;re changing the duty cycle but not the period of the signal, so the frequency doesn&#8217;t change. If you were to connect a speaker to a pin that&#8217;s generating a PWM signal, you&#8217;d hear one steady pitch.<\/p>\n\n\n\n<p>If you want to generate a changing tone on an Arduino microcontroller, however, there is a <a href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/advanced-io\/tone\/\" target=\"_blank\" rel=\"noreferrer noopener\">tone()<\/a> command that will do this for you:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\ntone(pin, frequency);\n<\/pre><\/div>\n\n\n<p>This command turns the selected pin on and off at a frequency that you set. With this command, you can generate tones reasonably well. For more on this, see the <a href=\"https:\/\/itp.nyu.edu\/physcomp\/labs\/labs-arduino-digital-and-analog\/tone-output-using-an-arduino\/\" data-type=\"page\" data-id=\"225\" target=\"_blank\" rel=\"noreferrer noopener\">Tone Output lab<\/a>.<\/p>\n\n\n\n<p>Related video:&nbsp;<a href=\"https:\/\/vimeo.com\/372279218\">Analog Output &#8211; Tone<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ranges_of_Values\"><\/span>Ranges of Values<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>As a summary, Table 1 below shows the ranges of values for digital input\/output and analog input\/output, which have been discussed in&nbsp;<a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/digital-input-output\/\" data-type=\"page\" data-id=\"51\">Digital Input &amp; Output<\/a>, <a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/analog-input\/\" data-type=\"page\" data-id=\"576\">Analog Input<\/a>, and this page.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><tbody><tr><td><b>Digital<\/b><\/td><td><b>Input \n(Digital Pins)<\/b><\/td><td>0 [LOW] or 1 [HIGH] (2^0) <\/td><td>0V or 3.3V (newer microcontrollers)\n0V or 5V (older microcontrollers)<\/td><\/tr><tr><td><\/td><td><b>Output \n(Digital Pins)<\/b><\/td><td>0 [LOW] or 1 [HIGH] (2^0) <\/td><td>0V or 3.3V (newer microcontrollers)\n0V or 5V (older microcontrollers)<\/td><\/tr><tr><td><b>Analog<\/b><\/td><td><b>Input \n(Analog Input Pins)<\/b><\/td><td>0 ~ 1023 (&lt;2<sup>10<\/sup>)<\/td><td>3.3 \/ 2<sup>10<\/sup><\/td><\/tr><tr><td><\/td><td><b>Output \n(Digital PWM Pins)<\/b><\/td><td>0 ~ 255 (&lt;2<sup>8<\/sup>)<\/td><td>3.3 \/ 2<sup>8<\/sup><\/td><\/tr><\/tbody><\/table><figcaption>Table 1.&nbsp;The Ranges of Values for Digital\/Analog Input\/Output<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>Introduction This is an introduction to basic analog output&nbsp;on a microcontroller. In order to get the most out of it, you should know something about&nbsp;the following concepts.&nbsp; You can check how to do so in the links below: Electrical circuits What a microcontroller is&nbsp;and what it can do Digital input and output on a microcontroller &hellip; <a href=\"https:\/\/itp.nyu.edu\/physcomp\/lessons\/analog-output\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Analog Output&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":13,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[20,46,52,54,8,29,17],"tags":[],"class_list":["post-579","page","type-page","status-publish","hentry","category-analog","category-arduino-fundamentals","category-lesson","category-microcontrollers","category-motors","category-pwm","category-sound"],"_links":{"self":[{"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/pages\/579"}],"collection":[{"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/comments?post=579"}],"version-history":[{"count":35,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/pages\/579\/revisions"}],"predecessor-version":[{"id":10700,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/pages\/579\/revisions\/10700"}],"up":[{"embeddable":true,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/pages\/13"}],"wp:attachment":[{"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/media?parent=579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/categories?post=579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itp.nyu.edu\/physcomp\/wp-json\/wp\/v2\/tags?post=579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}