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
Grandinės schema
Grandinės šablonas
Surinkta grandinė
Šaltiniai Maketo plokštės šablonas
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:
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.