ในบทความนี้จะเป็นการกล่าวถึงวิธีการตรวจสอบหน่วยความจำ (RAM) ที่เหลืออยู่ของบอร์ด เพื่อป้องกันการใช้พื้นที่หน่วยความจำจนเต็มแล้วทำให้โปรแกรมพัง โดยปกติแล้วในการประกาศตัวแปรทุกครั้ง จะมีการจองหน่วยความจำส่วนหนึ่งไว้เพื่อจัดเก็บค่าของตัวแปรนั้นๆ โดยที่พื้นที่ๆ จอง จะมีขนาดตามชนิดของตัวแปรที่จะจัดเก็บ เรามาเขียนโปรแกรมเพื่อหาขนาดของ data type แต่ละชนิดกัน
สวัสดีครับ จากบทความที่แล้วผมได้บอกไปแล้วว่าทำไมเราจึงต้องมีการเพิ่มเซ็นเซอร์วัดอุณหภูมิและความชื้นอีกตัวเข้าไปในโปรเจคของเรา ทั้ง ๆ ที่ในบอร์ดก็มีมาให้แล้ว มาในบทความนี้จะเป็นการปรับปรุงตัวโปรเจคเดิมให้สามารถวัดค่าอุณหภูมิและความชื้นได้ถูกต้องมากยิ่งขึ้น โดยการเพิ่ม DHT22 Sensor เข้าไป อ้าว… ไหนเคยบอกว่า DHT22 มันทำให้เราต้องเสีย Digital Pin ไปฟรี ๆ ทำไมไม่ใช้ BME280 Sensor แทนละ ก็เพราะว่าตอนนี้ผมมีแต่ DHT22 ตัวเดียว ส่วน BME280 เพิ่งได้สั่งซื้อไปรอได้รับเมื่อไหรค่อยนำมาเปลี่ยนครับ
ในบทความนี้จะเป็นการทดสอบว่า ทำไมเราควรต้องเพิ่มเซ็นเซอร์วัดอุณหภูมิและความชื้นให้กับ CAT LoRa Starter Kit ของเราอีกละ ในคู่มือก็บอกแล้วว่ามีการใส่เซ็นเซอร์ HTS221 ซึ่งใช้สำหรับวัดอุณหภูมิและความชื้นมาเรียบร้อยแล้ว นั้นก็เพราะว่าจากที่ได้ลองใช้งานดูพบว่ามันวัดค่าได้ไม่ตรงกับอุณหภูมิอากาศภายนอกเลยนะสิครับ มันให้ค่าที่สูงกว่าค่าที่ควรจะเป็นมาก เรามาพิสูจน์กันดีกว่า
เซ็นเซอร์วัดอุณหภูมิและความชื้นมีมากมายหลายชนิด เซ็นเซอร์ที่เห็นคนส่วนใหญ่เอามาใช้กับบอร์ด Arduino ก็จะเป็น DHT22 (AM2302)
DHT22 Sensor — เป็นเซ็นเซอร์วัดอุณหภูมิและความชื้น ที่มีราคถูกมาก และให้ค่าที่แม่นยำพอควร แต่ข้อเสียคือมันมีขนาดใหญ่ และต้องเสีย 1 Digital Pin ให้กับเซ็นเซอร์ตัวนี้
ถ้า Digital Pin เราเหลือก็ไม่มีปัญหาอะไร แต่ถ้าเราไม่อยากเสียละจะทำยังไงดี ?
BME280 Sensor — เซ็นเซอร์ตตัวนี้ไม่เพียงแต่จะวัดอุณหภูมิ ความชื้นได้เท่านั้น มันยังวัดแรงกดอากาศ (Pressure) ได้อีกด้วย มีความแม่นยำสูงและใช้การเชื่อมต่อแบบ Inter Integrate Circuit (IIC) หรือเรียกว่า I²C ทำให้เราไม่เสียช่อง Digital Pin นั้นเอง
(อุปกรณ์ที่ใช้ I²C ในบทความที่ผ่านมาเราได้ใช้กับ RTC Module (DS3231) และ 0.96 IIC Display)…
สวัสดีครับ บทความนี้จะเป็นการเพิ่มหน้าจอแสดงผลแบบง่าย ๆ ให้กับโปรเจคจากบทความที่แล้วกันครับ ซึ่งหน้าจอแสดงผลในท้องตลาดมีมากมายหลายชนิด หลายขนาด หลายความละเอียด ทั้งแบบแสดงผลได้สีเดียว และแบบแสดงผลได้หลายสี แต่ในบทความนี้เราจะเลือกใช้หน้าจอขนาดเล็กที่ไม่จำเป็นต้องใช้ Digital pin หรือ Analog pin ในตัวบอร์ดมาควบคุมครับ เหตุผลเพราะบอร์ด CAT LoRa Starter Kit นั้นมี pin ให้เราใช้น้อยมาก เอามันไปใช้ทำอย่างอื่นดีกว่าเยอะ
สวัสดีครับ ในบทความนี้จะเป็นการนำโปรแกรมจากบทความที่แล้วมาเพิ่ม Relay Module เพื่อทำปลักไฟที่สามารถตั้งเวลาเปิด-ปิดได้จากเครือข่าย LoRa IoT by CAT
รีเลย์ คือ อุปกรณ์อิเล็กทรอนิกส์ที่ทำหน้าที่เป็นสวิตซ์ตัด-ต่อวงจร โดยการป้อนกระแสไฟฟ้าเข้าไปมีด้วยกันหลายชนิด แต่ในการพัฒนาโปรเจคของเรานี้เราจะใช้ Relay แบบที่ไม่ได้ดีเลิศนัก แต่ก็พอใช้งานได้ ราคาไม่แพง ถูกมาก ๆ โดยที่นิยมใช้จะมีด้วยกันสองชนิดคือ
1.General Relay — อุปกรณ์ที่ทำหน้าที่เป็นสวิตซ์ตัด-ต่อวงจร โดยใช้แม่เหล็กไฟฟ้า ซึ่งปกติถ้ามีการจ่ายไฟเข้าที่ตัวรีเลย์ (Relay) จะทำให้ขดลวดเหนี่ยวนำหน้าสัมผัสติดกัน จึงมีสถานะปิดวงจร (Closed Circuit) แต่ถ้าหากไม่มีการจ่ายไฟให้ รีเลย์ (Relay) ขดลวดเหนี่ยวนำหน้าสัมผัสไม่ติดกัน จะมีสถานะเปิดวงจร (Open Circuit) ข้อดีคือบำรุงรักษาง่าย ราคาไม่แพง ข้อเสียคือการตัด-ต่อแต่ละครั้งจะเกิดเสียงดัง เพราะเป็นการตัดต่อแบบอาศัยกลไกแมคคานิคในการทำงาน อีกทั้งหน้าสัมผัสของ Relay ค้าง และเสียง่าย
บทความนี้จะเป็นการประยุกต์การใช้งานโมดูล RTC (DS3231) จากบทที่แล้ว โดยเราจะเขียนโปรแกรมกำหนดช่วงเวลาเริ่มต้นและสิ้นสุดสำหรับการเปิด-ปิดหลอดไฟ LED โดยช่วงเวลาการเปิด-ปิดจะถูกส่งมาจากเครือข่าย LoRa by CAT
ตั้งเวลาเปิด-ปิดหลอดไฟ LED ผ่านเครือข่าย LoRa by CAT ได้
สวัสดีครับ ในบทความนี้เราจะมาเพิ่ม Real Time Clock (RTC) ให้แก่บอร์ด CAT LoRa Starter Kit กันครับ
เป็นอุปกรณ์ที่ให้ค่าเวลาตามจริง ทำงานโดยการจับสัญญานนาฬิกาที่ได้มาจาก Crystal มีถ่านสำรองมาให้เพื่อให้สามารถบันทึกเวลาได้ถึงแม้ว่าจะไม่มีไฟเลี้ยงมาที่ตัวบอร์ด ทำให้ไม่ต้องตั้งเวลาใหม่ทุกครั้ง โมดูล RTC นี้จำเป็นอย่างยิ่งกับการใช้งานที่ต้องมีการบันทึกเวลา (Time Stamp) หรือมีการทำงานที่เกี่ยวพันกับเวลาจริง เช่น การตั้งเวลาเปิดปิด Relay Module เป็นต้น
ความจริง Adafruit Feather M0 มีตัวจับเวลาอยู่แล้ว เช่นการใช้ฟังก์ชัน millis() เป็นต้น แต่การประมวลผลคำสั่งจะทำงานแบบ อนุกรม (Serial) คือ ทำทีละบรรทัด ทำให้การทำงานของคำสั่งจับเวลาจะถูกรบกวนจากการประมวลผลคำสั่งอื่น ๆ ไปด้วย เวลาที่ได้จากการใช้คำสั่งนี้เลยไม่สามารถนำมาเป็นเวลาตามจริงที่ต้องการบันทึกไปพร้อมกับค่าอื่น ๆ ที่ต้องการวัดได้ ดังนั้น ในการประยุกต์ใช้กับงานที่ต้องการเวลาที่แม่นยำ และสามารถบอก วันที่ เดือน ปี ชั่วโมง นาที วินาที จึงต้องใช้อุปกรณ์ที่ทำหน้าที่จับเวลาแยก
DS3231 เป็น RTC Module ที่มีข้อดีคือ มีการชดเชยการเปลี่ยนแปลงของสัญญาณนาฬิกา เนื่องจากการเปลี่ยนแปลงของอุณหภูมิแวดล้อมด้วย หรือก็คือ เวลาที่อุณหภูมิเปลี่ยน สัญญาณนาฬิกาจาก Crystal ก็เปลี่ยน ทำให้เวลาก็เพี้ยนไปด้วย แต่โมดูลนี้ได้ทำการวัดค่าอุณหภูมิพร้อมทั้งชดเชยความเปลี่ยนแปลงนี้ไปด้วยแล้ว ทำให้เวลาที่ได้มีความแม่นยำสูงมาก อีกทั้งยังใช้การเชื่อมต่อแบบบัส I2C ทำให้ง่ายต่อการใช้งานมาก…
สวัสดีครับ ในบทความนี้ผมจะแสดงตัวอย่างการทำไฟกระพริบครับ แต่ไฟกระพริบนี้เราจะทำกันในฟังก์ชัน Setup() เพื่อแสดงสถานะการเชื่อมต่อ LoRa โดยจะให้ไฟ LED สีแดง กระพริบ ทุกๆ 1 วินาที ขณะกำลังเชื่อมต่อ LoRa และดับลงเมื่อการเชื่อมต่อเสร็จสิ้น โดยใช้ Timer /Counter (TC) ในการทำครับ
Timer/Counter เป็นส่วนประกอบหนึ่งของไมโครคอนโทรลเลอร์ มีหน้าที่จัดการเกี่ยวกับการทำงานที่เป็นคาบเวลา (interval) โดยการทำงานดังกล่าว จะทำงานด้วยฮาร์ดแวร์และเป็นอิสระกับการประมวลผล จึงช่วยลดภาระการประมวลผลและมีความแม่นยำมากกว่าการทำงานด้วยซอฟแวร์
สวัสดีครับ ในตอนที่แล้วผมได้อธิบายการสร้างไลบรารี CAT LoRaไว้ใช้เองแบบง่าย ๆ ในบทความนี้เราจะมาทำการเพิ่มการอ่านอุณหภูมิ (Temperature) และความชื้นในอากาศ (Humidity) เนื่องจากในบอร์ด CAT LoRa Starter Kit ได้มีการใส่เซนเซอร์ HTS221 ไว้ให้แล้ว โดยเราจะนำไลบรารี่ที่ชื่อ SmartEverything HTS221 มาใช้ใน CAT LoRa Library ที่เราได้สร้างไว้
โดยไปที่ Manage Libraries แล้วคนหาไลบรารี่ชื่อ SmartEverything HTS221 จากนั้นทำการติดตั้งจนเสร็จ
จากบทความที่แล้วเราได้ลองสร้าง Library ง่าย ๆ กันไปแล้ว มาในบทความนี้จะเป็นการนำเอาโค๊ดจากบทความใน ตอนที่ 2 มาแปลงให้เป็น Library กันครับ
จากโค๊ดโปรแกรมเดิมจาก ตอนที่ 2 จะพบว่าส่วนหลัก ๆ ของการทำงานจะประกอบด้วย 5 ส่วนที่สำคัญคือ
ดังนั้นเราสามารถออกแบบ Class Diagram ของ Library นี้ได้เป็นดังนี้
CatLoRa Class//Attributes
-devEui:String
-devAddr:String
-nwksKey:String
-appsKey:String//Methods +begin(baudRate: int):void -freqLoraConfig():void +joinABP(loraClass:String, devEui:String, devADDR:String, nwksKey:String, appsKey:String):void +transmit(port:int, payload:String):void +receive():String +getPortReceive(dataFromReceive:String):int +getPayloadReceive(dataFromReceive:String):String…