Vôn kế kỹ thuật số trên Arduino có kết nối với PC thông qua cổng nối tiếp. Vôn kế Bluetooth dựa trên arduino

Với một số bổ sung.

Một tính năng ít được biết đến của Arduino và nhiều chip AVR khác là khả năng đo điện áp tham chiếu 1,1 V bên trong. Chức năng này có thể được sử dụng cho tăng độ chính xác Chức năng Arduino - analogRead sử dụngđiện áp tham chiếu tiêu chuẩn 5 V (trên nền tảng có điện áp cung cấp 5 V) hoặc 3,3 V (trên nền tảng có điện áp cung cấp 3,3 V).Cô ấy cũng có thể dùng để đo Vcc áp dụng cho chip, cung cấp phương tiện kiểm soát điện áp pin không sử dụng chân analog quý giá.

Động lực

Có ít nhất ít nhất hai lý dođể đo Cung cấp hiệu điện thế Arduino của chúng tôi (Vcc). Một trong số đó là dự án chạy bằng pin của chúng tôi nếu chúng tôi muốn theo dõi mức điện áp của pin. Ngoài ra, khi nguồn pin (Vcc) không thể là 5,0 volt (ví dụ: nguồn điện 3 cell 1,5 V) và chúng tôi muốn thực hiện các phép đo tương tự chính xác hơn - chúng tôi phải sử dụng tham chiếu 1,1 V bên trong hoặc nguồn bên ngoàiđiện áp tham chiếu. Tại sao?

Giả định thông thường khi sử dụng analogRead() là điện áp tương tự Nguồn điện của bộ điều khiển là 5,0 volt, trong khi trên thực tế, điều này có thể không xảy ra (ví dụ: nguồn điện từ 3 phần tử 1,5 V). Tài liệu chính thức của Arduino thậm chí có thể dẫn chúng ta đến giả định không chính xác này. Thực tế là nguồn điện không nhất thiết phải là 5,0 volt, bất kể mức hiện tại như thế nào, nguồn điện này đều được cung cấp cho Vcc của chip. Nếu nguồn điện của chúng ta không ổn định hoặc nếu chúng ta đang chạy bằng nguồn pin, điện áp này có thể thay đổi một chút. Đây là một ví dụ mã minh họa vấn đề này:

Vcc kép = 5,0; // không nhất thiết phải đúng int value = analogRead(0); / đọc số đọc từ A0 double volt = (giá trị / 1023.0) * Vcc; // chỉ đúng nếu Vcc = 5,0 volt. Để đo điện áp chính xác, cần có điện áp tham chiếu chính xác. Hầu hết các chip AVR đều cung cấp ba tham chiếu điện áp:

  • 1,1 inch từ nguồn nội bộ, trong tài liệu, nó chuyển dưới dạng tham chiếu băng thông (một số trong số chúng là 2,56 V, ví dụ ATMega 2560). Việc lựa chọn được thực hiện bởi hàm analogReference() với tham số INTERNAL: analogReference(INTERNAL) ;
  • nguồn điện áp tham chiếu bên ngoài, được dán nhãn AREF trên arduino. Chọn: analogReference(EXTERNAL);
  • Vcc là nguồn điện của bộ điều khiển. Chọn: analogReference(DEFAULT).

Trong Arduino, bạn không thể kết nối trực tiếp Vcc với chân analog - theo mặc định, AREF được kết nối với Vcc và bạn sẽ luôn nhận được giá trị tối đa là 1023, bất kể bạn được cấp nguồn từ điện áp nào. Kết nối với ISF một nguồn điện áp đã biết trước đó, điện áp ổn định, nhưng điều này - yếu tố phụ trong sơ đồ.

Bạn cũng có thể kết nối Vcc với ISF thông qua điốt: Độ sụt áp trên diode đã được biết trước nên việc tính toán Vcc không khó. Tuy nhiên, với mạch như vậy thông qua một diode dòng điện chạy liên tục, rút ​​ngắn tuổi thọ pin, điều này cũng không tốt lắm.

