"Hành trình vạn dặm bắt đầu từ những bước đi đầu tiên"

せんりのみちもいっぽから

May 12, 2022

Điều khiển động cơ DC bằng 2 nút bấm , bằng IR remote , Bằng iphone

>>Những thiết bị giúp cuộc sống trở nên thông minh hơn

I.Chuẩn bị :

1. Board arduino uno

2. Mạch L298N

3. 2 x Nút Bấm

4 . 1 Motor 12vdc

5. Nguồn 12 vdc

6. 2 trở 10k

7.  1x IR receved

II.Ứng dụng:

  1. Làm rèm cửa tự động
  2. https://youtu.be/9SZgd7-JKys
  3. Làm máy bơm nước tự động
  4. Làm Máy sát khuẩn tự động
  5. Làm ô tô điều khiển từ xa

....

1. Điều khiển động cơ thông bằng 2 nút bấm:

#define IN1  7

#define IN2 6

#define IN3 5

#define IN4 4

#define MAX_SPEED 255 //từ 0-255

#define MIN_SPEED 0

int BtnNext = 2;

#define BtnPrev 8

bool btien;

bool blui;

void setup()

{

  Serial.begin(9600);

  pinMode(BtnNext, INPUT);

  pinMode(BtnPrev, INPUT);

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  btien = false;

  blui = false;

}


void motor_1_Dung() {

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, LOW);

}


void motor_2_Dung() {

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, LOW);

}


void motor_1_Tien(int speed) { //speed: từ 0 - MAX_SPEED

  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain

  digitalWrite(IN1, HIGH);// chân này không có PWM

  analogWrite(IN2, 255 - speed);

}


void motor_1_Lui(int speed) {

  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain

  digitalWrite(IN1, LOW);// chân này không có PWM

  analogWrite(IN2, speed);

}



void loop()

{

  int buttonStatusNext = digitalRead(BtnNext);

  int buttonStatusPrev = digitalRead(BtnPrev);


  if (buttonStatusNext != 0 && buttonStatusPrev == 0) {

    Serial.println("tien");

    motor_1_Tien(MAX_SPEED);

    delay(1000);

  } 

  else if (buttonStatusNext == 0 && buttonStatusPrev != 0) {

motor_1_Lui(MAX_SPEED);

    Serial.println("Lui");

    delay(1000);


  } else {

    Serial.println("Stop");

    motor_1_Dung();

    delay(1000);

  }

}

2. Điều khiển động cơ bằng IR remote:

#include<IRremote.h>

#define IN1  7

#define IN2 6

#define IN3 5

#define IN4 4

#define MAX_SPEED 255 //từ 0-255

#define MIN_SPEED 0

int BtnNext = 2;

#define BtnPrev 3

const int receiverPin = 8;

IRrecv irrecv(receiverPin); // tạo đối tượng IRrecv mới

decode_results results;// lưu giữ kết quả giải mã tín hiệu

bool btien;

bool blui;

void setup()

{

  Serial.begin(9600);

  irrecv.enableIRIn();  //bat day nhan tin hieu IR

  pinMode(BtnNext, INPUT);

  pinMode(BtnPrev, INPUT);

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  btien = false;

  blui = false;

}

void giaima() {

  //Serial.println("HIHI");

  if (irrecv.decode(&results)) // nếu nhận được tín hiệu

  {

    //Serial.println(results.value, HEX); // in ra Serial Monitor

    delay(200);

    irrecv.resume(); // nhận giá trị tiếp theo

  }

}


void motor_1_Dung() {

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, LOW);

}


void motor_2_Dung() {

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, LOW);

}


void motor_1_Tien(int speed) { //speed: từ 0 - MAX_SPEED

  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain

  digitalWrite(IN1, HIGH);// chân này không có PWM

  analogWrite(IN2, 255 - speed);

}


void motor_1_Lui(int speed) {

  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain

  digitalWrite(IN1, LOW);// chân này không có PWM

  analogWrite(IN2, speed);

}

void dknutbam() {

  int buttonStatusNext = digitalRead(BtnNext);

  int buttonStatusPrev = digitalRead(BtnPrev);


  if (buttonStatusNext != 0 && buttonStatusPrev == 0) {

    Serial.println("tien");

    motor_1_Tien(MAX_SPEED);

    delay(1000);

  }

  else if (buttonStatusNext == 0 && buttonStatusPrev != 0) {

    motor_1_Lui(MAX_SPEED);

    Serial.println("Lui");

    delay(1000);


  } else {

    Serial.println("Stop");

    motor_1_Dung();

    delay(1000);

  }

}

void hamgiaima() {

  switch (results.value) {

    case 0x10EF807F://so1

      Serial.println("tien");

      motor_1_Tien(MAX_SPEED);

      delay(1000);

      break;

    case 0x10EF40BF://so2

      motor_1_Lui(MAX_SPEED);

      Serial.println("Lui");

      delay(1000);

      break;

    case 0x10EFC03F://so 3

      Serial.println("Stop");

      motor_1_Dung();

      delay(1000);


      break;


  }

}

  void loop()

  {

    giaima();

    hamgiaima();

  }

3. Điều khiển động cơ bằng iphone kết hợp vs 1 bộ điều khiển trung tâm 

Thay vì sử dụng IR remote ta sử dụng Iphone để điều khiển . Nhưng kết hợp thêm bộ điều khiển trung tâm ở đây mình dùng thêm bộ điều khiển bam bam remote controller. Mục đích để nhận giải mã của remote , gửi chuỗi lên một server chung sau đó đẩy về qua mạng internet .

Về nguyên lý điều khiển tương tự Remote 

(Updating....)



tham khảo. Arduino.vn

0 Post a Comment:

Post a Comment

Cảm ơn bạn đã chia sẻ ý kiến!
Chúc bạn có một ngày thật vui vẻ.

Kết nối bạn bè

Wikipedia

Search results

Video Nổi bật

Video tổng hợp

Thống kê

 
Please Enable Javascript!Enable JavaScript