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

ส่วนประกอบงานวิชา การเขียนโปรแกรมคอมฯ ครั้งที่ 5

                           ใบรายงานผลการปฏิบัติงาน
Code

int led = 13;   // ตัวแปรพื้นฐานที่เก็บตัวเลขโดยไม่มีจุดทศนิยม
int sw = 2;
void setup()  // ฟังก์ชั่นใช้ในการประกาศค่าเริ่มต้น  
{
  Serial.begin(9600);  //ประกาศการใช้งานการสื่อสารรับส่งข้อมูลผ่าน พอร์ตRS232
  pinMode(led,OUTPUT);    //การกำหนดหน้าที่ของขาว่าเป็นอินพุตหรือเอาต์พุต
  pinMode(sw,INPUT);       
}

void loop()  // ฟังก์ชั่นใช้ในการเขียนโค้ดโปรแกรมการทำงานของArduinoเป็นฟังก์ชั่นการวนลูปไปเรื่อยๆ 
{ 
  int x;
  x = digitalRead(sw);  //เป็นฟังก์ชันที่ใช้ในการอ่านค่าจากขาแบบเฉพาะเจาะจง มีค่า                                                             เป็น HIGH หรือ LOW
  Serial.print("x = ");Serial.println(x);
  digitalWrite(led,!x);    ทำหน้าที่เขียนค่า HIGH หรือ LOW ไปยังขาดิจิตอล

}

ภาพจำลองการทำงานด้วยโปรแกรม Proteus



อธิบายการทำงานของโปรแกรม

เมื่อกดสวิตซ์ขึ้นเลข0 เมือไม่กดสวิตซ์ ขึ้นเลข1 บน Virtual Terminal มีไฟ led ขึ้นทุกครั้งที่กด

สวิตซ์

ส่วนประกอบงานวิชา การเขียนโปรแกรมคอมฯ ครั้งที่ 4

                             ใบรายงานผลการปฏิบัติงาน


Code

int led = 10;   // ตัวแปรพื้นฐานที่เก็บตัวเลขโดยไม่มีจุดทศนิยม
void setup()  // ฟังก์ชั่นใช้ในการประกาศค่าเริ่มต้น  
{
  Serial.begin(9600);  //ประกาศการใช้งานการสื่อสารรับส่งข้อมูลผ่าน พอร์ตRS232
  pinMode(led,OUTPUT);   //การกำหนดหน้าที่ของขาว่าเป็นอินพุตหรือเอาต์พุต
}
void loop()  // ฟังก์ชั่นใช้ในการเขียนโค้ดโปรแกรมการทำงานของArduinoเป็นฟังก์ชั่นการวนลูปไปเรื่อยๆ 
{
  int x,y; 
  x = analogRead(A0);      // เขียนค่าอนาล็อกที่ขา A0
  y = map(x,0,1023,0,255);   //เป็นฟังก์ชันที่ใช้ในการจับคู่หมายเลขจากช่วงหนึ่งไปเป็นช่วงอื่นๆ 
  Serial.print("x = ");Serial.println(x);
  Serial.print("y = ");Serial.println(y);  
  analogWrite(led,y);   // ทำหน้าที่เขียนค่า HIGH หรือ LOW ไปยังขาอนาลอค

}

ภาพจำลองการทำงานด้วยโปรแกรม Proteus


อธิบายการทำงานของโปรแกรม


อ่านค่า R เเล้วเเสดงผลที่ Vartual Terminal สามารถปรับค่า R ได้

led กระพริบเมื่อตอนทำงาน


ส่วนประกอบงานวิชา การเขียนโปรแกรมคอมฯ ครั้งที่ 3

                            ใบรายงานผลการปฏิบัติงาน
Code

#include "LedControl.h"         // การอ่านไฟล์จากไดเร็กทอรี หรือโฟลเดอร์ที่กำหนดไว้
LedControl lc=LedControl(5,7,6,1); 