Tham chiếu điện áp bên ngoài là chính xác nhất nhưng cần có phần cứng bổ sung. ION bên trong ổn định nhưng độ lệch không chính xác +/- 10%. Vcc hoàn toàn không đáng tin cậy trong hầu hết các trường hợp. Việc chọn tham chiếu điện áp bên trong không tốn kém và ổn định, nhưng hầu hết chúng ta muốn đo điện áp lớn hơn 1,1V, vì vậy sử dụng Vcc là cách thực tế nhất nhưng có khả năng kém chính xác nhất. Trong một số trường hợp, nó có thể rất không đáng tin cậy!

Làm thế nào để làm nó

Nhiều chip AVR bao gồm dòng ATmega và ATtiny cung cấp phương tiện đo điện áp tham chiếu bên trong. Tại sao điều này là cần thiết? Lý do rất đơn giản - bằng cách đo điện áp bên trong, chúng ta có thể xác định giá trị của Vcc. Đây là cách thực hiện:

  1. Đặt tham chiếu điện áp mặc định: analogReference(DEFAULT); . Chúng tôi sử dụng Vcc làm nguồn.
  2. Lấy số đọc ADC cho nguồn 1,1 V bên trong.
  3. Tính giá trị Vcc dựa trên phép đo 1,1 V bằng công thức:

Vcc * (đọc ADC) / 1023 = 1,1 V

Những gì sau đây:

Vcc = 1,1 V * 1023 / (đọc ADC)

Đặt mọi thứ lại với nhau và chúng tôi nhận được mã:

