MQ3 giao tiếp Mega2560, Cảm biến nồng độ cồn MQ3 + Oled+ Arduino

cam-bien-khi-ga-mq3.-giao-tiep-arduino-hien-thi-oled-kich-loa

MQ3 giao tiếp Mega2560 Cảm biến nồng độ cồn MQ-3 sử dụng để phát hiện nồng độ cồn trong môi trường, hơi thở. Cảm biến có độ nhạy cao khả năng phản hồi nhanh, độ nhạy có thể điều chỉnh được bằng biến trở. Cảm biến cung cấp một đầu ra tương tự dựa trên nồng độ cồn. Cảm biến thích hợp cho việc phát hiện nồng độ cồn trong hơi thở. Phát hiện khí phát ra từ Etanol, Alcohol. Độ nhạy cao và thời gian đáp ứng nhanh. Cảm biến cung cấp một đầu ra tương tự dựa trên nồng độ cồn.    

 
Liên hệ làm Đồ án và Mạch điện tử

 

1. Linh kiện cần thiết làm mạch cảm biến nồng độ cồn MQ3 giao tiếp Mega2560

1.1 Vi điều khiển Arduino trong mạch cảm biến nồng độ cồn MQ3 giao tiếp Mega2560

a. Giới thiệu Arduino mega2560

  • 54 chân digital (15 có thể được sử dụng như các chân PWM)
  • 16 đầu vào analog,
  • 4 UARTs (cổng nối tiếp phần cứng),
  • 1 thạch anh 16 MHz,
  • 1 cổng kết nối USB,
  • 1 jack cắm điện,
  • 1 đầu ICSP,
  • 1 nút reset.

Arduino mega2560 là một bảng mạch vi điều khiển nguồn mở dựa trên vi điều khiển Microchip ATmega328 được phát triển bởi Arduino.cc. Bảng mạch được trang bị các bộ chân đầu vào/ đầu ra Digital và Analog có thể giao tiếp với các bảng mạch mở rộng khác nhau. Mạch Arduino mega2560 thích hợp cho những bạn mới tiếp cận và đam mê về điện tử, lập trình…Dựa trên nền tảng mở do Arduino.cc cung cấp các bạn dễ dàng xây dựng cho mình một dự án nhanh nhất ( lập trình Robot, xe tự hành, điều khiển bật tắt led…).

Arduino Mega2560:

Khác với tất cả các vi xử lý trước giờ vì không sử dụng FTDI chip điều khiển chuyển tín hiệu từ USB để xử lý. Thay vào đó, nó sử dụng ATmega16U2 lập trình như là một công cụ chuyển đổi tín hiệu từ USB. Ngoài ra, Arduino Mega2560 cơ bản vẫn giống Arduino Uno R3, chỉ khác số lượng chân và nhiều tính năng mạnh mẽ hơn, nên các bạn vẫn có thể lập trình cho con vi điều khiển này bằng chương trình lập trình cho Arduino Uno R3. ban-phim-cam-ung-ttp229-hien-thi-lcd1602-arduino-mega2560-3
các ứng dụng của vi điều khiển

b. Chức năng của Arduino mega2560:

  • Chân điều khiển: RESET: Arduino Mega Mega 2560 có sẵn mạch reset với nút ấn để thiết lập lại hệ thống và chân này có thể được sử dụng khi kết nối các thiết bị khác để thiết lập lại bộ điều khiển. XTAL1, XTAL2: Thạch anh(16Mhz) được kết nối với xung clock cung cấp cho bộ điều khiển. AREF: Chân này được dùng khi sử dụng ADC để chuyển đổi tín hiệu với điện áp tham chiếu bên ngoài mà không muốn sử dụng điện áp tham chiếu nội bộ 1.1V hoặc 5V.
  • Có 4 cặp chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết

Các chức năng khác

  • Có 15 Chân PWM (~): 3, 5, 6, 9, 10,….: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.
  • Chân giao tiếp SPI: 22 (SS), 24 (MOSI), 25 (MISO), 23 (SCK).  Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.
  • Chân giao tiếp I2C: Chân 20 cho SDA và 21 cho SCK (Tốc độ 400khz) để cho phép liên lạc hai dây với các thiết bị khác. Hàm được sử dụng là wire.begin () để bắt đầu chuyển đổi I2C, với wire.Read () để đọc dữ liệu i2c và wire.Write () để ghi dữ liệu i2c.
  • LED 13: trên Arduino mega2560 có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.

