วันศุกร์ที่ 21 ธันวาคม พ.ศ. 2561

Arduino วัดอุณหภูมิในน้ำด้วย DS18B20

Code
#include <OneWire.h
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 //กำหนดขา
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire);
void setup(void) { 
 Serial.begin(9600); 
 Serial.println("Dallas Temperature IC Control Library");  Serial.println("by 9arduino.com"); 
 sensors.begin(); 
void loop(void) {
 Serial.print(" Requesting temperatures..."); 
 sensors.requestTemperatures(); //อ่านข้อมูลจาก library
 Serial.print("Temperature is: "); 
 Serial.print(sensors.getTempCByIndex(0)); // แสดงค่า อูณหภูมิ sensor 0
delay(1000); 

อธิบาย 
การวัดอุณหภูมิ ในน้ำ ทางร้านแนะนำ Sensor Ds18b20 สามารถวัดอุณหภูมิได้ -55ºC ถึง 125ºC ความผิดพลาด  +/-0.5 ºC (ในช่วงระหว่าง -10ºC ถึง 85ºC)

อ้าอิงจากhttps://www.9arduino.com/-ds18b20

การใช้ EEPROM บันทึกค่าเมื่อหยุดจ่ายไฟให้กับบอร์ด Arduino

Code
#include<EEPROM.h>
void setup() {
Serial.begin(9600);
int num = random(0xFFFF);
EEPROM.write(0, num>>8);
EEPROM.write(1, num&0xFF);
Serial.println("EEPROM Write: " + String(num));
delay(1000);
}
void loop() {
int num = 0;
num |= EEPROM.read(0)<<8;
num |= EEPROM.read(1)&0xFF;
Serial.println("EEPROM Read: " + String(num));
delay(1000);
} อธิบาย EEPROM เป็นหน่วยความจำถาวร ที่สามารถอ่าน และเขียน ซ้ำได้ประมาณ 1 แสนครั้ง ซึ่งในบอร์ด Arduino แต่ละบอร์ดก็จะ มีขนาดพื้นที่ EEPROM แตกต่างกันไป อย่างในบอร์ด Arduino Uno R3 , Pro Mini , Nano จะมีพื้นที่ให้ใช้งานทั้งหมด 1KB (1,024 ตัวอักษร) ส่วน Arduino Mega 2560 R3 มีพื้นที่ 4KB (4,096 ตัวอักษร) พื้นที่ EEPROM ส่วนใหญ่แล้ว จะนำไปใช้ใน การเก็บค่าคอนฟิกต่างๆที่ได้ทำการตั้งค่าไว้ เมื่อหยุดจ่ายไฟจะไม่ทำให้ข้อมูลหายไป อ้างอิงจากhttps://www.ioxhop.com/

ใช้งาน DS3231 โมดูลนาฬิกา ตั้งเวลา

Code ตัวอย่าง
#include <Wire.h>
#include <SPI.h>  
#include <RTClib.h>
RTC_DS3231 RTC;
void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();    
  RTC.adjust(DateTime(__DATE__, __TIME__));   //จุดนี้เป็นการตั้งเวลา ตั้งครั้งแรกเสร็จแล้วให้ // ไว้ด้วย
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  DateTime now = RTC.now();
  RTC.setAlarm1Simple(2158);  //เป็นการตั้งเวลาปลุก เวลา 22.58 น.
  RTC.turnOnAlarm(1);  //ปลุกช่วงเวลาที่ 1
  if (RTC.checkAlarmEnabled(1)) {
    Serial.println("Alarm Enabled");
  }
}
void loop () {
    DateTime now = RTC.now();
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    if (RTC.checkIfAlarm(1)) {   // เมื่อถึงเวลาให้ทำการปลุกโดยการทำตามเงือนไขใน if
      Serial.println("Alarm Triggered");
    }
    Serial.println();
    delay(3000);
}
อธิบาย Module นาฬิกา หรือมีอีกชื่อหนึ่งว่า Real time clock (RTC) ถ้าน้องๆนึกถึง Arduino เมื่อไม่มีการจ่ายไฟโปรแกรมของ Arduino ก็จะหยุดทำงาน เราจึงมี RTC เพื่อทำการเก็บเวลาไว้เมื่อจ่ายไฟให้กับวงจร Arduino ก็จะดึงเวลามาใช้งานได้ทันที หรือการ ตั้งค่าคำนวนเวลาของ Arduino อาจจะมีปัญหา ความแม่นยำไม่ตรงบ้าง Library มีการ delay ทำให้เวลาไม่ตรงบ้าง เราก็สามารถใช้ Module อ้างอิ่งเวลาได้อย่างชัดเจนแน่นอน หรือจะนำไปใช้ในการบอกเวลา เพื่อลดน้ำต้นไม้ เปิดปิดไฟตามเวลาก็ได้เช่นกัน

อ้างอิงจากhttps://www.9arduino.com/

การใช้ Arduino วัดอุณหภูมิและความชื้นด้วย DHT11

Code
#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
   Serial.begin(9600); 
   Serial.println("DHTxx test!");

   dht.begin();
}

