475 lines
20 KiB
Typst
475 lines
20 KiB
Typst
#import "../PageTemplate.typ": *
|
|
#import "@preview/tiaoma:0.3.0"
|
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, edge, node
|
|
#import fletcher.shapes: circle, diamond, pill
|
|
#show: chapter-page
|
|
#set heading(numbering: "บทที่ 1")
|
|
|
|
#heading([#linebreak()วิธีการดำเนินโครงงาน])
|
|
#set heading(numbering: "1.1")
|
|
|
|
#i ในการดำเนินการศึกษาครั้งนี้
|
|
คณะผู้จัดทำโครงงานได้ศึกษาข้อมูลเบื้องต้นในการสร้างเครื่องยืนยันตัวตนด้วย NFC
|
|
และได้ดำเนินการตามขั้นตอนนี้
|
|
|
|
#set enum(indent: 3em)
|
|
1. วางแผนการดำเนินงาน
|
|
2. การออกแบบ
|
|
3. วัสดุอุปกรณ์
|
|
4. ขั้นตอนการประกอบ
|
|
5. การทดลอง
|
|
6. การวิเคราะห์ข้อมูล
|
|
|
|
#show heading.where(level: 3): it => {
|
|
block(
|
|
it,
|
|
inset: (left: 1.7em),
|
|
)
|
|
}
|
|
#show heading.where(level: 4): it => {
|
|
block(
|
|
it,
|
|
inset: (left: 4.1em),
|
|
)
|
|
}
|
|
#show heading.where(level: 5): it => {
|
|
block(
|
|
it,
|
|
inset: (left: 7.3em),
|
|
)
|
|
}
|
|
|
|
== วางแผนการดำเนินงาน
|
|
|
|
#show table.cell.where(y: 1): strong
|
|
#set par(leading: 0.5em)
|
|
|
|
#let arrow = [
|
|
#place(
|
|
left + horizon,
|
|
text(weight: "bold", size: 14pt)[#sym.arrow.l],
|
|
dx: -5pt,
|
|
dy: -0.7pt,
|
|
)
|
|
#place(
|
|
horizon,
|
|
line(length: 100%, stroke: (thickness: 1pt)),
|
|
dx: 0pt,
|
|
dy: 0pt,
|
|
)
|
|
#place(
|
|
right + horizon,
|
|
text(weight: "bold", size: 14pt)[#sym.arrow.r],
|
|
dx: 5pt,
|
|
dy: -0.7pt,
|
|
)
|
|
]
|
|
|
|
=== แผนขั้นตอนและวิธีการดำเนินงาน
|
|
|
|
ตาราง 3.1 ระยะเวลาการดำเนินงาน
|
|
#v(0.5em, weak: true)
|
|
|
|
#table(
|
|
columns: (2fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
|
align: (
|
|
left + horizon,
|
|
center,
|
|
center,
|
|
center,
|
|
center,
|
|
center,
|
|
),
|
|
table.header(
|
|
table.cell(
|
|
[ขั้นตอนการดำเนินการ],
|
|
rowspan: 2,
|
|
),
|
|
table.cell(
|
|
[พ.ศ.2568],
|
|
colspan: 3,
|
|
),
|
|
table.cell(
|
|
[พ.ศ.2569],
|
|
colspan: 2,
|
|
),
|
|
[ต.ค.],
|
|
[พ.ย.],
|
|
[ธ.ค.],
|
|
[ม.ค.],
|
|
[ก.พ.],
|
|
),
|
|
[ศึกษาค้นคว้าข้อมูล],
|
|
table.cell(arrow, colspan: 3),
|
|
[],
|
|
[],
|
|
[เสนอหัวข้อ], arrow, [], [], [], [],
|
|
[เสนอครั้งที่ 1], [], arrow, [], [], [],
|
|
[ออกแบบและสร้าง], [], table.cell(arrow, colspan: 3), [],
|
|
[จัดซื้ออุปกรณ์ทดลอง],
|
|
[],
|
|
table.cell(arrow, colspan: 3),
|
|
[],
|
|
[ทดลองการทำงาน], [], [], table.cell(arrow, colspan: 2), [],
|
|
[ปรับปรุงแก้ไข], [], [], [], [], arrow,
|
|
[เสนอครั้งที่ 2], [], [], [], arrow, [],
|
|
[จัดทำรูปเล่ม], table.cell(arrow, colspan: 5),
|
|
[นำเสนอโครงงาน], [], [], [], [], [],
|
|
)
|
|
|
|
#show: page-theme
|
|
#set par(leading: 0.5em)
|
|
|
|
=== ผังการดำเนินงาน
|
|
|
|
#include "ProjectFlowchart.typ"
|
|
|
|
#pagebreak()
|
|
|
|
=== ผังการทำงาน
|
|
|
|
#include "ProductFlowchart.typ"
|
|
|
|
#pagebreak()
|
|
#set par(leading: 1em)
|
|
|
|
== การออกแบบ
|
|
|
|
#figure(
|
|
image(
|
|
"imgs/ProjectDraft_Modules.png",
|
|
alt: "ภาพแสดงการโมเดลโครงงานซึ่งประกอบไปด้วยสามส่วน",
|
|
width: 5in,
|
|
),
|
|
caption: [การออกแบบโครงสร้างเครื่องยืนยันตัวตนด้วย NFC],
|
|
)
|
|
|
|
#v(2em)
|
|
|
|
== วัสดุอุปกรณ์
|
|
|
|
#set enum(indent: 1.7em)
|
|
|
|
1. บอร์ด ESP32 (NodeMCU)
|
|
2. กล่องพลาสติก
|
|
3. บัซเซอร์ (Buzzer)
|
|
4. เซนเซอร์ NFC (PN532)
|
|
// 5. เซนเซอร์ PIR
|
|
|
|
== ขั้นตอนการประกอบ
|
|
|
|
=== การติดตั้งอุปกรณ์
|
|
|
|
#h(4.1em) โครงงานแบ่งออกเป็น 3 โมดูล
|
|
|
|
#set enum(indent: 4.1em)
|
|
1. โมดูลบอร์ด ESP32
|
|
2. โมดูลเซนเซอร์ NFC
|
|
// 3. โมดูลเซนเซอร์ PIR
|
|
|
|
==== โมดูลบอร์ด ESP32
|
|
|
|
#h(7.3em) ทำการเจาะรู 2 รูสำหรับสายและร้อยสายเข้าไปในกล่อง
|
|
|
|
#figure(
|
|
image(
|
|
"imgs/MainModuleInternal.jpg",
|
|
alt: "ภายในกล่องโมดูลหลัก มีบอร์ดอยู่ภายใน",
|
|
height: 2in,
|
|
),
|
|
caption: [ภายในกล่องโมดูล ESP32],
|
|
)
|
|
|
|
#v(2em)
|
|
|
|
==== โมดูลเซนเซอร์ NFC
|
|
|
|
#h(7.3em) ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
|
|
จากนั้นนำสายไฟร้อยผ่านช่องดังกล่าวและต่อเข้ากับเซนเซอร์ NFC ให้เรียบร้อย
|
|
|
|
#figure(
|
|
image(
|
|
"imgs/NFCSensor_cropped.jpg",
|
|
alt: "ภายกล่องโมดูลเซนเซอร์ NFC",
|
|
height: 2in,
|
|
),
|
|
caption: [โมดูลเซนเซอร์ NFC],
|
|
)
|
|
#v(1.5em)
|
|
|
|
// ==== โมดูลเซนเซอร์ PIR
|
|
|
|
=== การเขียนเฟิร์มแวร์ <writingFirmware>
|
|
|
|
#iii โครงงานนี้ใช้ซอฟต์แวร์ PlatformIO ในการสร้างและจัดการโปรเจกต์เฟิร์มแวร์
|
|
โดยหากต้องการเพียงแค่เขียนเฟิร์มแวร์ลงไปยังบอร์ด ESP32 คุณจำเป็นต้องใช้ซอฟต์แวร์หลัก ๆ คือ
|
|
PlatformIO Core และ Git (ไม่จำเป็น แต่เพื่อความสะดวกสบาย) อย่างไรก็ตาม PlatformIO
|
|
จำเป็นต้องใช้ Python เวอร์ชัน 3.6 ขึ้นไปด้วยเช่นกัน ดังนั้นคุณจำเป็นต้องติดตั้ง Python
|
|
ด้วยหากคุณยังไม่มี
|
|
|
|
#iii ในขั้นตอนแรก โปรดเปิดเทอร์มินัลของคุณ ซึ่งโดยทั่วไปแล้วคุณสามารถค้นหาแอปพลิเคชัน#jb
|
|
"Terminal" ได้เลย โดยบน Windows 10 เวอร์ชั่นใหม่ ๆ และ Windows 11 จะมาพร้อมกับแอปพลิเคชัน
|
|
Windows Terminal อย่างไรก็ตาม เมื่อเปิดแล้ว โปรดตรวจสอบให้แน่ใจว่าคุณกำลังใช้ PowerShell
|
|
และไม่ใช่ Command Prompt
|
|
|
|
#iii โดยในปัจจุบัน Python เวอร์ชันล่าสุดคือ Python 3.14.2 โดยคุณสามารถติดตั้ง Python และ Git
|
|
บน Windows ได้ด้วยการใช้คำสั่งต่อไปนี้
|
|
|
|
#figure(
|
|
```sh
|
|
winget install Python.Python.3.14 Git.Git -e -s winget
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการติดตั้ง Python 3.14 และ Git],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#iii สำหรับระบบปฏิบัติการอื่นนั้น โดยปกติแล้วจะไม่ต้องติดตั้ง Python
|
|
เพิ่มเนื่องจากมีติดมากับระบบปฏิบัติการอยู่แล้ว อย่างไรก็ตาม บน Linux อาจต้องมีการติดตั้งการรองรับ
|
|
Virtual Environment แยก โดยแต่ละระบบจะมีชื่อแพคเกจไม่เหมือนกัน โดยบน Debian, Fedora,
|
|
และ Arch สามารถใช้คำสั่งต่อไปนี้ในการติดตั้งทั้ง Python Virtual Environment และ Git
|
|
พร้อมกันได้
|
|
|
|
#show raw.where(block: true): set block(below: 2em)
|
|
#figure(
|
|
```sh
|
|
# Debian
|
|
sudo apt install python3-venv git
|
|
# Fedora
|
|
sudo dnf install python3-virtualenv git
|
|
# Arch
|
|
sudo pacman -S python-virtualenv git
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการติดตั้ง Virtual Environment และ Git บนการแจกจ่าย Linux ต่าง ๆ],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#pagebreak()
|
|
|
|
==== การติดตั้ง PlatformIO Core ผ่านแพคเกจ
|
|
|
|
#h(7.3em) หากคุณใช้ Fedora Linux หรือ Arch Linux (หรือลูก ๆ ของมัน) คุณสามารถติดตั้งแพคเกจ
|
|
PlatformIO ได้โดยตรง โดยมีคำสั่งดังนี้
|
|
|
|
#figure(
|
|
```sh
|
|
# Fedora Linux
|
|
sudo dnf install platformio
|
|
# Arch Linux
|
|
sudo pacman -S platformio-core
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการติดตั้ง PlatformIO Core บน Fedora และ Arch Linux],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#set enum(indent: 7.3em)
|
|
1. หากคุณติดตั้งแพคเกจ Fedora นั้นแล้ว คุณไม่จำเป็นที่จะต้องติดตั้งกฎ udev ด้วยตนเอง
|
|
(ที่จะถูกกล่าวถึงใน@pioudev)
|
|
|
|
2. หากคุณใช้ Arch คุณสามารถติดตั้งแพคเกจกฎ udev ได้โดยตรงโดยไม่ต้องดาวน์โหลดเอง
|
|
#figure(
|
|
```sh
|
|
sudo pacman -S --asdeps platformio-core-udev
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการติดตั้งกฎ udev ของ PlatformIO บน Arch Linux],
|
|
)
|
|
|
|
#v(2.5em)
|
|
|
|
==== การติดตั้ง PlatformIO Core ผ่านสคริปต์
|
|
|
|
#h(7.3em) ถัดไป ในการติดตั้ง PlatformIO Core สามารถทำได้โดยการใช้สคริปต์ติดตั้ง โดยสำหรับ
|
|
`curl` สามารถใช้คำสั่งนี้ได้
|
|
|
|
#figure(
|
|
```sh
|
|
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่ง `curl` ที่ใช้ในการดาวน์โหลดสคริปต์ติดตั้ง PlatformIO],
|
|
)
|
|
|
|
#pagebreak()
|
|
|
|
#h(7.3em) หรือหากต้องการใช้ `wget`
|
|
|
|
#figure(
|
|
```sh
|
|
wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่ง `wget` ที่ใช้ในการดาวน์โหลดสคริปต์ติดตั้ง PlatformIO],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) หรือสำหรับ PowerShell, สามารถใช้ `iwr` (หรือชื่อเต็มคือ `Invoke-WebRequest`)
|
|
ได้
|
|
|
|
#figure(
|
|
```sh
|
|
iwr -OutFile get-platformio.py -Uri https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่ง `iwr` ที่ใช้ในการดาวน์โหลดสคริปต์ติดตั้ง PlatformIO],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
(มีการเว้นบรรทัดใหม่เนื่องจากพื้นที่ไม่เพียงพอ โปรดอย่าเว้นบรรทัดเมื่อพิมพ์คำสั่งจริง)
|
|
|
|
#h(7.3em) แล้วดังนั้นจึงใช้คำสั่ง `python3 get-platformio.py`
|
|
ในการรันสคริปต์ติดตั้งที่ได้ทำการดาวน์โหลดมา โดยค่าเริ่มต้นแล้ว PlatformIO
|
|
จะไม่เพิ่มตนเองเข้าไปยังตัวแปรสิ่งแวดล้อม PATH
|
|
ซึ่งจำเป็นในการใช้คำสั่งจากที่ใหนก็ได้โดยไม่ต้องกล่าวถึงไฟล์พาธ
|
|
|
|
#h(7.3em) โดยสำหรับ Linux แล้วนั้น คุณต้องเพิ่ม `$HOME/.local/bin/` เข้าไปยัง PATH ของคุณ
|
|
โดยหากคุณใช้ Bash คุณสามารถแก้ไข `~/.bash_profile` และเพิ่มบรรทัดนี้เข้าไปได้
|
|
|
|
#figure(
|
|
```sh
|
|
export PATH=$PATH:$HOME/.local/bin
|
|
```,
|
|
kind: image,
|
|
caption: [โคดที่ต้องใช้ในการเพิ่ม `~/.local/bin` เข้า PATH],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) หากคุณใช้ Zsh สามารถใช้โคดเดียวกันได้ เพียงแต่คุณต้องแก้ไขไฟล์ `~/.zprofile` หรือ
|
|
`~/.zshrc` แทน
|
|
|
|
#h(7.3em) โดยบน Windows มีขั้นตอนดังนี้
|
|
|
|
#[
|
|
#set enum(indent: 7.3em)
|
|
1. กด Windows + R
|
|
2. พิมพ์ `sysdm.cpl` และกด Enter
|
|
3. ในหน้าต่าง _System Properties_ คลิกไปยังแท็บ _Advanced_
|
|
4. คลิกปุ่ม _Environment Variables_
|
|
]
|
|
|
|
#h(7.3em) จากนั้น เลือกตัวแปร _Path_ ในส่วน _User variables_ แล้วจึงกด _Edit_ แล้วเพิ่ม
|
|
`%USERPROFILE%\.platformio\penv\Scripts\` เข้าไปในรายการ
|
|
|
|
==== 99-platformio-udev.rules <pioudev>
|
|
|
|
#h(7.3em) ผู้ใช้ Linux จำเป็นที่จะต้องติดตั้งกฎ udev โดยสามารถดูไฟล์กฎ udev เวอร์ชันล่าสุดได้ที่
|
|
https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules
|
|
และโปรดตรวจสอบว่า PID และ VID ของบอร์ดคุณอยู่ในไฟล์กฎนั้น โดยคุณสามารถดู PID/VID
|
|
ของบอร์ดคุณได้ผ่านคำสั่ง `pio device list`
|
|
|
|
#h(7.3em) โดยไฟล์นั้นต้องถูกวางอยู่ที่ `/etc/udev/rules.d/99-platformio-udev.rules`
|
|
(ตำแหน่งที่ดีที่สุด) หรือ `/lib/udev/rules.d/99-platformio-udev.rules`
|
|
(อาจจำเป็นสำหรับบางระบบที่พัง)
|
|
|
|
#h(7.3em) โปรดใช้คำสั่งต่อไปนี้ในการดาวน์โหลดและวางไฟล์นั้นไว้ในสถานที่ที่ถูกต้อง
|
|
|
|
#figure(
|
|
```sh
|
|
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการดาวน์โหลดไฟล์กฎ `udev`],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) หรือคุณก็สามารถดาวน์โหลดไฟล์นั้นด้วยตัวเองและคัดลอกมันไปในโฟลเดอร์ที่หมายได้เช่นกัน
|
|
|
|
#figure(
|
|
```sh
|
|
sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการคัดลอกไฟล์กฎ `udev` ไปยังสถานที่ที่ถูกต้อง],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) หลังจากนั้น รีสตาร์ทบริการ udev
|
|
|
|
#figure(
|
|
```sh
|
|
sudo service udev restart
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการรีสตาร์ทบริการ `udev`],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) หรือทำการรีโหลดและทริกเกอร์กฎ
|
|
|
|
#figure(
|
|
```sh
|
|
sudo udevadm control --reload-rules
|
|
sudo udevadm trigger
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการรีโหลดกฎ `udev`],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) หลังจากติดตั้งไฟล์นี้แล้ว ถอดสายที่เชื่อมต่อระหว่างบอร์ดและคอมพิวเตอร์ของคุณแล้วเสียบมันใหม่
|
|
|
|
==== การดาวน์โหลดโปรเจกต์
|
|
|
|
#h(7.3em) สามารถใช้ Git ในการ clone โปรเจกต์ได้ด้วยคำสั่งต่อไปนี้
|
|
|
|
#figure(
|
|
```sh
|
|
git clone https://gitskette.dailitation.xyz/linesofcodes/liteauth-firmware32.git
|
|
```,
|
|
kind: image,
|
|
caption: [คำสั่งในการโคลนโคดสำหรับเฟิร์มแวร์],
|
|
)
|
|
|
|
#v(1.5em)
|
|
|
|
#h(7.3em) โดย Git นั้นจะทำการโคลนโปรเจกต์ไปที่โฟลเดอร์ `liteauth-firmware32`
|
|
เนื่องจากเป็นชื่อของ Git repository หรือหากไม่ต้องการใช้ Git กรุณาไปที่
|
|
https://gitskette.dailitation.xyz/linesofcodes/liteauth-firmware32 และทำการคลิกปุ่ม
|
|
_Code_ แล้วกด _Download ZIP_ หรือ _Download TAR.GZ_ แล้วทำการแตกไฟล์ได้ตามปกติ
|
|
จากนั้นจึงไปที่โฟลเดอร์ของคุณในเทอร์มินัลโดยใช้คำสั่ง `cd`
|
|
|
|
==== คำสั่ง PlatformIO เบื้องต้น
|
|
|
|
#[
|
|
#set enum(indent: 7.3em)
|
|
1. `pio run --list-targets` เพื่อดูรายการเป้าหมายคำสั่งรัน
|
|
2. `pio run upload` เพื่อรันเป้าหมายอัพโหลด
|
|
ซึ่งนี่คือคำสั่งที่คุณควรจะใช้ในการเขียนเฟิร์มแวร์ลงบนบอร์ด
|
|
3. `pio device monitor` เพื่อเปิด Serial Monitor
|
|
]
|
|
|
|
#h(7.3em) และโปรดใช้คำสั่งประเภท `pio run` ในโฟลเดอร์ของโปรเจกต์
|
|
|
|
#include "BuildApp.typ"
|
|
|
|
== การทดสอบ
|
|
|
|
#set enum(indent: 1.7em)
|
|
1. เข้าแอพลิเคชัน liteauthconfig
|
|
2. ทำการเชื่อมต่อไวไฟที่ต้องการให้อุปกรณ์เชื่อมต่อ (ต้องไม่ใช่ไวไฟ 2.4 GHz)
|
|
3. กดปุ่มบวก
|
|
4. กดตั้งค่าอุปกรณ์ใหม่ (Setup new device)
|
|
5. ตั้งชื่ออุปกรณ์และใส่รหัสผ่านเครือข่าย
|
|
6. กดปุ่มติ๊กถูกเพื่อเริ่มการตั้งค่าอุปกรณ์
|
|
7. เข้าสู่โหมดลงทะเบียนอุปกรณ์ NFC
|
|
8. ทำการแตะอุปกรณ์ NFC (เช่นโทรศัพท์ที่รองรับหรือแท็ก NFC)
|
|
9. ออกจากโหมดลงทะเบียน
|
|
10. ทำการแตะอุปกรณ์ NFC ที่ลงทะเบียน
|
|
11. รอสังเกตุรายการกิจกรรม (Activity Logs)
|
|
|
|
== การวิเคราะห์ข้อมูล
|
|
|
|
#h(1.7em) วิเคราะห์จากตารางการทดลองตามความเร็วในการทำงานจริงของเครื่องยืนยันตัวตนด้วย NFC
|