Các chức năng khác

  • Arduino mega2560 có 16 chân analog (A0 → A15) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V  → 2.5V với độ phân giải vẫn là 10bit. Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
  • Có 6 chân ngắt ngoài: từ 0 đến 5 tương ứng với các chân (2, 3, 21, 20, 19, 18) được ký hiệu là INT
  • Có 70 chân Digital: Chân số: Từ 0-53 (số) và 0-15 (tương tự) có thể được sử dụng làm đầu vào hoặc đầu ra cho thiết bị được thiết lập bằng các hàm Mode (), digtalWrite (), digitalRead ().

ban-phim-cam-ung-ttp229-hien-thi-lcd1602-arduino-mega2560

c.Thông số kỹ thuật Arduino Uno mega2560 

Arduino MegaTính năng, đặc điểm
Vi điều khiểnAVR ATmega 2560 (8bit)
Nguồn cung cấp7-12V (Bộ điều chỉnh sẵn có cho bộ điều khiển)
Số chân I/O số54
Số chân I/O tương tự16
Xung clock16 MHz ( nhà sản xuất cài đặt là 1MHz)
Bộ nhớ flash128 KB
SRAM8 KB
Giao tiếpUSB (Lập trình với ATmega 8), ICSP (lập trình), SPI, I2C và USART
Bộ Timer2 (8bit) + 4 (16bit) = 6 Timer
PWM12 (2-16 bit)
ADC16 (10 bit)
USART4
Ngắt thay đổi chân24

d. Power

  • LED: Có 1 LED được tích hợp trên bảng mạch và được nối vào chân D13. Khi chân có giá trị mức cao (HIGH) thì LED sẽ sáng và LED tắt khi ở mức thấp (LOW).
  • VIN: Chân này dùng để cấp nguồn ngoài (điện áp cấp từ 7-12VDC).
  • 5V: Điện áp ra 5V (dòng điện trên mỗi chân này tối đa là 500mA).
  • 3V3: Điện áp ra 3.3V (dòng điện trên mỗi chân này tối đa là 50mA).
  • GND: Là chân mang điện cực âm trên board.
  • IOREF: Điệp áp hoạt động của vi điều khiển trên Arduino UNO và có thể đọc điện áp trên chân IOREF. Chân IOREF không dùng để làm chân cấp nguồn.

e.Bộ nhớ

Vi điều khiển ATmega328:
  • 128 KB bộ nhớ Plash: trong đó bootloader chiếm 0.5KB.
  • 8 KB cho SRAM: (Static Random Access Menory): giá trị các biến khai báo sẽ được lưu ở đây. Khai báo càng nhiều biến thì càng tốn nhiều bộ nhớ RAM. Khi mất nguồn dữ liệu trên SRAM sẽ bị mất.
  • 4 KB cho EEPROM: (Electrically Eraseble Programmable Read Only Memory): Là nơi có thể đọc và ghi dữ liệu vào đây và không bị mất dữ liệu khi mất nguồn.

f. Các chân đầu vào và đầu ra

  • Có 70 chân Digital: Chân số: Từ 0-53 (số) và 0-15 (tương tự) có thể được sử dụng làm đầu vào hoặc đầu ra cho thiết bị được thiết lập bằng các hàm Mode (), digtalWrite (), digitalRead ().Giá trị điện áp trên mỗi chân là 5V, dòng trên mỗi chân là 20mA và bên trong có điện trở kéo lên là 20-50 ohm. Dòng tối đa trên mỗi chân I/O không vượt quá 40mA để tránh trường hợp gây hỏng board mạch.

Ngoài ra, một số chân Digital có chức năng đặt biệt:

  • Có 4 cặp chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết
  • Có 15 Chân PWM (~): 3, 5, 6, 9, 10,….: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.
  • Chân giao tiếp SPI: 22 (SS), 24 (MOSI), 25 (MISO), 23 (SCK).  Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.