void show4digit(int num)     // การเขียนฟังก์ชั่นขึ้นมาโดยตั้งชื่อว่า  show4digit
{
   int seg1,seg2,seg3,seg4;   // ตัวแปรพื้นฐานที่เก็บตัวเลขโดยไม่มีจุดทศนิยม
  seg1 = ((num%1000)%100)%10;
  seg2 = ((num%1000)%100)/10;
  seg3 = (num%1000)/100;
  seg4 = num/1000;  
  lc.setDigit(0,0,seg1,false); 
  if (num>=10)
    lc.setDigit(0,1,seg2,false);    
    if (num>=100)  // คำสั่งในการตัดสินใจ แบบตัวเลือกเดียว โดยใช้งานร่วมกับ ==, !=, <, >เพื่อใช้ในการ                                                   ตัดสินใจในการหาคำ
        lc.setDigit(0,2,seg3,false);
    if (num>=1000)
        lc.setDigit(0,3,seg4,false);   
    delay(300);       //  การหน่วงเวลา 
}
void setup()  // ฟังก์ชั่นใช้ในการประกาศค่าเริ่มต้น
{
    Serial.begin(9600);   //ประกาศการใช้งานการสื่อสารรับส่งข้อมูลผ่าน พอร์ตRS232
    lc.shutdown(0,false);  
    lc.setIntensity(0,5); 
    lc.clearDisplay(0);       // ล้างหน้าจอ lcd
}
void loop()    // ฟังก์ชั่นใช้ในการเขียนโค้ดโปรแกรมการทำงานของArduinoเป็นฟังก์ชั่นการวนลูปไปเรื่อยๆ 
{
    int num;       // ตัวแปร  num
    num = analogRead(A0);     // เขียนค่าอนาล็อกที่ขา A0
    Serial.print("analogRead=");Serial.println(num);    
    lc.clearDisplay(0);
    show4digit(num);

}

ภาพจำลองการทำงานด้วยโปรแกรม Proteus


 อธิบายการทำงานของโปรแกรม

อ่านค่าตัว R เเล้วขึ้นค่าบน 7segment สามรถปรับค่า R ได้


ส่วนประกอบงานวิชา การเขียนโปรแกรมคอมฯ ครั้งที่ 2

                            ใบรายงานผลการปฏิบัติงาน

Code


int led1=7;       // ตัวแปรพื้นฐานที่เก็บตัวเลขโดยไม่มีจุดทศนิยม
int led2=6;
int led3=5;
int led4=4;
void setup() {    // ฟังก์ชั่นใช้ในการประกาศค่าเริ่มต้น  
  pinMode(led1,OUTPUT);    //การกำหนดหน้าที่ของขาว่าเป็นอินพุตหรือเอาต์พุต
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  

}

void loop() {    // ฟังก์ชั่นใช้ในการเขียนโค้ดโปรแกรมการทำงานของArduinoเป็นฟังก์ชั่นการวนลูปไปเรื่อยๆ 
  digitalWrite(led1,HIGH);    //ทำหน้าที่เขียนค่า HIGH หรือ LOW ไปยังขาดิจิตอล
  digitalWrite(led2,LOW);
  digitalWrite(led3,LOW);
  digitalWrite(led4,LOW);
  delay(1000);                        //  การหน่วงเวลา 
  digitalWrite(led1,LOW);
  digitalWrite(led2,HIGH);
  digitalWrite(led3,LOW);
  digitalWrite(led4,LOW);
  delay(1000);
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
  digitalWrite(led3,HIGH);
  digitalWrite(led4,LOW);
  delay(1000);
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
  digitalWrite(led3,LOW);
  digitalWrite(led4,HIGH);
  delay(1000);


}

ภาพจำลองการทำงานด้วยโปรแกรม Proteus





อธิบายการทำงานของโปรแกรม

ไฟ LED ติดทีละดวง วนไปเรื่อยๆ

ส่วนประกอบงานวิชา การเขียนโปรแกรมคอมฯ ครั้งที่ 1