void loop() {
   float h = dht.readHumidity();
   float t = dht.readTemperature();
   float f = dht.readTemperature(true);

   if (isnan(h) || isnan(t) || isnan(f)) {
     Serial.println("Failed to read from DHT sensor!");
      return;
   }

   float hi = dht.computeHeatIndex(f, h);

   Serial.print("Humidity: "); 
   Serial.print(h);
   Serial.print(" %\t");
   Serial.print("Temperature: "); 
   Serial.print(t);
   Serial.print(" *C ");
   Serial.print(f);
   Serial.print(" *F\t");
   Serial.print("Heat index: ");
   Serial.print(hi);
   Serial.println(" *F");
  
   delay(2000);
}
อธิบาย

DHT11

เป็นเซ็นเซอร์ที่ใช้วัดอุณหภูมิเป็นองศาเซลเซียล และองศาฟาเรนไฮ ยังสามารถวัดความชื้นได้อีกด้วย มีไลบารี่พร้อมใช่งานกับ Arduino สามารถใช้วัดค่าได้เที่ยงตรงกว่า NTC หรือ PTC มาก เพราะให้เอาต์พุตออกมาในรูปของดิจิตอล ใช้วัดอุณหภูมิอากาศโดยรอ

อ้าอิงจากhttps://www.ioxhop.com/-dht11

สร้างนาฬิกาดิจิตอลด้วยบอร์ด Arduino

Code
/* DigitalClockRTC1307 By IOXhop.com */

#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
unsigned long previousMillis;
bool showdot = false;
String SerialGET = "";

TM1637Display display(CLK, DIO);

void setup() {
  Serial.begin(9600);
}