Các chức năng khác

  • Chân giao tiếp I2C: Chân 20 cho SDA và 21 cho SCK (Tốc độ 400khz) để cho phép liên lạc hai dây với các thiết bị khác. Hàm được sử dụng là wire.begin () để bắt đầu chuyển đổi I2C, với wire.Read () để đọc dữ liệu i2c và wire.Write () để ghi dữ liệu i2c.
  • LED 13: trên Arduino mega2560 có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.
  • Arduino mega2560 có 16 chân analog (A0 → A15) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V  → 2.5V với độ phân giải vẫn là 10bit. Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
  • Có 6 chân ngắt ngoài: từ 0 đến 5 tương ứng với các chân (2, 3, 21, 20, 19, 18) được ký hiệu là INT

1.2 Cảm biến cảm biến nồng độ cồn MQ3 giao tiếp Mega2560

a. Giới thiệu MQ3 giao tiếp Mega2560

Cảm biến nồng độ cồn MQ-3 sử dụng để phát hiện nồng độ cồn trong môi trường, hơi thở. Cảm biến có độ nhạy cao khả năng phản hồi nhanh, độ nhạy có thể điều chỉnh được bằng biến trở. Cảm biến cung cấp một đầu ra tương tự dựa trên nồng độ cồn. Cảm biến thích hợp cho việc phát hiện nồng độ cồn trong hơi thở. Phát hiện khí phát ra từ Etanol, Alcohol. Độ nhạy cao và thời gian đáp ứng nhanh. Cảm biến cung cấp một đầu ra tương tự dựa trên nồng độ cồn.    cam-bien-khi-ga-mq3.-giao-tiep-arduino-hien-thi-oled-kich-loa-2

b. Thông số kỹ thuật cảm biến nồng độ cồn MQ3

  • Kích thước: 32 x 22 x 27 mm
  • Chip chính: LM393, MQ-3 cảm biến khí. 
  • Điện áp cung cấp: DC 5V.
  • Có 2 dạng tín hiệu đầu ra dạng Analog và TTL.
  • Tín hiệu đầu ra TTL có giá trị thấp. (đầu ra tín hiệu mức thấp có thể được kết nối trực tiếp với vi điều khiển). 
  • Đầu ra tương tự 0 ~ 5V, nồng độ cồn càng cao điện áp càng cao. 
  • Độ nhạy cao và chọn lọc tốt với hơi ethanol. 
  • Bền và ổn định đáng tin cậy. 
  • Nhạy và phục hồi nhanh.

c. Chức năng các chân cảm biến nồng độ cồn MQ3

  • VCC Hoạt động điện áp  5V 
  • GND để kết nối GND 
  • D0 đầu ra giao diện chuyển đổi kỹ thuật số (0 và 1) 
  • A0  đầu ra giao diện tương tự

d. Ứng dụng

 Phát hiện các khí và chất lòng

  • Nồng độ cồn
  • khí gas
  • alcohol,
  • ethanol.
  • methane
  • benzine
  • hexane
  • cacbon monoxit,
  • khí dầu mỏ hóa lỏng

1.3 Oled cho mạch cảm biến nồng độ cồn MQ3 giao tiếp mega2560

a. Giới thiệu

Màn hình Oled 1.3 inch giao tiếp I2C cho khả năng hiển thị đẹp, sang trọng, rõ nét vào ban ngày và khả năng tiết kiệm năng lượng tối đa với mức chi phí phù hợp, màn hình sử dụng giao tiếp I2C cho chất lượng đường truyền ổn định và rất dễ giao tiếp chỉ với 2 chân GPIO. Màn hình OLED SH1106 với kích thước 1.3 inch, cho khả năng hiển thị hình ảnh tốt với khung hình 128×64 pixel. Ngoài ra, màn hình còn tương thích với hầu hết các vi điều khiển hiện nay thông qua giao tiếp SPI. Màn hình sử dụng driver SH1106 cùng thiết kế nhỏ gọn sẽ giúp bạn phát triển các sản phẩm DIY hoặc các ứng dụng khác một cách nhanh chóng. màn hình oled 1.3in chuẩn i2c AS608 giao tiếp Pic16F

Màn hình Oled chuẩn truyền I2C

màn hình oled chuẩn truyền SPI AS608 giao tiếp Pic16F

