Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Arduino coby termostat

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Nezařaditelné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
arduino2015



Založen: Jan 30, 2015
Příspěvky: 158

PříspěvekZaslal: pá leden 30 2015, 19:05    Předmět: Arduino coby termostat Citovat

http://www.ebastlirna.cz/modules.php?name=Forums&file=profile&mode=viewprofile&u=35121
Jsem to já ztratil sem heslo k e-mailový schránce.



http://arduino.cz/termostat-s-raspberry-pi/

Ahoj, zajímalo by mě, zda by se tento program v Pythonu dal nějak překonvertovat do prostředí Arduina. Pokud nedal, potřebuji vysvětlit princip funkce tohoto programu (je to nějaký jiný vzorek, uzpůsobený přímo pro Arduino, který mi ale přijde velice skromný):

/*
Temperature Sensor
Reads an Analog Devices TMP36GT9Z-ND or AD22100 temperature sensor on analog pin 0
and converts the voltage value to temperature.
Connect Pin 1 to 5 V.
Connect Pin 2 to A0.
Connect Pin 3 to Gnd.
*/

//#if defined(ARDUINO) && ARDUINO >= 100
// #include "Arduino.h"
// #else
// #include "WProgram.h"
// #endif


int TsensorPin = A0; // select the input pin for the sensor
int ledPin = 13; // select the pin for the LED
int wait = 500; // 1/2 wait time between measurements
double temperature = 0.0;

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(TsensorPin, INPUT); // and set pins to input.
pinMode(ledPin, OUTPUT); // Set Temperature Sensor Pin
Serial.begin (115200); // Set up the Serial Connection.
Serial.println("Reading the Temperature Sensor"); // Greet user.
}

void loop() {
temperature = TMP36GT_AI_value_to_Celsius(analogRead(TsensorPin)); // read temperature
// temperature = AD22100K_AI_value_to_Celsius(analogRead(TsensorPin)); // read temperature
Serial.print("Temperature read (C): ");
Serial.println(temperature,2); // write temperature to Serial
digitalWrite(ledPin, HIGH); // turn the ledPin on
delay(wait); // stop the program for <wait> milliseconds:
digitalWrite(ledPin, LOW); // turn the ledPin off:
delay(wait); // stop the program for for <wait> milliseconds:

}

double TMP36GT_AI_value_to_Celsius(int AI_value)
{ // Convert Analog-input value to temperature
float voltage;
voltage = AI_value * (5000.0/1024); // Sensor value in mV:
return ((voltage -750) /10) +25; // Temperature according to datasheet: 750 mV = 25 °C
// 10 mV / °C
}

double AD22100K_AI_value_to_Celsius(int AI_value)
{ // Convert Analog-input value to temperature
float voltage;
voltage = AI_value * (5000.0/1024); // Sensor value in mV:
return (voltage -1375) /22.5; // Temperature according to datasheet: 1.375 V <-> 0 °C
// 22.5 mV / °C; Ratiometric measurement, conversion valid for 5 V!
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jirka525



Založen: May 22, 2013
Příspěvky: 325
Bydliště: Psáry JN79GW

PříspěvekZaslal: pá leden 30 2015, 19:52    Předmět: Citovat

To je psáno přímo v programovacím jazyce arduino IDE. Můžeš to překopírovat přeložit a downloadovat. Spoustu příruček o Arduinu najdeš na internetu, nemá smysl aby ti tady někdo, krok za krokem vysvětloval jednotlivé instrukce. Jestli budeš mít konkrétní dotaz, pošli SZ.
_________________
Jirka
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
arduino2015



Založen: Jan 30, 2015
Příspěvky: 158

PříspěvekZaslal: pá leden 30 2015, 22:29    Předmět: Citovat

Connect Pin 1 to 5 V.
Connect Pin 2 to A0.
Connect Pin 3 to Gnd.

To jsou instrukce o propojení pinů Arduina a kontaktů na čidle snímače teploty, že?


Já si jen nejsem jist, jak to přesně funguje... co za teploty to snímá a jak to s nimi pracuje? Najdu tu číselnou hodnotu "nějaký" teploty, ale už z toho nevím, co to vlastně dělá... při jaký teplotě to spustí dohřev, a při jaký ho to přeruší?

PS: tím "program v pythonu" jsem myslel program na tomto odkaze, viz horní část příspěvku: "http://arduino.cz/termostat-s-raspberry-pi/ "
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jirka525



Založen: May 22, 2013
Příspěvky: 325
Bydliště: Psáry JN79GW

PříspěvekZaslal: pá leden 30 2015, 23:11    Předmět: Citovat

Asi by ses měl nejprve než přistoupíš k prohramování seznámit s HW arduina a čidla. Zkusím několika slovy rychlokurs aby ses alespoň dokázal trochu orientovat.

Toto je komentář negeneruje se žádný kód, je to pouze pro popis programu a je zde skutečně napsáno, jak máš připojit čidlo k Arduinu

/*
Temperature Sensor
Reads an Analog Devices TMP36GT9Z-ND or AD22100 temperature sensor on analog pin 0
and converts the voltage value to temperature.
Connect Pin 1 to 5 V.
Connect Pin 2 to A0.
Connect Pin 3 to Gnd.
*/

// - jednořádkový komentář

Deklarace proměnných - tady se definují proměnné, se kterými program následně pracuje

int TsensorPin = A0; // select the input pin for the sensor
int ledPin = 13; // select the pin for the LED
int wait = 500; // 1/2 wait time between measurements
double temperature = 0.0;


Inicializační funkce - tato část programu se provede pouze jednou, na začátku programu na nastaví nějaké výchozí podmínky pro program (konfiguruje V/V, kom. linku a pod.)

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(TsensorPin, INPUT); // and set pins to input.
pinMode(ledPin, OUTPUT); // Set Temperature Sensor Pin
Serial.begin (115200); // Set up the Serial Connection.
Serial.println("Reading the Temperature Sensor"); // Greet user.
}


