User Tools

Site Tools


projektas_nr.7

Projektas Nr. 7. Matuojame temperatūrą – Daviklis TMP36

Ką mes darysime Koks sekantis fenomenas, kurį mes matuosime su „Arduino“? Temperatūra. Kad tai įgyvendintume, pasinaudosime sudėtinga IC (integruota grandine) paslėpta pakete identiškai P2N2222AG tranzistoriams. Ji turi tris pinus, įžeminimą, signalą ir +5 voltus, taip pat ja lengva naudotis. Ji išskiria 10 milivoltų kiekvienam šimtalaipsniui signaliniame pine (kad galėtume matuoti temperatūras žemiau nulio, tam yra 500 mV atsvara, pavyzdžiui 25 laipsniai C = 750 mV, 0 laipsnių C = 500mV). Kad galėtume konvertuoti tai iš skaitmeninės vertės į laipsnius, naudosime keletą Arduino matematinių sugebėjimų. Kad galėtume tai parodyti, naudosime vieną iš IDE gana galingų ypatybių, derinimo langą. Išvesime vertę per serijinę jungtį, kad ją rodytų ekrane. Pradėkime.

Viena papildoma pastaba, ši grandinė naudoja „Arduino“ IDE serijinį monitorių. Kad jį atvertume, pirma įkeliame programą, tada spaudžiame mygtuką panašų į kvadratą su antena.

TMP36 lapas: http://ardx.org/TMP36

Grandinės dalys

  • CIRC-10Maketinė plokštė x1
  • 2 Pin Header x4
  • TMP36 Temperatūros Sensorius x1
  • Laidas x3

Grandinės schema

Grandinės šablonas

Surinkta grandinė

Šaltiniai Maketo plokštės šablonas

Surinkimo vaizdo medžiaga

Programos kodas (nereikia visko rašyti) Atsisiųsti programos kodą: http://ardx.org/CODE10 (nukopijuokite tekstą ir įdėkite jį į tuščią Arduino programavimo langą)

/*------------------------------------------------------------
 *     |  „Arduino“ eksperimentavimo pavyzdinis kodas           | 
 *     |  CIRC-10 .:Temperature :.(TMP36 Temperature Sensor) | 
 *     -------------------------------------------------------
 *    
 *  Paprasta programa išvedanti dabartinę temperatūrą į IDE derinimo langą
 *  
 *  Detaliau: http://tinyurl.com/c89tvd
 */

//TMP36 Pin‘ų Kintamieji
int temperaturePin = 0; //analoginis pin‘as TMP36's Vout(sense)
                        //santykis yra 10 mV / šimtalaipsniui
                        //(500 mV atsvara) kad galėtų būti rodoma neigiama temperatūra
/*
 * setup() – ši funkcija įvykdoma, kai įjungiamas „Arduino“
 * Pajungiama serijinė jungtis su kompiuteriu
 */
void setup()
{
  Serial.begin(9600);   //Pradedama serijinė jungtis su kompiuteriu
                       //kad matytume rezultatą, įjungiame serijinį langą
                       //(mygtukas su pavaizduotu kvadratu su antena)
}

void loop()                     // vykdyti visą laiką
{ 
 float temperature = getVoltage(temperaturePin);  //gauname voltų vertę iš temperatūros sensoriaus
 temperature = (temperature - .5) * 100;          //keičiame 10 mV per laipsnį su 500
                     //mV atsvara

 Serial.println(temperature);                     //įlaipsnius((įtampa - 500mV) kart 100);
                                                  //išvedamas rezultatas
 delay(1000);                                     //laukia sekundę
}

/*
 * getVoltage() – sugrąžina įtampą analoginiame įvedime nustatomame pin‘o  
 */
float getVoltage(int pin) {
 return (analogRead(pin) * .004882814); //convertuoja nuo 0 iki 1023 skaitmeninės vertės
                                        //nuo 0 iki 5 voltų (kiekvienas 1 lygus ~ 5 milivoltų
} 

Neveikia? (3 dalykai, kuriuos galite pamėginti)

Niekas nevyksta Ši programa gali parodyti, kad veikia. Kad pamatytumėte rezultatus, privalote įjungti „Arduino“ IDE serijinį langą. (instrukcijos praeitame lange)

Rodomos nesąmonės Tai vyksta, nes serijinis monitorius gauna duomenis greičiu, kurio jis nesitikėjo. Kad tai pataisytumėte, spauskite nuleidžiamą langą rašantį „baud“ ir pakeiskite jį į „9600 baud“.

Temperatūra nesikeičia Bandykite pirštais sušildyti sensorių arba atšaldyti šaltu oru.

Padaryti geriau:

  • Rodyti Įtampą

Reikia pakeisti tik vieną eilutę. Sensorius išveda 10 mV per šimtalaipsnį, kad gautume įtampą, keičiame išvedamą rezultatą į getVoltage ().

Ištriname eilutę

 temperature= (temperature - .5) * 100 ; 

Kad rodytų farenheitus: Tai paprastas pakeitimas, pasitelkiant matematiką, kad pakeistume Celsijus į Farenheitus, naudojime formulę:

 ( F = C * 1.8) + 32 ) 

Pridėkite eilutę

 temperature = (((temperature - .5) * 100)*1.8) + 32; 
 before Serial.println(temperature); 

Daugiau informacijos: Padarykime, kad būtų rodoma daugiau duomenų. Pirma grąžinkime prie originalaus kodo tada pakeiskime:

 Serial.println(temperature); ----> Serial.print(temperature); 
 Serial.println(" degrees centigrade"); 

Pakeitimas pirmoje eilutėje reiškia, kad sekantis iš vedimas pasirodys toje pačioje eilutėje, tada pridedame informacinį tekstą ir naują eilutę.

Keičiame serijinį greitį: Jei norite išvesti daug duomenų greitai. Dabar išvedame greičiu 9600 „baud“, bet įmanoma greičiau. Kad tai pakeistume, keičiame šią eilutę:

 Serial.begin(9600); ----> Serial.begin(115200); 

Keiskite 9600 „baud“ į 115200 „baud“ programavimo lange. Dabar duomenis gaunate 12 kartų greičiau.

Kitas projektas. Servo mechanizmas.

Atgal į projektus

projektas_nr.7.txt · Keista: 2015/12/02 14:49 vartotojo simonas