Màn hình Oled chuẩn truyền SPI

b. Thông số kỹ thuật

  • Điện áp sử dụng: 2.2~5.5VDC
  • Công suất tiêu thụ: 0.04w
  • Góc hiển thị: lớn hơn 160 độ
  • Số điểm hiển thị: 128×64 điểm.
  • Độ rộng màn hình: 1.3 inch.
  • Màu hiển thị: Trắng / Xanh Dương.
  • Giao tiếp: I2C hoặc SPI tùy loại
  • Driver: SH1106
  • Kích thước 1.3 inch (128x64px)
  • Góc nhìn tối đa: 160°
  • Nhiệt độ làm việc: -30°V đến 80°C
  • Tương thích với hầu hết các board như: Arduino, ESP8266, ESP32, STM32,

Lưu ý khi dùng Oled 1.3in Hiện trên thị trường sẽ có: +  2 loại chính là 0.96in1.3in +  2 mã số là SH1106SH1306 +  2 chuẩn truyền SPII2C Vì thế việc lựa chọn đúng đối tượng để lập trình mới có thể hiển thị được thông tin mong muốn.

2. Hướng dẫn đồ án cảm biến nồng độ cồn MQ3 giao tiếp Mega2560 hiển thị LCD1602

Phần này chưa được chia sẻ.

LIÊN HỆ thông tin ở TẠI ĐÂY để được hổ trợ tốt hơn.

Phần cứng

cam-bien-khi-ga-mq3.-giao-tiep-arduino-hien-thi-oled-kich-loa-1

Phần mềm

Thư viện Oled tại đây   : https://github.com/adafruit/Adafruit_SSD1306

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
int TIME_UNTIL_WARMUP = 900;
unsigned long time;

int analogPin = 0;
int val = 0;
Adafruit_SSD1306 display(OLED_RESET);

void setup()   {                
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 display.clearDisplay();
}

void loop() {  
  delay(100);
  val = readAlcohol();
  printTitle();
  printWarming();
  time = millis()/1000;
  if(time<=TIME_UNTIL_WARMUP)
  {
    time = map(time, 0, TIME_UNTIL_WARMUP, 0, 100);
    display.drawRect(10, 50, 110, 10, WHITE); //Empty Bar
    display.fillRect(10, 50, time,10,WHITE);
  }else
  {
     printTitle();
     printAlcohol(val);
     printAlcoholLevel(val);  
  }
  display.display();

}

void printTitle()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(22,0);
  display.println("Breath Analyzer");
}

void printWarming()
{
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,20);
  display.println("Warming up");
}

void printAlcohol(int value)
{
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(45,25);
  display.println(val);
}

void printAlcoholLevel(int value)
{
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10,55);
  
  if(value<200)
  {
      display.println("You are sober.");
  }
  if (value>=200 && value<280)
  {
      display.println("You had a beer.");
  }
  if (value>=280 && value<350)
  {
      display.println("Two or more beers.");
  }
  if (value>=350 && value <450)
  {
      display.println("I smell Oyzo!");
  }
  if(value>450)
  {
     display.println("You are drunk!");
  }
 }
 
 int readAlcohol()
 {
  int val = 0;
  int val1;
  int val2;
  int val3; 
  display.clearDisplay();
  val1 = analogRead(analogPin); 
  delay(10);
  val2 = analogRead(analogPin); 
  delay(10);
  val3 = analogRead(analogPin);
  val = (val1+val2+val3)/3;
  return val;
 }
 

3. Hoạt động của mạch cảm biến nồng độ cồn MQ3

Khi cấp điện hệ thống hoạt động, vi điều khiển đưa tín hiệu ban đầu cho lcd1602 hiển thị thông tin người dùng, lúc này vi điều khiển chờ tín hiệu được gửi vào từ cảm biến nồng độ cồn MQ3 giao tiếp Mega2560 gửi vào chân tín hiệu Analog. Khi nhận được tín hiệu vi điều khiển xử lý ra ngoài màn hình Oled để hiển thị giá trị theo yêu cầu đã được lập trình.

4. Cụ thể hoạt động của mạch cảm biến nồng độ cồn MQ3 giao tiếp Mega2560

Chúc các bạn thành công…!!!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *