Wednesday, August 30, 2017

Điều khiển 4 thiết bị (4 relay) bằng bluetooth từ smartphone Android (cách khác)

1. Ý tưởng của dự án:

     Ở dự án trước, ta đã tạo app trên Android với giao diện gồm 10 nút nhấn, mỗi thiết bị cần 2 nút nhấn mở/tắt.
     Ở dự án này, ta tạo app trên Android với giao diện chỉ gồm 5 nút nhấn, mỗi thiết bị chỉ cần 1 nút nhấn mở/tắt.

2. Phần cứng: 

     Giữ nguyên phần cứng ở dự án trước.

   Lắp mạch theo sơ đồ:


3. Code cho Arduino Nano:

___Code___

// Khai báo tên 4 chân nối với relay
const int  relay1 = 6, relay2 = 7, relay3 = 8, relay4 = 9, cho = 300;

// Các biến hỗ trợ nhận biết trạng thái button
boolean trangthaiA = 1, trangthaiB = 1, trangthaiC = 1, trangthaiD = 1;

// Biến đọc giá trị bluetooth
int value = 0;

void setup()
{
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);

  digitalWrite(relay1,1);
  digitalWrite(relay2,1);
  digitalWrite(relay3,1);
  digitalWrite(relay4,1);
  Serial.begin(9600);
}

void loop()
{
  // Đọc tín hiệu các phím bluetooth
  if (Serial.available()) value = Serial.read();

  if (value == 1 && trangthaiA == 1)
  {
    digitalWrite(relay1,0);
    trangthaiA = 0;
    delay(cho);
  }
  else if (value == 1 && trangthaiA == 0)
  {
    digitalWrite(relay1,1);
    trangthaiA = 1;
    delay(cho);
  }

  if (value == 2 && trangthaiB == 1)
  {
    digitalWrite(relay2,0);
    trangthaiB = 0;
    delay(cho);
  }
  else if (value == 2 && trangthaiB == 0)
  {
    digitalWrite(relay2,1);
    trangthaiB = 1;
    delay(cho);
  }

  if (value == 3 && trangthaiC == 1)
  {
    digitalWrite(relay3,0);
    trangthaiC = 0;
    delay(cho);
  }
  else if (value == 3 && trangthaiC == 0)
  {
    digitalWrite(relay3,1);
    trangthaiC = 1;
    delay(cho);
  }

  if (value == 4 && trangthaiD == 1)
  {
    digitalWrite(relay4,0);
    trangthaiD = 0;
    delay(cho);
  }
  else if (value == 4 && trangthaiD == 0)
  {
    digitalWrite(relay4,1);
    trangthaiD = 1;
    delay(cho);
  }

  if (value == 5 && (trangthaiA == 0 || trangthaiB == 0 ||trangthaiC == 0 ||trangthaiD == 0))
  {
    digitalWrite(relay1,1);
    digitalWrite(relay2,1);
    digitalWrite(relay3,1);
    digitalWrite(relay4,1);
    trangthaiA = 1;
    trangthaiB = 1;
    trangthaiC = 1;
    trangthaiD = 1;
    delay(cho);
  }
  else if (value == 5 && trangthaiA == 1 && trangthaiB == 1 && trangthaiC == 1 && trangthaiD == 1)
  {
    digitalWrite(relay1,0);
    digitalWrite(relay2,0);
    digitalWrite(relay3,0);
    digitalWrite(relay4,0);
    trangthaiA = 0;
    trangthaiB = 0;
    trangthaiC = 0;
    trangthaiD = 0;
    delay(cho);
  }
 
}

___End___

4. Phần mềm trên smartphone Android:


---Chưa hoàn chỉnh---

Tuesday, August 22, 2017

Điều khiển 4 thiết bị (4 relay) bằng bluetooth từ smartphone Android

1. Ý tưởng của dự án:

    Tạo ra một ứng dụng (app) trên smartphone Android (hoặc tải app có sẵn trên CHplay). Giao diện chính của ứng dụng gồm 10 nút nhấn: 8 nút để mở/tắt từng thiết bị, 2 nút để mở/tắt đồng thời 4 thiết bị.

2. Phần cứng: 

   Lắp mạch theo sơ đồ:


3. Code cho Arduino Nano:

___Code___

// Khai báo tên 4 chân nối với relay
const int  relay1 = 4;
const int  relay2 = 5;
const int  relay3 = 6;
const int  relay4 = 7;

// Khai báo biến nhận giá trị trả về từ bluetooth của smartphone Android
int value;

