บทความนี้ เป็นบทความจาก Clip YouTube “เปรียบเทียบหลอดไฟ 7 ยี่ห้อ ด้วยเครื่องวัดค่าความสว่าง DIY | SmartHomeOK | PorTV”
อุปกรณ์ที่ต้องใช้
- Arduino UNO
- LDR Photoresistor
- ตัวต้านทาน 10K Ohm
- 7 Segment LCD (TM1637) แบบ 4 ตัวอักษร 4 PIN (ไม่จำเป็น)
Code ทั้งหมด อยู่ใน Github https://github.com/chaintng/arduino-ldr-tm1637-led
วิธีการทำ
ขอแบ่งวิธีการทำออกเป็น 3 ส่วนนะครับ โดยส่วนแรก คือการทำเครื่องวัดแสง ส่วนที่ 2 คือการแสดงผลบนจอ LCD และส่วนที่ 3 คือการนำไปแสดงบนจอ PC
ส่วนที่ 1: การทำเครื่องวัดแสง
- ต่อสาย LDR และ ตัวต้านทาน ตามรูปประกอบ
- เข้า Arduino IDE และ รัน Code ด้านล่าง
const int LDR = A0;
int input_val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
input_val = analogRead(LDR);
Serial.print("LDR Value is: ");
Serial.println(input_val);
delay(1000);
}
ค่าความสว่างจะแสดงขึ้นที่ Serial Monitor ดังรูปประกอบ
ส่วนที่ 2: การแสดงผลบนจอ LCD
- ให้ต่อสาย 7 Segment LCD ตามรูป (ผ่าน Breadbroad เพื่อความสะดวก)
- รัน Code ด้านล่าง
#include <TM1637.h>
#define CLK 2
#define DIO 3
TM1637 Display1(CLK, DIO);
#define CHAR_BLANK 127
const int ldrPin = A0;
void setup() {
Serial.begin(9600);
Display1.init();
Display1.set(BRIGHTEST); // BRIGHT_TYPICAL = 2 , BRIGHT_DARKEST = 0 , BRIGHTEST = 7
void loop() {
int ldrStatus = 100 - ((double) analogRead(ldrPin)) / 1024 * 100; // Normalize data to 100
Serial.println(ldrStatus);
int8_t number[] = {0,0, ldrStatus / 10 , ldrStatus % 10}; // Send to LCD
Display1.display(number);
delay(1000);
}
ตัวเลขค่า LDR จะแสดงบนจอ 7Segment LCD
ส่วนที่ 3: การแสดงผล บนจอ PC
- ในขณะที่ Arduino รันโปรแกรมอย่างถูกต้องให้ปิด Arduino IDE
- install pySerial โดยใช้คำสั่ง pip install pySerial
- ใช้ VSCode รัน Python script ด้านล่าง (อย่าลืมเปลี่ยน serial_port ตาม port ของคุณ)
##############
## Script listens to serial port and writes contents into a file
##############
## requires pySerial to be installed
import serial
serial_port = '/dev/cu.usbmodem1101'; ## Change to your correct serial port, check in Arduino IDE
baud_rate = 9600; #In arduino, Serial.begin(baud_rate)
write_to_file_path = "output.txt";
ser = serial.Serial(serial_port, baud_rate)
while True:
line = ser.readline();
line = line.decode("utf-8") #ser.readline returns a binary, convert to string
output_file = open(write_to_file_path, "w");
print(line);
output_file.write(line);
output_file.close();
4. สังเกตดูว่า ไฟล์ output.txt แสดงตัวเลขที่ถูกต้องหรือยัง
5. สร้างไฟล์ index.html ใน Directory เดียวกัน
<html>
<head>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&display=swap" rel="stylesheet">
<style>
@font-face {
font-family: Segment7;
src: url("Segment7-4Gml.otf") format("opentype");
}
html {
background: black;
color: #44C553;
font-size: 600px;
font-family: 'Segment7';
}
#output {
height: 100%;
display: flex;
align-items: center;
vertical-align: middle;
justify-content: center;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
window.setInterval(function(){
$.get('./output.txt',
function(data){
$('#output').html(data);
}
);
},100);
</script>
</head>
<div id="output"></div>
</html>
5. สำหรับ MacOS, Linux ให้ จำลอง Python SimpleHTTPServer ขึ้นมาใน Directory ปัจจุบัน
python -m SimpleHTTPServer 1234
6. เข้า localhost:1234 จะมีตัวเลขขึ้น
สำหรับใครที่สงสัย สามารถ ทิ้งคำถามไว้ใน Comment ได้เลยครับ