Stránka 1 z 1

Arduino coby termostat

Napsal: 30 led 2015, 19:05
od arduino2015
http://www.ebastlirna.cz/modules.php?na ... le&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!
}

Napsal: 30 led 2015, 19:52
od Jirka525
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.

Napsal: 30 led 2015, 22:29
od arduino2015
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/ "

Napsal: 30 led 2015, 23:11
od Jirka525
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.

Napsal: 31 led 2015, 08:43
od arduino2015
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?

Napsal: 31 led 2015, 09:16
od arduino2015
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?