void setup()
{
  // Khai báo các chân xuất tín hiệu
  pinMode(relay1,OUTPUT);
  pinMode(relay2,OUTPUT);
  pinMode(relay3,OUTPUT);
  pinMode(relay4,OUTPUT);
  
  // Mở cổng Serial (để Arduino Nano nhận tín hiệu gởi về từ bluetooth HC05)
  Serial.begin(9600);
  
  // Mặc định các relay luôn tắt
  digitalWrite(relay1,1);
  digitalWrite(relay2,1);
  digitalWrite(relay3,1);
  digitalWrite(relay4,1);  
}

void loop()
{
  // Nếu cổng Serial sẵn sàng, đọc giá trị gởi về từ bluetooth và gán cho biến "value"
  if (Serial.available())
  {
    value = Serial.read();
  }
  
  // Tùy vào giá trị của "value", Nano sẽ điều khiển bật/tắt các relay
  switch (value)
  {
    case 1:
      digitalWrite(relay1, 0);
      break;

    case 2:
      digitalWrite(relay1, 1);
      break;

    case 3:
      digitalWrite(relay2, 0);
      break;
      
    case 4:
      digitalWrite(relay2, 1);
      break;

    case 5:
      digitalWrite(relay3, 0);
      break;

    case 6:
      digitalWrite(relay3, 1);
      break;

    case 7:
      digitalWrite(relay4, 0);
      break;

    case 8:
      digitalWrite(relay4, 1);
      break;

    case 9:
      digitalWrite(relay1, 0);
      digitalWrite(relay2, 0);
      digitalWrite(relay3, 0);
      digitalWrite(relay4, 0);
      break;

    case 10:
      digitalWrite(relay1, 1);
      digitalWrite(relay2, 1);
      digitalWrite(relay3, 1);
      digitalWrite(relay4, 1);
      break;  
  }  
}
___End___

4. Phần mềm trên smartphone Android:

4.1. Tự tạo phần mềm trên Android bằng AppInventor của MIT.

Phần này sẽ được nói chi tiết ở bài sau.

4.2. Tải từ CHplay trên Android.

---Chưa hoàn chỉnh---

Điều khiển 4 thiết bị (4 relay) bằng remote RF (cách khác)

Ở bài trước, ta đã biết cách kết nối phần cứng và lập trình điều khiển 4 thiết bị bằng remote RF.

Ở bài này, ta sử dụng lại phần cứng tương tự bài trước, lập trình theo cách khác, dựa vào việc đếm số lần nhấn phím.

___Code___

// Khai báo tên 4 chân nối với remote
const int  C = 2;
const int  A = 3;
const int  D = 4;
const int  B = 5;

// Khai báo tên 4 chân nối với relay
const int  relay1 = 6;
const int  relay2 = 7;
const int  relay3 = 8;
const int  relay4 = 9;


// Các biến hỗ trợ phím A
int demA = 0;
int Ahientai = 0;      
int Atruoc = 0;

// Các biến hỗ trợ phím B
int demB = 0;
int Bhientai = 0;      
int Btruoc = 0;

// Các biến hỗ trợ phím C
int demC = 0;
int Chientai = 0;      
int Ctruoc = 0;

// Các biến hỗ trợ phím D
int demD = 0;
int Dhientai = 0;      
int Dtruoc = 0;

void setup()
{
  // Khai báo các chân nhận và xuất tín hiệu
  pinMode(A, INPUT);
  pinMode(B, INPUT);
  pinMode(C, INPUT);
  pinMode(D, INPUT);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);

  // Mặc định các relay luôn tắt
  digitalWrite(relay1,1);
  digitalWrite(relay2,1);
  digitalWrite(relay3,1);
  digitalWrite(relay4,1);
}

void loop()
{
  // Đọc tín hiệu các phím trên remote
  Ahientai  = digitalRead(A);
  Bhientai  = digitalRead(B);
  Chientai  = digitalRead(C);
  Dhientai  = digitalRead(D);

  // Ghi nhận số lần bấm phím A
  if (Ahientai != Atruoc && Ahientai == 1)
  {
    demA++;    
  }
  Atruoc = Ahientai;  

  // Ghi nhận số lần bấm phím B
  if (Bhientai != Btruoc && Bhientai == 1)
  {
    demB++;    
  }
  Btruoc = Bhientai;

  // Ghi nhận số lần bấm phím C
  if (Chientai != Ctruoc && Chientai == 1)
  {
    demC++;    
  }
  Ctruoc = Chientai;

  // Ghi nhận số lần bấm phím D
  if (Dhientai != Dtruoc && Dhientai == 1)
  {
    demD++;    
  }

  Dtruoc = Dhientai;

  // Bật, tắt relay1
  if (demA % 2 == 0)
  {
    digitalWrite(relay1, 1);
  }
  else
  {
    digitalWrite(relay1, 0);
  }

  // Bật, tắt relay2
  if (demB % 2 == 0)
  {
    digitalWrite(relay2, 1);
  }
  else
  {
    digitalWrite(relay2, 0);
  }

  // Bật, tắt relay3
  if (demC % 2 == 0)
  {
    digitalWrite(relay3, 1);
  }
  else
  {
    digitalWrite(relay3, 0);
  }

  // Bật, tắt relay4
  if (demD % 2 == 0)
  {
    digitalWrite(relay4, 1);
  }
  else
  {
    digitalWrite(relay4, 0);
  }
 
}

