โปรเจกต์ Weather Balloon Datalogger ขับเคลื่อนด้วย Arduino
ส่ง Arduino ของคุณไปเก็บข้อมูลจากขอบอวกาศ!!
ส่ง Arduino ของคุณไปเก็บข้อมูลจากขอบอวกาศ!!
สวัสดีทุกคนครับ!! คุณอาจจะกำลังสงสัยว่า เดี๋ยวก่อน เราสามารถส่ง Arduino ไปในอวกาศได้จริงๆ เหรอ? ก็เกือบจะใช่ครับ การใช้บอลลูนตรวจอากาศ (weather balloon) จะช่วยให้คุณส่ง Arduino, กล้อง, ขนมปังกระเทียม หรืออะไรก็ตามที่คุณต้องการขึ้นไปได้สูงถึง 1 ใน 3 ของระยะทางไปสู่อวกาศ! ถึงแม้จะเป็นแค่ 1 ใน 3 แต่ที่นั่นไม่มีชั้นบรรยากาศอยู่เกือบ 99% เราจึงเรียกมันว่า "ขอบอวกาศ (the edge of space)" คู่มือนี้ค่อนข้างยาว แต่ถ้าคุณไม่ได้แค่เข้ามาดูผ่านๆ มั่นใจว่าคุณได้อ่านทุกอย่างจนถึง Path 1 นะครับ เอาเป็นว่า เรามาเริ่มกันเลยดีกว่าว่าคุณจะทำสิ่งนี้ได้อย่างไร
จะมี 3 เส้นทาง (Paths) ให้คุณเลือกเดินตามความต้องการและระดับทักษะของคุณครับ ทั้งสามเส้นทางจำเป็นต้องมีทักษะการ Soldering บ้าง เนื่องจากลมที่พัดแรงมากในชั้น Stratosphere แต่ละเส้นทางไม่ได้มีอันไหนดีกว่าอันไหนเป็นพิเศษ ขึ้นอยู่กับว่าคุณสนใจแบบไหน เรามาดูกันคร่าวๆ ครับ
Path 1: การสร้าง Data Logger แบบง่ายโดยใช้ Proto Board และ Sensor ต่างๆ โดยใช้ทักษะ Soldering เพียงเล็กน้อย
Path 2: การใช้แผ่น PCB Shield ที่ออกแบบไว้ล่วงหน้า เพื่อให้ได้ Board ที่ดูสะอาดตาและยอดเยี่ยม ซึ่งออกแบบและทดสอบโดยพวกเราเอง
Path 3: สร้าง PCB ของคุณเองในโปรแกรม คู่มือนี้จะไม่ลงลึกถึงวิธีการออกแบบและสร้าง PCB เอง แต่จะสรุปแนวทางบางอย่างให้คุณนำไปคิดต่อ ผมจะแนบคู่มือเจ๋งๆ ไว้ให้คุณได้เรียนรู้เพิ่มเติมครับ
เราจะลงรายละเอียดแต่ละเส้นทางเพิ่มอีกนิด แต่มีเคล็ดลับบางอย่างที่จะช่วยให้คุณตัดสินใจได้ง่ายขึ้นครับ:
Path 1 จะง่ายที่สุดและมีความยืดหยุ่นสูง คุณสามารถเลือก Sensor, Board และฟีเจอร์ต่างๆ บน Board ได้เอง คุณจะต้องมีทักษะ Soldering เพื่อให้แน่ใจว่าทุกอย่างจะยึดติดกันแน่นตลอดการเดินทาง
Path 2 จะมีข้อจำกัดมากที่สุด หมายความว่าคุณต้องใช้ชุด Sensor ที่ระบุไว้ และ Arduino Board รุ่นที่กำหนด แต่คุณจะได้ PCB ที่ดูสวยงามสะอาดตา ไม่ต้องกังวลเรื่องการ Soldering หรือการเขียน Code มากนัก และเป็นการเริ่มต้นที่ดีในการเรียนรู้เรื่อง PCB พวกเราจะจัดเตรียมไฟล์ Gerber, การตั้งค่าการส่งออก (Export Settings) และ Code ไว้ให้คุณศึกษา PCB ราคาไม่แพงมาก ขึ้นอยู่กับว่าคุณสั่งจากที่ไหน พวกเราสั่ง PCB มา 5 แผ่นในราคาเพียง $2 เท่านั้น แต่ราคานี้อาจแตกต่างกันไปตามแหล่งที่ซื้อครับ
Path 3 จะยากที่สุดและต้องการทักษะสูง คุณต้องรู้ (หรือเรียนรู้) วิธีสร้าง PCB หรือ Arduino PCB Shield ของตัวเอง รู้วิธีเขียน Code ทั้งหมด และ Soldering แผ่น Board เอง ในกรณีที่คุณทำสิ่งเหล่านี้เป็นอยู่แล้ว คุณก็น่าจะทำโปรเจกต์นี้ได้ด้วยตัวเอง แต่ยังมีข้อจำกัดและรายละเอียดสำคัญบางอย่างที่คู่มือนี้สามารถช่วยคุณได้ครับ
โอเค!! ยอดเยี่ยมมาก! ตอนนี้น่าจะเลือกเส้นทางที่ต้องการได้แล้วนะครับ! แต่ก่อนที่เราจะเริ่ม มีกฎที่สำคัญมากที่คุณต้องจำไว้ให้ดี ควรอ่านกฎเหล่านี้ให้ละเอียด เพราะการส่งสิ่งของขึ้นไปด้วยบอลลูนตรวจอากาศอาจมีข้อจำกัดตามพื้นที่ที่คุณอาศัยอยู่ คู่มือนี้จะไม่สอนวิธีเลือกบอลลูนที่ถูกต้อง การสร้าง Payload Bay หรือวิธีการเติมก๊าซในบอลลูน แต่มีคู่มือมากมายที่สอนเรื่องนี้ ผมจะใส่ลิงก์ไว้ให้ครับ ผมจะอธิบายข้อจำกัดสำหรับ Arduino Datalogger ของคุณ และทิ้งลิงก์สำหรับข้อจำกัดเพิ่มเติมของ FAA (หากคุณอาศัยอยู่ในสหรัฐอเมริกา) นี่คือสิ่งที่คุณต้องคำนึงถึง:
1. Payload Bay ของคุณต้องไม่มีสัญญาณโทรศัพท์มือถือ หากคุณมีความจำเป็นต้องนำโทรศัพท์มือถือขึ้นไปด้วย ต้องเปิด Airplane Mode ไว้เสมอ
2. หากคุณใช้ GPS เพื่อตามหาบอลลูน คุณต้องมีใบอนุญาตวิทยุสมัครเล่น HAM (ซึ่งต้องมีการสอบและค่าธรรมเนียม)
3. หากอัตราส่วนน้ำหนักต่อขนาดของ Payload ของคุณมากกว่า 3.0 ออนซ์/ตารางนิ้ว น้ำหนัก Payload รวมต้องน้อยกว่า 4 ปอนด์
4. Payload หรือบรรจุภัณฑ์แยกแต่ละชิ้นต้องมีน้ำหนักน้อยกว่า 6 ปอนด์
5. และถ้าคุณมี Payload สองชิ้น น้ำหนักรวมต้องน้อยกว่า 12 ปอนด์
นี่คือลิงก์ ไปยังแนวทางปฏิบัติฉบับเต็มจาก FAA สำหรับผู้อยู่อาศัยในสหรัฐอเมริกาครับ
ก่อนที่คุณจะเริ่มออกแบบ มีข้อควรพิจารณาสองสามประการ อย่างแรกคือคุณต้องการอะไรบนนั้นบ้าง ใน Schematic ที่จัดเตรียมไว้ให้ คุณจะมี Sensor วัดอุณหภูมิและความชื้นแบบง่าย, Barometric Sensor, IMU และ MicroSD Card Module สำหรับโปรเจกต์ส่วนใหญ่นี่ก็น่าจะเพียงพอแล้ว แต่ถ้าคุณต้องการหาตำแหน่ง Payload Bay ด้วย Arduino คุณจะต้องเพิ่ม GPS Module เข้าไปด้วย โดยมีตัวเลือกในการค้นหาดังนี้:
1. SPOT GPS Module ตัวนี้มีทั้งข้อดีและข้อเสีย ใช้งานง่ายมาก มีระยะรับส่งไม่จำกัด (ใช้ดาวเทียมส่งพิกัดมายังโทรศัพท์ของคุณ) แบตเตอรี่ใช้งานได้นาน และหาซื้อได้ง่าย อย่างไรก็ตาม มันค่อนข้างแพง ไม่ทำงานหากคว่ำหน้าลง และสัญญาณอาจถูกบดบังได้ด้วยวัตถุที่มีความหนา
นี่คือวิธีที่พวกเราใช้ แต่พวกเราได้ออกแบบและ 3D Print ตัว Gimbal เพื่อประคองให้มันตั้งตรงอยู่เสมอ พวกเราแนะนำ SPOT 3 Satellite Messenger (Amazon) แต่ก็ขึ้นอยู่กับคุณเลยครับ ขอแค่ลองศึกษาข้อดีของรุ่นต่างๆ ดู