long readVcc() ( // Đọc tham chiếu 1.1V đối với AVcc // đặt tham chiếu thành Vcc và phép đo thành tham chiếu 1.1V bên trong #if được xác định(__AVR_ATmega32U4__) || được xác định(__AVR_ATmega1280__) || được xác định(__AVR_ATmega2560__) ADMUX = _BV (REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif được xác định (__AVR_ATtiny24__) || được xác định(__AVR_ATtiny44__) || được xác định(__AVR_ATtiny84__) ADMUX = _BV(MUX5) | _BV (MUX0); #elif được xác định (__AVR_ATtiny25__) || được xác định(__AVR_ATtiny45__) || được xác định(__AVR_ATtiny85__) ADMUX = _BV(MUX3) | _BV(MUX2); #else ADMUX = _BV(REFS0) | _BV(MUX3) | _BV( MUX2) | _BV(MUX1); #endif độ trễ (75); // Chờ Vref giải quyết ADCSRA |= _BV(ADSC); // Bắt đầu chuyển đổi while (bit_is_set(ADCSRA,ADSC)); // đo uint8_t low = ADCL; // phải đọc ADCL trước - sau đó khóa ADCH uint8_t high = ADCH; // mở khóa cả kết quả dài = (cao<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

Cách sử dụng

Kiểm tra Vcc hoặc điện áp pin

Bạn có thể gọi hàm này là readVcc() nếu bạn muốn theo dõi Vcc. Một ví dụ sẽ là kiểm tra mức sạc pin. Bạn cũng có thể sử dụng nó để xác định xem bạn đang kết nối với nguồn điện hay đang chạy bằng nguồn pin.

Đo Vcc cho điện áp tham chiếu

Bạn cũng có thể sử dụng nó để lấy giá trị Vcc chính xác để sử dụng với analogRead() khi bạn đang sử dụng điện áp tham chiếu (Vcc). Trừ khi bạn sử dụng nguồn điện được điều chỉnh, bạn không thể chắc chắn rằng Vcc = 5,0 volt. Chức năng này cho phép bạn nhận được giá trị chính xác. Tuy nhiên có một lưu ý...

Trong một bài viết, tôi đã tuyên bố rằng chức năng này có thể được sử dụng để cải thiện độ chính xác của các phép đo tương tự trong trường hợp Vcc không quá 5,0 volt. Thật không may, thủ tục này sẽ không cho kết quả chính xác. Tại sao? Điều này phụ thuộc vào độ chính xác của điện áp tham chiếu bên trong. Thông số kỹ thuật đưa ra điện áp danh định là 1,1 volt, nhưng cho biết nó có thể thay đổi tới 10%. Các phép đo như vậy có thể kém chính xác hơn so với nguồn điện Arduino của chúng tôi!

Tăng độ chính xác

Mặc dù dung sai lớn của nguồn điện 1.1V bên trong hạn chế đáng kể độ chính xác của phép đo khi sử dụng trong sản xuất hàng loạt, nhưng chúng tôi có thể đạt được độ chính xác cao hơn cho các dự án tùy chỉnh. Điều này có thể dễ dàng thực hiện bằng cách đo Vcc bằng vôn kế và hàm readVcc() của chúng tôi. Tiếp theo, thay thế hằng số 1125300L bằng một biến mới:

tỉ lệ_constant = nội bộ1.1Ref * 1023 * 1000

nội bộ1.1Ref = 1,1 * Vcc1 (voltmeter_readings) / Vcc2 (readVcc_function_readings)

Giá trị hiệu chỉnh này sẽ là chỉ báo tốt cho phép đo chip AVR, nhưng có thể bị ảnh hưởng bởi sự thay đổi nhiệt độ. Hãy thử nghiệm với các phép đo của riêng bạn.

Phần kết luận

Có rất nhiều thứ bạn có thể làm với tính năng nhỏ này. Bạn có thể sử dụng điện áp tham chiếu ổn định gần 5.0V mà không thực sự có 5.0V trên Vcc. Bạn có thể đo điện áp pin hoặc thậm chí xem bạn đang chạy bằng nguồn pin hay nguồn điện cố định.

Cuối cùng, mã sẽ hỗ trợ tất cả Arduinos, bao gồm cả Leonardo mới, cũng như các chip dòng ATtinyX4 và ATtinyX5.

Xin chào, Habr! Hôm nay mình xin tiếp tục chủ đề “crossing” arduino và android. TRONG ấn phẩm trước Tôi đã nói về một chiếc máy bluetooth và hôm nay chúng ta sẽ nói về một chiếc vôn kế bluetooth DIY. Một thiết bị khác như vậy có thể được gọi là vôn kế thông minh, vôn kế “thông minh” hoặc chỉ là vôn kế thông minh, không có dấu ngoặc kép. Họ này không chính xác theo quan điểm ngữ pháp tiếng Nga, tuy nhiên, nó thường được tìm thấy trên các phương tiện truyền thông. Sẽ có một cuộc bình chọn về chủ đề này ở cuối bài viết, nhưng tôi khuyên bạn nên bắt đầu bằng việc trình diễn hoạt động của thiết bị để hiểu bài viết sẽ nói về cái gì.


Tuyên bố miễn trừ trách nhiệm: bài viết dành cho những người đam mê arduino trung bình, những người thường không quen với việc lập trình cho Android, do đó, như trong bài viết trước, chúng tôi sẽ tạo một ứng dụng cho điện thoại thông minh sử dụng môi trường phát triển trực quan ứng dụng android Ứng dụng Nhà phát minh 2.
Để tạo một vôn kế bluetooth DIY, chúng ta cần viết hai chương trình tương đối độc lập: một bản phác thảo cho Arduino và một ứng dụng cho Android. Hãy bắt đầu với một bản phác thảo.
Trước tiên, bạn nên biết rằng có ba tùy chọn chính để đo điện áp bằng Arduino, bất kể bạn cần xuất thông tin ở đâu: đến cổng com, tới màn hình được kết nối với Arduino hoặc với điện thoại thông minh.
Trường hợp đầu tiên: đo điện áp lên đến 5 volt. Ở đây, một hoặc hai dòng mã là đủ và điện áp được đặt trực tiếp vào chân A0:
int value = analogRead(0); // đọc giá trị từ A0
điện áp = (giá trị / 1023.0) * 5; // chỉ đúng nếu Vcc = 5,0 volt
Trường hợp thứ hai: để đo điện áp lớn hơn 5 volt, người ta sử dụng bộ chia điện áp. Mạch rất đơn giản và mã cũng vậy.

phác thảo

int analogInput = A0;
giá trị float = 0,0;
điện áp phao = 0,0;
phao R1 = 100000.0; //Pin Vin-> 100K -> A0
phao R2 = 10000,0; // Pin Gnd -> Arduino Gnd và Arduino Gnd -> 10K -> A0
giá trị int = 0;

Thiết lập vô hiệu() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Vòng lặp trống() (
giá trị = analogRead(analogInput);
val = (giá trị * 4.7) / 1024.0;
điện áp = val / (R2/(R1+R2));
Serial.println(điện áp);
độ trễ (500);
}


Arduino Uno
mô-đun Bluetooth
Trường hợp thứ ba. Khi bạn cần có được thông tin chính xác hơn về điện áp, bạn nên sử dụng làm điện áp tham chiếu chứ không phải điện áp nguồn, ví dụ, điện áp này có thể thay đổi một chút khi được cấp nguồn bằng pin, nhưng điện áp của bộ ổn định Arduino bên trong là 1,1 volt. mạch ở đây giống nhau, nhưng mã dài hơn một chút. Tôi sẽ không phân tích chi tiết tùy chọn này, vì nó đã được mô tả kỹ trong các bài viết chuyên đề, nhưng phương pháp thứ hai là khá đủ đối với tôi, vì nguồn điện của tôi ổn định, từ cổng USB của máy tính xách tay.
Vậy là chúng ta đã sắp xếp xong phép đo điện áp, bây giờ hãy chuyển sang nửa sau của dự án: tạo một ứng dụng Android. Chúng tôi sẽ tạo ứng dụng trực tiếp từ trình duyệt trong môi trường phát triển trực quan cho ứng dụng Android App Inventor 2. Truy cập trang web appinventor.mit.edu/explore, đăng nhập bằng tài khoản Google của bạn, nhấp vào nút tạo, dự án mới và bằng cách kéo và thả đơn giản các yếu tố chúng tôi tạo ra một cái gì đó giống như thiết kế này:

Tôi giữ đồ họa rất đơn giản nếu có ai muốn nhiều hơn đồ họa thú vị, hãy để tôi nhắc bạn rằng để làm được điều này, bạn cần sử dụng tệp .png có nền trong suốt thay vì tệp .jpeg.
Bây giờ hãy chuyển đến tab Khối và tạo logic ứng dụng ở đó như thế này:


Nếu mọi thứ đều ổn, bạn có thể nhấp vào nút Build và lưu .apk vào máy tính của tôi, sau đó tải xuống và cài đặt ứng dụng trên điện thoại thông minh của bạn, mặc dù có nhiều cách khác để tải ứng dụng lên. ở đây thuận tiện hơn cho mọi người. Kết quả là tôi đã kết thúc với ứng dụng này:


Tôi hiểu rằng rất ít người sử dụng môi trường phát triển trực quan App Inventor 2 cho các ứng dụng Android trong dự án của họ, vì vậy có thể đặt ra nhiều câu hỏi khi làm việc trong đó. Để loại bỏ một số câu hỏi này, tôi đã làm video chi tiết, về cách tạo một ứng dụng như vậy "từ đầu" (để xem nó, bạn cần truy cập YouTube):

tái bút Bộ sưu tập hơn 100 tài liệu giáo dục về Arduino dành cho người mới bắt đầu và chuyên gia

Mô tả cách lắp ráp một vôn kế đôi tự chế dựa trên nền tảng Arduino UNO sử dụng màn hình LCD 1602A. Trong một số trường hợp, cần đo đồng thời hai điện áp không đổi và so sánh chúng. Điều này có thể được yêu cầu, ví dụ, khi sửa chữa hoặc điều chỉnh bộ ổn định điện áp DCđể đo điện áp ở đầu vào và đầu ra của nó hoặc trong các trường hợp khác.

Sơ đồ

Sử dụng vi điều khiển đa năng mô-đun ARDUINO UNO và màn hình LCD hai dòng loại 1602A (dựa trên bộ điều khiển HD44780) có thể dễ dàng tạo ra một thiết bị như vậy. Ở một dòng, nó sẽ hiển thị điện áp U1, dòng kia - điện áp U2.

Cơm. 1. Sơ đồ Vôn kế kép có màn hình 1602A trên Arduino UNO.

Nhưng trước hết, tôi muốn nhắc bạn rằng ARDUINO UNO là một mô-đun làm sẵn tương đối rẻ tiền - một mô-đun nhỏ bảng mạch in, trên đó đặt bộ vi điều khiển ATMEGA328, cũng như tất cả “dây nịt” cần thiết cho hoạt động của nó, bao gồm bộ lập trình USB và nguồn điện.

Đối với những người chưa quen với ARDUINO UNO, tôi khuyên bạn trước tiên nên đọc bài viết L.1 và L.2. Mạch của một vôn kế kép được thể hiện trong hình. 1. Nó được thiết kế để đo hai điện áp từ 0 đến 100V (thực tế lên đến 90V).

Như có thể thấy từ sơ đồ, đến các cổng kỹ thuật số D2-D7 bo mạch ARDUINO UNO được kết nối với mô-đun hiển thị tinh thể lỏng H1 loại 1602A. Đèn báo LCD được cấp nguồn bằng bộ ổn áp 5V nằm trên bảng ổn áp 5V.

Các điện áp đo được sẽ được cung cấp cho hai đầu vào analog A1 và A2. Tổng cộng có sáu đầu vào analog, A0-A5, bạn có thể chọn bất kỳ hai đầu vào nào trong số đó. TRONG trong trường hợp này, A1 và A2 được chọn. Điện áp trên các cổng analog chỉ có thể dương và chỉ nằm trong phạm vi từ 0 đến điện áp cung cấp của vi điều khiển, nghĩa là trên danh nghĩa là lên đến 5V.

Đầu ra của cổng analog được ADC của vi điều khiển chuyển đổi sang dạng kỹ thuật số. Để có được kết quả tính bằng đơn vị vôn, bạn cần nhân nó với 5 (với điện áp tham chiếu, nghĩa là với điện áp cung cấp của vi điều khiển) và chia cho 1024.

Để có thể đo điện áp lớn hơn 5V, hay đúng hơn là lớn hơn điện áp cung cấp của vi điều khiển, vì điện áp thực tế ở đầu ra của bộ ổn định 5V trên bo mạch ARDUINO UNO có thể khác với 5V và thường là thấp hơn một chút, bạn cần sử dụng các bộ chia điện trở thông thường ở đầu vào. Đây là các bộ chia điện áp trên các điện trở R1, R3 và R2, R4.

Đồng thời, đưa các số liệu của thiết bị đến giá trị thựcđiện áp đầu vào, bạn cần thiết lập trong chương trình việc chia kết quả đo cho hệ số chia của bộ chia điện trở. Và hệ số chia, hãy ký hiệu là “K”, có thể được tính bằng công thức sau:

K = R3 / (R1+R3) hoặc K = R4 / (R2+R4),

tương ứng cho lối vào khác nhau vôn kế đôi.

Điều rất thú vị là các điện trở trong bộ chia không nhất thiết phải có độ chính xác cao. Bạn có thể lấy các điện trở thông thường, sau đó đo điện trở thực của chúng bằng một ôm kế chính xác và thay các giá trị đo được này vào công thức. Bạn sẽ nhận được giá trị “K” cho một ước số cụ thể, giá trị này sẽ cần được thay thế vào công thức.

chương trình vôn kế

Chương trình C++ được hiển thị trong Hình 2.

Cơm. 2. Nguồn các chương trình.

Để điều khiển chỉ báo LCD, người ta quyết định sử dụng các cổng D2 đến D7 của bo mạch ARDUINO UNO. Về nguyên tắc, các cổng khác đều có thể sử dụng được, nhưng đây là lý do tôi quyết định sử dụng các cổng này.

Để chỉ báo tương tác với ARDUINO UNO, bạn cần tải một chương trình con vào chương trình để điều khiển nó. Những quy trình như vậy được gọi là "thư viện" và có nhiều "thư viện" khác nhau trong bộ phần mềm ARDUINO UNO. Để làm việc với chỉ báo LCD dựa trên HD44780, bạn cần có thư viện LiquidCrystal. Do đó, chương trình (Bảng 1) bắt đầu bằng cách tải thư viện này:

Dòng này đưa ra lệnh tải vào ARDUINO UNO thư viện này. Sau đó bạn cần gán Cổng ARDUINO UNO, sẽ hoạt động với chỉ báo LCD. Tôi đã chọn cổng D2 đến D7. Bạn có thể chọn người khác. Các cổng này được gán bởi dòng:

Đèn led LiquidCrystal(2, 3, 4, 5, 6, 7);

Sau đó, chương trình tiến hành hoạt động thực tế của vôn kế. Để đo điện áp, người ta quyết định sử dụng đầu vào analog A1 và A2. Những đầu vào này được chỉ định trong các dòng:

int analogInput=1;

int analogInput1=2;

Để đọc dữ liệu từ các cổng analog, hãy sử dụng hàm analogRead. Việc đọc dữ liệu từ các cổng analog xảy ra trong các dòng:

vout=analogRead(analogInput);

voutl=analogRead(analoglnput1);

Sau đó, điện áp thực tế được tính toán có tính đến tỷ số chia của bộ chia điện áp đầu vào:

volt=vout*5.0/1024.0/0.048 ;

volt1=vout1*5.0/1024.0/0.048;

Trong các dòng này, số 5.0 là điện áp ở đầu ra bộ ổn áp của bo mạch ARDUINO UNO. Lý tưởng nhất là 5V, nhưng đối với công việc chính xác Sử dụng vôn kế, điện áp này trước tiên phải được đo. Cắm nguồn điện và đo điện áp +5V tại đầu nối POWER của board bằng vôn kế khá chính xác. Chuyện gì xảy ra thì nhập vào những dòng này thay vì 5.0, ví dụ nếu có 4.85V thì các dòng sẽ như thế này:

vôn=vout*4,85/1024,0/0,048;

vôn1=vout1*4,85/1024,0/0,048;

Ở giai đoạn tiếp theo, bạn sẽ cần đo điện trở thực của các điện trở R1-R4 và xác định hệ số K (được biểu thị bằng 0,048) cho các đường này bằng công thức:

K1 = R3 / (R1+R3) và K2 = R4 / (R2+R4)

Giả sử K1 = 0,046 và K2 = 0,051, vì vậy chúng ta viết:

vôn=vout*4.85/1024.0/0.046 ;

vôn1=vout1*4,85/1024,0/0,051;

Do đó, các thay đổi phải được thực hiện đối với văn bản chương trình theo điện áp thực tế ở đầu ra của bộ ổn định 5 volt của bo mạch ARDUINO UNO và theo hệ số phân chia thực tế của các bộ chia điện trở. Sau đó, thiết bị sẽ hoạt động chính xác và không yêu cầu bất kỳ điều chỉnh hay hiệu chỉnh nào.

Bằng cách thay đổi hệ số phân chia của các bộ chia điện trở (và theo đó là hệ số “K”), bạn có thể thực hiện các giới hạn đo khác và không nhất thiết phải giống nhau cho cả hai đầu vào.

Karavkin V. RK-2017-01.

Văn học:

  1. Karavkin V. - Đèn nháy cây thông Noel trên ARDUINO như một phương pháp khắc phục nỗi sợ hãi của bộ vi điều khiển. RK-11-2016.
  2. Karavkin V. - Máy đo tần số trên ARDUINO. RK-12-2016.

Bài viết này hướng dẫn cách kết nối Arduino với PC và truyền dữ liệu từ ADC sang PC. Chương trình dành cho Windows được viết bằng Visual C++ 2008 Express. Chương trình vôn kế rất đơn giản và có rất nhiều chỗ để cải tiến. Mục đích chính của nó là chỉ ra cách làm việc với cổng COM và trao đổi dữ liệu giữa máy tính và Arduino.

Giao tiếp giữa Arduino và PC:

  • Việc đọc từ ADC bắt đầu khi máy tính gửi lệnh Arduino 0xAC và 0x1y. Tại– Số kênh ADC (0-2);
  • Việc đọc kết thúc sau nhận Arduino lệnh 0xAC và 0×00;
  • Khi đọc kết quả, Arduino gửi lệnh 0xAB 0xaa 0xbb tới máy tính cứ sau 50 ms, trong đó aa và bb là kết quả đo tối đa và tối thiểu.

Chương trình cho Arduino

Bạn có thể đọc thêm về giao tiếp nối tiếp tại arduino.cc. Chương trình này khá đơn giản, phần lớn thời gian được dùng để làm việc với cổng song song. Sau khi đọc xong dữ liệu từ ADC, chúng ta nhận được giá trị điện áp 10 bit (0x0000 – 0x0400) dưới dạng biến 16 bit (INT). Cổng nối tiếp (RS-232) cho phép truyền dữ liệu trong các gói 8 bit. Cần chia các biến 16 bit thành 2 phần 8 bit.

Serial.print(điện áp>>8,BYTE);

Serial.print(điện áp%256,BYTE);

Ta dịch byte của biến 8 bit sang phải rồi chia cho 256 và gửi kết quả về máy tính.

Bạn có thể tải xuống mã nguồn đầy đủ của phần mềm Arduino

Trực quan C++

Tôi cho rằng bạn đã có kiến ​​thức cơ bản về lập trình C++ cho Windows, nếu chưa có thì hãy sử dụng Google. Internet có đầy đủ các hướng dẫn dành cho người mới bắt đầu.

Điều đầu tiên cần làm là thêm cổng nối tiếp từ thanh công cụ xuống biểu mẫu bên dưới. Điều này sẽ thay đổi một số thông số quan trọng cổng nối tiếp: tên cổng, tốc độ truyền, độ sâu bit. Điều này rất hữu ích để thêm các điều khiển vào cửa sổ ứng dụng, thay đổi các cài đặt này bất kỳ lúc nào mà không cần biên dịch lại chương trình. Tôi chỉ sử dụng tùy chọn chọn cổng.

Sau khi tìm kiếm các cổng nối tiếp có sẵn, cổng đầu tiên được chọn theo mặc định. Nó được thực hiện như thế nào:

mảng< String ^>^ serialPorts = nullptr;

serialPorts = serialPort1->GetPortNames();

cái này->comboBox1->Items->AddRange(serialPorts);

cái này->comboBox1->SelectedIndex=0;

Cổng nối tiếp trên PC chỉ có thể được sử dụng bởi một ứng dụng tại một thời điểm, vì vậy cổng phải được mở trước khi sử dụng và không được đóng. Lệnh đơn giản cho việc này:

serialPort1->Open();

serialPort1->Đóng();

Để đọc chính xác dữ liệu từ cổng nối tiếp, bạn phải sử dụng các sự kiện (trong trường hợp của chúng tôi là một ngắt). Chọn loại sự kiện:

Danh sách thả xuống khi nhấn đúp chuột"Đã nhận được dữ liệu".

Mã sự kiện được tạo tự động:

Nếu byte đầu tiên xuất hiện cổng nối tiếp 0xAB nếu điều này có nghĩa là các byte còn lại mang dữ liệu điện áp.

riêng tư: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) (

dữ liệu char không dấu0, data1;

if (serialPort1->ReadByte()==0xAB) (

data0=serialPort1->ReadByte();

data1=serialPort1->ReadByte();

điện áp=Toán học::Round((float(data0*256+data1)/1024*5.00),2);

dữ liệu_count++;

serialPort1->ReadByte();

Ghi và đọc dữ liệu cổng nối tiếp

Một vấn đề nhỏ đối với tôi là gửi dữ liệu RAW hex qua cổng nối tiếp. Lệnh Write() đã được sử dụng; nhưng với ba đối số: mảng, số byte bắt đầu, số byte cần ghi.

riêng tư: System::Void Button2_Click_1(System::Object^ sender, System::EventArgs^ e) (

kênh char không dấu=0;

kênh=this->listBox1->SelectedIndex;

mảng^bắt đầu =(0xAC,(0x10+kênh));

mảng^stop =(0xAC,0x00);

serialPort1->Write(start,0,2);

cái này->button2->Text="Dừng";

) khác (

serialPort1->Write(stop,0,2);

this->button2->Text="Start";

Đó là tất cả!

Bài viết gốc trên tiếng anh(dịch: Alexander Kasyanov cho trang cxem.net)

Xin chào, Habr! Hôm nay mình xin tiếp tục chủ đề “crossing” arduino và android. Trong ấn phẩm trước tôi đã nói và hôm nay chúng ta sẽ nói về vôn kế bluetooth DIY. Một thiết bị khác như vậy có thể được gọi là vôn kế thông minh, vôn kế “thông minh” hoặc chỉ là vôn kế thông minh, không có dấu ngoặc kép. Họ này không chính xác theo quan điểm ngữ pháp tiếng Nga, tuy nhiên, nó thường được tìm thấy trên các phương tiện truyền thông. Sẽ có một cuộc bình chọn về chủ đề này ở cuối bài viết, nhưng tôi khuyên bạn nên bắt đầu bằng việc trình diễn hoạt động của thiết bị để hiểu bài viết sẽ nói về cái gì.


Tuyên bố miễn trừ trách nhiệm: bài viết dành cho những người đam mê arduino trung bình, những người thường không quen với lập trình Android, do đó, như trong bài viết trước, chúng tôi sẽ tạo một ứng dụng cho điện thoại thông minh sử dụng môi trường phát triển hình ảnh App Inventor 2 cho các ứng dụng Android.
Để tạo một vôn kế bluetooth DIY, chúng ta cần viết hai chương trình tương đối độc lập: một bản phác thảo cho Arduino và một ứng dụng cho Android. Hãy bắt đầu với một bản phác thảo.
Trước tiên, bạn nên biết rằng có ba tùy chọn chính để đo điện áp bằng Arduino, bất kể bạn cần xuất thông tin ở đâu: đến cổng com, tới màn hình được kết nối với Arduino hoặc với điện thoại thông minh.
Trường hợp đầu tiên: đo điện áp lên đến 5 volt. Ở đây, một hoặc hai dòng mã là đủ và điện áp được đặt trực tiếp vào chân A0:
int value = analogRead(0); // đọc giá trị từ A0
điện áp = (giá trị / 1023.0) * 5; // chỉ đúng nếu Vcc = 5,0 volt
Trường hợp thứ hai: để đo điện áp lớn hơn 5 volt, người ta sử dụng bộ chia điện áp. Mạch rất đơn giản và mã cũng vậy.

phác thảo

int analogInput = A0;
giá trị float = 0,0;
điện áp phao = 0,0;
phao R1 = 100000.0; //Pin Vin-> 100K -> A0
phao R2 = 10000,0; // Pin Gnd -> Arduino Gnd và Arduino Gnd -> 10K -> A0
giá trị int = 0;

Thiết lập vô hiệu() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Vòng lặp trống() (
giá trị = analogRead(analogInput);
val = (giá trị * 4.7) / 1024.0;
điện áp = val / (R2/(R1+R2));
Serial.println(điện áp);
độ trễ (500);
}


Arduino Uno
mô-đun Bluetooth
Trường hợp thứ ba. Khi bạn cần có được thông tin chính xác hơn về điện áp, bạn nên sử dụng làm điện áp tham chiếu chứ không phải điện áp nguồn, ví dụ, điện áp này có thể thay đổi một chút khi được cấp nguồn bằng pin, nhưng điện áp của bộ ổn định Arduino bên trong là 1,1 volt. mạch ở đây giống nhau, nhưng mã dài hơn một chút. Tôi sẽ không phân tích chi tiết tùy chọn này, vì nó đã được mô tả kỹ trong các bài viết chuyên đề, nhưng phương pháp thứ hai là khá đủ đối với tôi, vì nguồn điện của tôi ổn định, từ cổng USB của máy tính xách tay.
Vậy là chúng ta đã sắp xếp xong phép đo điện áp, bây giờ hãy chuyển sang nửa sau của dự án: tạo một ứng dụng Android. Chúng tôi sẽ tạo ứng dụng trực tiếp từ trình duyệt trong môi trường phát triển trực quan cho ứng dụng Android App Inventor 2. Truy cập trang web appinventor.mit.edu/explore, đăng nhập bằng tài khoản Google của bạn, nhấp vào nút tạo, dự án mới và bằng cách chỉ cần kéo và thả các phần tử, chúng ta sẽ tạo ra một cái gì đó giống như thiết kế này:

Tôi đã làm đồ họa rất đơn giản, nếu ai muốn đồ họa thú vị hơn, hãy để tôi nhắc bạn rằng để làm được điều này, bạn cần sử dụng tệp .png có nền trong suốt thay vì tệp .jpeg.
Bây giờ hãy chuyển đến tab Khối và tạo logic ứng dụng ở đó như thế này:


Nếu mọi thứ đều ổn, bạn có thể nhấp vào nút Build và lưu .apk vào máy tính của tôi, sau đó tải xuống và cài đặt ứng dụng trên điện thoại thông minh của bạn, mặc dù có nhiều cách khác để tải ứng dụng lên. ở đây thuận tiện hơn cho mọi người. Kết quả là tôi đã kết thúc với ứng dụng này:


Tôi hiểu rằng rất ít người sử dụng môi trường phát triển trực quan App Inventor 2 cho các ứng dụng Android trong dự án của họ, vì vậy có thể đặt ra nhiều câu hỏi khi làm việc trong đó. Để giải quyết một số câu hỏi này, tôi đã làm một video chi tiết về cách tạo một ứng dụng như vậy “từ đầu” (để xem nó, bạn cần truy cập YouTube):

tái bút Bộ sưu tập hơn 100 tài liệu giáo dục về Arduino dành cho người mới bắt đầu và chuyên gia