___End___

Sunday, August 20, 2017

Coding - Điều khiển các thiết bị thông qua remote 4 nút không dây (Cơ bản 9) tiếp theo.


Các bạn xem hướng dẫn nối mạch chi tiết. (click)
---------Code Start-------------------------------------------------------------------
/* Arduino Mạch Điều khiển các thiết bị thông qua remote 4 nút không dây.
by Thuthuatarduino.blogspot.com 20/08/2017.
*/
// Trong Remote NutA => D1; NutC => D0; NutB => D3; NutD => D2
#define NutC 2
#define NutA 3
#define NutD 4
#define NutB 5
#define VT 11
#define LED1 6
#define LED2 7
#define LED3 8
#define LED4 9
#define LOA 10
int staA = 0; // Biến lưu trạng thái đk của nút bấm.
int staB = 0;
int staC = 0;
int staD = 0;
int del = 300; // Biến thời gian delay.

void setup() {
  // Cấu hình các chân nhận tín hiệu và điều khiển.
pinMode(NutC, INPUT);
pinMode(NutA, INPUT);
pinMode(NutB, INPUT);
pinMode(NutD, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LOA, OUTPUT);
}

void loop() {

  // Nhấn nút C thì:
if(digitalRead(NutC)==HIGH and staC == 0){
    digitalWrite(LED3, HIGH); // bật led3.
    analogWrite(LOA, 128);    // phát âm thanh ra loa.
    delay(del);
    digitalWrite(LOA, LOW);   // tắt loa.
    staC = 1; // staC =1 đang bật thiết bị đk bởi nút C.
  }else if (digitalRead(NutC)==HIGH and staC == 1){
    digitalWrite(LED3, LOW);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staC = 0; // staC =0 đang tắt thiết bị đk bởi nút C.
  }

  // Nhấn nút A thì:
if(digitalRead(NutA)==HIGH and staA == 0){
    digitalWrite(LED1, HIGH);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staA = 1; // staA =1 đang bật thiết bị đk bởi nút A.
  }else if (digitalRead(NutA)==HIGH and staA == 1){
    digitalWrite(LED1, LOW);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staA = 0; // staA =0 đang tắt thiết bị đk bởi nút A.
  }

  // Nhấn nút D thì:
  if(digitalRead(NutD)==HIGH and staD == 0){
    digitalWrite(LED4, HIGH);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staD = 1; // staD =1 đang bật thiết bị đk bởi nút D.
  }else if (digitalRead(NutD)==HIGH and staD == 1){
    digitalWrite(LED4, LOW);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staD = 0; // staD =0 đang tắt thiết bị đk bởi nút D.
  }

  // Nhấn nút B thì:
  if(digitalRead(NutB)==HIGH and staB == 0){
    digitalWrite(LED2, HIGH);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staB = 1; // staB =1 đang bật thiết bị đk bởi nút B.
  }else if (digitalRead(NutB)==HIGH and staB == 1){
    digitalWrite(LED2, LOW);
    analogWrite(LOA, 128);
    delay(del);
    digitalWrite(LOA, LOW);
    staB = 0;  // staB =0 đang tắt thiết bị đk bởi nút B.
  }
}
---------Code End------------------------------------------------------------------- 

VIDEO:

Saturday, August 19, 2017

Coding - Điều khiển các thiết bị thông qua remote 4 nút không dây (Cơ bản 9)


---------Code Start-------------------------------------------------------------------
/* Arduino Mạch Điều khiển các thiết bị thông qua remote 4 nút không dây.
by Thuthuatarduino.blogspot.com 20/08/2017.
*/
//Module nhận RF Nút A => D1; Nút C => D0; Nút B => D3; Nút D => D2.
#define NutC 2
#define NutA 3
#define NutD 4
#define NutB 5
#define VT 7
#define LED1 12
#define LED2 8
#define LED3 9
#define LED4 11
#define LOA 10

