TỔNG QUAN
Lý do chọn đề tài
Dựa trên kiến thức từ môn lập trình Visual Basic, hệ thống điều khiển động cơ và các thiết bị điện tử, chúng em đã quyết định thực hiện đề tài "Thiết kế hệ thống thông tin và quản lý xe cân bằng qua điện thoại thông minh" Mục đích của đề tài là tìm hiểu sâu hơn về Arduino, làm quen với các thiết bị điện tử, thực hành các kiến thức về cảm biến và nâng cao hiểu biết cá nhân.
Truyền dữ liệu không dây đang trở thành xu thế phát triển nổi bật trong ngành kỹ thuật ô tô và các lĩnh vực điều khiển khác, nhờ vào những lợi ích thực tiễn và tiềm năng phát triển trong tương lai Các công ty ô tô lớn đã tích hợp nhiều tính năng điều khiển lên màn hình cảm ứng LCD, đồng thời sử dụng màn hình thứ hai để hiển thị đa nhiệm các thông số của xe ô tô.
Hình 1.2 Sử dụng màn LCD để hiển thị và điều khiển trên xa VOLVO.
Mục tiêu đề tài
Với sự tiến bộ của khoa học kỹ thuật điện tử, công nghệ truyền thông tin và dữ liệu không dây ngày càng phát triển mạnh mẽ Đề tài của chúng em tập trung vào một khía cạnh nhỏ trong việc ứng dụng công nghệ Bluetooth.
Ba phần mềm di động mở trên nền tảng Android kết hợp với khả năng xử lý tín hiệu và điều khiển mạnh mẽ của Arduino đang mở ra hướng phát triển mới cho công nghệ, đặc biệt trong ngành công nghệ ô tô Thay vì sử dụng mạng LAN hay CAN truyền thống, việc áp dụng công nghệ truyền dữ liệu không dây mang lại nhiều lợi ích vượt trội về không gian và tính thẩm mỹ.
Đối tƣợng và phạm vi nghiên cứu
Đề tài nghiên cứu tập trung vào phương thức truyền thông tin và dữ liệu không dây, kết hợp vi mạch điện tử với điện thoại thông minh Nhóm nghiên cứu cần chú trọng vào các đối tượng liên quan để phát triển một sản phẩm hoàn thiện theo mục đích đã đề ra.
Vi mạch điện tử bao gồm 1 boad mạch arduino,1 moduel Bluetooth và các cảm biến
Phần mềm tạo ứng dụng trên Android.Mọi tín hiệu từ arduino sẽ truyền đến điện thoại nhờ vào Bluetooth
Tập trung nghiên cứu cách xử lí tín hiệu truyền từ Arduino đến Android
Giải quyết các vướng bận về mặt sóng tín hiệu, giảm nhiễu
CƠ SỞ LÝ THUYẾT
Tổng quan về arduino
Arduino đã tạo ra một cú sốc lớn trong cộng đồng DIY toàn cầu trong những năm gần đây, thu hút một lượng người dùng đông đảo và đa dạng, từ học sinh phổ thông đến sinh viên đại học Sự phổ biến này đã khiến ngay cả những người sáng lập Arduino cũng phải ngạc nhiên.
Hình 2.1 Các thành viên khởi xướng arduino
Arduino là một nền tảng mã nguồn mở được nhiều sinh viên và nhà nghiên cứu tại các trường đại học danh tiếng như MIT, Stanford và Carnegie Mellon ưa chuộng Sự quan tâm này còn được thể hiện qua việc Google hỗ trợ phát triển bộ kit Arduino Mega ADK, giúp tạo ra các ứng dụng Android tương tác với cảm biến và thiết bị khác.
Arduino là một bo mạch vi xử lý được sử dụng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ và đèn Điểm nổi bật của Arduino là môi trường phát triển ứng dụng dễ sử dụng, cùng với ngôn ngữ lập trình dễ học, phù hợp ngay cả với những người không có nhiều kiến thức về điện tử và lập trình.
5 điều làm nên hiện tƣợng Arduino chính là mức giá rất thấp và tính chất nguồn mở từ phần cứng tới phần mềm.
Mạch Arduino bao gồm vi điều khiển AVR và nhiều linh kiện bổ sung, giúp lập trình dễ dàng và mở rộng với các mạch khác Một điểm nổi bật của Arduino là kết nối tiêu chuẩn cho phép người dùng kết nối với CPU của board và các module mở rộng gọi là shield Một số shield kết nối trực tiếp qua các chân, trong khi nhiều shield khác sử dụng giao thức I²C, cho phép xếp chồng và sử dụng song song Các dòng chip megaAVR thường được sử dụng bao gồm ATmega8, ATmega168, ATmega328, ATmega1280, và ATmega2560, cùng với một số vi xử lý tương thích khác Hầu hết các mạch có bộ điều chỉnh tuyến tính 5V và thạch anh dao động 16 MHz, mặc dù một số thiết kế như LilyPad hoạt động ở 8 MHz và không có bộ điều chỉnh điện áp do kích thước hạn chế Vi điều khiển Arduino có thể được lập trình sẵn với boot loader, cho phép upload chương trình vào bộ nhớ flash on-chip mà không cần bộ nạp bên ngoài, giúp việc sử dụng trở nên thuận tiện hơn.
Arduino được ra đời tại thị trấn Ivrea, Ý, và mang tên vua Arduin từ thế kỷ 9 Được giới thiệu vào năm 2005 bởi giáo sư Massimo Banzi tại trường Interaction Design Institute Ivrea, Arduino ban đầu chỉ là một công cụ đơn giản cho sinh viên Mặc dù không có chiến dịch tiếp thị nào, nhưng sự lan tỏa của Arduino diễn ra nhanh chóng nhờ vào những đánh giá tích cực từ người dùng đầu tiên Ngày nay, Arduino đã trở nên nổi tiếng, thu hút nhiều người đến thăm Ivrea để khám phá nơi khởi nguồn của nó.
2.1.1 Lý thuyết về board Arduino Uno R3
Dòng mạch Arduino UNO, nổi bật trong lập trình Arduino, hiện đã phát triển đến thế hệ thứ 3 (R3) Bo mạch này sử dụng bộ xử lý trung tâm điều khiển AVR Atmega328, mang lại hiệu suất cao cho các dự án điện tử.
Hình 2.2 Boad mạch arduino Uno R3
Bảng 2.1 Một vài thông số của Arduino UNO R3
Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động 5V DC (chỉ đƣợc cấp qua cổng USB)
Tần số hoạt động 16 MHz
Dòng tiêu thụ khoảng 30mA Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC
Số chân Digital I/O 14 (trong đó 6 chân pin có khả năng điều khiển xung PWM)
Số chân Analog 6 (độ phân giải 10bit)
Dòng tối đa trên mỗi chân I/O 30 mA
Dòng ra tối đa (5V) 500 mA
Dòng ra tối đa (3.3V) 50 mA
Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bởi bootloader
GND (Ground) là cực âm của nguồn điện cung cấp cho Arduino UNO Khi sử dụng các thiết bị với nguồn điện riêng biệt, các chân GND này cần phải được kết nối với nhau để đảm bảo hoạt động ổn định.
-5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA
-3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA
-Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND
Chân IOREF trên Arduino UNO cho phép đo điện áp hoạt động của vi điều khiển, luôn duy trì ở mức 5V Tuy nhiên, không nên sử dụng chân này để cấp nguồn 5V, vì chức năng chính của nó không phải là cung cấp điện.
-RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET đƣợc nối với GND qua 1 điện trở 10KΩ
*Các cổng vào/ra trên Arduino Board
Hình 2.3 Các cổng ra vào trên arduino Uno R3
Mạch Arduino UNO sở hữu 14 chân digital cho phép đọc và xuất tín hiệu với hai mức điện áp là 0V và 5V Mỗi chân có thể chịu dòng vào/ra tối đa 40mA Ngoài ra, mỗi chân còn được trang bị các điện trở pull-up được cài đặt sẵn trong vi điều khiển ATmega328, tuy nhiên các điện trở này không được kết nối mặc định.
Một số chân digital có các chức năng đặc biệt nhƣ sau:
- 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive –
Arduino Uno có khả năng giao tiếp với các thiết bị khác thông qua hai chân dữ liệu TTL Serial Kết nối Bluetooth thường được hiểu là một dạng kết nối Serial không dây Nếu không cần thiết phải giao tiếp Serial, bạn nên tránh sử dụng hai chân này.
- Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải 8 bit (giá trị từ 0 → 2 8 -1 tương ứng với 0V → 5V) bằng hàm analogWrite() Nói một
9 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 bao gồm 10 (SS), 11 (MOSI), 12 (MISO) và 13 (SCK) Bên cạnh các chức năng thông thường, bốn chân này còn hỗ trợ truyền phát dữ liệu qua giao thức SPI với các thiết bị khác.
- LED 13: Trên Arduino UNO 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 UNO Broad : có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu
Arduino UNO sử dụng độ phân giải 10bit để đọc giá trị điện áp trong khoảng từ 0V đến 5V Bạn có thể kết nối điện áp tham chiếu vào chân AREF trên board, cho phép đo điện áp trong khoảng từ 0V đến 2.5V nếu cấp điện áp 2.5V vào chân này, với độ phân giải 10bit vẫn được giữ nguyên Ngoài ra, Arduino UNO còn có hai chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
2.1.2 Lý thuyết về arduino IDE và ngôn ngữ lập trình
Thiết kế bo mạch nhỏ gọn và tính năng thông dụng của Arduino mang lại nhiều lợi thế, nhưng sức mạnh thực sự nằm ở phần mềm Môi trường lập trình đơn giản và dễ sử dụng, cùng với ngôn ngữ Wiring dựa trên C/C++, rất quen thuộc với kỹ sư Đặc biệt, số lượng thư viện mã nguồn mở phong phú được cộng đồng chia sẻ là một điểm mạnh lớn.
Môi trường lập trình Arduino IDE hỗ trợ ba nền tảng phổ biến: Windows, Macintosh OSX và Linux Với tính chất nguồn mở, Arduino IDE hoàn toàn miễn phí và cho phép người dùng có kinh nghiệm mở rộng thêm tính năng.
Ngôn ngữ lập trình C++ có khả năng mở rộng thông qua các thư viện, cho phép người dùng tích hợp mã viết bằng AVR và C vào chương trình Điều này mang lại sự linh hoạt và tiện ích cho việc phát triển ứng dụng, nhờ vào nền tảng vững chắc từ ngôn ngữ C của AVR.
Hình 2.4 Giao diện màn hinh arduino IDE
2 2 Lý thuyết các cảm biến đƣợc sử dụng trong đề tài
2.2.1 Cảm biến nhiệt độ LM35
THIẾT LẬP PHẦN CỨNG VÀ LẬP TRÌNH VỚI ARDUINO
Lập trình,lắp đặt cho mạch đo nhiệt độ với arduino
Cảm biến LM35 hoạt động bằng cách cho ra một giá trị điện thế nhất định tại chân Voul (chân giữa) ứng với mỗi mức nhiệt độ
Để đo nhiệt độ từ cảm biến LM35, kết nối chân bên trái của cảm biến với nguồn 5V và chân bên phải với đất Sau đó, sử dụng chân giữa của cảm biến để đo hiệu điện thế qua pin A0 trên Arduino, tương tự như cách đọc giá trị biến trở Nhiệt độ sẽ được tính trong khoảng 0-100 độ C bằng công thức tương ứng.
Hình 3.1 Mạch đo cảm nhiệt độ với arduino
Int sensorPin = A0;// chân analog kết nối tới cảm biến LM35 void setup() {
Serial.begin(9600); //Khởi động Serial ở mức baudrate 9600
//đọc giá trị từ cảm biến LM35 int reading = analogRead(sensorPin);
//tính ra giá trị hiệu điện thế (đơn vị Volt) từ giá trị cảm biến float voltage = reading * 5.0 / 1023.0;
// ở trên mình đã giới thiệu, cứ mỗi 10mV = 1 độ C
// Vì vậy nếu biến voltage là biến lưu hiệu điện thế (đơn vị Volt)
// thì ta chỉ việc nhân voltage cho 100 là ra đƣợc nhiệt độ! float temp = voltage * 100.0;
Serial.println(temp); delay(1000);//đợi 1 giây cho lần đọc tiếp theo
Hình 3.2 Kết quả hiển thị đo nhiệt độ từ arduino
Lập trình,lắp đặt cho mạch đo cường độ sáng với arduino
Khi mô-đun cảm biến rung được kích hoạt, điện áp đầu vào của IC393 sẽ thay đổi IC này nhận diện sự thay đổi và phát ra tín hiệu thấp để cảnh báo về sự rung động.
Hình 3.3 Mạch đo cường độ sáng với arduino
*code lập trình int OutPin = A0; // Lưu chân ra của cảm biến void setup()
//Đối với một chân analog bạn không cần pinMode
Serial.begin(9600);//Mở cổng Serial ở mức 9600 pinMode (7, INPUT_PULLUP); pinMode (13, OUTPUT);
{ int value = analogRead(OutPin); // Ta sẽ đọc giá trị hiệu điện thế của cảm biến
// Giá trị đƣợc số hóa thành 1 số nguyên có giá trị
Serial.println(value);//Xuất ra serial Monitor delay(10);
Lắp đặt mạch kết nối bluetooth HC05 với arduino
Mô-đun HC-05 sử dụng lệnh AT để giao tiếp với các thiết bị khác, kết nối với Arduino thông qua hai chân Tx và Rx Để thiết lập giao tiếp, chỉ cần kết nối chân Tx của HC-05 với chân Rx của Arduino và ngược lại, từ đó tạo điều kiện thuận lợi cho việc truyền dữ liệu giữa hai thiết bị.
Hình 3.5 Mạch kết nối bluetooth HC05 với arduino
Sau khi kết nối thành công với thiết bị Bluetooth khác, đèn trên module Bluetooth HC05 sẽ nhấp nháy chậm, cho thấy rằng kết nối Serial đã được thiết lập.
Lắp đặc đo điện áp accu
Để đo điện áp của accu, chúng ta sử dụng cầu phân áp nhằm lấy được điện áp đầu vào để kết nối với chân analog input của Arduino, đảm bảo điện áp nằm trong khoảng DC 0-5V.
Trong các khối nguồn thường dùng cầu phân áp 2 điệt trở nên viêc tính áp sẽ nhanh hơn :
Hình 3.6 Mạch kết nối đo điện áp accu với arduino
Vout1 là điện áp đo đƣợc tại 2 đầu điện trở R2:
Với cầu phân áp 2 điện trở , ta có thể dùng công thức biến đổi :
// Chương trình như sau: void setup() {
// Đặt kết nối cho Arduino 9600 bits trên giây:
// Vòng lặp chính, làm cho chương trình chạy liên tục: void loop() {
// Đọc tín hiệu analog từ chân A0: int sensorValue = analogRead(A0);
// Chuyển đổi tín hiệu đọc được: float voltage = 11*sensorValue * (5.0 / 1023.0);// Tỷ lệ điện áp đầu vào 36V sau khi phân áp vào arduino
// Xuất ra ngoài màn hình:
Hình 3.7 Kết quả hiển thị điện áp accu
Vì đây là điện áp nạp cho accu, số liệu đo đƣợc lớn hơn điện áp định mức của accu
Lập trình,lắp đặt cho mạch hall với aruidno
Hình 3.8 Mạch kết đo tín hiệu xung của hall với arduino
Cảm biến Hall thường có 5 chân, trong đó 2 chân có khả năng xuất tín hiệu xung giúp xác định chiều quay thuận và ngược của động cơ Một chân khác được sử dụng để xuất tín hiệu I/O Dưới đây là hình ảnh của động cơ xe điện đã được tích hợp sẵn cảm biến Hall.
Hình 3.9 Đầu kết nối với cảm biến Hall
#define PIN_DO 2 volatile unsigned int pulses; float rpm; unsigned long timeOld;
#define HOLES_DISC 2 void counter()
Serial.begin(9600); pinMode(PIN_DO, INPUT_PULLUP); pulses = 0; timeOld = 0; attachInterrupt(digitalPinToInterrupt(PIN_DO), counter, FALLING);
{ detachInterrupt(digitalPinToInterrupt(PIN_DO)); rpm = (pulses * 60) / (HOLES_DISC);
Serial.println(rpm); timeOld = millis(); pulses = 0; attachInterrupt(digitalPinToInterrupt(PIN_DO), counter, FALLING);
Kết quả đo tốc độ động cơ cân bằng khi động cơ hoạt động ở chế độ thông thường
Hình 3.9 Kết quả hiển thị số quay quay động cơ cân bằng (rpm)
Lập trình,lắp đặt cho mạch đo cường độ dòng điện với arduino
Khi đo DC, cần mắc tải nối tiếp Ip+ và Ip- đúng chiều để dòng điện chảy từ Ip+ đến Ip- Điều này sẽ tạo ra điện thế Vout trong khoảng 2.5 - 5V tương ứng với dòng 0 - 5A Nếu mắc ngược, Vout sẽ giảm xuống còn 2.5V đến 0V, tương ứng với dòng từ 0A đến -5A.
Khi cấp nguồn 5V cho module mà chưa có dòng tải mắc nối tiếp với domino, Vout sẽ là 2.5V Khi dòng tải Ip đạt 5A, Vout sẽ tăng lên 5V Vout sẽ tuyến tính theo dòng Ip trong khoảng từ 2.5V đến 5V tương ứng với dòng từ 0 đến 5A Để kiểm tra, có thể sử dụng đồng hồ VOM ở thang đo DC để đo Vout.
Khi đo dòng điện AC, do dòng điện AC không có chiều nên không cần quan tâm chiều
Khi cấp nguồn 5V cho module mà chưa có dòng điện Ip (tức là chưa kết nối tải với domino), điện áp đầu ra Vout sẽ đạt 2.5V Tuy nhiên, khi có dòng điện xoay chiều Ip, điện áp Vout sẽ trở thành điện áp xoay chiều hình sin với độ lớn thay đổi liên tục theo hàm sin, tạo ra một tín hiệu điện áp hình sin có độ lớn tuyến tính.
26 với dòng điện AC , 0 đến 5V(thế xoay chiều xoay chiều) tương ứng với -5A đến 5A (dòng xoay chiều) Để kiểm tra dùng đồng hồ VOM thang đo AC đo Vout
Hình 3.10 Lắp đặt cho mạch đo cường độ dòng điện với arduino
Code lập trình const int analogIn = A2; int mVperAmp = 100; // use 100 for 20A Module and 66 for 30A Module int ACSoffset = 2500; void setup(){
} void loop(){ int RawValue = analogRead(analogIn); float Voltage = (RawValue / 1024.0) * 5000; // Gets you mV float Amps = ((Voltage - ACSoffset) / mVperAmp);
Serial.print("Raw Value = " ); // shows pre-scaled value
Serial.print("\t mV = "); // shows the voltage measured
Serial.print(Voltage,3); // the '3' after voltage allows you to display 3 digits after decimal point
Serial.print("\t Amps = "); // shows the voltage measured
Serial.println(Amps,0); // the '3' after voltage allows you to display 3 digits after decimal point delay(2500);
Hiển thị kết quả đo dòng:
Hinh 3.11 Kết quả Hiển thị đo cường độ dòng điện từ arduino
LẬP TRÌNH ANDROID MIT APP INVENTOR 2
Giới thiệu về Mit App Inventor
MIT App Inventor là một công cụ từ MIT (Massachusetts Institute of Technology) cho phép người dùng tạo ứng dụng Android dễ dàng thông qua thao tác kéo thả, mà không cần có kiến thức lập trình Phiên bản mới nhất hiện tại là MIT App Inventor 2.
Hình 4.1 Sơ đồ nguyên truyền phiên bản mới nhất hiện nay là MIT App Inventor 2
Dựa trên nguyên tắc "những gì bạn thấy là những gì bạn có" (WYSIWYG), App Inventor mang đến khả năng tiếp cận và xây dựng ứng dụng Android một cách dễ dàng Giao diện trực quan và dễ hiểu của nó cho phép người dùng truy cập vào các chức năng của điện thoại, bao gồm cả GPS, từ đó làm phong phú thêm bộ sưu tập ứng dụng Android.
+ Không cần biết nhiều về code
+ Chỉ có động tác kéo thả đơn giản
Hệ thống hỗ trợ đầy đủ các tập lệnh cảm biến, cơ sở dữ liệu và kết nối Bluetooth, lý tưởng cho những ai quan tâm đến IoT Điều này cho phép bạn điều khiển các thiết bị điện trong nhà chỉ bằng điện thoại Android.
+ Hỗ trợ các kết nối mạng xã hội, google maps…
+ Nặng, chạy chậm nếu như có quá nhiều code do chương trình phát sinh thêm nhiều code thừa không cần thiết trong quá trình build sang file cài APK
+ Không tối ƣu hoá code đƣợc
Mỗi màn hình (Activity) trong ứng dụng hoạt động độc lập, chỉ cho phép truyền một biến duy nhất sang màn hình kế tiếp Điều này có nghĩa là không tồn tại biến toàn cục cho toàn bộ các màn hình.
4.2 Giới thiệu lập trình khối Để sử dụng đƣợc App inventor, ta phải truy cập vào địa chỉ ai2.appinventor.mit.edu sau đó tiến hành đăng nhập tài khoản Google của bạn để mở rộng trang quản lý
Hình 4.2 Giao diện quản lý Project
30 Để tạo một Project mới ta chọn Start New Project và đặt tên cho project đó
Hình 4.3 Giao diện Start New Project
The Project design interface is user-friendly, featuring controls on the left side, including User Interface, Media, Sensor, and Social options Users can easily drag and drop these elements onto the central Screen, which simulates the application display On the right side, a management window allows for the oversight of Components, Media, and Properties for each Control within the app.
Inventor có hai chế độ làm việc: designer và block
4.2.1 Chế Độ Designer: chế độ dành cho thiết kế, tạo giao diện bên ngoài
Hình 4.4 Giao diện các thành phần chính của chế độ designer
Giao diện của thể chia ra thành 4 thành phần chính:
+ 1: Palette: Chứa các đối tƣợng để thiết kế ứng dụng
+ 2:Properties: Chứa các thuộc tính của đối tƣợng đang đƣợc chọn
+ 3:Screen Viewer: Nơi cho phép thiết kế screen cho ứng dụng của mình bằng cách kéo thả các đối tƣợng vào
+ 4: Nơi bạn quản lý screen (màn hình) và chế độ thiết kế / khối lệnh
4 2.1.1 palette: là nơi chứa các đối tƣợng của App Inventor và đƣợc chia làm 9 nhóm
User inteface (Giao diện người dùng)
Hình 4.5 Giao diện User inteface (Giao diện người dùng) Bảng 4.1 Nhóm những đối tượng dùng để thiết kế giao diện cho screen mà người dùng nhìn thấy đƣợc
Nút lệnh thực hiện công việc nào đó Cho phép bạn nhập vào văn bản Tạo danh sách lựa chọn
Hộp thoại chọn ngày tháng
Hộp thoại chọn thời gian Hộp thoại đánh dấu check Nhãn để hiển thị nội dung văn bản Danh sách chọn, cũng tương tự như Listview Thanh trƣợt
Hộp nhập mật khẩu, mật khẩu sẽ chỉ hiện dấu * khi nhập
Tạo hộp thoại cảnh báo, nhắc nhở Hiển thị hình ảnh
Hiển thị danh sách dạng menu sổ xuống
Hình 4.6 Giao diện Layout (Bố cục)
Tại mục này chứa các giải pháp giúp bạn sắp xếp các đối tƣợng theo một bố cục nhất định:
Bảng 4.2 Nhóm lệnh sắp xếp các đối tƣợng theo một bố cục
Sắp xếp đối tƣợng theo dạng bảng
Sắp xếp đối tƣợng theo chiều dọc
Sắp xếp đối tƣợng theo chiều ngang
Media (Phương tiện truyền thông)
Hình 4.7 Giao diện Media (Phương tiện truyền thông)
Mục này giúp bạn có thể làm việc liên quan đến đa phương tiện như âm thanh, video, máy ảnh, ghi âm,
Bảng 4.3:Nhóm lệnh liên quan đến đa phương tiện như âm thanh, video, máy ảnh, ghi âm
Có thể chơi âm thanh vào điều khiển rung điện thoại
Chơi các tập tin âm thanh Phát âm một văn bản Dịch ngôn ngữ, đƣợc cung cấp bởi Yandex Chơi tệp video
Quay phim Chụp ảnh Chuyển đổi lời nói thành văn bản Chọn ảnh từ thƣ viện ảnh trong máy
Drawing and Animation (Vẽ và chuyển động)
Hình 4.8 Giao diện Drawing and Animation (Vẽ và chuyển động)
Tại đây giúp bạn tạo ra những chuyển động hay tương tác:
Bảng 4.4: Nhóm lệnh tạo ra những chuyển động hay tương tác
Nơi cho phép Imagesprite có thể di chuyển trên nó Đƣợc đặt trên Canvas, có thể chạm và kéo,
Hình quả bóng, đƣợc đặt trên Canvas
Hình 4.9 Giao diện Sensors (Cảm biến)
Bảng 4.5: Nhóm này giúp bạn tiếp cận đƣợc những cảm biến nhƣ định vị, quét mã
Thông tin về thời gian và đồng hồ hệ thống Tính năng quét mã QR qua camera
Vị trí và định vị địa điểm đóng vai trò quan trọng trong việc định hướng trong không gian Công nghệ giao tiếp gần như NFC giúp kết nối nhanh chóng và tiện lợi Bên cạnh đó, cảm biến gia tốc, độ nghiêng và rung lắc cung cấp thông tin chính xác về chuyển động Ngoài ra, cảm biến tiệm cận gần xa cũng góp phần nâng cao khả năng nhận diện và tương tác trong các ứng dụng công nghệ.
Social (Giao tiếp - Xã hội)
Hình 4.10 Giao diện Social (Giao tiếp - Xã hội)
Bảng 4.6 Nhóm Các đối tƣợng này giúp bạn thao tác về liên lạc, giao tiếp và mạng xã hội
Hộp văn bản cho phép nhập địa chỉ email Văn bản tin nhắn
Hộp thoại chọn số điện thoại Gọi điện thoại
Chia sẻ dữ liệu giữa hai máy đã cài ứng dụng Giao tiếp với mạng xã hội Twitter
Chọn một liên hệ trong danh bạ
Hình 4.11 Giao diện Storage (Lưu trữ)
Bảng 4.7 Nhóm chức năng này giúp bạn lưu trữ thông tin, dữ liệu, theo nhiều cách khác nhau
Liên kết với Google Fusion Tables Cho phép bạn lưu trữ, truy vấn và chia sẻ bảng dữ liệu
Cho phép bạn lưu trữ trên tập tin trên bộ nhớ điện thoại
Giúp giao tiếp với web server, lưu trữ và truy vấn dữ liệu Lưu trữ và truy vấn dữ liệu ngay trong ứng dụng
Hình 4.12 Giao diện Connectivity (Kết nối)
Bảng 4.8 Nhóm giúp bạn hoàn toàn có thể dùng chúng để kết nối bluetooth, giao thức web,
Bluetooth khách (theo mô hình khách - chủ) Bluetooth chủ (theo mô hình khách - chủ) Cung cấp các chức năng HTTP GET, POST, PUT,
Có thể chạy một "activity" thông qua phương thức StartActivity
Ngôn ngữ dễ nhất để làm việc với Mindstorm là LEGO MINDSTORMS NXT SOFTWARE 2.1, đi kèm với bản NXT và bán riêng cho bản Education Phần mềm này được xây dựng trên nền tảng LABVIEW, một ngôn ngữ lập trình phổ biến trong lĩnh vực robot.
Hình 4.13 Giao diện LEGO® MINDSTORMS®
App Inventor cũng cung cấp cho bạn những đối tƣợng có thể làm việc với Lego Mindstorm nhƣ sau:
Bảng 4.9 Nhóm giúp cho bạn những đối tƣợng có thể làm việc với Lego Mindstorm
4 2.1.2 Thành phần - thuộc tính Ứng với mỗi thảnh phần, có những thuộc tính nhất định
Hình 4.14 Giao diện Thành phần - thuộc tính
Gửi lệnh trực tiếp đến NXT giúp điều khiển robot hiệu quả Các cảm biến như cảm biến màu sắc, cảm biến ánh sáng, cảm biến âm thanh, cảm biến siêu âm và cảm biến chạm trên robot đóng vai trò quan trọng trong việc thu thập thông tin và tương tác với môi trường Điều này cho phép robot di chuyển và chuyển hướng một cách linh hoạt, nâng cao khả năng hoạt động của nó.
Screen view cho phép người dùng kéo thả các đối tượng để thiết kế giao diện một cách dễ dàng Trong giao diện này, có hai loại thành phần: thành phần có thể thấy được (Visible component) và thành phần không thể nhìn thấy (Non-visible component).
4 2.1.4 Quản lý a Screen (màn hình)
Tại đây, hiện màn hình hiện tại, thêm màn hình mới và xóa màn hình hiện tại b Chế độ làm việc
Chế độ làm việc có hai chế độ:
Designer: Dành cho nhà thiết kế
Chế độ Blocks có dạng:
4.2.2 Chế Độ Blocks: chế độ làm việc với các khối lệnh xử lý bên trong chương trình.
Hình 4.15 Giao diện Lệnh tích hợp sẵn
Những nhóm lệnh tích hợp sẵn (Build-in) gồm những nhóm nhƣ sau:
1 Control là nhóm lệnh liên quan đến các câu lệnh điều kiện, điều khiển, vòng lặp,
2 Logic là những nhóm giá trị liên quan đến logic nhƣ true, false, phủ định, các phép so sánh,
3 Math là nhóm lệnh, giá trị liên quan đến tính toán, con số,
4 Text là nhóm lệnh những câu lệnh xử lý và làm việc với chuổi, xâu ký tự,
5 Lists là nhóm lệnh làm việc với danh sách
6 Colors là nhóm lệnh làm việc với màu sắc
7 Variables là nhóm giúp bạn tạo, khai thác và xử lý các biến (toàn cục hoặc địa phương)
8 Procedure giúp bạn xây dựng chương trình con, thủ tục,
Hình 4.16 Giao diện Lệnh Creen
Màn hình hiển thị danh sách các đối tượng mà bạn đã kéo và thả Mỗi đối tượng sẽ có các câu lệnh cụ thể để tương tác hiệu quả.
Hình 4.17 Giao diện Lệnh Any component
Any Component(Bất kỳ thành phần nào) là bạn có thể quy định các câu lệnh cho nhóm đối tƣợng theo một thành phần nào đó
Khi sử dụng câu lệnh cho Any Image, tất cả các đối tượng Image sẽ tuân theo cùng một câu lệnh chung Những câu lệnh này mang tính chất tổng quát và không phân biệt riêng lẻ.
Hình 4.18 Giao diện vùng làm việc
Vùng làm việc của Blocks có thể chia thành 4 phần nhƣ sau:
1: Vùng chứa những khối lệnh đề xuất từ một đối tƣợng mà bạn đã chọn từ Blocks, bạn có thể kéo thả những khối lệnh này vào vùng làm việc thật sự để trở thành lệnh cho ứng dụng thực thi
2: Những khối lệnh đã đƣợc kéo ra từ những khối lệnh đề xuất Ứng dụng sẽ thực thi những khối lệnh này
3: Backpack:Giúp bạn sao chép và dán các khối lệnh đến màn hình khác hoặc project khác
4: Thùng rác: Để xóa những khối lệnh, bạn chỉ cần kéo thả chúng vào thùng rác này
Pop-up menu bạn có thể hiểu là những cửa sổ bật lên, lúc bạn chọn vào một đối tƣợng nào đó hoặc chuột phải vào vùng trống
Khi bạn kéo các khối lệnh vào vùng làm việc, việc nhấp chuột phải sẽ hiển thị một menu với các đề xuất cho bạn lựa chọn.
Disable Block / Enable Block Đề xuất này giúp bạn có thể vô hiệu hóa / kích hoạt khối lệnh
Với những khối lệnh bạn không muốn ứng dụng thực hiện nhƣng vẫn muốn giữ nó trên vùng làm việc thì bạn chọn Disable Block
Khi bạn muốn cho ứng dụng thực hiện khối lệnh vừa vô hiệu hóa thì bạn chọn Enable
Khối lệnh bị vô hiệu hóa Khối lệnh đƣợc kích hoạt
Giúp bạn thêm khối lệnh đã chọn vào trong Backpack:
Con số nằm trong dấu ngoặc đơn là số lƣợng các khối lệnh hiện có trong Backpack Backpack sẽ đƣợc đề cập ở các bài viết sau
Số lượng n phụ thuộc vào số khối lệnh con trong khối lệnh đã chọn Việc chọn đề xuất này sẽ bao gồm khối lệnh đang chọn cùng với các khối lệnh con mà nó chứa.
Lệnh này tương đương với việc bạn kéo thả khối lệnh vào thùng rác
Khi bạn chuột phải vào vùng trống (không có khối lệnh) thì sẽ hiện lên menu nhƣ thế này:
Download Blocks as Image: Cho phép bạn tải về hình ảnh biểu diễn các khối lệnh giống nhƣ bạn nhìn thấy trên vùng làm việc
Collapse Blocks: Thu gọn tất cả các khối lệnh có trên vùng làm việc
Expand Blocks: Mở rộng tất cả các khối lệnh có trên vùng làm việc
Arrange Blocks Horizontally: Sắp xếp các khối lệnh theo chiều ngang
Arrange Block Vertically: Sắp xếp các khối lệnh thành chiều dọc
Sort Blocks by Category: Sắp xếp các khối lệnh theo danh mục
Paste All Blocks from Backpack: Dán tất cả các khối lệnh có trong Backpack ra vùng làm việc
Copy All Blocks to Backpack: Sao chép tất cả các khối lệnh có trên vùng làm việc vào trong Backpack
Empty Backpack: Xóa hết những khối lệnh có trong Backpack
Hình 4.19 Giao diện hộp cảnh báo
Hộp cảnh báo là một khung nhỏ nằm ở dưới góc trái của vùng làm việc:
Hộp này có nhiệm vụ cảnh báo cho bạn biết những chỗ không hợp lệ, những chỗ sai cú pháp trên vùng làm việc các khối lệnh
Chương 5 ỨNG DỤNG MIT APP INVENTOR 2 VÀO HIỂN THỊ THÔNG TIN
Thiết lập màn hình đăng nhập
Việc bảo mật với một chiếc xe, chúng ta cần cài đặt password để có thể đăng nhập, màn hình này có các chức năng chính là:
Thay đổi mật khẩu đã đặt
Reset lại mật khẩu ban đầu thiệt lập
Đăng nhập vào ứng dụng
Hình 5.1 Giao diện của ứng dụng
49 Để thiết lập đƣợc nhƣ vậy chúng ta cần sử dụng các đối tƣợng sau:
Hình 5.2 Giao diện cửa sổ components Ở của số components chúng ta thầy ở Screen 1 cần sủ dụng
4 button : dùng cho các nút change pass, reset, ok và find xe
2 passbox : dùng để nhập và thay đổi password
1 listpicker :dùng để tự động kết nối bluetouth
1 tinyDB1 : dùng để lưu passwword dưới dạng kí tự văn bản
Bluetoothclient : để kết nối với xe và tìm xe
Clock1 : dùng để kết nối bluetooth một cách liên tục
Sử dụng Hozizontal và Vertical để sắp xếp và thiết kes bố cục của ứng dụng
Có rất nhiều cách thiết lập với một hệ điều hành mở Android, đây là một cách cơ bản dễ dàng sử dụng và thiết kế
Lập trình khối là một phương pháp lập trình đơn giản và tiện lợi, giúp lập trình viên dễ dàng hơn trong việc tạo ra mã nguồn mà không phải lo lắng về các dòng code phức tạp Với các cấu trúc điều khiển, vòng lặp, phép toán logic và so sánh được tích hợp sẵn, lập trình viên có thể sử dụng chúng một cách dễ dàng và thuận tiện.
5.1.2.1 Thiết lập kết nối bluetooth
Trong MIT App Inventor 2, các màn hình (screen) hoạt động độc lập và cần thiết lập kết nối Bluetooth ngay khi màn hình được mở.
Để thiết lập kết nối Bluetooth, cần tạo một biến toàn cục nhằm đếm số lần nháy của đèn và đảm bảo biến này hoạt động liên tục.
Khi Screen1 được thiết lập, tất cả các câu lệnh sẽ được thực hiện, miễn là bluetoothClient1 có sẵn Bluetooth sẽ được kết nối qua ListPicker1 với địa chỉ 98:D3:31:FD:39:27, địa chỉ này tương ứng với mô-đun bluetooth tích hợp với bộ Arduino.
Mặc dù khối lệnh đơn giản có thể giúp, nhưng chương trình và ứng dụng chúng ta sử dụng vẫn có thể gặp lỗi do nhiều yếu tố khác nhau, như việc kết nối Bluetooth bị ngắt Để khắc phục sự cố này, chúng ta cần bổ sung thêm khối lệnh phù hợp.
Hình 5.4 khối code thiết lập kết nối Bluetooth khi phát hiện lỗi
Khối lệnh trên có nhiệm vụ kết nối ngay lại với bluetooth khi phát hiện lỗi
5.1.2.2 Thiết lập mở screen2 Để mở đƣợc Screen2 chúng ta nhập password và ấn nút OK
Hình 5.5 khối code thiết lập mở screen2
Khi nhập mật khẩu vào passbox1, hệ thống sẽ so sánh thuộc tính văn bản của nó với mật khẩu đã được cài đặt trước, được lưu trữ trong TinyDB1 Mật khẩu này có thứ tự đầu tiên, vì vậy nó được gán tag 1.
Nếu đúng password thì sẽ ngắt kết nối bluetooth và mở screen2
Reset password cho ứng dụng
Hình 5.6 khối code thiết lập Reset password cho ứng dụng
Chúng ta cài password mặc định cho ứng dụng là spkt thứ tự lưu trong TinyDB1 là 1
Hình 5.7 khối code thiết lập thay đổi password cho ứng dụng
Khi chúng ta thay đổi password thì hai passbox sẽ hiện ra, thay đổi tag 1 trong TinyDB1 thanh password mà bạn yêu thích
5.1.2.3 thiết lập báo vị trị xe và tìm xe trong bãi
Khi bạn vào khu vực hoạt động của Bluetooth và khởi động ứng dụng, đèn xe và còi sẽ phát tín hiệu giúp bạn xác định vị trí của xe.
Để tự định vị xe, chúng ta cần tạo một biến toàn cục để đếm số lần nháy của đèn và thực hiện việc chạy thời gian cho biến này.
Để thiết lập chức năng tự định vị xe, chúng ta sử dụng khối code trong Hình 5.8 Khi gửi dữ liệu qua Android, một ký tự văn bản chiếm 1 byte bộ nhớ thông qua module bluetooth HC05 Cụ thể, khi gọi hàm BluetoothClient.SendText và gửi ký tự 'A', đèn sẽ sáng, trong khi gửi ký tự '9' sẽ tắt đèn Các ký tự 'A' và '9' là các trường hợp lập trình trong Arduino Ngoài ra, chúng ta cũng có thể tìm xe bằng cách nhấn nút bấm.
Khi muốn xác định vị trí xe trong bãi, bạn chỉ cần nhấn nút FIND Giữ nút này để đèn xe sáng, và khi thả ra, đèn sẽ tắt.
Hình 5.9 khối code thiết lập Tìm xe bằng nút bấm
Với text A,B là các trường hợp lập trình trong arduino.Và khối lệnh để truyền dữ liệu vẫn là call BluetoothClient
Nếu bạn không muốn sử dụng SendText thì hãy lựa chọn một thuộc tính khác trong của sổ Block phía trái màn hình Designer
Hình 5.10 khối lệnh call bluetooth
Nhƣng với tính năng tìm xe thì chúng ta nên gửi một text chiếm một byte bộ nhớ để chương trình nhẹ hơn và có phản hồi nhanh hơn
Thiết lập màn hình hiển thị thống số xe
5.2.1.1 Designer hiển thị thông số
Mục đích của Screen2 là hiển thị chính xác tình trạng xe, bao gồm tốc độ xe, tốc độ động cơ và công suất điện tiêu thụ Nó tích hợp các nút điều khiển hệ thống đèn chiếu sáng và đèn tín hiệu, tất cả đều được điều khiển và truyền dữ liệu qua kết nối không dây Bluetooth.
To create motion in MIT App Inventor 2, it is essential to use image files in formats such as JPG, PNG, or JPEG These image files can be uploaded to the screen, utilizing various components to enhance the visual experience.
Tạo nền chuyển động, xác định vị trí hình ảnh bằng hệ tọa độ XY
Sprite này cho phép hình ảnh chạy trên nền của Canvas hỗ trợ định dạng PNG .JPEG
Khi tải lên Canvas và ImageSprite, việc chú ý đến thuộc tính Properties là rất quan trọng Đặc biệt, đối với thuộc tính Speed của Canvas, chúng ta cần tập trung vào các thuộc tính liên quan để tối ưu hóa hiệu suất.
Góc của hình ảnh, mặc định là 0 và hình ảnh quay lên trên
Kích thước của hình ảnh
Khoảng thời gian giữa 2 lần chuyển động đơn vị ms
Vị trị của ảnh trong hệ tọa độ Oxyz
5.2.1.2 Designer button điều khiển đèn
Việc thay thế bảng taplo cho xe điện đã dẫn đến việc tích hợp tính năng điều khiển đèn vào ứng dụng, mặc dù điều này có thể gây ra một số bất tiện trong quá trình sử dụng Tuy nhiên, nó vẫn cho phép người dùng điều khiển và vận hành chiếc xe một cách hiệu quả Dù hiện tại còn một số hạn chế trong việc điều khiển, nhưng với sự phát triển công nghệ trong tương lai, khả năng sử dụng công tắc truyền thống sẽ giảm dần và có thể biến mất hoàn toàn.
Hình 5.10 Màn hình hiển thị tốc độ động cơ và tích hợp tính năng điều khiển đèn
Các công tắc quen thuộc đã được thiết kế lại để dễ dàng hơn trong việc điều khiển, vẫn giữ nguyên đầy đủ chức năng nhưng với kích thước nhỏ gọn và tiện lợi hơn so với các công tắc truyền thống.
5.2.2.1 Thiết lập điều khiển hiển thị thông số
Khi kết nối Bluetooth được thiết lập, Arduino sử dụng module HC05 để truyền dữ liệu số đến thiết bị Android Dữ liệu này cần được xử lý để điều khiển kim đồng hồ, giúp tài xế dễ dàng quan sát hơn so với việc hiển thị số Dưới đây là khối lệnh cơ bản để xoay thuộc tính heading của imageSprite.
Hình 5.11 khối code thiết lập điều khiển hiển thị thông số
Khi tín hiệu Bluetooth được kết nối, Arduino sẽ gửi dữ liệu đến Android Dữ liệu này sau đó được phân tách thành ba thành phần khác nhau.
Tốc độ động cơ cân bằng
Chúng ta lưu trữ các giá trị đã cắt vào một danh sách gọi là data, theo một thứ tự nhất định Các góc quay sẽ được tính toán dựa trên thiết kế của mặt đồng hồ và hệ số nhân.
Khối code sẽ xoay các imageSprite theo độ, cần nhân với hệ số âm do quy định chiều dương là chiều ngược kim đồng hồ.
5.2.2.2 Thiết lập điều khiển đèn Đây là khối code điều khiển đèn cơ bản, gần tương tự với khối lệnh tìm xe
Hình 5.12 khối code thiết lập điều khiển hiển điều khiển đèn cơ bản
Khi nhận tín hiệu Bluetooth với các giá trị “1” hoặc “2”, đèn báo rẽ sẽ được kích hoạt, trong khi giá trị “4” sẽ khiến Arduino tắt đèn Các giá trị này đại diện cho các trường hợp được lập trình sẵn trong Arduino, và để thực hiện các chức năng này, người dùng cần nhấn nút.
Hình 5.13 khối code thiết lập điều kiện để hoạt động là click vào button
Khối mã điều khiển đèn chiếu sáng sử dụng các chức năng của nút như click, longclick, TouchDown và Touchup Việc phát triển các ứng dụng này có thể thay thế cụm công tắc bên dưới tay lái xe ô tô, giúp giảm chi phí lắp đặt và sửa chữa.
Thiết lập màn hình điều khiển và hiển thị công suất tiêu thụ
Màn hình thứ ba được thiết kế đặc biệt cho việc điều khiển, với các nút bấm lớn hơn và dữ liệu xe hiển thị dưới dạng số nhỏ gọn Đây là lựa chọn lý tưởng cho tài xế khi cần quản lý nhiều chức năng một cách hiệu quả.
Trog màn hình này chúng ta hiển thị các thông số nhƣ điện áp, nhiệt độ, công suất tiêu thụ và quãng đường xe chạy
Hình 5.14 Màn hình hiển thị creen 3
Với màn hình này chúng ta chỉ cần sử dụng
Với hệ điều hành Android mạnh mẽ, việc điều khiển và hiển thị trạng thái hoạt động trở nên đơn giản Trong MIT App Inventor, để phân tích một gói dữ liệu thành các phần tử khác nhau, chúng ta sử dụng công cụ split trong khối code list Để hiển thị các thông số dưới dạng số liệu trên các TextBox, cần thay đổi thuộc tính text của chúng theo thông số gửi từ Arduino.
Hình 5.15 khối code thiết lập truyền dữ liệu số từ arduino đến android
KẾT QUẢ NGHIÊN CỨU VÀ ỨNG DỤNG TRÊN XE CÂN BẰNG
Thiết kế phần cứng cho hệ thống thông tin
Phương thức truyền dữ liệu qua Bluetooth cho phép điện thoại smartphone Android hoạt động như một smartkey, giúp người dùng điều khiển, tìm xe trong bãi và khóa xe khi cần thiết Dưới đây là sơ đồ nguyên lý cơ bản của hệ thống truyền và nhận thông tin.
Hình 6.1:Sơ đồ nguyên lý hệ thống quản lý thông tin và điều khiển
Hình 6.2:Sơ đồ mạch điện thực tế
Sơ đồ đi dây các cảm biến công tác và relay điều khiển
kết quả hiển thị
Hình 6.4 Kết quả hiển thị khi xe hoạt động theo dạng đồng hồ kim
Hình 6.5 Hiển thị kết quả theo đồng hồ số
Hình 6.6 Kết quả điều khiển đèn chiếu sang
Mạch đƣợc tích hợp và bố trí một cách gọn gàng, và đƣợc gắn ngay phần điều khiển của xe cân bằng
Code lập trình tham khảo
[code] int tempPin = A4; int lightPin = A0; int voltPin = A3; int ampePin = A2; int Rbutton = 4; int Lbutton = 5; int Flbutton = 6; int Hbutton = 7; char start;
#define PIN_DO_3 3 volatile unsigned int pulses; volatile unsigned int pulses_1; unsigned int rpm; unsigned int rpm_1; unsigned int rpm2; unsigned int vantoc; unsigned long timeOld;
#define HOLES_DISC_1 2 void counter1()
Serial.begin(9600); pinMode(Hbutton, INPUT);
In this code snippet, the pin modes for various buttons and LEDs are configured, with the right, left, and front buttons set as inputs and the headlights and directional LEDs as outputs The digital pins 9, 10, and 11 are activated to a HIGH state, while pins PIN_DO_2 and PIN_DO_3 are set to INPUT_PULLUP mode Two variables, pulses and pulses_1, are initialized to zero, and an interrupt is attached to each of the input pins to count falling edges, triggering the counter functions counter1 and counter2 respectively.
// tính nhiệt độ động cơ float reading = analogRead(tempPin); float volt_temp = reading * 5.0 / 1024.0; unsigned int temp = volt_temp * 100.0;
// cdas int cdas = analogRead(lightPin);
// tính điện áp accu int sensorValue = analogRead(voltPin); float voltage = 11*sensorValue * (5.0 / 1024.0);
// dong dien int RawValue = analogRead(ampePin); float VoltageA2 = (RawValue / 1024.0) * 5000; // Gets you mV float Amps = ((VoltageA2 - 2500) / 100); if (millis() - timeOld >= 1000)
{ detachInterrupt(digitalPinToInterrupt(PIN_DO_2)); detachInterrupt(digitalPinToInterrupt(PIN_DO_3)); rpm = (pulses * 60) / (HOLES_DISC);
67 rpm2 = rpm /100; // chia 10 100 1000 de hien thi len dong do rpm_1 = (pulses_1 * 60) / (HOLES_DISC_1); timeOld = millis(); pulses = 0; pulses_1=0; attachInterrupt(digitalPinToInterrupt(PIN_DO_2), counter1, FALLING); attachInterrupt(digitalPinToInterrupt(PIN_DO_3), counter2, FALLING);
//CODE ĐIỀU KHIỂN ĐÈN if(Serial.available() > 0){ start = Serial.read();
} int RStatus = digitalRead(Rbutton); if ((RStatus == HIGH) ) { digitalWrite(10,LOW); delay(400); digitalWrite(10,HIGH); delay(400);
} int LStatus = digitalRead(Lbutton); if ((LStatus == HIGH)) { digitalWrite(11,LOW);
} int HStatus = digitalRead(Hbutton); int FlStatus = digitalRead(Flbutton); if ((HStatus == HIGH)||(FlStatus == HIGH)) { digitalWrite(9,LOW);
} else { // ngƣợc lại digitalWrite(9,HIGH);
In the provided code snippet, various cases are defined for controlling vehicle lights using digitalWrite commands When 'A' is received, the system activates a search light by setting pins 11 and 10 to HIGH for 400 milliseconds before turning them off The case for '9' turns off the turn signal lights For '3', the headlight is turned off, while case '5' also deactivates the headlight In case '6', both lights are turned off momentarily, then reactivated with a delay of 400 milliseconds This structured approach allows for efficient management of vehicle lighting systems.
The code snippet demonstrates the control of turn signal lights in a digital circuit When case '1' is triggered, the left turn signal activates for 400 milliseconds before turning off In case '2', the right turn signal follows the same pattern Case '4' is designed to turn off both turn signals Additionally, case 'D' manages the headlights based on the distance sensor reading; if the distance is greater than 150, the headlights turn off, while they turn on if the distance is less than 150.