Tělo programu, teprve tady se dozvíš, co program vlastně dělá. Vykonává se cyklicky po celou dobu kdy je CPU pod napětím
Program nejprve přečte teplotu, uloží do proměnné "temperature", ve formě textu odešle změřenou teplotu do sériové linky, zabliká LED a vrací se zpět na začátek na čtení teploty. Takže zatím žádná regulace, pouze výpis změřené teploty na sériový port

void loop() {
temperature = TMP36GT_AI_value_to_Celsius(analogRead(TsensorPin)); // read temperature
// temperature = AD22100K_AI_value_to_Celsius(analogRead(TsensorPin)); // read temperature
Serial.print("Temperature read (C): ");
Serial.println(temperature,2); // write temperature to Serial
digitalWrite(ledPin, HIGH); // turn the ledPin on
delay(wait); // stop the program for <wait> milliseconds:
digitalWrite(ledPin, LOW); // turn the ledPin off:
delay(wait); // stop the program for for <wait> milliseconds:

}


Tady jsou deklarované funkce pro čtení teploty

double TMP36GT_AI_value_to_Celsius(int AI_value)
{ // Convert Analog-input value to temperature
float voltage;
voltage = AI_value * (5000.0/1024); // Sensor value in mV:
return ((voltage -750) /10) +25; // Temperature according to datasheet: 750 mV = 25 °C
// 10 mV / °C
}

double AD22100K_AI_value_to_Celsius(int AI_value)
{ // Convert Analog-input value to temperature
float voltage;
voltage = AI_value * (5000.0/1024); // Sensor value in mV:
return (voltage -1375) /22.5; // Temperature according to datasheet: 1.375 V <-> 0 °C
// 22.5 mV / °C; Ratiometric measurement, conversion valid for 5 V!
}[/quote]

Jak vidíš, je to jednoduché ale úplně bez znalostí to nejde. I na takto jednoduchou úlohu toho musíš znát poměrně dost o mikroprocesorech a programování. Text na stránkách arduino http://arduino.cc/ je psaný pro začátečníky, jestli mu nebudeš rozumět, prohlédni EB, bylo zde již několik odkazů na materiály o Arduinu.

_________________
Jirka
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
arduino2015



Založen: Jan 30, 2015
Příspěvky: 158

PříspěvekZaslal: so leden 31 2015, 8:43    Předmět: Citovat

Počítám, že ten příkaz " TMP36GT_AI_value_to_Celsius" značí převod nějaké "AI" hodnoty na stupně C.

Ovšem, co to AI vlastně znamená? Když vím, že je to napěťová hodnota, proč tu mluví o nějakém pojmu AI?

A proč je tam nějaká "letka" pinMode(ledka, OUTPUT); // Set Temperature Sensor Pin ???
PS: "int wait = 500; // 1/2 wait time between measurements"

proč se tam deklaruje jednapolovina času mezi měřeními?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
arduino2015



Založen: Jan 30, 2015
Příspěvky: 158

PříspěvekZaslal: so leden 31 2015, 9:16    Předmět: Citovat

double TMP36GT_AI_value_to_Celsius(int AI_value)
{ // Convert Analog-input value to temperature
float voltage;
voltage = AI_value * (5000.0/1024); // Sensor value in mV:
return ((voltage -750) /10) +25; // Temperature according to

datasheet: 750 mV = 25 °C
// 10 mV / °C
}


Prosímtě, tato část mi je nejasná... kde přesně vezme program ten "skript" TMP36GT_AI_value_to_Celsius --- prostě jak funguje ten převod napěťová hodnoty na teplotu?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Nezařaditelné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.15 sekund