void loop() {
  tmElements_t tm;
  if (!RTC.read(tm)) {
    tm.Hour = 0;
    tm.Minute = 0;
    tm.Second = 0;
    RTC.write(tm);
  }

  display.write(tm.Hour/10, 0);
  display.write(tm.Hour%10, 1);
  display.write(tm.Minute/10, 2);
  display.write(tm.Minute%10, 3);

  // Dot blink
  unsigned long currentMillis = millis();
  if (currentMillis-previousMillis>500){
    previousMillis = currentMillis;
    display.dotShow(showdot=!showdot);
  }

  while (Serial.available()) {
    char c = Serial.read();
    if (c == '\n') {
      int Hour, Min, Sec;
      if(sscanf(SerialGET.c_str(), "%d:%d:%d", &Hour, &Min, &Sec){
        tm.Hour = Hour;
        tm.Minute = Min;
        tm.Second = Sec;
        RTC.write(tm);
        Serial.print("Set to ");
        Serial.print(Hour);
        Serial.print(":");
        Serial.print(Min);
        Serial.print(":");
        Serial.print(Sec);
        Serial.println();
      }else{
      Serial.println("Invalid format, Please enter Hour:Min:Sec");
      }
      SerialGET = "";
    }
    else
      SerialGET += c;
  }
}
คำอธิบาย เป็นการประยุกต์ใช้โมดูลนับเวลา RTC และโมดูล Clock Display มาใช้ร่วมกัน 
ควบคุมด้วยบอร์ด Arduino หลักการทำงานเพียงแค่ใช้บอร์ด Arduino ในการเซ็ตค่าเวลาลง
ไปในโมดูล RTC จากนั้นโมดูล RTC จะนับเวลาไปเรื่อยๆ แล้วจึงให้ Arduino ดึงค่าเวลาออก
มาจากโมดูล RTC แล้วนำไปแสดงผลที่โมดูล Clock Display
อ้างอิงจากhttps://www.ioxhop.com
Code
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7

void setup() {
  lcd.begin(16, 2); // จอกว้าง 16 ตัวอักษร 2 บรรทัด
  lcd.print("LCDisplay"); // แสดงผลคำว่า Hello, world! ออกหน้าจอ
  lcd.setCursor(0, 1); // เลื่อนเคเซอร์ไปบรรทัดที่ 2 ลำดับที่ 0 (ก่อนหน้าตัวอักษรแรก)
  lcd.print("www.ioxhop.com"); // แสดงผลคำว่า www.ioxhop.com
  delay(3000); // หน่วงเวลา 3 วินาที
  lcd.clear(); // ล้างหน้าจอ
}

void loop() {
  lcd.setCursor(0, 0);
  lcd.print(" InFunction ");
  lcd.setCursor(0, 1);
  lcd.print(" void loop(){ ");
  delay(500); // หน่วงเวลา 0.5 วินาที
  lcd.clear(); // ล้างหน้าจอ
  delay(500); // หน่วงเวลา 0.5 วินาที
}
อ้างอิงจากhttps://www.ioxhop.com

วันจันทร์ที่ 17 ธันวาคม พ.ศ. 2561

งานปฏิบัติ2

Code
int redPin = 11;
int greenPin = 10;
int bluePin =9;
void setup() {

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
   pinMode(bluePin, OUTPUT);
}


void loop() {
  digitalWrite(redPin, 255);                    
  digitalWrite(greenPin, 0);
  digitalWrite(bluePin, 0);
  delay(1000);

  digitalWrite(redPin, 0);                    
  digitalWrite(greenPin,255);
  digitalWrite(bluePin, 0);
  delay(1000);    

   digitalWrite(redPin, 0);                    
  digitalWrite(greenPin, 0);
  digitalWrite(bluePin, 255);
  delay(1000);    

   digitalWrite(redPin, 255);                    
  digitalWrite(greenPin, 255);
  digitalWrite(bluePin, 0);
  delay(1000);    

   digitalWrite(redPin, 255);                    
  digitalWrite(greenPin, 0);
  digitalWrite(bluePin, 255);
  delay(1000);    

   digitalWrite(redPin, 0);                    
  digitalWrite(greenPin, 255);
  digitalWrite(bluePin, 255);
  delay(1000);    
}
คำอธิยาย
 เมื่อกดเล่น LED จะทีสีเปลี่ยนไปเลื่อยๆ

วันอังคารที่ 11 ธันวาคม พ.ศ. 2561

งานปฏิบัติ 1



โค้ดโปรเเกรม


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
pinMode (0, INPUT);
pinMode (1, INPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
lcd.begin(16, 2);
}

void loop() {
  int re=digitalRead (0);
  int le=digitalRead (1);
  if (re==0)
  { digitalWrite (8, HIGH);
  delay(300);
  lcd.setCursor(0, 1);
  lcd. print(" LEFT ");
  digitalWrite (8, LOW);
  }
  if  (le==0){
    digitalWrite (9, HIGH);
    delay (300);
    lcd.setCursor (0, 1);
    lcd.print (" RIGHT ");
  }
}
 อธิบาย
เมื่อกดสวิชมอเตอร์1จะหมุนจอLCDจะขึ้นว่า LEFT
เมื่อกดสวิชมอเตอร์2จะหมุนจอLCDจะขึ้นว่า RIGHT