void setup() {
pinMode(NutC, INPUT);
pinMode(NutA, INPUT);
pinMode(NutB, INPUT);
pinMode(NutD, INPUT);
pinMode(VT, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LOA, OUTPUT);
}

void loop() {
  // Nhấn 1 nút bất kỳ thì loa kêu.
if(digitalRead(VT)==HIGH){
  analogWrite(LOA, 128);
  delay(150);
  digitalWrite(LOA, LOW);
  }
  // Nhấn Nút C
if(digitalRead(NutC)==HIGH){
  digitalWrite(LED3, HIGH);
  delay(100);
  digitalWrite(LED3, LOW);
  }
  // Nhấn nút A
if(digitalRead(NutA)==HIGH){
  digitalWrite(LED1, HIGH);
  delay(100);
  digitalWrite(LED1, LOW);
  }
// Nhấn nút D
   if(digitalRead(NutD)==HIGH){
  digitalWrite(LED4, HIGH);
  delay(100);
  digitalWrite(LED4, LOW);
  }
// Nhấn nút B
  if(digitalRead(NutB)==HIGH){
  digitalWrite(LED2, HIGH);
  delay(100);
  digitalWrite(LED2, LOW);
  }
}
---------Code End------------------------------------------------------------------- 
 VIDEO:

Coding - Cảm biến ánh sáng tự động bật đèn khi trời tối và tắt đèn khi trời sáng thông qua relay (Cơ bản 8)

---------Code Start-------------------------------------------------------------------
/* Cảm biến ánh sáng tự động bật đèn khi trời tối và tắt đèn khi trời sáng thông qua relay.
by Thuthuatarduino.blogspot.com 20/08/2017.
*/
#define CBAS 12 // cảm biến ánh sáng nối chân D12.
#define LOA 10
#define RL1 2
#define RL2 3
#define RL3 4
#define RL4 5
void setup() {
  pinMode(CBAS, INPUT);
  pinMode(LOA, OUTPUT);
  pinMode(RL1, OUTPUT);
  pinMode(RL2, OUTPUT);
  pinMode(RL3, OUTPUT);
  pinMode(RL4, OUTPUT);
  }
void loop() {
  // Nếu trời tối thì chân out cảm biến ánh sáng ở mức 5V.
  if(digitalRead(CBAS) == HIGH){
    // Bật rơle 1 và phát loa.
    analogWrite(LOA, 128);
    delay(100);
    digitalWrite(LOA, LOW);
    digitalWrite(RL1, HIGH);
    delay(2000);
    // Bật rơle 2 và phát loa.
    analogWrite(LOA, 128);
    delay(100);
    digitalWrite(LOA, LOW);
    digitalWrite(RL2, HIGH);
    delay(2000);
    // Bật rơle 3 và phát loa.
    analogWrite(LOA, 128);
    delay(100);
    digitalWrite(LOA, LOW);
    digitalWrite(RL3, HIGH);
    delay(2000);
    // Bật rơle 4 và phát loa.
    analogWrite(LOA, 128);
    delay(100);
    digitalWrite(LOA, LOW);
    digitalWrite(RL4, HIGH);
    delay(2000);
    } 
// Ngược lại nếu trời sáng
else{
     // Tắt hết các rơle và tắt loa.
     digitalWrite(RL1, LOW);
     digitalWrite(RL2, LOW);
     digitalWrite(RL3, LOW);
     digitalWrite(RL4, LOW);
     digitalWrite(LOA, LOW);
     delay(1000);
    }
}
---------Code End------------------------------------------------------------------- 

 VIDEO

Monday, August 14, 2017

Coding - Chân PWM phát âm thanh ra loa Piezo (Cơ bản 6)

CƠ BẢN 1: Xuất xung PWM duty cycle 50% ra loa Piezo.

---------Code Start-------------------------------------------------------------------

/* Arduino Code Xuất xung PWM duty cycle 50% ra loa Piezo.
by Thuthuatarduino.blogspot.com 07/08/2017.
*/

#define PIEZO 3 //Chân 3 PWM nối với Loa PIEZO.
int del = 500; // biết delay 0.5s.
void setup() {
pinMode(PIEZO, OUTPUT); // Chân 3 là chân OUTPUT.
}

void loop() {
analogWrite(PIEZO,128); // xuất xung PWM có duty 50%.
delay(del);
digitalWrite(PIEZO,LOW); // Tắt loa PIEZO.
delay(del);

}
---------Code End-------------------------------------------------------------------