Fizikal Komputer Topik Tiga 3 - penderia suhu dalaman - Arduino Vs Raspberry Pi Pico vs BBC Microbit
Tahukah anda bahawa mikropengawal seperti Arduino Uno mempunyai 'sensor' (penderia) suhu untuk menyukat suhu dalaman pengawal itu sendiri.
Cuma ketepatan dan kejituan itu berbeza mengikut pelbagai jenis mikropengawal itu sendiri.
Di sini saya ingin menjalankan satu eksperimen mudah untuk menyukat suhu dalaman setiap mikropengawal Arduino Uno, Raspberry Pico dan BBC Micro:bit V2. Ketiga-tiga mikropengawal ini akan diletakkan ke dalam satu bekas yang mempunyai ais batu( di dalam plastik) , dan setiap pengawal ini akan dibalut/dimasukkan ke dalam plastik untuk melindungi air/kelembapan terkena secara terus dan mungkin akan menyebabkan kerosakan pada mikropengawal.
Arduino
// Penderia Suhu Dalaman | |
// Contoh untuk jenis ATmega328 | |
#include <SPI.h> | |
#include <SD.h> | |
//pin SCK pada 13 | |
//pin MOSI pada 11 | |
//pin MISO pada 12 | |
const int pilihanCip = 4; // pin 4 pada UNO --> pin CS (chip select) pada komponen SD card module | |
void setup() | |
{ | |
Serial.begin(9600); | |
while (!Serial) { | |
; // wait for serial port to connect. Needed for native USB port only | |
} | |
Serial.print("SD card dimulakan...");// see if the card is present and can be initialized: | |
if (!SD.begin(pilihanCip)) { | |
Serial.println("Card GAGAL dibaca, atau tiada.."); | |
// don't do anything more: | |
while (1); | |
} | |
Serial.println("card sudah dibaca."); | |
} | |
void loop() | |
{ | |
File dataFail = SD.open("suhuLog.txt", FILE_WRITE); | |
if (dataFail) { | |
dataFail.println(dapatSuhu(),1); | |
dataFail.close(); | |
// print to the serial port too: | |
Serial.println(dapatSuhu(),1); | |
delay(10000); // suhu akan dibaca setiap 10 saat | |
} | |
// sekiranya gagal dibaca SD card tersebut: | |
else { | |
Serial.println("gagal membaca suhuLog.txt"); | |
} | |
} | |
double dapatSuhu() // rujukan daripada https://www.engineersgallery.com/arduino-internal-temperature-sensor/ | |
{ | |
unsigned int wADC; | |
double t; | |
// The internal temperature has to be used | |
// with the internal reference of 1.1V. | |
// Channel 8 can not be selected with | |
// the analogRead function yet. | |
// Set the internal reference and mux. | |
ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3)); | |
ADCSRA |= _BV(ADEN); // enable the ADC | |
delay(20); // wait for voltages to become stable. | |
ADCSRA |= _BV(ADSC); // Start the ADC | |
// Detect end-of-conversion | |
while (bit_is_set(ADCSRA,ADSC)); | |
// Reading register "ADCW" takes care of how to read ADCL and ADCH. | |
wADC = ADCW; | |
// The offset of 324.31 could be wrong. It is just an indication. | |
t = (wADC - 324.31 ) / 1.22; | |
// The returned temperature is in degrees Celcius. | |
return (t); | |
} |
Coding: Rujuk di sini untuk maklumat lebih terperinci berkenaan coding bagaimana(pengiraan) untuk memperolehi suhu.
Hardware: Disebabkan Uno tiada kapasiti untuk menyimpan/merekod data secara dalaman, maka saya terpaksa menyambungkan SD card module(komponen) kepada Uno.
Pico
Coding: Rujuk di sini untuk maklumat lebih terperinci berkenaan coding bagaimana(pengiraan) untuk memperolehi suhu.
Hardware: Pico boleh menyimpan maklumat(data) tanpa perlu ada SD card atau sebagainya. Untuk menyukat suhu dalam hanya perlu Pi Pico dan sambungan kepada sumber tenaga (bateri)
Micro:bit
Coding: Rujuk di sini
Hardware: Microbit juga seperti Pi Pico, hanya perlu 'board' pengawalmikro dan bateri saja.
Comments
Post a Comment