Làm volt kế, amper kế đơn giản với Attiny85

I. Giới thiệu

Xin chào các bạn! Mình xin chia sẻ với các bạn về cách làm một volt kế, amper kế đơn giản với vi điều khiển attiny85, hiển thị ra màn hình lcd1602 qua i2c module. Các máy đo này mình làm trong quá trình tự tạo một bộ nguồn điều khiển 0-24V 2A.

II. Phần cứng

III. Sơ đồ và làm mạch

Mình dùng Proteus để vẽ mạch sau đó làm mạch bằng phương pháp thủ công.

IV. Lập trình

Mình sử dụng phương pháp đọc tín hiệu analog ở các chân của vi điều khiển, sau đó so sánh giá trị đó với 5V (vì hiệu điện thế ở các chân của vi điều khiển là 5V max). Kết quả thu được và kiểm tra bằng máy đo loại này:

sai lệch giữa 2 máy là 0.1V và 10mA.

Các bạn cần phải tải thư viện LiquidCrystal_I2C.h và TinyWireM.h tại http://learning.grobotronics.com/2014/02/control-lcd-display-attiny85/ (dự phòng). Sau đó viết đoạn code đơn giản này:

#include "LiquidCrystal_I2C.h"
#include <TinyWireM.h>

#define amperInput     4              	// ATtiny Pin 3
#define voltInput      3				// ATtiny Pin 2

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity

float Uout = 0.000;
float Uin = 0.000;
float Uout1 = 0.000;
float Uin1 = 0.000;
float Iin = 0.000;
float I = 0.000;
float R1 = 98100.000; // Dien tro R1 (100K)
float R2 = 9400.000;  // Dien tro R2 (10K)
float R3 = 9900.000;  // Bien tro R3 (10K)
float R4 = 0.200;    // Dien tro R4 (0.2R 5W)
int value = 0.000;
int value1 = 0.000;

void setup(){
  pinMode(voltInput, INPUT);
  pinMode(amperInput, INPUT);
  lcd.begin(16,2);               
  lcd.backlight(); 
  lcd.setCursor(0,0);
  lcd.print("Volt-Amper metr");  
}

void volt(){
    value = analogRead(voltInput);
    Uout = (value * 5.0) / 1024.0;
    Uin = Uout / (R2/(R1+R2));
    if(Uin > 0.1){
    	lcd.setCursor(0,0);
 	lcd.print("Volt-Amper metr");
    	lcd.setCursor(0,1);
        lcd.print("U=");
        lcd.print(Uin);
    }else{
    	lcd.clear();
   	lcd.setCursor(0,0);
 	lcd.print("Volt-Amper metr");
   	lcd.setCursor(0,1);
   	lcd.print("U= 0");
   	delay(1000);
    }
}

void amper(){
	value1 = analogRead(amperInput);
	Uout1 = (value1 * 5.0) / 1024.0;
	Uin1 = Uout1 / (1+R1/R3);
	Iin = Uin1 / R4;
	I = Iin * 1000;
	if(I >= 1){
    	lcd.setCursor(0,0);
 	lcd.print("Volt-Amper metr");
    	lcd.setCursor(8,1);
        lcd.print("I=");
        lcd.print(I);
    }else{
    	lcd.setCursor(0,0);
 	lcd.print("Volt-Amper metr");
   	lcd.setCursor(8,1);
   	lcd.print("I= 0");
    }
}
void loop(){
   volt();
   amper();
}

V. Nhược điểm

  • Độ chính xác không cao nên không thể dùng trong các máy chính xác hơn.
  • Màn hình hiển thị không được dễ nhìn cho lắm. Chắc vì mình chưa làm đúng cách với màn hình, mong các bạn góp ý để điều chỉnh.

Bỏ qua những nhược điểm trên thì máy đơn giản, phù hợp để sử dụng trong các trường hợp như của mình.

VI. Lời kết

Chúc các bạn có nhiều dự án hay!

lên
6 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Lập trình, nạp bootloader cho chip atmega8

Xin chào các bạn! Chắc chắn các bạn đã từng có những dự án nhỏ (ví dụ: làm đèn led trái tim, máy đo nhiệt độ với DHT11, đồng hồ với module RTC ...) yêu cầu không quá lớn về phần cứng và tiết kiệm chi phí. Có một cách rất hiệu quả đó là sử dụng các chip dòng attiny để thay thế cho mạch arduino đắt tiền. Tuy nhiên, đôi lúc bạn sẽ gặp nhiều khó khăn do hạn chế về số chân, dung lượng bộ nhớ, và arduino IDE không hỗ trợ đầy đủ các loại giao tiếp (SPI, I2C, ...) cho các chip attiny. Trong hoàn cảnh đó, chúng ta có thể nghĩ tới con chip rẻ tiền nhất trong dòng atmega đó là chip atmega8.

lên
18 thành viên đã đánh giá bài viết này hữu ích.

Lập trình LCD 1602 với chip 74HC595

Xin chào các bạn! Các bạn đã làm quen với LCD 1602 ở bài viết "Điều khiển LCD bằng Arduino UNO". Mình xin chia sẻ với các bạn một cách khác để kết nối LCD này với board arduino, đó là sử dụng chip 74HC595. Để kết nối màn hình qua cách này chúng ta phải tốn 3 chân của arduino (nhiều hơn 1 chân so với dùng mạch I2C) nhưng chip 595 lại có giá thấp hơn modul I2C 5-10 lần (chỉ khoảng 1-2k VNĐ).devil

lên
14 thành viên đã đánh giá bài viết này hữu ích.