วันอาทิตย์ที่ 30 กันยายน พ.ศ. 2561

มินิโปรเจค ให้อาหารปลาด้วย arduino



มินิโปรเจค ให้อาหารปลาด้วย  arduino







อุปกรณ์

  1. อาดูโน่  R3
  2. โมดูล จอLCD 0x27
  3. คีย์แพด 3x4
  4. เซอร์โว มอเตอร์ SG180
  5. สายไฟ
  6. โฟโต้บอร์ด (ขนาดเล็ก)
  7. ไม้อัด
  8. น็อต ผู้+เมีย
  9. กาว
  10. เคเบิ้ลไทล์



ตัวอย่างการต่อ






ตัวอย่าง "ชิ้นงานจริงหลังจากประกอบเสร็จ"










บล็อกไดอะแกรม





ตัวอย่างโค้ด


#include <Keypad.h> เรียกใช้ไลบารี่ #include <Servo.h> เรียกใช้ไลบารี่
#include <Wire.h> เรียกใช้ไลบารี่ #include <LiquidCrystal_I2C.h> เรียนใช้ไลบารี่ LiquidCrystal_I2C lcd(0x27,16,2); กำหนดขนาดจอLCD Servo myservo; ประกาศเรียกใช้ Servo myservo จากไลบารี่ int pos = 0; ตัวแปล เท่ากับ 0 char customKey; ประกาศตัวแปลcustomkey const byte ROWS = 4; การประกาศตัวแปล ROWS ไว้ที่ขา4
const byte COLS = 4; การประกาศตัวแปล COLS ไว้ที่ขา4 char keys[ROWS][COLS] = { ประกาศตัวแปล อาเร {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte rowPins[ROWS] = {2, 3, 4, 5}; กำหนดขา 2 3 4 5 byte colPins[COLS] = {6, 7, 8}; กำหนดขา 6 7 8 Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); คือคำสั่งพิเศษ คีลแพด

instance of class NewKeypad ค่าตัวแปล Keypad int Kill = 0; ประกาศตัวแปล เท่ากับ 0

void setup() {
myservo.attach(9); กำหนดขาที่ 9 Serial.begin(9600); กำหนดค่าเริ่มต้น9600 lcd.begin(); กำหนดค่าเริ่มต้นLCD lcd.setBacklight(255); คือกำหนดแสงที่จอ LCD lcd.print("Kitsada 01"); คือ การแสดงผล lcd.setCursor(0, 1); เซต ตำแหน่งคำ 0,1 lcd.print("witsarut 16"); คือ การแสดงผล delay(3000); สั่งรีเลย์ เท่ากับ 3วิ lcd.clear(); คือ ลบผลจอ lcd pos = 8000; ค่าตัวแปล เท่ากับ 8000 lcd.setCursor(5, 0); เซต ตำแหน่งคำ 5,0 lcd.print("Mode 1"); คือ การแสดงผลจอ lcd.setCursor(5, 1); เซตตำแหน่งคำ 5,1 lcd.print("5 ms"); แสดงผลจอ5 ms } void loop() { static unsigned long Time = millis(); คือ กำหนดTime เท่ากับ ค่าเวลา
customKey = customKeypad.getKey(); customkey รับค่าจากคีย์แพด

if (customKey){ ถ้ามี การกดที่คีย์แพดจะแสดงออกมาที่จอมอนิเตอร์ Serial.println(customKey); }
if (customKey == '1'){ ถ้า coustomkey เท่ากับ 1 pos = 8000; pos เท่ากับ 8000 Kill = 1; kill เท่ากับ 1 คือตัวตั้งค่าโหมด 1 lcd.setCursor(5,0);; เซตค่าตำแหน่งแถวที่ 5บรรทัด0 lcd.print("Mode 1"); แสดงคำนี้ออกไป 1 lcd.setCursor(5, 1);; เซตค่าตำแหน่งแถวที่ 5บรรทัด1 lcd.print("5 ms"); แสดง5 ms }
if (customKey == '2'){ ถ้าcustomkey เท่ากับ 2 pos = 13000; pos เท่ากับ 13000 Kill = 2; kill เท่ากับ 2 คือการตั้งค่าโหมด 2 lcd.setCursor(5, 0);; เซตค่าตำแหน่งแถวที่ 5 บรนทัดที่0 lcd.print("Mode 2"); แสดงคำนี้ออกไป 2 lcd.setCursor(5, 1);; เซตค่าตำแหน่งแถวที่5 บรรทัดที่1 lcd.print("10 ms"); แสดง 10ms }
if (customKey == '3'){ ถ้าcustomkey เท่ากับ 3 pos = 23000; posเท่ากับ 23000 Kill = 3; kill เท่ากับ 3 คือการตั้งค่าโหมด 3 lcd.setCursor(5, 0); เซตค่าตำแหน่งแถวที่ 5 บรรทัดที่0 lcd.print("Mode 3"); แสดงคำนี้ออกไป 3 lcd.setCursor(5, 1); เซตค่าตำแหน่งแถวที่5 บรรทัดที่1 lcd.print("20 ms"); แสดง 20ms }
if((millis()-Time)>pos){ ถ้า millis ลบกับ time แล้วมากกว่า pos คำสั่งที่ตั้งไว้ก้จะทำงาน หรือ ถ้าเวลาถึงค่าของ pos ก็จะทำงาน
Time = millis(); Time เท่ากับ mills หรือค่าเวลา myservo.write(0); คือคำสั่งให้มอเตอร์ หมุน0 องศา delay(3000); รีเลย์ เท่ากับ 3วิ }

else{ ถ้าคำสั่ง if ไม่เป็นจริง myservo.write(90); คือคำสั่งให้มอเตอร์ หมุน90 องศา } }



วีดีโอตัวอย่าง "การทำงาน"




ลิงก์วีดีโอ: https://youtu.be/QJgBY-XWTZ0

ช่ื่อผู้จัดทำ

  1. นายกฤษฎา แหยมนุช
  2. นายวิทษรุจน์ คงอ่วมท่างาม




งานบล็อคแก้ข้อสอบ

Arduino Based Automation ผ่าน Bluetooth

1 แยกส่วน Hardware
input
โมดูล Bluetooth hc-05
ตัวต้านทาน 10 
ตัวต้านทาน 20 
ตัวต้านทาน 1 KΩ x 4
สมาร์ทโฟนเปิดใช้งาน Bluetooth
Power supply 12 v
Prototyping board (Bread board)

output
ทรานซิสเตอร์ 2N2222  NPN  Transistor x 4
ไดโอด  1N4007 x 4
Relay 12v x 4

2 Software อธิบายฟังก์ชั่นพิเศษ
code
#include <SoftwareSerial.h> 1ประกาศตัวที่เราจะใช้ และประกาศขาในขั้นต่อไป
const int rxPin = 4;
const int txPin = 2;
SoftwareSerial mySerial(rxPin, txPin);
const int Loads[] = {9, 10, 11, 12};
int state = 0;
int flag = 0;
2 ทำการประกาศ ฟังชั่น setup แล้วเขียนฟังชั่น for มาใช้งาน
void setup()
{
for (int i=0;i<4;i++)
{
pinMode(Loads[i], OUTPUT);
}
mySerial.begin(9600);
for (int i=0;i<4;i++)
{
digitalWrite(Loads[i], LOW);
}
}
3 ประกาศใช้ฟังชั่น loop แล้วประกาศ ใช้ฟังชั่น if มาใช้งาน
void loop()
{
if(mySerial.available() > 0)
{
state = mySerial.read();
flag=0;
}
4 ประกาศใช้ switch เพื่อใช้งานด้วย Bluetooth เพื่อเชื่อมกับสาร์ทโฟน และเขียนขาที่เราเขียนตามโค้ด
switch(state)
{
case '0':digitalWrite(Loads[0], HIGH);
flag=1;
break;
case '1':digitalWrite(Loads[0], LOW);
flag=1;
break;
case '2':digitalWrite(Loads[1], HIGH);
flag=1;
break;
case '3':digitalWrite(Loads[1], LOW);
flag=1;
break;
case '4':digitalWrite(Loads[2], HIGH);
flag=1;
break;
case '5':digitalWrite(Loads[2], LOW);
flag=1;
break;
case '6':digitalWrite(Loads[3], HIGH);
flag=1;
break;
case '7':digitalWrite(Loads[3], LOW);
flag=1;
break;
case '8':digitalWrite(Loads[0], LOW);
digitalWrite(Loads[1], LOW);
digitalWrite(Loads[2], LOW);
digitalWrite(Loads[3], LOW);
flag=1;
break;
}
} Flowchart



วันอังคารที่ 25 กันยายน พ.ศ. 2561

งานปฏิบัติที่ 19

wiring diagram

รูปที่ 1


Code 1
#include <SoftwareSerial.h>
#include <DHT11.h>
//=============================================
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x27, 16, 2);
LiquidCrystal_I2C lcd(0x3F, 16, 2);
SoftwareSerial ArduinoSerial(3, 2); // RX, TX
//=============================================
int SW_ON = 4,SW_OFF = 5,pin=6;//กำหนดขา INPUT 
int Sun = 9,CSun = 0,Relay1 = 12, Relay2 = 11; //กำหนดขา OUTPUT   
int ATL = A0,ATH = A1;//กำหนดขา Analog
int VTL1 = 0,VTH1 = 0,TL = 0,TH =0,VRHL = 50,VRHH = 80; 
DHT11 dht11(pin);
//============================================= 
void setup()
{
  lcd.begin();
  Serial.begin(115200);
  ArduinoSerial.begin(4800);
  while (!Serial){
    ;
    }
  //===================================================== 
  lcd.setCursor(0, 0);lcd.print("Elec Pattayatech");
  lcd.setCursor(0, 1);lcd.print("Smart Farm 2016 ");
  delay(5000);
  //====================================================
  pinMode(Relay1, OUTPUT);pinMode(Relay2, OUTPUT);    
  pinMode(SW_ON, INPUT); pinMode(SW_OFF, INPUT); pinMode(Sun, INPUT);  
  digitalWrite(Relay1, HIGH);digitalWrite(Relay2, HIGH);
  lcd.setCursor(0, 0);lcd.print("                ");
  lcd.setCursor(0, 1);lcd.print("                ");  
}
//=============================================================
void loop()
{
  while (ArduinoSerial.available() > 0) {
  float val = ArduinoSerial.parseFloat();
  if (ArduinoSerial.read() == '\n') {
  if (val == 10) {
  digitalWrite(13, 1);
  } else if (val == 11) {
  digitalWrite(13, 0);
  }
  Serial.println(val);
  }
  }
  delay(100);
  //========ปรับค่าอุณหภูมิอ้งอิง====================================
  CSun = digitalRead(Sun);
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)
  {
  VTL1 = analogRead(ATL);
  VTH1 = analogRead(ATH);
  TL = map(VTL1,0,1023,10,30);
  TH = map(VTH1,0,1023,25,45);
  Serial.print("TL :");Serial.print(TL);Serial.println("*C");
  Serial.print("TH :");Serial.print(TH);Serial.println("*C");
  //===========================================================
    int Stemp =(int)(temp);int Shumi=(int)(humi);//ตัดทศนิยม
    Serial.print("temp :");Serial.print(Stemp);Serial.println("*C");
    Serial.print("humidity :");Serial.print(Shumi);Serial.println("%");
    Serial.print("SUN :");Serial.println(CSun);//Serial.println();
    //===================================================
    lcd.setCursor(0, 0);lcd.print("TL:");lcd.print(TL);
    lcd.setCursor(6, 0);lcd.print("TH:");lcd.print(TH);
    lcd.setCursor(12, 0);lcd.print("S1:");lcd.print(!CSun);
    lcd.setCursor(0, 1);lcd.print("TN:");lcd.print(Stemp);
    lcd.setCursor(6, 1);lcd.print("RH:");lcd.print(Shumi);
    lcd.setCursor(12, 1);lcd.print("P1:0");lcd.print(Shumi);
    delay(1000);
    //===================================================
   //=======ควบคุมอุณหภูมิ===========================
   if(temp < TL && temp < TH ){
        digitalWrite(Relay1, HIGH);//ปั๊มน้ำหยุดทำงาน
        lcd.setCursor(12, 1);lcd.print("P1:0");
        delay(100);
        digitalWrite(Relay2, LOW);//หลอดไฟทำงาน 
        lcd.setCursor(12, 0);lcd.print("L1:1");
        delay(60000);//หน่วงเวลา 1 นาที 
      }else if(temp > TL && temp > TH){
        digitalWrite(Relay2, HIGH);//หลอดไฟไม่ทำงาน
        lcd.setCursor(12, 0);lcd.print("L1:0"); 
        delay(100);
        digitalWrite(Relay1, LOW);//ปั๊มน้ำทำงาน 
        lcd.setCursor(12, 1);lcd.print("P1:1");
        delay(60000);//หน่วงเวลา 1 นาที 
      }else if(temp > TL && temp < TH){
       //=======ควบคุมความชื้น===========================
      if(humi < VRHL && humi < VRHH){
        digitalWrite(Relay2, HIGH);//หลอดไฟไม่ทำงาน
        lcd.setCursor(12, 0);lcd.print("L1:0"); 
        delay(100);
        digitalWrite(Relay1, LOW);//ปั๊มน้ำทำงาน 
        lcd.setCursor(12, 1);lcd.print("P1:1");
        delay(60000);//หน่วงเวลา 1 นาที 
      }else if(humi > VRHL && humi > VRHH){
        digitalWrite(Relay1, HIGH);//ปั๊มน้ำหยุดทำงาน
        lcd.setCursor(12, 1);lcd.print("P1:0");
        delay(100);
        digitalWrite(Relay2, LOW);//หลอดไฟทำงาน 
        lcd.setCursor(12, 0);lcd.print("L1:1");
        delay(60000);//หน่วงเวลา 1 นาที 
      }else if(humi > VRHL && humi < VRHH){
        //delay(1000);
        digitalWrite(Relay1, HIGH);//ปั๊มน้ำหยุดทำงาน
        lcd.setCursor(12, 1);lcd.print("P1:0"); 
        digitalWrite(Relay2, HIGH);//หลอดไฟไม่ทำงาน  
        lcd.setCursor(12, 0);lcd.print("L1:0");
        //หน่วงเวลา 1 นาที        
        }
     //=======ENDควบคุมความชื้น===========================       
        }
     //=======ENDควบคุมอุณหภูมิ===========================
  }
  else
  {
    Serial.println();Serial.print("Error No :");
    Serial.print(err);Serial.println();    
  }
 delay(DHT11_RETRY_DELAY); 

}