<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>https://wikisofia.cz/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ThermoDream</id>
	<title>Wikisofia - Příspěvky uživatele [cs]</title>
	<link rel="self" type="application/atom+xml" href="https://wikisofia.cz/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ThermoDream"/>
	<link rel="alternate" type="text/html" href="https://wikisofia.cz/wiki/Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/ThermoDream"/>
	<updated>2026-05-30T13:40:40Z</updated>
	<subtitle>Příspěvky uživatele</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53153</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53153"/>
		<updated>2018-04-02T13:57:56Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: /* Fotodokumentace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARDUINO Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Naším cílem bylo vytvořit projekt, který propojí softwarové programování a hardwarová čidla tak, aby program ovlivňoval i reálný svět okolo.&lt;br /&gt;
&lt;br /&gt;
Proto jsem se rozhodli postavit jednotku, jejímž základem bude teploměr, který ve spojení s příslušným programem bude vybírat hudbu v závislosti na teplotě v místností.&lt;br /&gt;
&lt;br /&gt;
Smyslem našeho nápadu byl fakt, že různí DJs takto častokrát při míchání hudby postupují sami zcela automaticky. Proto nás napadlo proces výběru hudby s ohledem na aktuální stav party zautomatizovat plně.&lt;br /&gt;
&lt;br /&gt;
Pokud tedy teplota v místnosti nebezpečně stoupá, je čas tanečníky trochu uklidnit a pustit jim pomalejší hudbu, aby se party nevymkla kontrole.&lt;br /&gt;
&lt;br /&gt;
Když teplota začne naopak příliš padat, nás DJ modul se pokusí tanečníky rozhýbat přehráváním rychlejšího hudby. Když se lidé tancem zahřejí, teplota by měla začít stoupat.&lt;br /&gt;
&lt;br /&gt;
Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);zmín&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Hledali jsme cestu, jak spojit naše znalosti a HW možnosti s naším záměrem.      &lt;br /&gt;
&lt;br /&gt;
Původně jsme doufali v plně automatický výběr hudby, který by DJ modul realizoval prostřednictvím API ze Spotify. Modul sám by podle teploty vybíral rychlejší nebo pomalejší skladby. Teplotu by napároval s určitým hudebním stylem nebo BPM skladeb a podle toho by je vybíral.      &lt;br /&gt;
&lt;br /&gt;
Ukázalo se však, že takovéto propojení API je nad naše možnosti a časové dispozice kurzu. Proto jsme zvolili poloautomatické řešení. Modul v závislosti na teplotě pouští hudbu z několika playlistů, které ručně vytvoříme.      &lt;br /&gt;
&lt;br /&gt;
Toto řešení dává nakonec dobrý smysl. Ať už je to party taneční, rocková nebo metalová, v rukou DJ vždy zůstává možnosti předem vybrat skladby, které mají hrát. DJ modul už pak vybírá vhodný čas k jejich přehrání podle toho, jak moc aktuálně lidé tančí, a tak zvyšují nebo snižují teplotu v místnosti.       &lt;br /&gt;
&lt;br /&gt;
Zbývalo jen samotné naprogramování ovladače Spotify, který spouští vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript.       &lt;br /&gt;
&lt;br /&gt;
Ohledně hardware jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu. Schémata zapojení komponent můžete nalézt ve výše zmíněných tutoriálech.        &lt;br /&gt;
&lt;br /&gt;
V momentálním nastavení se hudba začne měnit při teplotním skoku zhruba o dva stupně. Teplotní rozsah a granularita pro přepnutí playlistů lze nastavovat úpravou kódu.      &lt;br /&gt;
&lt;br /&gt;
DJ modul je také napojen na několik diod, které blikají podle beatů v přehrávané hudbě - čím silnější beat, tím výraznější světelná odezva.      &lt;br /&gt;
&lt;br /&gt;
V budoucnu by DJ modul mohl být místo diod ovládat přímo světla v sále.      &lt;br /&gt;
&lt;br /&gt;
Během projektu jsme neustále konzultovali s dalšími vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Foto1.jpg&lt;br /&gt;
File:Foto2.jpg&lt;br /&gt;
File:Foto3.jpg&lt;br /&gt;
File:c4.jpg&lt;br /&gt;
File:5.jpg&lt;br /&gt;
File:6.jpg&lt;br /&gt;
File:foto11.jpg&lt;br /&gt;
File:foto12.jpg&lt;br /&gt;
File:foto13.jpg&lt;br /&gt;
File:foto14.jpg&lt;br /&gt;
File:foto15.jpg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53152</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53152"/>
		<updated>2018-04-02T13:54:23Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: /* Fotodokumentace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARDUINO Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Naším cílem bylo vytvořit projekt, který propojí softwarové programování a hardwarová čidla tak, aby program ovlivňoval i reálný svět okolo.&lt;br /&gt;
&lt;br /&gt;
Proto jsem se rozhodli postavit jednotku, jejímž základem bude teploměr, který ve spojení s příslušným programem bude vybírat hudbu v závislosti na teplotě v místností.&lt;br /&gt;
&lt;br /&gt;
Smyslem našeho nápadu byl fakt, že různí DJs takto častokrát při míchání hudby postupují sami zcela automaticky. Proto nás napadlo proces výběru hudby s ohledem na aktuální stav party zautomatizovat plně.&lt;br /&gt;
&lt;br /&gt;
Pokud tedy teplota v místnosti nebezpečně stoupá, je čas tanečníky trochu uklidnit a pustit jim pomalejší hudbu, aby se party nevymkla kontrole.&lt;br /&gt;
&lt;br /&gt;
Když teplota začne naopak příliš padat, nás DJ modul se pokusí tanečníky rozhýbat přehráváním rychlejšího hudby. Když se lidé tancem zahřejí, teplota by měla začít stoupat.&lt;br /&gt;
&lt;br /&gt;
Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);zmín&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Hledali jsme cestu, jak spojit naše znalosti a HW možnosti s naším záměrem.      &lt;br /&gt;
&lt;br /&gt;
Původně jsme doufali v plně automatický výběr hudby, který by DJ modul realizoval prostřednictvím API ze Spotify. Modul sám by podle teploty vybíral rychlejší nebo pomalejší skladby. Teplotu by napároval s určitým hudebním stylem nebo BPM skladeb a podle toho by je vybíral.      &lt;br /&gt;
&lt;br /&gt;
Ukázalo se však, že takovéto propojení API je nad naše možnosti a časové dispozice kurzu. Proto jsme zvolili poloautomatické řešení. Modul v závislosti na teplotě pouští hudbu z několika playlistů, které ručně vytvoříme.      &lt;br /&gt;
&lt;br /&gt;
Toto řešení dává nakonec dobrý smysl. Ať už je to party taneční, rocková nebo metalová, v rukou DJ vždy zůstává možnosti předem vybrat skladby, které mají hrát. DJ modul už pak vybírá vhodný čas k jejich přehrání podle toho, jak moc aktuálně lidé tančí, a tak zvyšují nebo snižují teplotu v místnosti.       &lt;br /&gt;
&lt;br /&gt;
Zbývalo jen samotné naprogramování ovladače Spotify, který spouští vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript.       &lt;br /&gt;
&lt;br /&gt;
Ohledně hardware jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu. Schémata zapojení komponent můžete nalézt ve výše zmíněných tutoriálech.        &lt;br /&gt;
&lt;br /&gt;
V momentálním nastavení se hudba začne měnit při teplotním skoku zhruba o dva stupně. Teplotní rozsah a granularita pro přepnutí playlistů lze nastavovat úpravou kódu.      &lt;br /&gt;
&lt;br /&gt;
DJ modul je také napojen na několik diod, které blikají podle beatů v přehrávané hudbě - čím silnější beat, tím výraznější světelná odezva.      &lt;br /&gt;
&lt;br /&gt;
V budoucnu by DJ modul mohl být místo diod ovládat přímo světla v sále.      &lt;br /&gt;
&lt;br /&gt;
Během projektu jsme neustále konzultovali s dalšími vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Foto1.jpg&lt;br /&gt;
File:Foto2.jpg&lt;br /&gt;
File:Foto3.jpg&lt;br /&gt;
File:c4.jpg&lt;br /&gt;
File:5.jpg&lt;br /&gt;
File:6.jpg&lt;br /&gt;
File:foto7.jpg&lt;br /&gt;
File:foto9.jpg&lt;br /&gt;
File:foto10.jpg&lt;br /&gt;
File:foto11.jpg&lt;br /&gt;
File:foto12.jpg&lt;br /&gt;
File:foto13.jpg&lt;br /&gt;
File:foto14.jpg&lt;br /&gt;
File:foto15.jpg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto15.jpg&amp;diff=53151</id>
		<title>Soubor:Foto15.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto15.jpg&amp;diff=53151"/>
		<updated>2018-04-02T13:52:47Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto14.jpg&amp;diff=53150</id>
		<title>Soubor:Foto14.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto14.jpg&amp;diff=53150"/>
		<updated>2018-04-02T13:52:38Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto13.jpg&amp;diff=53149</id>
		<title>Soubor:Foto13.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto13.jpg&amp;diff=53149"/>
		<updated>2018-04-02T13:52:29Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto12.jpg&amp;diff=53148</id>
		<title>Soubor:Foto12.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto12.jpg&amp;diff=53148"/>
		<updated>2018-04-02T13:52:22Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto11.jpg&amp;diff=53147</id>
		<title>Soubor:Foto11.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto11.jpg&amp;diff=53147"/>
		<updated>2018-04-02T13:52:09Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto10.jpg&amp;diff=53146</id>
		<title>Soubor:Foto10.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto10.jpg&amp;diff=53146"/>
		<updated>2018-04-02T13:51:59Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto9.jpg&amp;diff=53145</id>
		<title>Soubor:Foto9.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto9.jpg&amp;diff=53145"/>
		<updated>2018-04-02T13:51:50Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto7.jpg&amp;diff=53144</id>
		<title>Soubor:Foto7.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto7.jpg&amp;diff=53144"/>
		<updated>2018-04-02T13:51:26Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:6.jpg&amp;diff=53143</id>
		<title>Soubor:6.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:6.jpg&amp;diff=53143"/>
		<updated>2018-04-02T13:51:18Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:5.jpg&amp;diff=53142</id>
		<title>Soubor:5.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:5.jpg&amp;diff=53142"/>
		<updated>2018-04-02T13:51:11Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:C4.jpg&amp;diff=53141</id>
		<title>Soubor:C4.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:C4.jpg&amp;diff=53141"/>
		<updated>2018-04-02T13:50:58Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto3.jpg&amp;diff=53140</id>
		<title>Soubor:Foto3.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto3.jpg&amp;diff=53140"/>
		<updated>2018-04-02T13:50:50Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto2.jpg&amp;diff=53139</id>
		<title>Soubor:Foto2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto2.jpg&amp;diff=53139"/>
		<updated>2018-04-02T13:50:43Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto1.jpg&amp;diff=53138</id>
		<title>Soubor:Foto1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto1.jpg&amp;diff=53138"/>
		<updated>2018-04-02T13:50:36Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: ThermoDream načtena nová verze &amp;amp;quot;Soubor:Foto1.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Foto1.jpg&amp;diff=53137</id>
		<title>Soubor:Foto1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Foto1.jpg&amp;diff=53137"/>
		<updated>2018-04-02T13:46:51Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:IMFoto_1.jpg&amp;diff=53136</id>
		<title>Soubor:IMFoto 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:IMFoto_1.jpg&amp;diff=53136"/>
		<updated>2018-04-02T13:45:08Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Tro.jpg&amp;diff=53135</id>
		<title>Soubor:Tro.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Tro.jpg&amp;diff=53135"/>
		<updated>2018-04-02T09:24:09Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Ro.jpg&amp;diff=53134</id>
		<title>Soubor:Ro.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Ro.jpg&amp;diff=53134"/>
		<updated>2018-04-02T09:24:07Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Ko.jpg&amp;diff=53133</id>
		<title>Soubor:Ko.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Ko.jpg&amp;diff=53133"/>
		<updated>2018-04-02T09:24:03Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:O.jpg&amp;diff=53132</id>
		<title>Soubor:O.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:O.jpg&amp;diff=53132"/>
		<updated>2018-04-02T09:24:02Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:N.jpg&amp;diff=53131</id>
		<title>Soubor:N.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:N.jpg&amp;diff=53131"/>
		<updated>2018-04-02T09:23:59Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Mo.jpg&amp;diff=53130</id>
		<title>Soubor:Mo.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Mo.jpg&amp;diff=53130"/>
		<updated>2018-04-02T09:23:56Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:Lo.jpg&amp;diff=53129</id>
		<title>Soubor:Lo.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:Lo.jpg&amp;diff=53129"/>
		<updated>2018-04-02T09:23:54Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:K.jpg&amp;diff=53128</id>
		<title>Soubor:K.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:K.jpg&amp;diff=53128"/>
		<updated>2018-04-02T09:23:48Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:H.jpg&amp;diff=53127</id>
		<title>Soubor:H.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:H.jpg&amp;diff=53127"/>
		<updated>2018-04-02T09:23:44Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:G.jpg&amp;diff=53126</id>
		<title>Soubor:G.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:G.jpg&amp;diff=53126"/>
		<updated>2018-04-02T09:23:40Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:F.jpg&amp;diff=53125</id>
		<title>Soubor:F.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:F.jpg&amp;diff=53125"/>
		<updated>2018-04-02T09:23:37Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:E.jpg&amp;diff=53124</id>
		<title>Soubor:E.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:E.jpg&amp;diff=53124"/>
		<updated>2018-04-02T09:23:34Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:D.jpg&amp;diff=53123</id>
		<title>Soubor:D.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:D.jpg&amp;diff=53123"/>
		<updated>2018-04-02T09:23:31Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:C.jpg&amp;diff=53122</id>
		<title>Soubor:C.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:C.jpg&amp;diff=53122"/>
		<updated>2018-04-02T09:23:28Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:B.jpg&amp;diff=53121</id>
		<title>Soubor:B.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:B.jpg&amp;diff=53121"/>
		<updated>2018-04-02T09:23:25Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=Soubor:A.jpg&amp;diff=53120</id>
		<title>Soubor:A.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=Soubor:A.jpg&amp;diff=53120"/>
		<updated>2018-04-02T09:23:22Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53119</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53119"/>
		<updated>2018-03-30T21:16:55Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARDUINO Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Naším cílem bylo vytvořit projekt, který propojí softwarové programování a hardwarová čidla tak, aby program ovlivňoval i reálný svět okolo.&lt;br /&gt;
&lt;br /&gt;
Proto jsem se rozhodli postavit jednotku, jejímž základem bude teploměr, který ve spojení s příslušným programem bude vybírat hudbu v závislosti na teplotě v místností.&lt;br /&gt;
&lt;br /&gt;
Smyslem našeho nápadu byl fakt, že různí DJs takto častokrát při míchání hudby postupují sami zcela automaticky. Proto nás napadlo proces výběru hudby s ohledem na aktuální stav party zautomatizovat plně.&lt;br /&gt;
&lt;br /&gt;
Pokud tedy teplota v místnosti nebezpečně stoupá, je čas tanečníky trochu uklidnit a pustit jim pomalejší hudbu, aby se party nevymkla kontrole.&lt;br /&gt;
&lt;br /&gt;
Když teplota začne naopak příliš padat, nás DJ modul se pokusí tanečníky rozhýbat přehráváním rychlejšího hudby. Když se lidé tancem zahřejí, teplota by měla začít stoupat.&lt;br /&gt;
&lt;br /&gt;
Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);zmín&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Hledali jsme cestu, jak spojit naše znalosti a HW možnosti s naším záměrem.      &lt;br /&gt;
&lt;br /&gt;
Původně jsme doufali v plně automatický výběr hudby, který by DJ modul realizoval prostřednictvím API ze Spotify. Modul sám by podle teploty vybíral rychlejší nebo pomalejší skladby. Teplotu by napároval s určitým hudebním stylem nebo BPM skladeb a podle toho by je vybíral.      &lt;br /&gt;
&lt;br /&gt;
Ukázalo se však, že takovéto propojení API je nad naše možnosti a časové dispozice kurzu. Proto jsme zvolili poloautomatické řešení. Modul v závislosti na teplotě pouští hudbu z několika playlistů, které ručně vytvoříme.      &lt;br /&gt;
&lt;br /&gt;
Toto řešení dává nakonec dobrý smysl. Ať už je to party taneční, rocková nebo metalová, v rukou DJ vždy zůstává možnosti předem vybrat skladby, které mají hrát. DJ modul už pak vybírá vhodný čas k jejich přehrání podle toho, jak moc aktuálně lidé tančí, a tak zvyšují nebo snižují teplotu v místnosti.       &lt;br /&gt;
&lt;br /&gt;
Zbývalo jen samotné naprogramování ovladače Spotify, který spouští vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript.       &lt;br /&gt;
&lt;br /&gt;
Ohledně hardware jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu. Schémata zapojení komponent můžete nalézt ve výše zmíněných tutoriálech.        &lt;br /&gt;
&lt;br /&gt;
V momentálním nastavení se hudba začne měnit při teplotním skoku zhruba o dva stupně. Teplotní rozsah a granularita pro přepnutí playlistů lze nastavovat úpravou kódu.      &lt;br /&gt;
&lt;br /&gt;
DJ modul je také napojen na několik diod, které blikají podle beatů v přehrávané hudbě - čím silnější beat, tím výraznější světelná odezva.      &lt;br /&gt;
&lt;br /&gt;
V budoucnu by DJ modul mohl být místo diod ovládat přímo světla v sále.      &lt;br /&gt;
&lt;br /&gt;
Během projektu jsme neustále konzultovali s dalšími vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53118</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53118"/>
		<updated>2018-03-30T21:04:33Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARDUINO Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Naším cílem bylo vytvořit projekt, který propojí softwarové programování a hardwarová čidla tak, aby program ovlivňoval i reálný svět okolo.&lt;br /&gt;
&lt;br /&gt;
Proto jsem se rozhodli postavit jednotku, jejímž základem bude teploměr, který ve spojení s příslušným programem bude vybírat hudbu v závislosti na teplotě v místností.&lt;br /&gt;
&lt;br /&gt;
Smyslem našeho nápadu byl fakt, že různí DJs takto častokrát při míchání hudby postupují sami zcela automaticky. Proto nás napadlo proces výběru hudby s ohledem na aktuální stav party zautomatizovat plně.&lt;br /&gt;
&lt;br /&gt;
Pokud tedy teplota v místnosti nebezpečně stoupá, je čas tanečníky trochu uklidnit a pustit jim pomalejší hudbu, aby se party nevymkla kontrole.&lt;br /&gt;
&lt;br /&gt;
Když teplota začne naopak příliš padat, nás DJ modul se pokusí tanečníky rozhýbat přehráváním rychlejšího hudby. Když se lidé tancem zahřejí, teplota by měla začít stoupat.&lt;br /&gt;
&lt;br /&gt;
Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);zmín&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu.  Schémata zapojení komponent můžete nalézt ve výše zmíněných tutoriálech. Závěrečnou částí bylo napogramování ovladače Spotify, který spouštěl vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript. Během projektu jsme neustále konzultovali s dalšími vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53117</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53117"/>
		<updated>2018-03-30T18:09:33Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARDUINO Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Hudba se začne měnit se skokem zhruba dvou stupňů.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi se rozsvicí různá LED světýlka. Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);zmín&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu.  Schémata zapojení komponent můžete nalézt ve výše zmíněných tutoriálech. Závěrečnou částí bylo napogramování ovladače Spotify, který spouštěl vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript. Během projektu jsme neustále konzultovali s dalšími vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53116</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53116"/>
		<updated>2018-03-30T18:00:48Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Hudba se začne měnit se skokem zhruba dvou stupňů.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi se rozsvicí různá LED světýlka. Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);zmín&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu.  Schémata zapojení komponent můžete nalézt ve výše zmíněných tutoriálech. Závěrečnou částí bylo napogramování ovladače Spotify, který spouštěl vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript. Během projektu jsme neustále konzultovali s dalšími vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53115</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53115"/>
		<updated>2018-03-30T17:58:13Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Hudba se začne měnit se skokem zhruba dvou stupňů.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi se rozsvicí různá LED světýlka. Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu.  Závěrečnou částí bylo napogramování ovladače Spotify, který spouštěl vybrané playlisty na základě dat ze sériového portu (v našem případě škála hodnot založená na teplotě v místnosti). Ovladač byl naprogramován Janem Vlnasem pomocí jazyka JavaScript. Během projektu jsme neustále konzultovali s vyučujícím ze SNM, FF UK i The Cave.   &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53114</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53114"/>
		<updated>2018-03-30T17:52:44Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Hudba se začne měnit se skokem zhruba dvou stupňů.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi se rozsvicí různá LED světýlka. Projekt byl uskutečněn v rámci workshopu Open Hardware Studií nových médií na FF UK ( http://novamedia.ff.cuni.cz/open-hardware-2018/ ) v The Cave (https://thecave.cz/en/).&lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu. Během projektu jsme neustále konzultovali s vyučujícím ze SNM, FF UK i The Cave.  &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53113</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53113"/>
		<updated>2018-03-30T17:45:59Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a poradou s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. Následovně bylo nutné zapojit všechny LED komponenty, aby reagovaly na hlasitost beatu. Během projektu jsme neustále konzultovali s vyučujícím ze SNM, FF UK i The Cave.  &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53112</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53112"/>
		<updated>2018-03-30T17:43:44Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: /* Party teploměr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis vývoje a konečné verze vlastního produktu ==&lt;br /&gt;
&lt;br /&gt;
Projekt začal průzkumem možného použití komponent a konzultacemi s vyučujícími. Následovně jsme nalezli tutoriály pro použití senzoru DHT22 a pro vytvoření detektoru BPM. &lt;br /&gt;
&lt;br /&gt;
== Fotodokumentace ==&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53111</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53111"/>
		<updated>2018-03-30T17:39:45Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
&lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53110</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53110"/>
		<updated>2018-03-30T17:39:14Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
== Popis ==&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
== Použitý hardware a software ==&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
== Odkazy na knihovnu arduina ==&lt;br /&gt;
'''DHT sensor''' &lt;br /&gt;
https://github.com/adafruit/DHT-sensor-library&lt;br /&gt;
&lt;br /&gt;
'''TinkerKit'''&lt;br /&gt;
https://github.com/TinkerKit/TinkerKit&lt;br /&gt;
&lt;br /&gt;
'''TaskScheduler'''&lt;br /&gt;
https://github.com/arkhipenko/TaskScheduler&lt;br /&gt;
&lt;br /&gt;
== Jiné knihovny ==&lt;br /&gt;
'''Spotify Serial Control'''&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
== Použité tutoriály ==&lt;br /&gt;
https://create.arduino.cc/projecthub/Joao_Claro/arduino-beat-detector-d0a21f&lt;br /&gt;
&lt;br /&gt;
http://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní zdrojový kód ==&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53109</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53109"/>
		<updated>2018-03-30T17:28:14Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
&lt;br /&gt;
== Tým ==&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
=== Popis ===&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
=== Použitý hardware a software ===&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
=== Odkazy na knihovnu arduina ===&lt;br /&gt;
&lt;br /&gt;
=== Vlastní zdrojový kód ===&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53108</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53108"/>
		<updated>2018-03-30T17:28:04Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Party teploměr =&lt;br /&gt;
=== Tým ===&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
=== Popis ===&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
=== Použitý hardware a software ===&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
=== Odkazy na knihovnu arduina ===&lt;br /&gt;
&lt;br /&gt;
=== Vlastní zdrojový kód ===&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53107</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53107"/>
		<updated>2018-03-30T17:26:04Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Party teploměr ==&lt;br /&gt;
&lt;br /&gt;
=== Tým ===&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
=== Popis ===&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
=== Použitý hardware a software ===&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
=== Odkazy na knihovnu arduina ===&lt;br /&gt;
&lt;br /&gt;
=== Vlastní zdrojový kód ===&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TinkerKit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;lt;TaskScheduler.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;include &amp;quot;DHT.h&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void sampleCallback();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Scheduler ts;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int lastState = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void dhtReadCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Read temperature as Celsius (the default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float t = dht.readTemperature();&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// Check if any reads failed and exit early (to try again).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (!isnan(t)) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int currentState = map(t, 15.00, 35.00, 1, 5);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (lastState != currentState) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(currentState);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lastState = currentState;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Serial.println(t);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float bassFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[2] = {0, 0}, yv[2] = {0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[1] = sample / 50.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[1];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float beatFilter(float sample) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;static float xv[3] = {0, 0, 0},&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[3] = {0, 0, 0};&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[0] = xv[1]; xv[1] = xv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xv[2] = sample / 2.7f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[0] = yv[1]; yv[1] = yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yv[2] = (xv[2] - xv[0])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return yv[2];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
define TRESHOLD 60.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int map2(float value, float min, float max) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;lt;min) return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value&amp;gt;max) return 255;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;return map(value,min,max,0,255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void sampleCallback() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float sample = (float)analogRead(0) - 503.f;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;float value = bassFilter(sample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;lt; 0)value = -value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = envelopeFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if ((taskSample.getRunCounter() % 20) == 0) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value = beatFilter(value);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;if (value &amp;gt; TRESHOLD)value = TRESHOLD;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, pwm);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
// defines for setting and clearing register bits&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef cbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifndef sbi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;endif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// Set ADC to 77khz, max for 10bit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbi(ADCSRA, ADPS2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbi(ADCSRA, ADPS0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
pinMode(O0, OUTPUT);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analogWrite(O0, 0);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Serial.begin(115200);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dht.begin();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.init();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskDht);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.addTask(taskSample);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskDht.forceNextIteration();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;taskSample.enable();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ts.execute();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53106</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53106"/>
		<updated>2018-03-30T17:23:55Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Party teploměr ==&lt;br /&gt;
&lt;br /&gt;
=== Tým ===&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
=== Popis ===&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
=== Použitý hardware a software ===&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
=== Odkazy na knihovnu arduina ===&lt;br /&gt;
&lt;br /&gt;
=== Vlastní zdrojový kód ===&lt;br /&gt;
#include &amp;lt;TinkerKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TaskScheduler.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;DHT.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
void dhtReadCallback();&lt;br /&gt;
&lt;br /&gt;
void sampleCallback();&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
DHT dht(3, DHT22); //DHT22 connected to pin 3&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Task taskDht(15000, TASK_FOREVER, &amp;amp;dhtReadCallback);&lt;br /&gt;
&lt;br /&gt;
Task taskSample(1, TASK_FOREVER, &amp;amp;sampleCallback);&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Scheduler ts;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
int lastState = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void dhtReadCallback() {&lt;br /&gt;
&lt;br /&gt;
// Read temperature as Celsius (the default)&lt;br /&gt;
&lt;br /&gt;
float t = dht.readTemperature();&lt;br /&gt;
 &lt;br /&gt;
 // Check if any reads failed and exit early (to try again).&lt;br /&gt;
&lt;br /&gt;
if (!isnan(t)) {&lt;br /&gt;
&lt;br /&gt;
int currentState = map(t, 15.00, 35.00, 1, 5); &lt;br /&gt;
&lt;br /&gt;
if (lastState != currentState) {&lt;br /&gt;
&lt;br /&gt;
Serial.println(currentState);&lt;br /&gt;
&lt;br /&gt;
lastState = currentState;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.println(t);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float bassFilter(float sample) {&lt;br /&gt;
&lt;br /&gt;
static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};&lt;br /&gt;
&lt;br /&gt;
xv[0] = xv[1]; xv[1] = xv[2];&lt;br /&gt;
&lt;br /&gt;
xv[2] = (sample) / 3.f; // change here to values close to 2, to adapt for stronger or weeker sources of line level audio&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
yv[0] = yv[1]; yv[1] = yv[2];&lt;br /&gt;
&lt;br /&gt;
yv[2] = (xv[2] - xv[0])&lt;br /&gt;
&lt;br /&gt;
+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);&lt;br /&gt;
&lt;br /&gt;
return yv[2];&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
float envelopeFilter(float sample) { //10hz low pass&lt;br /&gt;
&lt;br /&gt;
static float xv[2] = {0, 0}, yv[2] = {0, 0};&lt;br /&gt;
&lt;br /&gt;
xv[0] = xv[1];&lt;br /&gt;
&lt;br /&gt;
xv[1] = sample / 50.f;&lt;br /&gt;
&lt;br /&gt;
yv[0] = yv[1];&lt;br /&gt;
&lt;br /&gt;
yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);&lt;br /&gt;
&lt;br /&gt;
return yv[1];&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter&lt;br /&gt;
&lt;br /&gt;
float beatFilter(float sample) {&lt;br /&gt;
&lt;br /&gt;
static float xv[3] = {0, 0, 0},&lt;br /&gt;
&lt;br /&gt;
yv[3] = {0, 0, 0};&lt;br /&gt;
&lt;br /&gt;
xv[0] = xv[1]; xv[1] = xv[2];&lt;br /&gt;
&lt;br /&gt;
xv[2] = sample / 2.7f;&lt;br /&gt;
&lt;br /&gt;
yv[0] = yv[1]; yv[1] = yv[2];&lt;br /&gt;
&lt;br /&gt;
yv[2] = (xv[2] - xv[0])&lt;br /&gt;
&lt;br /&gt;
+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);&lt;br /&gt;
&lt;br /&gt;
return yv[2];&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
#define TRESHOLD 60.0&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
int map2(float value, float min, float max) {&lt;br /&gt;
&lt;br /&gt;
if (value&amp;lt;min) return 0;&lt;br /&gt;
&lt;br /&gt;
if (value&amp;gt;max) return 255;&lt;br /&gt;
&lt;br /&gt;
return map(value,min,max,0,255);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
void sampleCallback() {&lt;br /&gt;
&lt;br /&gt;
float sample = (float)analogRead(0) - 503.f;&lt;br /&gt;
&lt;br /&gt;
float value = bassFilter(sample);&lt;br /&gt;
&lt;br /&gt;
if (value &amp;lt; 0)value = -value;&lt;br /&gt;
&lt;br /&gt;
value = envelopeFilter(value);&lt;br /&gt;
&lt;br /&gt;
if ((taskSample.getRunCounter() % 20) == 0) {&lt;br /&gt;
&lt;br /&gt;
value = beatFilter(value);&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
if (value &amp;lt; 0)value = 0;&lt;br /&gt;
&lt;br /&gt;
if (value &amp;gt; TRESHOLD)value = TRESHOLD;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
int pwm = map(value, 0, TRESHOLD, 0, 255);&lt;br /&gt;
&lt;br /&gt;
analogWrite(O0, pwm);&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
analogWrite(9, map2(value, 0, TRESHOLD * 0.3333));&lt;br /&gt;
&lt;br /&gt;
analogWrite(6, map2(value, TRESHOLD * 0.3333, TRESHOLD * 0.6666));&lt;br /&gt;
&lt;br /&gt;
analogWrite(5, map2(value, TRESHOLD * 0.6666, TRESHOLD));&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
// defines for setting and clearing register bits&lt;br /&gt;
&lt;br /&gt;
#ifndef cbi&lt;br /&gt;
&lt;br /&gt;
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifndef sbi&lt;br /&gt;
&lt;br /&gt;
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
// Set ADC to 77khz, max for 10bit&lt;br /&gt;
&lt;br /&gt;
sbi(ADCSRA, ADPS2);&lt;br /&gt;
&lt;br /&gt;
cbi(ADCSRA, ADPS1);&lt;br /&gt;
&lt;br /&gt;
cbi(ADCSRA, ADPS0);&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
pinMode(O0, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
analogWrite(O0, 0);&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
dht.begin();&lt;br /&gt;
&lt;br /&gt;
ts.init();&lt;br /&gt;
&lt;br /&gt;
ts.addTask(taskDht);&lt;br /&gt;
&lt;br /&gt;
ts.addTask(taskSample);&lt;br /&gt;
&lt;br /&gt;
taskDht.enable();&lt;br /&gt;
&lt;br /&gt;
taskDht.forceNextIteration();&lt;br /&gt;
&lt;br /&gt;
taskSample.enable();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
ts.execute();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53105</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53105"/>
		<updated>2018-03-29T08:52:15Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: /* Arduino komponenty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Party teploměr ==&lt;br /&gt;
&lt;br /&gt;
=== Tým ===&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
=== Popis ===&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
=== Použitý hardware a software ===&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
TinkerKit PowerLED &lt;br /&gt;
&lt;br /&gt;
BreadBoard &lt;br /&gt;
&lt;br /&gt;
Teploměr DHT22&lt;br /&gt;
&lt;br /&gt;
Green LED&lt;br /&gt;
&lt;br /&gt;
Red LED&lt;br /&gt;
&lt;br /&gt;
Yellow LED &lt;br /&gt;
&lt;br /&gt;
==== Jiné komponenty ====&lt;br /&gt;
CINCH kabel 3.5mm + rozdvojka &lt;br /&gt;
&lt;br /&gt;
=== Odkazy na knihovnu arduina a vlastní zdrojový kód ===&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
	<entry>
		<id>https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53104</id>
		<title>Uživatel:ThermoDream</title>
		<link rel="alternate" type="text/html" href="https://wikisofia.cz/w/index.php?title=U%C5%BEivatel:ThermoDream&amp;diff=53104"/>
		<updated>2018-03-28T11:28:13Z</updated>

		<summary type="html">&lt;p&gt;ThermoDream: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Party teploměr ==&lt;br /&gt;
&lt;br /&gt;
=== Tým ===&lt;br /&gt;
'''Matěj Čermák '''&lt;br /&gt;
&lt;br /&gt;
'''Jakub Hein  '''&lt;br /&gt;
&lt;br /&gt;
'''Julie Klimentová '''&lt;br /&gt;
&lt;br /&gt;
'''Darya Tsitová  '''&lt;br /&gt;
&lt;br /&gt;
=== Popis ===&lt;br /&gt;
Teploměr, co měří teplotu v místnosti, kde se odehrává party. Čím nižší teplota, tím vyšší rychlost hudby, aby se lidé zahřáli. To samé platí pro opačný případ - čím vyšší teplota, tím je hudba klidnější. Je nutné otestovat citlivost stupnice - podle jak vysokého teplotního skoku (0,5/0,25/0,10) se má hudba měnit.Teploměr by mohl fungovat jako DJ modul a být napojen na světla - v naší mini verzi by se mohla rozsvítit různá LED světýlka.    &lt;br /&gt;
&lt;br /&gt;
=== Použitý hardware a software ===&lt;br /&gt;
&lt;br /&gt;
==== '''Arduino komponenty''' ====&lt;br /&gt;
Arduino UNO &lt;br /&gt;
&lt;br /&gt;
TinkerKit Sensor Shield &lt;br /&gt;
&lt;br /&gt;
BreadBoard&lt;br /&gt;
=== Odkazy na knihovnu arduina a vlastní zdrojový kód ===&lt;br /&gt;
&lt;br /&gt;
=== Popis vývoje a konečné verze vlastního produktu ===&lt;br /&gt;
&lt;br /&gt;
=== Fotodokumentace ===&lt;br /&gt;
===&amp;lt;nowiki/&amp;gt;===&lt;/div&gt;</summary>
		<author><name>ThermoDream</name></author>
		
	</entry>
</feed>