2. วิทยุ APRS วิธีนี้จะน่าเชื่อถือที่สุดและทำอะไรได้หลายอย่าง คุณสามารถเชื่อมต่อ Module เข้ากับ Arduino และให้วิทยุส่งข้อมูล พิกัด ฯลฯ กลับมาได้ และยังช่วยให้คุณได้ค่าความสูง (Altitude) ที่แม่นยำอีกด้วย
แต่น่าเสียดายที่สิ่งนี้จะไม่รวมอยู่ใน Wiring Diagram ดังนั้นคุณต้องเรียนรู้วิธีการต่อสายด้วยตัวเอง นอกจากนี้ คุณจำเป็นต้องมีใบอนุญาตวิทยุสมัครเล่น HAM ซึ่งต้องสอบและจ่ายค่าธรรมเนียมนิดหน่อย ใบอนุญาตนี้มีประโยชน์มากคุ้มค่าที่จะทำครับ (ข้อจำกัดในสหรัฐฯ อาจแตกต่างจากที่อื่น)
3. โทรศัพท์มือถือ คุณไม่ควรใช้วิธีนี้จริงๆ นอกจากคุณจะต้องหาวิธีเปิด Airplane Mode หลังจากจบเที่ยวบินแล้ว ตัวโทรศัพท์เองก็น่าจะแพงกว่าเครื่อง SPOT ทั่วไปอีก เหตุผลที่มีชื่ออยู่ในรายการนี้เพราะหลายคนใช้โทรศัพท์เป็นตัวสำรอง แต่จริงๆ แล้วไม่ใช่อะไรที่คุณควรเลือกใช้เป็นหลักครับ
เมื่อคุณตัดสินใจได้แล้วว่าจะกู้คืน Payload อย่างไร ต่อไปให้ดูว่าเที่ยวบินของคุณจะเป็นอย่างไร ตัวอย่างเช่น ถ้าคุณต้องการให้ Arduino สั่งกางร่มชูชีพจากระยะไกล คุณควรหาวิธีทำสิ่งนั้น นอกจากนี้ควรตรวจสอบ Sensor ที่จะใช้ด้วย (อุณหภูมิสามารถลดลงต่ำถึง -40C (-40F) ดังนั้นคุณต้องเตรียมพร้อมสำหรับเรื่องนี้)
คุณควรคิดเรื่องการจ่ายไฟให้ Arduino ด้วย อุณหภูมิที่หนาวเย็นจะลดประสิทธิภาพของแบตเตอรี่หลายชนิด ดังนั้นคุณอาจต้องการแหล่งจ่ายไฟขนาดใหญ่ พร้อมกับกล่องเก็บอุปกรณ์ เช่น กล่องโฟม (Styrofoam) เพื่อรักษาอุณหภูมิภายใน ในขณะที่ต้องควบคุมน้ำหนักไม่ให้เกินขีดจำกัดด้วย
ผมแนะนำให้คุณทำ Checklist ตามประเภทของข้อมูลที่ต้องการ กล้องที่จะใช้ และสิ่งที่จะนำขึ้นไป นอกจากนี้การสร้าง Payload Bay ขึ้นมาก่อน แล้วค่อยออกแบบ Datalogger ให้พอดีกับกล่องก็เป็นไอเดียที่ดี มีหลายอย่างที่ต้องคิดและตรวจสอบให้แน่ใจก่อนเริ่มออกแบบ ดังนั้นควรใช้เวลาพิจารณาทุกอย่างให้รอบคอบและระมัดระวังเป็นพิเศษครับ
เอาล่ะ นี่คือ Schematic และ Wiring Diagram สำหรับ Sensor ต่างๆ หากคุณเลือกทำตามวิธีของเรา:

Arduino Mega ถือว่าสเปกสูงเกินไปมากสำหรับ Sensor เหล่านี้ แต่ถ้าคุณต้องการใช้ Code ของเราด้วย คุณก็ต้องใช้ Mega ครับ หากคุณวางแผนจะใช้บอร์ดอย่าง Nano ให้เปลี่ยนการต่อ Pins ของ MicroSD Card Module ไปยัง SPI Pins ของบอร์ดที่คุณใช้แทน
นี่คือรายการอุปกรณ์ (Parts List):
SparkFun ADXL337
Header Pins
Micro SD card module
DHT22 Humidity Sensor
DS18B20 Temperature Sensor
Proto Board
Arduino Mega
คุณสามารถเพิ่ม DS18B20 อีกตัวเพื่ออ่านอุณหภูมิภายใน หรือเพิ่ม Sensor อื่นๆ ที่ต้องการได้ แต่ถ้าจะใช้ Code ที่เตรียมไว้ให้ ให้ใช้การต่อสายตาม Diagram ด้านบนครับ
//DHT22 Setup
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
//SD Card Setup
#include <SPI.h>
#include <SD.h>
File sdcard_file;
int CS_pin = 10;
//DS18B20 Temperature sensor
#include <OneWire.h>
#include<DallasTemperature.h>
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int scale = 3; // 3 (±3g) for ADXL337, 200 (±200g) for ADXL377
boolean micro_is_5V = true; // Set to true if using a 5V microcontroller such as the Arduino Uno, false if using a 3.3V microcontroller, this affects the interpretation of the sensor data
void setup() {
Serial.begin(9600);
sensors.begin();
dht.begin();
pinMode(CS_pin, OUTPUT);//declaring CS pin as output pin
if (SD.begin()){
Serial.print("SD Card found!");
} else
{
Serial.print("Error finding SD Card");
return;
}
sdcard_file = SD.open("data.csv", FILE_WRITE);
if (sdcard_file) { //If the file is found
}
else {
Serial.print("error initializing SD card");
}
sdcard_file.print("DS18B20");
sdcard_file.print(",");
sdcard_file.print("DHT22 Temp");
sdcard_file.print(",");
sdcard_file.print("Hum");
sdcard_file.print(",");
sdcard_file.print("H.InX");
sdcard_file.print(",");
sdcard_file.print("rawX");
sdcard_file.print(",");
sdcard_file.print("rawY");
sdcard_file.print(",");
sdcard_file.print("rawZ");
sdcard_file.print(",");
sdcard_file.print("scaledX");
sdcard_file.print(",");
sdcard_file.print("scaledY");
sdcard_file.print(",");
sdcard_file.print("scaledZ");
sdcard_file.print(",");
sdcard_file.println(" ");
}
void loop() {
delay(222);
//Accelerometer
int rawX = analogRead(A0);
int rawY = analogRead(A1);
int rawZ = analogRead(A2);
float scaledX, scaledY, scaledZ;
if (micro_is_5V) //scaling data if voltage is 5V (it is)
{
scaledX = mapf(rawX, 0, 675, -scale, scale);
scaledY = mapf(rawY, 0, 675, -scale, scale);
scaledZ = mapf(rawZ, 0, 675, -scale, scale);
}
else //scaling data if voltage is 3.3V
{
scaledX = mapf(rawX, 0, 1023, -scale, scale);
scaledY = mapf(rawY, 0, 1023, -scale, scale);
scaledZ = mapf(rawZ, 0, 1023, -scale, scale);
}
//DS18B20 Temp
sensors.requestTemperatures();
int etemp=sensors.getTempCByIndex(0);
//DS18B20 Humidity Sensor
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// Check if any reads failed and exit early for DHT
if (isnan(h) || isnan(t) || isnan(f)) {
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
sdcard_file.print(etemp);
sdcard_file.print(",");
sdcard_file.print(t);
sdcard_file.print(",");
sdcard_file.print(h);
sdcard_file.print(",");
sdcard_file.print(hic);
sdcard_file.print(",");
sdcard_file.print(rawX);
sdcard_file.print(",");
sdcard_file.print(rawY);
sdcard_file.print(",");
sdcard_file.print(rawZ);
sdcard_file.print(",");
sdcard_file.print(scaledX);
sdcard_file.print(",");
sdcard_file.print(scaledY);
sdcard_file.print(",");
sdcard_file.print(scaledZ);
sdcard_file.print(",");
sdcard_file.print(" ");
sdcard_file.println(" ");
sdcard_file.close();
delay(223);
}
float mapf(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
หากมีปัญหาใดๆ อย่าลืมตรวจสอบการต่อสาย และใช้ Code สำหรับ Sensor แต่ละตัวแยกกันเพื่อหาสาเหตุของปัญหา ตรวจสอบให้แน่ใจว่า SD หรือ MicroSD Card ของคุณฟอร์แมตเป็น FAT16 หรือ FAT32 และมีความจุไม่เกิน 16GB นะครับ
นอกจากนี้ การต่อ LED เพื่อแสดงสถานะการทำงานของ Datalogger ก็เป็นไอเดียที่ดี คุณคงไม่อยากส่งบอลลูนขึ้นไปแล้วพบว่า Datalogger ไม่ทำงาน ดังนั้นควรตรวจสอบทุกอย่างให้ดีก่อนครับ
ยิ่งไปกว่านั้น หากคุณยังมีปัญหากับ MicroSD Card Module ให้ลองเปลี่ยนแหล่งจ่ายไฟดู หลังจากทดสอบมาหลายครั้ง พวกเราพบว่าบาง Module มีความอ่อนไหวต่อแหล่งจ่ายไฟมาก ดังนั้นควรหาแหล่งจ่ายไฟที่เสถียรครับ
เท่านี้เอง! Datalogger ของคุณก็เสร็จเรียบร้อยแล้ว มันจะอ่านค่าอุณหภูมิ, ความชื้น และข้อมูล Accelerometer แล้วบันทึกลงใน SD Card หากคุณต้องการอ่านค่าระดับความสูง คุณต้องใช้ GPS นะครับ เพราะ 90% ของ Altimeter ที่ใช้ Barometric Sensor จะทำงานไม่ได้ที่ความสูงเกิน 30,000 ฟุต หากบอลลูนของคุณสูงเกินนั้น (ซึ่งน่าจะเป็นแบบนั้น) คุณจะไม่สามารถใช้ Barometer ได้ หากต้องการคู่มือที่ยอดเยี่ยมสำหรับขั้นตอนที่เหลือ ลองดูได้ที่ คู่มือนี้, และสามารถ ติดต่อพวกเราผ่านเว็บไซต์นี้ได้เลย หากคุณมีคำถามใดๆ พวกเราไม่ใช่ผู้เชี่ยวชาญ แต่ยินดีที่จะช่วยเหลืออย่างเต็มความสามารถครับ
คอมเมนต์ด้านล่างหรือติดต่อพวกเราหากมีปัญหา และถ้าคุณชอบคู่มือส่วนนี้ ลองไปดู YouTube Channel ของพวกเรา, ฝากคอมเมนต์และกดติดตาม และเราแนะนำให้ลองดูเส้นทาง (Path) อื่นๆ เพื่อเป็นแรงบันดาลใจและไอเดียเจ๋งๆ นะครับ!
เอาล่ะ! คุณกำลังวางแผนที่จะใช้ PCB ที่ออกแบบไว้แล้ว PCB ตัวนี้จะช่วยให้คุณอ่านค่าอุณหภูมิภายใน, อุณหภูมิภายนอก, ความชื้น และค่าจาก Accelerometer ได้ คุณต้องมีทักษะการ Soldering และต้องใช้อุปกรณ์เหล่านี้ครับ:
5050 SMD LED
SparkFun ADXL337
Header Pins จำนวนมาก
Micro SD card module
DHT22 Humidity Sensor
2X DS18B20 Temperature Sensor
Arduino Mega
Eclipse PCB
ไฟล์ Gerber สำหรับ PCB อยู่ใน GitHub Repository นี้ หากคุณต้องการแก้ไข PCB หรือ Schematic ให้ไปที่ หน้าเว็บนี้, และกรอกรายละเอียดสิ่งที่คุณต้องการ เช่น ประเภทไฟล์, ไฟล์ที่ต้องการ, คำถาม ฯลฯ เราจะมาดูวิธีที่ PCB/Arduino shield นี้ทำงาน, วิธีสั่งซื้อจากบริการผลิต PCB (ในราคาเพียง $2) และวิธีการประกอบให้ถูกต้องครับ
โชคดีที่พวกเราใช้ PCB นี้ในเที่ยวบินของเราเอง ดังนั้นเราจึงได้ทำการทดสอบมามากมาย และได้ปรับปรุงให้ดียิ่งขึ้นหลังจากจบเที่ยวบินเพื่อพวกคุณ เอาเป็นว่ามาเริ่มกันเลยครับ
นี่คือวิดีโอการประกอบและรายละเอียดของ PCB ครับ
เริ่มจากการดาวน์โหลดไฟล์ Gerber กันเลยครับ ไปที่ GitHub Repository, ดาวน์โหลดไฟล์ ZIP และ copy ไฟล์ Gerber Eclipse มา สิ่งสำคัญคือคุณต้องเก็บไฟล์ ZIP สำหรับ Gerber ไว้แบบเดิม (Compressed) เพราะบริการสั่งทำ PCB ออนไลน์จะรับเป็นไฟล์ ZIP ครับ
เมื่อได้ไฟล์แล้ว ก็ถึงเวลาหาบริการผลิต PCB ใน Search Engine ให้ลองค้นหาคำว่า PCB service มีหลายเจ้าให้เลือก ซึ่งแต่ละเจ้าก็มีข้อดีข้อเสียต่างกันไป เพื่อราคาที่ถูกลง คุณอาจพิจารณาบริษัทผู้ผลิตในจีนอย่าง JLC PCB หากคุณยินดีจ่ายเพิ่มขึ้นอีกหน่อย ก็อาจจะดูบริษัทในสหรัฐฯ คุณจะซื้อจากบริการไหนก็ได้ ไม่สำคัญครับ พวกเขาทุกเจ้าจะให้ PCB คุณภาพสูงในราคาที่ดี ดังนั้นขึ้นอยู่กับคุณเลย
เมื่อเลือกบริการได้แล้ว ให้อัปโหลดไฟล์ Gerber ที่เป็น ZIP และเลือกการตั้งค่าดังนี้:
การตั้งค่าส่วนใหญ่มักจะถูกเลือกไว้ให้แล้ว คุณอาจจะต้องเปลี่ยนแค่เรื่องสี จากนั้นก็กดสั่งซื้อได้เลย แล้ว PCB ของคุณก็จะเริ่มเข้าสู่การผลิต! ช่วงเวลานี้เหมาะมากที่จะสั่งซื้อ Sensor ต่างๆ ที่ลิสต์ไว้ข้างต้นครับ
ตอนนี้ก็ได้เวลาประกอบ PCB เนื่องจากเราใช้ Sensor ที่มี Breakout Board มาให้แล้ว และเนื่องจาก PCB ตัวนี้ทำหน้าที่เป็น Shield การประกอบจึงง่ายมาก ด้านล่างนี้คือคู่มือการ Soldering ครับ
นอกจากนี้ ให้ Soldering Header Pins ทั้งหมดเข้าที่ด้านข้างของ PCB ซึ่งจะทำให้เสียบลงบน Arduino Mega ได้พอดีและทำการเชื่อมต่อสายทั้งหมดให้คุณโดยอัตโนมัติ
สิ่งสำคัญคือต้องรู้ว่า PCB นี้ทำงานอย่างไร เพื่อที่คุณจะได้ซ่อมแซมได้หากมีอะไรเสียหาย ภายใน PCB มีเส้นลวดขนาดเล็กมากเพียง 0.35 มม. วิ่งอยู่ เส้นลวดเหล่านี้จะเชื่อมต่อจาก Sensor แต่ละตัวไปยัง Header Pins ที่กำหนดไว้ใน PCB ซึ่งจะไปเชื่อมต่อกับ Arduino อีกที วิธีนี้ทำให้งานดูสะอาดตา แข็งแรง และน่าเชื่อถือกว่าการใช้ Proto Board หรือ Breadboard แบบเดิม นี่คือคำอธิบายคร่าวๆ แต่ถ้าคุณอยากเรียนรู้เพิ่มเติม นี่คือ วิดีโอที่ยอดเยี่ยม เกี่ยวกับหลักการทำงานของ PCB ครับ
เย้! Soldering PCB เสร็จแล้ว นำมันไปเสียบบน Arduino Mega และต่อเข้ากับคอมพิวเตอร์ เปิด Arduino IDE และเปิด Code เวอร์ชั่น 1.6 ที่รวมอยู่ใน GitHub Repository ที่คุณโหลดไฟล์ PCB มานั่นแหละครับ
ฟอร์แมต MicroSD Card ของคุณเป็น FAT16 หรือ FAT32 ตัว MicroSD Card Module ต้องใช้การ์ดความจุไม่เกิน 16GB ไม่เช่นนั้นมันจะไม่ทำงาน แม้แต่ MicroSD Card ขนาด 2GB ก็เพียงพอแล้วสำหรับการเก็บข้อมูลในเที่ยวบิน 2 ชั่วโมง
ทีนี้ใส่ SD Card เข้าไปใน Module และอัปโหลด Code 1.6 ใน Serial Monitor คุณควรได้รับข้อความยืนยันว่า SD Card ใช้งานได้ และการบันทึกข้อมูล (Datalogging) จะเริ่มขึ้นทันที
รอสักสิบวินาที จากนั้นนำ SD Card ออกมาเสียบกับคอมพิวเตอร์ คุณจะเห็นไฟล์ .csv ซึ่งเก็บข้อมูลทั้งหมดของคุณไว้!
นี่คือ Code ในกรณีที่ GitHub Repository มีปัญหาครับ
//DHT22 Setup
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
//SD Card Setup
#include <SPI.h>
#include <SD.h>
File sdcard_file;
int CS_pin = 10;
//DS18B20 Temperature sensor
#include <OneWire.h>
#include<DallasTemperature.h>
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//MPL3115A2 Altimeter Setup
#include <Wire.h>
#include <Adafruit_MPL3115A2.h>
Adafruit_MPL3115A2 baro = Adafruit_MPL3115A2();
int scale = 3;
boolean micro_is_5V = true;
//LED
int Blue = 7;
int Red = 6;
int Green = 5;
void setup() {
pinMode(23, INPUT); //detects if a switch is turned on to stop the sdcard writing and to save the data
sensors.begin();
pinMode(Blue, OUTPUT);
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
digitalWrite(Green, HIGH);
dht.begin();
pinMode(CS_pin, OUTPUT);//declaring CS pin as output pin
if (SD.begin()){
digitalWrite(Green, LOW);
digitalWrite(Green, HIGH);
digitalWrite(Green, LOW);
digitalWrite(Green, HIGH);
digitalWrite(Green, LOW);
digitalWrite(Green, HIGH);
} else
{
digitalWrite(Green, LOW);
digitalWrite(Red, HIGH);
delay(5000);
return;
}
sdcard_file = SD.open("data.csv", FILE_WRITE);
if (sdcard_file) { //If the file is found
digitalWrite(Red, LOW);
digitalWrite(Blue, LOW);
digitalWrite(Green, HIGH);
}
else {
digitalWrite(Green, LOW);
digitalWrite(Red, HIGH);
delay(1000);
digitalWrite(Red, LOW);
digitalWrite(Blue, HIGH);
delay(1000);
digitalWrite(Green, LOW);
digitalWrite(Red, HIGH);
delay(1000);
digitalWrite(Red, LOW);
digitalWrite(Blue, HIGH);
delay(1000);
digitalWrite(Red, HIGH);
digitalWrite(Blue, LOW);
}
sdcard_file.print(",");
sdcard_file.print("DS18B20");
sdcard_file.print(",");
sdcard_file.print("DHT22 Temp");
sdcard_file.print(",");
sdcard_file.print("Hum");
sdcard_file.print(",");
sdcard_file.print("H.InX");
sdcard_file.print(",");
sdcard_file.print("Int. Temp");
sdcard_file.print(",");
sdcard_file.print("Pres. Pasc.");
sdcard_file.print(",");
sdcard_file.print("alt.");
sdcard_file.print(",");
sdcard_file.print("rawX");
sdcard_file.print(",");
sdcard_file.print("rawY");
sdcard_file.print(",");
sdcard_file.print("rawZ");
sdcard_file.print(",");
sdcard_file.print("scaledX");
sdcard_file.print(",");
sdcard_file.print("scaledY");
sdcard_file.print(",");
sdcard_file.print("scaledZ");
}
void loop() {
delay(222);
digitalWrite(Green, LOW);
digitalWrite(Blue, HIGH);
if(! baro.begin()) {
}
float pascals = baro.getPressure();
float altm = baro.getAltitude();
float tempC = baro.getTemperature();
//Accelerometer
int rawX = analogRead(A0);
int rawY = analogRead(A1);
int rawZ = analogRead(A2);
float scaledX, scaledY, scaledZ;
if (micro_is_5V) //scaling data if voltage is 5V (it is)
{
scaledX = mapf(rawX, 0, 675, -scale, scale);
scaledY = mapf(rawY, 0, 675, -scale, scale);
scaledZ = mapf(rawZ, 0, 675, -scale, scale);
}
else //scaling data if voltage is 3.3V
{
scaledX = mapf(rawX, 0, 1023, -scale, scale);
scaledY = mapf(rawY, 0, 1023, -scale, scale);
scaledZ = mapf(rawZ, 0, 1023, -scale, scale);
}
//DS18B20 Temp
sensors.requestTemperatures();
//DS18B20 Humidity Sensor
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// Check if any reads failed and exit early for DHT
if (isnan(h) || isnan(t) || isnan(f)) {
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
sdcard_file.println(sensors.getTempCByIndex(0));
sdcard_file.print(",");
sdcard_file.print(t);
sdcard_file.print(",");
sdcard_file.print(h);
sdcard_file.print(",");
sdcard_file.print(hic);
sdcard_file.print(",");
sdcard_file.print(tempC);
sdcard_file.print(",");
sdcard_file.print(pascals);
sdcard_file.print(",");
sdcard_file.print(altm);
sdcard_file.print(",");
sdcard_file.print(rawX);
sdcard_file.print(",");
sdcard_file.print(rawY);
sdcard_file.print(",");
sdcard_file.print(rawZ);
sdcard_file.print(",");
sdcard_file.print(scaledX);
sdcard_file.print(",");
sdcard_file.print(scaledY);
sdcard_file.print(",");
sdcard_file.print(scaledZ);
sdcard_file.print(",");
delay(223);
sdcard_file.close();
}
float mapf(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
เท่านี้เองครับ! Datalogger ของคุณเสร็จสมบูรณ์แล้ว มันจะอ่านค่าอุณหภูมิ, ความชื้น และข้อมูล Accelerometer แล้วบันทึกลงใน SD Card หากคุณต้องการค่าความสูง คุณต้องใช้ GPS นะครับ Altimeter ที่ใช้ Barometric Sensor ส่วนใหญ่จะไม่ทำงานเมื่อสูงเกิน 30,000 ฟุต หากบอลลูนของคุณสูงเกินนั้น คุณจะไม่สามารถใช้ Barometer ได้ หากต้องการดูคู่มือสำหรับขั้นตอนที่เหลือ ลองดูได้ที่ คู่มือนี้, และอย่าลังเลที่จะ ติดต่อพวกเราผ่านทางเว็บไซต์ หากคุณมีคำถามใดๆ หรือต้องการสร้าง PCB ที่ดียิ่งขึ้นตามแบบของเรา พวกเราไม่ใช่ผู้เชี่ยวชาญ แต่ยินดีช่วยเหลืออย่างเต็มที่ครับ
คอมเมนต์ด้านล่างหรือติดต่อเราหากมีปัญหา และถ้าคุณชอบส่วนนี้ของคู่มือ ลองเข้าไปดู YouTube Channel ของเรา, ฝากคอมเมนต์และกดไลก์ และเราขอแนะนำให้ลองดูเส้นทางอื่นๆ เพื่อหาแรงบันดาลใจและไอเดียเจ๋งๆ นะครับ!
ส่วนนี้ของคู่มือจะ "ไม่" สอนวิธีทำ PCB ของตัวเองครับ ดังนั้นก่อนที่จะไปต่อ คุณควรจะรู้วิธีการทำ PCB อยู่แล้ว หรือต้องไปเรียนรู้วิธีทำมาก่อน ส่วนนี้จะอธิบายแค่แนวทางพื้นฐานเพื่อให้แน่ใจว่าคุณจะไม่ละเมิดกฎหมายใดๆ แนวทางที่ระบุไว้นี้สำหรับสหรัฐอเมริกาครับ!
อันดับแรก คุณต้อง Brainstorm และจดสิ่งที่คุณต้องการจะได้รับจากเที่ยวบินนี้
นี่คือสิ่งพื้นฐานที่เที่ยวบินส่วนใหญ่มักจะรวมไว้:
คุณจะใส่อะไรก็ได้ตามต้องการ แต่ต้องตรวจสอบทุกอย่างให้ดี Temperature Sensor ควรจะอ่านค่าได้ต่ำถึง -50C (-58F) และมีความแม่นยำสูงที่สุดเท่าที่จะเป็นไปได้ การอ่านค่าอุณหภูมิจะมีความคลาดเคลื่อนได้เมื่อเจออุณหภูมิที่สูงมากเนื่องจากรังสีจากดวงอาทิตย์ ดังนั้นมันอาจจะดูเหมือนอุ่นกว่าความเป็นจริงนิดหน่อยครับ!
คุณต้องคิดถึงวิธีที่จะตามหาอุปกรณ์กลับมาด้วย นี่คือตัวเลือกคร่าวๆ คุณอาจต้องศึกษาเพิ่มเติมเกี่ยวกับเรื่องนี้ครับ
SPOT GPS Module มีข้อดีและข้อเสีย ใช้งานง่ายมาก ระยะไม่จำกัด (ใช้ดาวเทียมส่งพิกัดมายังโทรศัพท์) แบตเตอรี่ดีเยี่ยม และหาซื้อง่าย แต่ราคาแพง ไม่ทำงานถ้าคว่ำหน้า และสัญญาณอาจถูกบล็อกได้ด้วยวัตถุที่หนา
นี่คือวิธีที่เราใช้ แต่พวกเราออกแบบและ 3D Print ตัว Gimbal เพื่อประคองให้มันตั้งตรงอยู่เสมอ เราแนะนำ SPOT 3 Satellite Messenger (Amazon) แต่ก็แล้วแต่คุณเลยครับ ตราบใดที่คุณได้ศึกษาข้อดีของแต่ละแบบมาแล้ว

2. วิทยุ APRS น่าเชื่อถือที่สุดและทำอะไรได้หลายอย่าง คุณสามารถต่อ Module เข้ากับ Arduino แล้วให้วิทยุส่งข้อมูล พิกัด ฯลฯ กลับมาได้ และให้ค่าระดับความสูงที่แม่นยำด้วย
คุณจำเป็นต้องมีใบอนุญาตวิทยุสมัครเล่น HAM ซึ่งต้องสอบและจ่ายค่าธรรมเนียม ใบอนุญาตนี้มีประโยชน์มากคุ้มค่าที่จะทำครับ (ข้อจำกัดในสหรัฐฯ อาจต่างจากที่อื่น)
3. โทรศัพท์มือถือ คุณไม่ควรใช้วิธีนี้จริงๆ นอกจากต้องหาวิธีเปิด Airplane Mode หลังจากจบเที่ยวบินแล้ว ตัวโทรศัพท์เองก็น่าจะแพงกว่าเครื่อง SPOT ทั่วไปอีก เหตุผลที่มีในลิสต์นี้เพราะหลายคนใช้เป็นตัวสำรอง แต่จริงๆ แล้วไม่ควรใช้เป็นหลักครับ
นี่คือ Instructable ที่อาจช่วยคุณในการออกแบบได้ มีข้อจำกัดและหลายสิ่งที่ต้องคำนึงถึง ดังนั้นควรใช้เวลาศึกษาให้ดีครับ!
อีกสิ่งที่ต้องคำนึงถึงในการออกแบบคือ น้ำหนัก ตามที่บอกไว้ในตอนต้น Payload ต้องมีน้ำหนักไม่เกิน 12 ปอนด์, 6 ปอนด์ หรือ 4 ปอนด์ ตามประเภทของ Payload นอกจากนี้ คุณจะไม่สามารถใช้ Barometer ในการวัดระดับความสูงได้ เนื่องจากส่วนใหญ่มันจะล้มเหลวที่ระดับสูงกว่า 30,000 ฟุต
สิ่งสุดท้ายที่ต้องพิจารณาคือ พลังงาน อุณหภูมิจะต่ำมากในชั้น Stratosphere แบตเตอรี่มีโอกาสล้มเหลว และ Arduino ของคุณก็มีโอกาสสูงที่จะหยุดทำงานเหมือนกัน คุณต้องหาวิธีแก้ปัญหา วิธีที่ดีที่สุดคือใส่ Datalogger ไว้ในกล่องโฟม (Styrofoam) ซึ่งจะช่วยให้อุณหภูมิภายในคงที่เหมือนอุณหภูมิห้อง นอกจากนี้คุณอาจพิจารณาใช้แผ่น Solar Panels หรือถุงทรายร้อน (Hand warmers) ก็ได้ครับ
โอเค! เมื่อคุณคิดทุกอย่างถี่ถ้วนแล้ว ตรวจสอบ Sensor ที่ต้องการซ้ำอีกรอบ และจดทุกอย่างไว้ ก็ได้เวลาทำ Schematic และ PCB แล้ว สำหรับตัว Schematic และ PCB คุณจะทำเป็น PCB Shield เหมือนเดิม หรือจะทำเป็น Full PCB เลยก็ได้ ผมจะให้คุณตัดสินใจเอง (เพราะคุณน่าจะเริ่มมีประสบการณ์มาบ้างแล้วสำหรับขั้นนี้)
หลังจากสร้าง PCB/Shield เสร็จแล้ว ตรวจสอบทุกอย่างซ้ำอีกครั้งว่ามันทำงานได้ และแน่ใจว่าคุณได้ทำตามแนวทางปฏิบัติที่ถูกต้อง
นั่นแหละครับ! Datalogger ของคุณเสร็จเรียบร้อย มันจะอ่านค่าอุณหภูมิ, ความชื้น และข้อมูล Accelerometer แล้วบันทึกลง SD Card หากต้องการอ่านระดับความสูง ต้องใช้ GPS นะครับ Barometer ส่วนใหญ่จะใช้งานไม่ได้ที่ความสูงเกิน 30,000 ฟุต หากต้องการคู่มือสำหรับขั้นตอนที่เหลือ ลองดูที่ คู่มือนี้, และสามารถ ติดต่อพวกเราผ่านเว็บไซต์นี้หาก มีคำถามใดๆ พวกเราไม่ใช่ผู้เชี่ยวชาญ แต่ยินดีช่วยเต็มที่ครับ
คอมเมนต์ด้านล่างหรือติดต่อเราหากมีปัญหา และถ้าชอบส่วนนี้ ลองดู YouTube Channel ของเรา, ฝากคอมเมนต์และกดติดตาม และเราแนะนำให้ดูเส้นทางอื่นๆ เพื่อหาแรงบันดาลใจนะครับ!
บอลลูนตรวจอากาศเป็นวิธีที่เจ๋งและเรียบง่ายในการส่งสิ่งของขึ้นไปยังชั้น Stratosphere คุณสามารถส่งกล้อง (ในกรณีของเราคือกล้อง 360 องศา) ขึ้นไปที่ระดับสูงๆ เพื่อให้ได้ภาพและข้อมูลที่ยอดเยี่ยม โดยไม่มีกฎระเบียบที่ยุ่งยากจนเกินไป แต่มีสิ่งหนึ่งที่สำคัญ!
อ่านตรงนี้ด้วย!!
โปรดตรวจสอบให้แน่ใจว่าคุณทำตามกฎทุกอย่าง ติดตั้งแผ่นสะท้อนเรดาร์ (Radar Deflector) และยื่นเรื่องแจ้ง NOTAM (Notice to Airmen) ก่อนการปล่อยเที่ยวบิน เป็นไปได้ที่ Payload ของบอลลูนอาจจะไปชนกับเครื่องบินได้ และคุณคงไม่อยากทำให้อุปกรณ์เสียหายหรือทำให้ชีวิตใครตกอยู่ในความเสี่ยง ทำทุกอย่างที่ทำได้เพื่อลดความเสี่ยง ตรวจสอบว่าทุกอย่างแข็งแรงเพื่อไม่ให้มีอะไรหล่นลงมา FAA ไม่ได้มีข้อจำกัดเรื่องนี้มากนัก โปรดอย่าทำให้พวกเขาต้องออกกฎเข้มงวดจนทำลายกิจกรรมของคนอื่น เพียงแค่ทำตามกฎง่ายๆ เหล่านี้ครับ
ยังไงก็ตาม ผมหวังเป็นอย่างยิ่งว่าคู่มือนี้จะเป็นประโยชน์ พวกเราสนุกกับการทำคู่มือแบบนี้ครับ หากคุณต้องการสนับสนุนชมรมของเรา โปรดพิจารณากด Subscribe YouTube Channel ของเรา, และอย่าลืมคอมเมนต์หรือ ติดต่อเรา หากมีปัญหาหรือคำถามครับ!
Happy Arduinoing! (คำนี้มันมีอยู่จริงไหมนะ?)
NM Rocketry Reviews
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้