ใบรายงานผลการปฏิบัติงาน

Code




int LED =13;  // ตัวแปรพื้นฐานที่เก็บตัวเลขโดยไม่มีจุดทศนิยม

void setup()  // ฟังก์ชั่นใช้ในการประกาศค่าเริ่มต้น  
{
 pinMode (LED,OUTPUT);   //การกำหนดหน้าที่ของขาว่าเป็นอินพุตหรือเอาต์พุต
}

void loop() // ฟังก์ชั่นใช้ในการเขียนโค้ดโปรแกรมการทำงานของArduinoเป็นฟังก์ชั่นการวนลูปไปเรื่อยๆ 
{
 digitalWrite(LED,HIGH);    //ทำหน้าที่เขียนค่า HIGH หรือ LOW ไปยังขาดิจิตอล
 delay(1000);
 digitalWrite(LED,LOW);
 delay(1000);     //  การหน่วงเวลา 
}


ภาพจำลองการทำงานด้วยโปรแกรม Proteus



อธิบายการทำงานของโปรแกรม

      ไฟ LED กระพริบทุก 1วิ


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

Mini Project

Mini Project 

เปิดปิดไฟ ด้วย Smartphone



อุปกรณ์

1.Arduino UNO R3
2.16x2 โมดูลจอ LCD พร้อม I2C Interface
3.Arduino Relay Module 5V 4 Channel High Trigger 250V/10A
4.Bluetooth Module HC05

Code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);

SoftwareSerial mySerial(10, 11); //  TX ,RX

const int ry1=A3;
const int ry2=A2;
const int ry3=A1;
const int ry4=A0;
void setup() 
{
  lcd.begin();
  lcd.backlight();
  
  lcd.setCursor(0, 0); 
lcd.print("Arduino");

lcd.setCursor(4, 1); 
lcd.print("Mini Project");
delay(3000);
lcd.clear();
  pinMode(ry1,OUTPUT);
  pinMode(ry2,OUTPUT);
  pinMode(ry3,OUTPUT);
  pinMode(ry4,OUTPUT);
  digitalWrite(ry1,HIGH);
  digitalWrite(ry2,HIGH);
  digitalWrite(ry3,HIGH);
  digitalWrite(ry4,HIGH);
  mySerial.begin(9600);
}
char x;
void loop() 
{
  if (mySerial.available())
  {
    x=mySerial.read();
  }
  switch(x)
  {
    case '1':
          digitalWrite(ry1,LOW);
          lcd.setCursor(0, 0); 
          lcd.print("ON 1");
          break;
    case '2':
          digitalWrite(ry1,HIGH);
          lcd.setCursor(0, 0); 
         
          lcd.print("OFF1");
          // delay(100);
          //lcd.clear();
          break;
    case '3':
          digitalWrite(ry2,LOW);
          lcd.setCursor(7,0); 
          lcd.print("ON 2");
          break;
    case '4':
          digitalWrite(ry2,HIGH);
           lcd.setCursor(7,0); 
          lcd.print("OFF2");
         //  delay(100);
          //lcd.clear();
          break;
    case '5':
          digitalWrite(ry3,LOW);
          lcd.setCursor(0, 1); 
          lcd.print("ON 3");
          break;
    case '6':
          digitalWrite(ry3,HIGH);
            lcd.setCursor(0, 1); 
         
          lcd.print("OFF3");
          // delay(100);
         // lcd.clear();
          break;
    
    case '7':
          digitalWrite(ry4,LOW);
          lcd.setCursor(7, 1); 
          lcd.print("ON 4");
          
          break;
    case '8':
          digitalWrite(ry4,HIGH);
           lcd.setCursor(7, 1); 
         
          lcd.print("OFF4");
           //delay(100);
           //lcd.clear();
          break;
          
  }
}

    แอปพลิเคชั่น ที่ใช้




                                                                    คลิปการทำงาน












