Serial Communication UART Raspberry Pico (SoftSerial) check this out
Dalam posting ini kita akan menghasilkan sinyal gelombang gigi gergaji dan segitiga. Seperti yang Anda lihat di posting ini, dengan arduino kami telah menghasilkan sinyal gelombang sinus . Semua detail tentang PWM dan pengendaliannya akan Anda temukan di artikel sebelumnya.
Sekarang kita hanya akan membahas metode untuk membangkitkan kedua sinyal tersebut.
Contoh pertama:
Sinyal gigi gergaji pada 100Hz.
Sinyal PWM kami memiliki 31372Hz jadi, periode untuk frekuensi ini adalah T1=31,8us. Untuk 100Hz periodenya adalah T2=10ms jadi, T2/T1 =314 pulsa dari sinyal PWM di setiap siganl gigi gergaji pada 100Hz seperti pada gambar di bawah (adalah 31,8us bukan 318us).
float x=0;
int y=0;
void setup() {
Serial.begin(9600);
}
// the loop fungsi berjalan berulang-ulang selamanya
void loop() {
y=x*250; // hitung duty cycle (250 bukan 255 karena akan membantu mematikan //transistor)
delay(100);
//karena duty cycle maksimum adalah 250 berarti nilai maksimum untuk x adalah 1
// untuk sinyal 100Hz kami memiliki peningkatan 1/314 = 0,0031 langkah
x=x+0.0031;// memperbesar sudut
Serial.println(y);// pada monitor serial akan muncul siklus tugas antara 0 dan 90 //derajat
}Hasil Akan ditampilkan pada Serial Monitor
Dari serialprint Anda harus mengambil nilai dari 0 hingga 250 tidak lebih besar dan memasukkannya ke dalam array. Dengan fungsi interupsi, program selanjutnya bergerak dalam array dan meningkatkan siklus kerja untuk setiap pulsa. Programnya adalah:
int i=0;// posisi di vektor mypwm
int m; // mengambil nilai dari vektor
int mypwm[]={0,1,2,3,3,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,20,21,22,23,24,25,26,27,27,28,29,30,31,31,32,
33,34,34,35,36,37,37,38,39,40,41,41,42,43,44,44,45,46,47,48,48,49,50,51,51,52,53,54,55,55,56,57,58,58,59,60,61,61,
62,63,64,65,65,66,67,68,68,69,70,71,72,72,73,74,75,75,76,77,78,79,79,80,81,82,82,83,84,85,86,86,87,88,89,89,90,91,
92,93,93,94,95,96,96,97,98,99,99,100,101,102,103,103,104,105,106,106,107,108,109,110,111,112,113,113,114,115,116,
117,117,118,119,120,120,121,122,123,124,124,125,126,127,127,128,129,130,130,131,132,133,134,135,136,137,137,138,
139,140,141,141,142,143,144,144,145,146,147,148,148,149,150,151,151,152,153,154,154,155,156,157,158,159,160,161,
161,162,163,164,165,165,166,167,168,168,169,170,171,172,172,173,174,175,175,176,177,178,179,179,180,181,182,183,
184,185,185,186,187,188,189,189,190,191,192,192,193,194,195,196,196,197,198,199,199,200,201,202,203,203,204,205,206,
206,207,208,209,210,210,211,212,213,213,214,215,216,216,217,218,219,220,220,221,222,223,223,224,225,226,227,227,228,
229,230,230,231,232,233,234,234,235,236,237,238,239,240,241,242,243,244,244,245,246,247,247,248,249};
// vektor mypwm berisi nilai siklus tugas
void setup() {Serial.begin(9600);
pinMode(5, OUTPUT);
cli();// stop interrupts
TCCR0A=0;
TCCR0B=0;
TCNT0=0;
TCCR0A=0b10100001;// |= (1 << WGM00);//phase correct pwm mode
TCCR0B=0b00000001;// |= (1<< CS00);// //no prescalingTCCR1A=0;
TCCR1B=0;
TCNT1=0;
OCR1A=510;// di sini kami telah menyinkronkan kedua timer (0 dan 1)
//0b izinkan saya menulis bit dalam biner
TCCR1B=0b00001001;// |=(1 << WGM12);
//TCCR1B |= (1 << CS10);//0b00001010;// fara prescaler
TIMSK1 |=(1 << OCIE1A);sei();
}ISR(TIMER1_COMPA_vect){
if(i>(312)){//adalah n-1 karena vektor berindeks nol
i=0; // kami hanya memiliki 313 elemen dalam array karena dengan cara ini kami //memiliki tepat 100.00Hz osiloskop
}
m=mypwm[i];// variabel m mengambil nilai dari vektor
i=i+1; // meningkatkan posisi dalam vektor
OCR0B=m;// pin 5 pada pwm dengan siklus tugas dari vektor
}
void loop() {}
Hasil Akan ditampilkan pada Pin 5
Gelombang segitiga pada 100Hz.
Untuk gelombang segitiga seperti untuk gelombang sinus, setengah dari pulsa meningkat dan setengah lainnya berkurang. Jadi program berikutnya memberi kita siklus tugas untuk gelombang segitiga 100Hz:
float x=0;
int y=0;
double OK=false;
void setup() {
Serial.begin(9600);
}
// fungsi loop berjalan berulang-ulang selamanya
void loop() {
y=x*250; // hitung duty cycle (250 bukan 255 karena akan membantu mematikan //transistor)
delay(100);
//because the maximum duty cycle is 250 means that maximum value for x is 1
// for a 100Hz signal we have 1/314=0.0031 increasing step
if(x<0.5 &&OK==false){
x=x+0.0031;// increase the angle on the half of the signal
}
if(x>0.5){//middle of the signal
OK=true;
}
if(OK==true){
x=x-0.0031;// decrease the angle on the other half of the signal
}
Serial.println(y);// pada monitor serial akan muncul siklus tugas antara 0 dan 90 //derajat
}
Program untuk gelombang segitiga adalah:
float x=0;
int y=0;
double OK=false;
void setup() {
Serial.begin(9600);
}
// the loop function runs over and over again forever
void loop() {
y=x*250; // calculate duty cycle(250 not 255 because will help to turn off transistors)
delay(100);
//because the maximum duty cycle is 250 means that maximum value for x is 1
// for a 100Hz signal we have 1/314=0.0031 increasing step
if(x<0.5 &&OK==false){
x=x+0.0031;// increase the angle on the half of the signal
}
if(x>0.5){//middle of the signal
OK=true;
}
if(OK==true){
x=x-0.0031;// decrease the angle on the other half of the signal
}
Serial.println(y);// on the serial monitor will appear duty cycles between 0 and 90 deg
}The program for the triangle waves is:
int i=0;// position in mypwm vector
int m; // takes values from vector
int mypwm[]={0,1,2,3,3,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,20,21,22,23,24,25,26,27,27,28,29,30,31,31,32,
33,34,34,35,36,37,37,38,39,40,41,41,42,43,44,44,45,46,47,48,48,49,50,51,51,52,53,54,55,55,56,57,58,58,59,60,61,61,
62,63,64,65,65,66,67,68,68,69,70,71,72,72,73,74,75,75,76,77,78,79,79,80,81,82,82,83,84,85,86,86,87,88,89,89,90,91,
92,93,93,94,95,96,96,97,98,99,99,100,101,102,103,103,104,105,106,106,107,108,109,110,111,112,113,113,114,115,116,
117,117,118,119,120,120,121,122,123,124,124,124,124,123,122,121,120,120,119,118,117,117,116,115,114,113,113,112,111,
110,110,109,108,107,106,106,105,104,103,103,102,101,100,99,99,98,97,96,96,95,94,93,93,92,91,90,89,89,88,87,86,86,85,
84,83,82,82,81,80,79,79,78,77,76,75,75,74,73,72,72,71,70,69,68,68,67,66,65,65,64,63,62,61,61,60,59,58,58,57,56,55,55,
54,53,52,51,51,50,49,48,48,47,46,45,44,44,43,42,41,41,40,39,38,37,37,36,35,34,34,33,32,31,31,30,29,28,27,27,26,25,24,
24,23,22,21,20,20,19,18,17,17,16,15,14,13,13,12,11,10,10,9,8,7,6,6,5,4,3,3,2,1,0};
// mypwm vector contains duty cycle values
void setup() {Serial.begin(9600);
pinMode(5, OUTPUT);
cli();// stop interrupts
TCCR0A=0;
TCCR0B=0;
TCNT0=0;
TCCR0A=0b10100001;// |= (1 << WGM00);//phase correct pwm mode
TCCR0B=0b00000001;// |= (1<< CS00);// //no prescalingTCCR1A=0;
TCCR1B=0;
TCNT1=0;
OCR1A=510;// here we have sincronized both timers (0 and 1)
//0b allow me to write bits in binary
TCCR1B=0b00001001;// |=(1 << WGM12);
//TCCR1B |= (1 << CS10);//0b00001010;// fara prescaler
TIMSK1 |=(1 << OCIE1A);sei();
}ISR(TIMER1_COMPA_vect){
if(i>(312)){// is n-1 because the vector is zero indexed
i=0; // we have only 313 elements in the array because in this way we have
// exactly 100.00Hz oscilloscope
}
m=mypwm[i];// the variable m takes values from vector
i=i+1; // increase the position in vector
OCR0B=m;// pin 5 on pwm with duty cycle from vector
}
void loop() {}
Hasil Akan ditampilkan pada PIN 5
Bagaimana cara menggunakan DHT 21 atau biasa disebut dengan AMS 2301. Ini adalah modul sensor suhu dan kelembaban yang lebih baik daripada DHT 11. DHT 11 cukup bagus, tapi banyak keterbatasan, diantaranya adalah DHT 11 tidak bisa mengukur nilai suhu negatif. Mengapa kita menggunakan DHT 21? Pengukuran sangat akurat, kabel sensor bisa panjang, dan bisa mengukur nilai suhu negatif
PROGRAM Menampilkan Hasil suhu dari Dht21
#include <DHT.h>; // Memanggil library DHT #define DHTPIN 8 // PIN data DHT 21 #define DHTTYPE DHT21 // Jenis DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); // Inisialisasi sensor DHT float hum; // Variable penyimpanan nilai kelembaban float temp; // Variable penyimpanan nilai suhu void setup() { Serial.begin(9600); // Baud rate komunikasi dht.begin(); // Memulai DHT } void loop() { hum = dht.readHumidity(); // Menyimpan hasil pembacaan kelembaban temp= dht.readTemperature(); // Menyimpan hasil pembacaan suhu // Menyajikan hasil pembacaan suhu dan kelembaban Serial.print("Suhu : "); Serial.print(temp); //Serial.print(°); Serial.print(" °C | Kelembaban : "); Serial.print(hum); Serial.println(" %"); delay(2000); //Delay 2 detik }Hasil Akan ditampilkan pada Serial Monitor
Thermocouple
Dalam Tutor kali ini, Anda dapat belajar cara membaca suhu menggunakan Termokopel Tipe-K dengan amplifier MAX6675 dengan papan Arduino. Termokopel/Thermocouple tipe-K adalah jenis sensor suhu dengan rentang pengukuran yang luas seperti 200ºC hingga 1350ºC (−326 hingga 2300ºF).
Thermocouple atau Termokopel adalah perangkat yang terdiri dari dua konduktor listrik berbeda yang membentuk sambungan listrik — sambungan termal. Perubahan suhu di persimpangan menciptakan tegangan yang sedikit tetapi terukur di persimpangan referensi yang dapat digunakan untuk menghitung suhu.
Termokopel dapat dibuat dari berbagai logam. Logam yang digunakan akan mempengaruhi rentang tegangan, biaya, dan sensitivitas. Ada kombinasi logam standar yang menghasilkan jenis termokopel yang berbeda: B, E, J, N, K, R, T, dan S.
Tutorial kami adalah tentang termokopel tipe-k. Termokopel tipe-k terbuat dari konduktor krom dan alumel dan memiliki kisaran suhu umum -200 hingga 1260ºC (-326 hingga 2300ºF)
MAX6675 Amplifier
Untuk mendapatkan suhu dari termokopel kita membutuhkan penguat termokopel. Output suhu dari penguat termokopel tergantung pada tegangan yang dibaca pada sambungan referensi. Tegangan pada sambungan referensi tergantung pada perbedaan suhu antara sambungan referensi dan sambungan termal. Jadi, kita perlu mengetahui suhu di persimpangan referensi.
Kode ini adalah contoh yang disediakan oleh Library.
#include "max6675.h" int thermoDO = 4; int thermoCS = 5; int thermoCLK = 6; MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO); void setup() { Serial.begin(9600); Serial.println("MAX6675 test"); // wait for MAX chip to stabilize delay(500); } void loop() { // basic readout test, just print the current temp Serial.print("C = "); Serial.println(thermocouple.readCelsius()); Serial.print("F = "); Serial.println(thermocouple.readFahrenheit()); // For the MAX6675 to update, you must delay AT LEAST 250ms between reads! delay(1000); }
Terima Kasih
Sensor suhu LM35 merupakan sensor suhu yang bekerja dengan mengubah besaran fisis (suhu) menjadi besaran listrik (tegangan).
Karena keluaran sensor berupa tegangan analog, maka sensor suhu LM35 dapat dihubungkan ke board Arduino menggunakan port analog dan ADC (analogue-to-digital converter).
LM35 memiliki keakuratan tinggi dan kemudahan perancangan jika dibandingkan dengan sensor suhu yang lain, LM35 juga mempunyai keluaran impedansi yang rendah dan linearitas yang tinggi.
Kelebihan itu menyebabkan LM35 dapat dengan mudah dihubungkan dengan rangkaian kendali khusus serta tidak memerlukan penyetelan lanjutan.
Sensor suhu LM35 mampu mengukur suhu dari -55℃ sampai 150℃. Setiap kenaikan suhu 1℃, tegangan output sensor akan meningkat sebesar 10mV.
Sensor suhu LM35 memiliki spesifikasi sebagai berikut:
- Minimum and Maximum Input Voltage is 35V and -2V respectively. Typically 5V.
- Can measure temperature ranging from -55°C to 150°C
- Output voltage is directly proportional (Linear) to temperature (i.e.) there will be a rise of 10mV (0.01V) for every 1°C rise in temperature.
- ±0.5°C Accuracy
- Drain current is less than 60uA
- Low cost temperature sensor
- Small and hence suitable for remote applications
- Available in TO-92, TO-220, TO-CAN and SOIC package
Sensor suhu LM35 memiliki 3 buah kaki yang mewakili VCC, OUT dan Ground.
Jadi di sini kita memanfaatkan pin 33 sebagai penghubung antara ESP32 dengan LM35. Selain itu, seperti yang sudah disampaikan di atas, kita menggunakan ADC (Analog to Digital Converter) agar output analog dari LM35 dapat diubah menjadi digital.
Pada bagian ini kita menggunakan board ESP32, karena board ini paling umum dijumpai. Kawan-kawan bisa menggunakan board yang lain seperti Arduino Mega 2560, Arduino Pro Mini dan lain-lain dengan menyesuaikan pin-pin yang digunakan dalam tutorial ini.
Pada bagian ini board ESP32 kita hubungkan ke PC/laptop seperti biasanya. Hasil pembacaan suhu dari sensor suhu LM35 akan kita tampilkan pada Serial Monitor pada software Arduino IDE.
Jika kawan-kawan sudah membuat rangkaian di atas, silakan buka software Arduino IDE, buat file baru, dan tempelkan kode program di bawah ini.
KODE PROGRAM LM35
const int sensor = 33;int tempc;float tempf;float vout;float adc;void setup(){Serial.begin(9600);Serial.print("Sinau Programming");Serial.println(" ");pinMode(sensor, INPUT);delay(100);}void loop(){adc = analogRead(sensor);vout = adc / 1023 * 5;tempc = vout * 100;tempf = (tempc * 1.8) + 32;Serial.print("Suhu (Celcius)= ");Serial.print(tempc);Serial.println(" °C");Serial.print("Suhu (Fahrenheit)= ");Serial.print(tempf);Serial.println(" °F");Serial.println(" ");delay(100);}Hasil Akan ditampilkan pada Serial Monitor dan LCD
POPULAR POSTS
Training
Contact Form
Categories
- alkes 1
- Android 4
- Arduino 35
- Basic & Doc 12
- centrifuge 1
- ESP32 8
- Internet of Things (IoT) 23
- LCD TFT SPI 2
- MATLAB 6
- Metode kendali 1
- Modul Charger 1
- Nextion 4
- NodeMcu 8
- oled 1
- Pattern Recognition 2
- Pemrograman 2
- Perbaikan 1
- PID 2
- PLC HMI VTSCADA ARDUINO 3
- PRIVACY POLICY 1
- Proteus 11
- Python 1
- raspberry 5
- Teknik Elektromedik 2
- Thingsboard 1
- Video 5
- Wemos 4







