"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

Cảm ơn các bạn đã ghé thăm

 
Please Enable Javascript!Enable JavaScript