<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>The Ravel kit on Zelbinium</title>
		<link>/en/ravel/</link>
		<description>Recent content in The Ravel kit on Zelbinium</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<atom:link href="/en/ravel/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Online demonstrations - Ravel kit</title>
				<link>/en/ravel/demos/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/en/ravel/demos/</guid>
				<description>&lt;h1 id=&#34;online-demonstrations-with-the-ravel-kit&#34;&gt;Online demonstrations with the &lt;em&gt;Ravel&lt;/em&gt; kit&lt;a class=&#34;anchor&#34; href=&#34;#online-demonstrations-with-the-ravel-kit&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&#xA;&lt;div&gt;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;For use with a simulator (more information &lt;a href=&#34;../../ucuq/online&#34;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://s.q37.info/dkxf4rkk&#34;&gt;&lt;em&gt;Wokwi&lt;/em&gt; simulation&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;configuration: &lt;script&gt;&#xA;  function configSubmit() {&#xA;    const token = &#34;&#34;;&#xA;    let tokenIds = document.getElementById(&#34;tokenIds&#34;).value;&#xA;&#xA;    data = {&#xA;      &#34;token&#34;: token,&#xA;      &#34;id&#34;: tokenIds&#xA;    }&#xA;&#xA;    postToPhp(&#34;config&#34;, &#34;https://faas.q37.info/ucuq/config.php&#34;, data);&#xA;&#xA;    window.open(`https://faas.q37.info/ucuq/config.php?token=${token}&amp;id=${tokenIds}`, &#39;_blank&#39;)&#xA;  }&#xA;&lt;/script&gt;&#xA;&#xA;&lt;input type=&#34;text&#34; id=&#34;tokenIds&#34; size=&#34;20&#34; placeholder=&#34;Token:Id&#34;&gt;&#xA;&lt;button onclick=&#34;configSubmit()&#34;&gt;✔&lt;/button&gt;&#xA;&lt;iframe id=&#34;config&#34; style=&#34;display: none&#34;&gt;&lt;/iframe&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;Run&lt;/em&gt; button to (re)launch the application. The source code can be modified.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 id=&#34;headless-without-gui&#34;&gt;Headless (without GUI)&lt;a class=&#34;anchor&#34; href=&#34;#headless-without-gui&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;reset&#34;&gt;Reset&lt;a class=&#34;anchor&#34; href=&#34;#reset&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Resetting the kit&lt;/p&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq&#xA;&#xA;ucuq.ravel.raz()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;buzzer&#34;&gt;Buzzer&lt;a class=&#34;anchor&#34; href=&#34;#buzzer&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;beep&#34;&gt;&lt;em&gt;Beep&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#beep&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq&#xA;&#xA;FREQ = 440&#xA;&#xA;buzzer = ucuq.ravel.Buzzer()&#xA;&#xA;buzzer.on(FREQ)&#xA;&#xA;ucuq.sleep(1)&#xA;&#xA;buzzer.off()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;scales&#34;&gt;Scales&lt;a class=&#34;anchor&#34; href=&#34;#scales&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq&#xA;&#xA;FREQ_LOW = 220&#xA;FREQ_HIGH = 880&#xA;&#xA;DELAY_TIME = .1&#xA;NUM_STEPS = 24&#xA;&#xA;buzzer = ucuq.ravel.Buzzer()&#xA;&#xA;coeff = (FREQ_HIGH/FREQ_LOW)**(1/NUM_STEPS)&#xA;&#xA;for i in range(NUM_STEPS):&#xA;  buzzer.on(int(FREQ_LOW * coeff ** i))&#xA;  ucuq.sleep(DELAY_TIME)&#xA;&#xA;for i in range(NUM_STEPS + 1):&#xA;  buzzer.on(int(FREQ_HIGH / coeff ** i))&#xA;  ucuq.sleep(DELAY_TIME)&#xA;&#xA;buzzer.off()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;rgb-ring&#34;&gt;RGB Ring&lt;a class=&#34;anchor&#34; href=&#34;#rgb-ring&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;plain&#34;&gt;Plain&lt;a class=&#34;anchor&#34; href=&#34;#plain&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq&#xA;&#xA;R = 10&#xA;G = 8&#xA;B = 1&#xA;&#xA;ring = ucuq.ravel.Ring()&#xA;&#xA;ring.fill((R, G, B)).write()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;rainbow&#34;&gt;&lt;em&gt;Rainbow&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#rainbow&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq, random&#xA;&#xA;MIN = 1&#xA;MAX = 5&#xA;&#xA;ring = ucuq.ravel.Ring()&#xA;&#xA;for _ in range(15):&#xA;  for led in range(8):&#xA;    ring.setValue(led, tuple((lambda: random.randint(MIN, MAX))() for _ in range(3))).write()&#xA;    ucuq.sleep(.03)&#xA;    &#xA;ucuq.sleep(2)&#xA;&#xA;ring.fill((0, 0, 0)).write()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;lcd&#34;&gt;LCD&lt;a class=&#34;anchor&#34; href=&#34;#lcd&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;simple-display&#34;&gt;Simple display&lt;a class=&#34;anchor&#34; href=&#34;#simple-display&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;NAME = &#34;&#34;&#34;&#xA;&#xA;&#xA;&#xA;&#34;&#34;&#34;.strip().rjust(16)&#xA;&#xA;import ucuq&#xA;&#xA;lcd = ucuq.ravel.LCD()&#xA;&#xA;lcd.putString(&#34;Greetings&#34;.ljust(16) + NAME).backlightOn()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;waves&#34;&gt;Waves&lt;a class=&#34;anchor&#34; href=&#34;#waves&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq&#xA;&#xA;DELAY = 0.07&#xA;COUNT = 2&#xA;&#xA;lcd = ucuq.ravel.LCD()&#xA;&#xA;lcd.uploadUpwardGaugeChars().backlightOn()&#xA;&#xA;gauges = ()&#xA;&#xA;def mirror(str):&#xA;  return str[:8] + tuple(str[i] for i in range(7, -1, -1,))&#xA;&#xA;def morph(a, b):&#xA;  steps = max(abs(x - y) for x, y in zip(a, b))&#xA;  for s in range(1, steps):&#xA;    ucuq.sleep(DELAY)&#xA;    lcd.putUpwardGauges(0, [int(ai + s / (steps - 1) * (bi - ai)) for ai, bi in zip(a, b)])&#xA;&#xA;for j in range(0, 32 * COUNT):&#xA;  gauges = ((abs((j + 16) % 32 - 16),) + gauges)[:16]&#xA;  ucuq.sleep(DELAY)&#xA;  lcd.putUpwardGauges(0, gauges)&#xA;&#xA;morph(gauges, mirror(gauges))&#xA;&#xA;for j in range(0, 32 * COUNT):&#xA;  gauges = ((abs((j + 16) % 32 - 16),) + gauges)[:16]&#xA;  ucuq.sleep(DELAY)&#xA;  lcd.putUpwardGauges(0, mirror(gauges))&#xA;&#xA;morph(mirror(gauges), (0,) * 16)&#xA;&#xA;ucuq.sleep(DELAY)&#xA;&#xA;lcd.backlightOff()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;oled&#34;&gt;OLED&lt;a class=&#34;anchor&#34; href=&#34;#oled&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;text&#34;&gt;Text&lt;a class=&#34;anchor&#34; href=&#34;#text&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq, datetime&#xA;&#xA;oled = ucuq.ravel.OLED()&#xA;&#xA;oled.text(&#34;We are the&#34;.center(16), 0, 20).text(f&#34;{datetime.datetime.now().strftime(&#34;%d/%m/%Y %H:%M&#34;).center(16)}&#34;, 0, 40).show()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;drawing&#34;&gt;Drawing&lt;a class=&#34;anchor&#34; href=&#34;#drawing&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;div data-python-demo=&#34;&#34;&gt;&#xA; &#xA;import ucuq&#xA;&#xA;oled = ucuq.ravel.OLED()&#xA;&#xA;oled.draw(&#34;03c00c30181820044c32524a80018001824181814812442223c410080c3003c0&#34;, 16, mul=4, ox=32).show()&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;animation&#34;&gt;Animation&lt;a class=&#34;anchor&#34; href=&#34;#animation&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: It may take some seconds for the animation to start…&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ravel kit API</title>
				<link>/en/ravel/api/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/en/ravel/api/</guid>
				<description>&lt;h1 id=&#34;ravel-kit-api&#34;&gt;&lt;em&gt;Ravel&lt;/em&gt; Kit API&lt;a class=&#34;anchor&#34; href=&#34;#ravel-kit-api&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;This API is designed for the &lt;em&gt;Ravel&lt;/em&gt; Kit and extends the &lt;a href=&#34;../../ucuq/api&#34;&gt;&lt;em&gt;UCUq&lt;/em&gt; API&lt;/a&gt;. To simplify implementation, it abstracts away the hardware-specific aspects (communication protocols, pins used, etc.).&lt;/p&gt;&#xA;&lt;h2 id=&#34;buzzer&#34;&gt;&lt;em&gt;Buzzer&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#buzzer&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.ravel.Buzzer()&lt;/code&gt; (constructor): returns an object for manipulating the buzzer;&lt;/li&gt;&#xA;&lt;li&gt;for other methods, see &lt;a href=&#34;../../ucuq/api#ucuqbuzzer&#34;&gt;&lt;code&gt;ucuq.Buzzer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;ring&#34;&gt;&lt;em&gt;Ring&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#ring&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.ravel.Ring(&amp;lt;offset&amp;gt;)&lt;/code&gt; (constructor): returns an object for manipulating the RGB ring. &lt;code&gt;&amp;lt;offset&amp;gt;&lt;/code&gt; defines the LED with index 0.&lt;/li&gt;&#xA;&lt;li&gt;for other methods, see &lt;a href=&#34;../../ucuq/api#ucuqws2812&#34;&gt;&lt;code&gt;ucuq.WS2812&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;oled&#34;&gt;&lt;em&gt;OLED&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#oled&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.ravel.OLED()&lt;/code&gt; (constructor): returns an object for manipulating the &lt;em&gt;OLED&lt;/em&gt; display;&lt;/li&gt;&#xA;&lt;li&gt;for other methods, see &lt;a href=&#34;../../ucuq/api#ucuqssd1306_i2c&#34;&gt;&lt;code&gt;ucuq.SSD1306_I2C&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;lcd&#34;&gt;&lt;em&gt;LCD&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#lcd&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.ravel.LCD()&lt;/code&gt; (constructor): returns an object for manipulating an LCD display;&lt;/li&gt;&#xA;&lt;li&gt;for other methods, see &lt;a href=&#34;../../ucuq/api#ucuqhd44780_i2c&#34;&gt;&lt;code&gt;ucuq.HD44780_I2C&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;upper&#34;&gt;&lt;em&gt;Upper&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#upper&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.ravel.Upper()&lt;/code&gt; (constructor): returns an object for controlling the upper servo;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Upper.set(&amp;lt;value&amp;gt;)&lt;/code&gt;: sets the servo to the value &lt;code&gt;&amp;lt;value&amp;gt;&lt;/code&gt; (between 0 and 6554, inclusive);&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Upper.get()&lt;/code&gt;: returns the servo’s position;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Upper.park()&lt;/code&gt;: sets the servo to its rest position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;lower&#34;&gt;&lt;em&gt;Lower&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#lower&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.ravel.Lower()&lt;/code&gt; (constructor): returns an object used to manipulate the upper servomotor;&lt;/li&gt;&#xA;&lt;li&gt;for other methods, see &lt;a href=&#34;#upper&#34;&gt;&lt;code&gt;ucuq.ravel.Upper&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;ravel&#34;&gt;&lt;em&gt;Ravel&lt;/em&gt;&lt;a class=&#34;anchor&#34; href=&#34;#ravel&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ucuq.Ravel()&lt;/code&gt; (constructor): returns an object used to manipulate the entire kit;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.raz()&lt;/code&gt;: resets all components of the kit;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.buzzer()&lt;/code&gt;: returns the kit’s &lt;em&gt;Buzzer&lt;/em&gt; object;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.ring()&lt;/code&gt;: returns the kit’s &lt;em&gt;Ring&lt;/em&gt; object;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.lcd()&lt;/code&gt;: returns the kit’s &lt;em&gt;LCD&lt;/em&gt; object;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.oled()&lt;/code&gt;: returns the kit’s &lt;em&gt;OLED&lt;/em&gt; object;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.upper()&lt;/code&gt;: returns the kit’s &lt;em&gt;Upper&lt;/em&gt; object;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.lower()&lt;/code&gt;: returns the kit’s &lt;em&gt;Lower&lt;/em&gt; object;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ravel.displayRingGauges()&lt;/code&gt;: displays a gauge on the LCD showing the RGB values of each LED in the ring; requires a prior call to &lt;code&gt;LCD.uploadUpwardGaugeChars()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;constants&#34;&gt;Constants&lt;a class=&#34;anchor&#34; href=&#34;#constants&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;SERVO_MAX&lt;/code&gt;: maximum value for the position of the &lt;em&gt;Upper&lt;/em&gt; and &lt;em&gt;Lower&lt;/em&gt; servos;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RING_MAX&lt;/code&gt;: maximum value for each color (R, G, and B) of the &lt;em&gt;Ring&lt;/em&gt; LEDs;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RING_SIZE&lt;/code&gt;: number of LEDs in the ring;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;OLED_WIDTH&lt;/code&gt;: number of horizontal pixels on the OLED screen;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;OLED_HEIGHT&lt;/code&gt;: number of vertical pixels on the OLED screen;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LCD_WIDTH&lt;/code&gt;: number of characters per line on the LCD display;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LCD_HEIGHT&lt;/code&gt;: number of lines on the LCD display.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Building the Ravel kit</title>
				<link>/en/ravel/building/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/en/ravel/building/</guid>
				<description>&lt;h1 id=&#34;building-the-ravel-kit&#34;&gt;Building the Ravel Kit&lt;a class=&#34;anchor&#34; href=&#34;#building-the-ravel-kit&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;NOTE: click on a photo to view an enlarged version.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;overview-of-components&#34;&gt;Overview of Components&lt;a class=&#34;anchor&#34; href=&#34;#overview-of-components&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A photo showing almost all the components in the kit. The only ones missing are those related to the servos.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/Kits/Ravel/Bits.webp&#34;&gt;&lt;img src=&#34;/Kits/Ravel/Bits_thumb.webp&#34; alt=&#34;Components&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-microcontroller&#34;&gt;The Microcontroller&lt;a class=&#34;anchor&#34; href=&#34;#the-microcontroller&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The microcontroller is an ESP32-C3 SuperMini.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/Kits/Ravel/ESP32.webp&#34;&gt;&lt;img src=&#34;/Kits/Ravel/ESP32_thumb.webp&#34; alt=&#34;ESP32&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-buzzer&#34;&gt;The Buzzer&lt;a class=&#34;anchor&#34; href=&#34;#the-buzzer&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The buzzer is a &lt;em&gt;&lt;strong&gt;passive&lt;/strong&gt;&lt;/em&gt; buzzer, meaning you can adjust the frequency of the sound it emits, unlike an &lt;em&gt;&lt;strong&gt;active&lt;/strong&gt;&lt;/em&gt; buzzer. It is driven by a &lt;a href=&#34;https://en.wikipedia.org/wiki/Pulse-width_modulation&#34;&gt;&lt;em&gt;PWM&lt;/em&gt;&lt;/a&gt; signal. Additionally, you can influence the pitch and volume of the sound to some extent by adjusting the &lt;em&gt;PWM&lt;/em&gt; signal ratio.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