วันจันทร์ที่ 20 สิงหาคม พ.ศ. 2561

ส่งงานครั้งที่20 Robotcar Controlled Using G-Sensor Smartphone

Robotcar Controlled Using G-Sensor Smartphone


อุปกรณ์

1.Arduino UNO & Genuino UNO ×1
2.Bluetooth HC-06 module ×1
3.Motor driver chip L298N ×1
4.Any robot car platform ×1
5.RemoteXY

ตัวอย่างโค้ด
///////////////////////////////////////////// 
//        RemoteXY include library         // 
///////////////////////////////////////////// 

/* RemoteXY select connection mode and include library */ 
#define REMOTEXY_MODE__SOFTWARESERIAL 
#include <SoftwareSerial.h> 
#include <RemoteXY.h> 

/* RemoteXY connection settings */
#define REMOTEXY_SERIAL_RX 2 
#define REMOTEXY_SERIAL_TX 3 
#define REMOTEXY_SERIAL_SPEED 9600 

/* RemoteXY configurate  */ 
unsigned char RemoteXY_CONF[] = 
  { 3,0,23,0,1,5,5,15,41,11
  ,43,43,1,2,0,6,5,27,11,5
  ,79,78,0,79,70,70,0 }; 
   
/* this structure defines all the variables of your control interface */ 
struct { 

    /* input variable */
  signed char joystick_1_x; /* =-100..100 x-coordinate joystick position */
  signed char joystick_1_y; /* =-100..100 y-coordinate joystick position */
  unsigned char switch_1; /* =1 if switch ON and =0 if OFF */

    /* other variable */
  unsigned char connect_flag;  /* =1 if wire connected, else =0 */

} RemoteXY; 

///////////////////////////////////////////// 
//           END RemoteXY include          // 
///////////////////////////////////////////// 
/* defined the right motor control pins */
#define PIN_MOTOR_RIGHT_UP 7
#define PIN_MOTOR_RIGHT_DN 6
#define PIN_MOTOR_RIGHT_SPEED 10

/* defined the left motor control pins */
#define PIN_MOTOR_LEFT_UP 5
#define PIN_MOTOR_LEFT_DN 4
#define PIN_MOTOR_LEFT_SPEED 9

/* defined the LED pin */
#define PIN_LED 13


/* defined two arrays with a list of pins for each motor */
unsigned char RightMotor[3] = 
  {PIN_MOTOR_RIGHT_UP, PIN_MOTOR_RIGHT_DN, PIN_MOTOR_RIGHT_SPEED};
unsigned char LeftMotor[3] = 
  {PIN_MOTOR_LEFT_UP, PIN_MOTOR_LEFT_DN, PIN_MOTOR_LEFT_SPEED};

/*
   speed control of the motor
   motor - pointer to an array of pins
   v - motor speed can be set from -100 to 100
*/
void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
  if (v>0) {
    digitalWrite(motor[0], HIGH);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], v*2.55);
  }
  else if (v<0) {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], HIGH);
    analogWrite(motor[2], (-v)*2.55);
  }
  else {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], 0);
  }
}

void setup()
{
  /* initialization pins */
  pinMode (PIN_MOTOR_RIGHT_UP, OUTPUT);
  pinMode (PIN_MOTOR_RIGHT_DN, OUTPUT);
  pinMode (PIN_MOTOR_LEFT_UP, OUTPUT);
  pinMode (PIN_MOTOR_LEFT_DN, OUTPUT);
  pinMode (PIN_LED, OUTPUT);

  /* initialization module RemoteXY */
  RemoteXY_Init ();

}

void loop()
{
  /* event handler module RemoteXY */
  RemoteXY_Handler ();

  /* manage LED pin */
  digitalWrite (PIN_LED, (RemoteXY.switch_1==0)?LOW:HIGH);

  /* manage the right motor */
  Wheel (RightMotor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x);
  /* manage the left motor */
  Wheel (LeftMotor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x);
}

อ้างอิง