Khoa Điện Lớp ĐHTĐHCK08A Khoa Điện Lớp ĐHTĐHCK08A MỤC LỤC Trang MỤC LỤC DANH MỤC HÌNH 1LỜI NÓI ĐẦU 2Chương 1 TỔNG QUAN VỀ ARDUINO 21 1 Giới thiệu về Arduino 21 2 Các ứng dụng nổi bật của Arduino 41 3 Khả năng của bo mạch Arduino 41 3 1 Sức mạnh xử lý 41 3 2 Đọc tín hiệu cảm biến ngõ vào 51 3 3 Xuất tín hiệu điều khiển ngõ ra 51 3 4 Chuẩn Giao tiếp 61 4 Môi trường lập trình của bo mạch Arduino 71 5 Các loại bo mạch Arduino 8Chương 2 GIỚI THIỆU ARDUINO UNO VÀ CÁC PHẦN MỀM 82 1 Arduino Uno 82 1 1 S.
Trang 1MỤC LỤC
Trang
MỤC LỤC
DANH MỤC HÌNH
LỜI NÓI ĐẦU 1
Chương 1 TỔNG QUAN VỀ ARDUINO 2
1.1 Giới thiệu về Arduino 2
1.2 Các ứng dụng nổi bật của Arduino 2
1.3 Khả năng của bo mạch Arduino 4
1.3.1 Sức mạnh xử lý 4
1.3.2 Đọc tín hiệu cảm biến ngõ vào 4
1.3.3 Xuất tín hiệu điều khiển ngõ ra 5
1.3.4 Chuẩn Giao tiếp 5
1.4 Môi trường lập trình của bo mạch Arduino 6
1.5 Các loại bo mạch Arduino 7
Chương 2 GIỚI THIỆU ARDUINO UNO VÀ CÁC PHẦN MỀM 8
2.1 Arduino Uno 8
2.1.1 Sơ đồ chân 8
2.1.2 Chip Atmega 328 9
2.2 Giới thiệu chung về các phần mềm 12
2.2.1 Phần mềm Arduino IDE 12
2.2.2 Phần mềm mô phỏng Proteus 17
2.2.3 Các lệnh dùng trong lập trình và chức năng 18
Chương 3 GIAO TIẾP ARDUINO VỚI CÁC THIẾT BỊ NGOẠI VI 20
3.1 Giao tiếp với led đơn 20
3.2 Giao tiếp với phím nhấn 23
3.3 Giao tiếp với động cơ ( PWM) 25
3.4 Giao tiếp với LCD 12x2 27
Chương 4 ARDUINO VỚI ĐIỀU KHIỂN KHÔNG DÂY DÙNG SÓNG BLUETOOTH CHO THIẾT BỊ ĐIỆN TRONG NHÀ 36
4.1 Đặt vấn đề 36
4.2 Module Bluetooth HC05 37
4.2.1 Đặc điểm kỹ thuật 37
4.2.2 Nguyên lý hoạt động 38
Trang 24.3 Phần mềm Ardudroid 39
4.3.1 Chương trình con điều khiển đóng ngắt thiết bị 42
4.3.2 Chương trình con điều chỉnh độ sáng đèn 43
4.4 Tính toán, thiết kế và mô hình thực tế 49
4.4.1 Mạch điều khiển 49
4.4.2 Mạch thu phát sóng bluetooth 49
4.4.3 Mạch lực 50
4.4.4 Code chương trình 51
4.4.5 Hoàn thiện và lắp đặt mô hình thực tế 55
4.5 Đánh giá sản phẩm 56
4.5.1 Ưu điểm 56
4.5.2 Nhược điểm 56
4.6 Hướng phát triển 56
KẾT LUẬN 58
Trang 3DANH MỤC HÌNH
Hình 1.1: Ứng dụng nổi bật của Arduino 3
Hình 1.2: Arduino điều chỉnh độ sáng 3
Hình 1.3: Giao diện IDE của Arduino 6
Hình 2.1:Sơ đồ chân của Arduino 8
Hình 2.2: Cửa sổ chính làm việc của Arduino 12
Hình 4.1: Hình ảnh về Module Bluetooth HC 05 37
Hình 4.2: Cửa sổ phần mềm điều khiển trên Smartphone 39
Hình 4.3: Lưu đồ chương trình ON/OFF của thiết bị 42
Hình 4.4: Lưu đồ chương trình con điều chỉnh độ sáng đèn 43
Hình 4.5: Sơ đồ khối tổng quát 44
Hình 4.6: Sơ đồ khối khối xử lý và điều khiển độ sáng đèn 44
Hình 4.7: Dạng sóng ngõ ra khi điều khiển góc mở Triac 45
Hình 4.8: Sơ đồ khối mạch điều khiển độ sáng đèn 45
Hình 4.9: Sơ đồ mạch tìm điểm 0 46
Hình 4.10: Dạng sóng tín hiệu sau khi qua cầu diode 47
Hình 4.11: Sơ đồ mạch điều khiển góc mở Triac 47
Hình 4.12: Các chân của BTA16 48
Hình 4.13: Hình ảnh thực mô tả ghép nối 50
Hình 4.14: Hình ảnh trên proteus 50
Trang 4LỜI NÓI ĐẦU
Ngày nay khoa học công nghệ ngày càng phát triển, vi điều khiển AVR
và vi điều khiển PIC ngày càng thông dụng và hoàn thiện hơn, nhưng có thể nói
sự xuất hiện của Arduino vào năm 2005 tại Italia đã mở ra một hướng đi mớicho vi điều khiển Sự xuất hiện của Arduino đã hỗ trợ cho con người rất nhiềutrong lập trình và thiết kế, nhất là đối với những người bắt đầu tìm tòi về vi điềukhiển mà không có quá nhiều kiến thức, hiểu biết sâu sắc về vật lý và điện tử.Phần cứng của thiết bị đã được tích hợp nhiều chức năng cơ bản và là mã nguồn
mở Ngôn ngữ lập trình trên nền Java lại vô cùng dễ sử dụng tương thích vớingôn ngữ C và hệ thư viện rất phong phú và được chia sẻ miễn phí Chính vìnhững lý do như vậy nên Arduino hiện đang dần phổ biến và được phát triểnngàycàng mạnh mẽ trên toàn thế giới
Trên cơ sở những kiến thức đã được học trong 4 năm tại trường Đại họcSPKT Vinh cùng với sự đam mê tìm hiểu về các thiết bị điện tử, bản thân quyết
định thực hiện đề tài“ Ứng dụng Board Arduino Atmel 328 kết hợp Module Bletooth HC 05 thiết kế mô hình điều khiển không dây thiết bị điện trong nhà”với mục đích để tìm hiểu thêm về Arduino, làm quen với các thiết bị điện
tử và nâng cao hiểu biết cho bản thân Do kiến thức còn hạn hẹp và chưa đượcthực tế nhiều nên đồ án chắc chắn không tránh khỏi những thiếu sót, hạn chế vìthế chúng em rất mong có được sự góp ý từ các thầy, cô giáo để có thể hoànthiện đề tài của mình
Em xin chân thành cảm ơn thầy giáo TS Lương Thanh Bình đã giúp
đỡ em rất nhiều trong quá trình tìm hiểu, thiết kế và hoàn thành đề tài này
Tp, Vinh, ngày… tháng 4 năm 2017
Sinh viên thực hiện
Trang 5Chương 1 TỔNG QUAN VỀ ARDUINO 1.1 Giới thiệu về Arduino
Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY (là nhữngngười tự chế ra sản phẩm của mình) trên toàn thế giới trong vài năm gần đây, gầngiống với những gì Apple đã làm được trên thị trường thiết bị di động Số lượngngười dùng cực lớn và đa dạng với trình độ trải rộng từ bậc phổ thông lên đến đạihọc đã làm cho ngay cả những người tạo ra chúng phải ngạc nhiên về mức độ phổbiến
Arduino là gì mà có thể khiến ngay cả những sinhviên và nhà nghiên cứu tạicác trường đại học danh tiếng như MIT, Stanford, CarnegieMellon phải sử dụng;hoặc ngay cả Google cũng muốn hỗ trợ khi cho ra đời bộ kit Arduino MegaADKdùng để phát triển các ứng dụng Android tương tác với cảm biến và các thiết bịkhác
Arduino thật ra là một bo mạch vi xử lý được dùng để lập trình tương tác vớicác thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác Đặc điểmnổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ dễ sử dụng, với mộtngôn ngữ lập trình có thể học một cách nhanh chóng ngay cả với người ít am hiểu
về điện tử và lập trình Và điều làm nên hiện tượng Arduino chính là mức giá rấtthấp và tính chất nguồn mở từ phần cứng tới phần mềm Chỉ với khoảng $20,người dùng đã có thể sở hữu một boardArduino có 20 ngõ I/O có thể tương tácvàđiều khiển chừng ấy thiết bị
Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vuavào thế kỷ thứ 9 là KingArduin.Arduino chính thức được đưa ra giới thiệu vào năm
2005 như là một công cụ khiêm tốn dành cho các sinh viên của giáo sưMassimoBanzi, là một trong những người phát triển Arduino, tại trường InteractionDesign InstistuteIvrea (IDII) Mặc dù hầu như không được tiếp thị gì cả, tin tức vềArduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền miệng tốt đẹpcủa những người dùng đầu tiên Hiện nay Arduino nổi tiếng tới nỗi có người tìmđến thị trấn Ivrea chỉ để tham quan nơi đã sản sinh ra Arduino
1.2 Các ứng dụng nổi bật của Arduino
Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn giản đến phứctạp Trong số đó có một vài ứng dụng thực sự chứng tỏ khả năng vượt trội củaArduino do chúng có khả năng thực hiện nhiều nhiệm vụ rất phức tạp Cụ thể như sau:
Trang 6- Sử dụng trong máy in 3D - Chế tạo Robot
- Thiết bị bay không người lái
Hình 1.1: Ứng dụng nổi bật của Arduino
UAV là một ứng dụng đặc biệt thích hợp với Arduino do chúng có khả năng
xử lý nhiều loại cảm biến như Gyro, accelerometer, GPS…; điều khiển động cơservo và cả khả năng truyền tín hiệu từ xa
- Điều khiển ánh sáng
Trang 7Các tác vụ điều khiển đơn giản như đóng ngắt đèn LED hay phức tạp nhưđiều khiển ánh sáng theo nhạc hoặc tương tác với ánh sáng laser đều có thể thựchiện với Arduino
- Kích hoạt chụp ảnh tốc độ cao
Đây là một ứng dụng rất đơn giản nhưng đặc biệt hữu ích với những ai đam
mê chụp ảnh Ứng dụng này giúp tạo ra những bức ảnh độc đáo ghi lại nhữngkhoảnh khắc xảy ra cực nhanh mà nếu không có dụng cụ hỗ trợ chúng ta khólòng ghi lại
1.3 Khả năng của bo mạch Arduino
Bo mạch Arduino sử dụng dòng vi xử lý 8-bit megaAVR của Atmel vớihai chip phổ biến nhất là ATmega328 và ATmega2560 Các dòng vi xử lý nàycho phép lập trình các ứng dụng điều khiển phức tạp do được trang bị cấu hìnhmạnh với các loại bộ nhớ ROM, RAM và Flash, các ngõ vào ra digital I/O trong
đó có nhiều ngõ có khả năng xuất tín hiệu PWM, các ngõ đọc tín hiệu analog vàcác chuẩn giao tiếp đa dạng như UART, SPI, TWI (I2C)
1.3.1 Sức mạnh xử lý
+ Xung nhịp: 16MHz + EEPROM: 1KB (ATmega328) và 4KB
(ATmega2560)+ SRAM: 2KB (Atmega328) và
8KB (Atmega2560)
+ Flash: 32KB (Atmega328) và 256KB (Atmega2560)
+ Xung nhịp: 16MHz + EEPROM: 1KB (ATmega328) và 4KB
(ATmega2560)+ SRAM: 2KB (Atmega328) và
8KB (Atmega2560)
+ Flash: 32KB (Atmega328) và 256KB (Atmega2560)
1.3.2 Đọc tín hiệu cảm biến ngõ vào
Digital: Các bo mạch Arduino đều có các cổng digital có thể cấu hình làm ngõ
vào hoặc ngõ ra bằng phần mềm Do đó người dùng có thể linh hoạt quyết định
số lượng ngõ vào và ngõ ra
Tổng số lượng cổng digital trên các mạch dùng Atmega328 là 14, và trênAtmega2560 là 54
Trang 8Analog: Các bo mạch Arduino đều có trang bị các ngõ vào analog với độ phân
giải 10-bit (1024 phân mức, ví dụ với điện áp chuẩn là 5V thì độ phân giảikhoảng 0.5mV) Số lượng cổng vào analog là 6 đối với Atmega328, và 16 đốivới Atmega2560.Với tính năng đọc analog, người dùng có thể đọc nhiều loạicảm biến như nhiệt độ, áp suất, độ ẩm, ánh sáng, gyro, accelerometer…
1.3.3 Xuất tín hiệu điều khiển ngõ ra
Digital output : Tương tự như các cổng vào digital, người dùng có thể cấu hình
trên phần mềm để quyết định dùng ngõ digital nào là ngõ ra.Tổng số lượng cổngdigital trên các mạch dùng Atmega328 là 14, và trên Atmega2560 là 54
PWM output: Trong số các cổng digital, người dùng có thể chọn một số cổng
dùng để xuất tín hiệu điều chế xung PWM Độ phân giải của các tín hiệu PWM này
là 8-bit
Số lượng cổng PWM đối với các bo dùng Atmega328 là 6, và đối với các
bo dùng Atmega2560 là 14.PWM có nhiều ứng dụng trong viễn thông, xử lý âmthanh hoặc điều khiển động cơ mà phổ biến nhất là động cơ servos trong cácmáy bay mô hình
1.3.4 Chuẩn Giao tiếp
Serial: Đây là chuẩn giao tiếp nối tiếp được dùng rất phổ biến trên các bo mạch
Arduino Mỗi bo có trang bị một số cổng Serial cứng (việc giao tiếp do phầncứng trong chip thực hiện) Bên cạnh đó, tất cả các cổng digital còn lại đều cóthể thực hiện giao tiếp nối tiếp bằng phần mềm (có thư viện chuẩn, người dùngkhông cần phải viết code) Mức tín hiệu của các cổng này là TTL 5V Lưu ýcổng nối tiếp RS-232 trên các thiết bị hoặc PC có mức tín hiệu là UART 12V
Để giao tiếp được giữa hai mức tín hiệu, cần phải có bộ chuyển mức, ví dụ nhưchip MAX232 Số lượng cổng Serial cứng của Atmega328 là 1 và của Atmega
2560 là 4 Với tính năng giao tiếp nối tiếp, các bo Arduino có thể giao tiếp đượcvới rất nhiều thiết bị như PC, touchscreen, các game console…
Trang 9SPI: Đây là một chuẩn giao tiếp nối tiếp đồng bộ có bus gồm có 4 dây Với tính
năng này các bo Arduino có thể kết nối với các thiết bị như LCD, bộ điều khiểnvideo game, bộ điều khiển cảm biến các loại, đọc thẻ nhớ SD và MMC…
TWI (I2C): Đây là một chuẩn giao tiếp đồng bộ khác nhưng bus chỉ có hai dây.
Với tính năng này, các bo Arduino có thể giao tiếp với một số loại cảm biến nhưthermostat của CPU, tốc độ quạt, một số màn hình OLED/LCD, đọc real-timeclock, chỉnh âm lượng cho một số loại loa…
1.4 Môi trường lập trình của bo mạch Arduino
Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính năng thông dụng mang lạinhiều lợi thế cho Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở phầnmềm Môi trường lập trình đơn giản dễ sử dụng, ngôn ngữ lập trình Wiring dễhiểu và dựa trên nền tảng C/C++ rất quen thuộc với người làm kỹ thuật Và quantrọng là số lượng thư viện code được viết sẵn và chia sẻ bởi cộng đồng nguồn
mở là cực kỳ lớn
Môi trường lập trình Arduino IDE có thể chạy trên ba nền tảng phổ biếnnhất hiện nay là Windows, Macintosh OSX và Linux Do có tính chất nguồn mởnên môi trường lập trình này hoàn toàn miễn phí và có thể mở rộng thêm bởingười dùng có kinh nghiệm
Hình 1.3: Giao diện IDE của Arduino
Ngôn ngữ lập trình có thể được mở rộng thông qua các thư viện C++ Và
do ngôn ngữ lập trình này dựa trên nền tảng ngôn ngữ C của AVR nên ngườidùng hoàn toàn có thể nhúng thêm code viết bằng AVR C vào chương trình nếumuốn
Trang 101.5 Các loại bo mạch Arduino
Về mặt chức năng, các bo mạch Arduino được chia thành hai loại: loại bomạch chính có chip Atmega và loại mở rộng thêm chức năng cho bo mạch chính(thường được gọi là shield)
Các bo mạch chính về cơ bản là giống nhau về chức năng, tuy nhiên vềmặt cấu hình như số lượng I/O, dung lượng bộ nhớ, hay kích thước có sự khácnhau Một số bo có trang bị thêm các tính năng kết nối như Ethernet vàBluetooth
Các bo mở rộng chủ yếu mở rộng thêm một số tính năng cho bo mạchchính ví dụ như tính năng kết nối Ethernet, Wireless, điều khiển động cơ v.v…
Arduino Diecimila in Stoicheia Arduino Duemilanove (rev 2009b)
Trang 11Chương 2 GIỚI THIỆU ARDUINO UNO VÀ CÁC PHẦN MỀM
Điện áp đầu vào (input) (kiến nghị) 7-12V
Điện áp đầu vào (giớihạn) 6-20V
Số chân Digital I/O 14(có 6 chân điều chế độ rộng xung PWM)
Trang 12Bo mạch hoạt động với nguồn ngoài ở điện áp từ5–20volt Chúng ta cóthể cấp một áp lớn hơn tuy nhiên chân 5V sẽ có mực điện áp lớn hơn 5 volt Vànếu sử dụng nguồn lớn hơn 12volt thì sẽ có hiện tượng nóng và làm hỏng bomạch Khuyết cáo các bạn nên dùng nguồn ổn định là 5 đến dưới 12 volt.
- Chân 5V và chân 3.3V(Outputvoltage): Các chân này dùng để lấy nguồn
ra từ nguồn mà chúng ta đã cung cấp cho Arduino Lưu ý : Không được cấpnguồn vào các chân này vì sẽ làm hỏng Arduino
- GND: Chân mass
2.1.2 Chip Atmega 328
Trang 13độ lợi lập trình được, bộ WatchDog Timer khả trình với dao động nội, port SPInối tiếp, hệ thống ngắt để tiếp tục hàm ATmega32 có các chế độ tiết kiệm nănglượng như sau đồng bộ USART, giao tiếp 2 dây, chuyển đổi A/D, SRAM, bộđếm bộ định thời, cổng SPI và hệ thống các ngắt vẫn hoạt động Chế độ Power-down lưu giữ nội dung của các thanh ghi
+ Port A gồm 8 chân từ PA0 đến PA7: là cổng vào tương tự cho chuyểnđổi tương tự sang số Nó cũng là cổng vào/ra hai hướng 8 bít trong trường hợpkhông sử sụng làm cổng chuyển đổi tương tự, có điện trở nối lên nguồn dươngbên trong Port A cung cấp đường địa chỉ dữ liệu vao/ra theo kiểu hợp kênh khidùng bộ nhớ bên ngoài At mega32 gồm có 4 port : port A, port B, port C vàport D Nhân AVR kết hợp tập lệnh đầy đủ với 32 thanh ghi đa năng Tất cả cácthanh ghi liên kết trực tiếp với khối xử lý số học và logic (ALU) cho phép 2thanh ghi độc lập được truy cập trong một lệnh đơn trong 1 chu kỳ đồng hồ Kếtquả là tốc độ nhanh gấp 10 lần các bộ vi điều khiển CISC thường Atmega32 là
vi điều khiển thuộc họ AVR của hãng Atmel,có 40 chân trong đó có 32 chânI/O, có 4 kênh điều xung PWM, sử dụng thạch anh ngoài 8MHz
+ Port B gồm 8 chân từ PB0 đến PB7: là cổng vào/ra hai hướng 8 bít,cóđiện trở nối lên nguồn dương bên trong Port B cung cấp các chức năng ứng vớicác tính năng đặc biệt của Atmega32 như:
- Gần như chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi sửdụng AVR, thậm chí không cần nguồn tạo xung clock cho chip (thường là cáckhối thạch anh)
- Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạpchỉ cần vài điện trở là có thể làm được một số AVR còn hỗ trợ lập trình on –chip bằng bootloader không cần mạch nạp…
- Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C.+ Port C gồm các chân từ PC0 đến PC7: là cổng vào/ra hai hướng 8 bit,cóđiện trở nối lên nguồn dương bên trong, Port C cung cấp các địa chỉ lối ra khi sửdụng bộ nhớ bên ngoài
+ Port D gồm các chân từ PD0 đến PD7:là cổng vào/ra hai hướng 8 bít,cóđiện trở nối lên nguồn dương bên trong Khi đầu vào Port D bị điện áp bên ngoàikéo xuống thấp sẽ hiện ngay mã nguồn, nếu được các điện trở kéo lên thì nó sẽ
Trang 14kích hoạt trở lại và nó là 3 chân trạng thái khi một điều kiên thiết lập nó sẽ hoạtđộng.
+ Chân Reset/PC6 (chân số 9): được sử dụng như một I/O dùng để thiếtlập lại đầu vào Chân Reset nó cần một độ dài xung tối thiểu để hoạt động nếudưới mức tối thiểu nó sẽ không có chức năng gì cả
+ Chân nguồn Vcc (chân số 10 và chân số 30): cung cấp điện áp cho cácchân và vi điều khiển
+ Chân GND (chân số 11 và chân 31): chân nối mass
+ Chân XTAL1,XTAL2 là hai chân nối thạch anh ngoài (chân số 12 vàchân số 13) Atmega32 sử dụng thạch anh ngoài là 8MHz
+ Chân INT1(chân số 17): chân ngõ vào ngắt
+ Chân OC1B(chân số 18): là chân ra cho chức năng so sánh lối ra bộđịnh thời/đếm
+ Chân ICP (chân số 20): là chân vào cho chức năng bắt tín hiệu cho bộđịnh thời/đếm
- Input và Output (4,5và 6)
- ArduinoUno có 14 chân digital với chức năng input và output sử dụng
các hàm pinMode(), digitalWrite() và digitalRead() để điều khiển các chân này
Trang 152.2 Giới thiệu chung về các phần mềm
2.2.1 Phần mềm Arduino IDE
2.2.1.1 Cài đặt chương trìnhArduino IDE
Trước tiên chúng ta truy cập vào trang web http://arduino.cc/en/Main/Software
và tải về chương trình ArduinoIDE phù hợp với hệ điều hành của máy mình baogồm Windown, MacOS hay Linux Đối với Windown có bản cài đặt (.exe) vàbản Zip, đối với Zip thì chỉ cần giải nén và chạy chương trình không cần cài đặt.Sau khi cài đặt xong thì giao diện chương trình như sau:
Hình 2.2: Cửa sổ chính làm việc của Arduino 2.2.1.2 Cài đặt Driver
Sử dụng cáp USB kết nối Arduino với máy tính, lúc này bạn sẽ thấy đènledpower của bo sáng Máy tính sẽ nhận dạng thiết bị và bạn sẽ nhận được thông
báo:“Devicedriversoftware wasnotsuccessfullyinstalled”
Chúng ta sẽ click vào StartMenu chọn ControlPanel kế đến chúng ta chọn System andSecurity, click System và sau đó chọn Device Manager.
Trang 16Chúng ta sẽ thấy cảnh báo màu vàng thiếu driver trên Arduino Clickchuột phải trên ArduinoUnoi còn sau đó chọn “Update Driver Software”
Chọn “Browse mycomputer fordriver software”
Chọn đường dẫn tới folder “driver” nơi mà phần mềm Arduino được lưutrữ
Trang 17Click“Next” Windown tự động cài đặt driver, quá trình cài đặt driverhoàn tất.
2.2.1.3 Arduino IDE
ArduinoIDE là nơi để soạn thảo code, kiểm tra lỗi và uploadcode cho arduino
a)ArduinoToolbar: có một số button và chức năng của chúng như sau:
+ Verify: kiểm tra code có lỗi hay không
+ Upload: nạp code đang soạn thảo vào Arduino
+ New, Open,Save: Tạo mới, mở và Savesketch
SerialMonitor: Đây là màn hình hiển thị dữ liệu từ Arduino gửi lên máy tính
b)ArduinoIDE Menu:
File menu:
Trong file menu chúng ta quan tâm tới mục Examples đây là nơi chứacode mẫu ví dụ như: cách sử dụng các chândigital, analog, sensor …
Trang 18Sketchmenu
Trang 19Trong Sketchmenu:
Verify/Compile: chức năng kiểm tra lỗi code
ShowSketchFolder: hiển thị nơi code được lưu
AddFile: thêm vào một Tapcode mới
ImportLibrary: thêm thư viện cho IDE
Toolmemu:
Trong Tool menu ta quan tâm các mục Board và SerialPort
Mục Board: Ta cần phải lựa chọn bo mạch cho phù hợp với loại bo màmình sử dụng nếu là ArduinoUno thì phải chọn như hình:
Nếu các chúng ta sử dụng loại bo khác thì phải chọn đúng loại bo màmình đang có nếu sai thì code Upload vào chip sẽ bị lỗi
SerialPort: đây là nơi lựa chọn cổng Com củaArduino Khi chúng ta càiđặt driver thì máy tính sẽ hiện thông báo tên cổng Com củaArduino là baonhiêu, ta chỉ việc vào SerialPort chọn đúng cổng Com để nạp code, nếu chọn saithì không thể nạp code cho Arduino được
Trang 202.2.2 Phần mềm mô phỏng Proteus
Để mô phỏng được Arduino trên proteus thì chúng ta cần phải downloadthư viện arduino cho proteus Để có được thư viên này các ta cần truy cập vàotrang web:h t t p: / / b lo g e m b arcad o blog s p o t c o m /s earch/ l a b e l / P r o t e u s
Sau khi download về các ta chép 2 file ARDUINO.IDXvàARDUINO.LIBvào thư mục:
Proteus7:C:\ProgramFiles(hoặcx86)\Labcenter Electronics\Proteus7Professional\ LIBRARY
Proteus8:C:\Program Files (hoặc x86)\Labcenter
Electronics\Proteus8 professional\ Data \ LIBRARY
Trong thư viện này hổ trợ 5loại board Arduino khác nhau trong đó gồm
có ArduinoUno, MEGA, NANO, LILYPAD và UNO SMD và một cảm biếnsiêu âm Untrasonic
Sau khi chép xong chúng ta khởi động Proteus lên vào thư viện linh kiệnbằng cách bấm phím P và gõ từ khoá là ARDUINO chúng sẽ hiện ra danh sáchcác board hiện có ở đây tôi chọn ArduinoUno
Trang 21Lưu ý chúng ta cần phải cấp nguồn vào 2 chân 5V và Gnd trên mạch nhưhình trên
* Khai báo các kiểu biến khác như: int (kiểu số nguyên), float,…
2.2.3.2 Thiết lập (void setup())
Phần này dùng để thiết lập cho chương trình, cấu trúc của nó:
Serial.begin(9600) Dùng để truyền dữ liệu từ board
Arduino lên máy tính.
pinMode(biến, kiểu vào hoặc ra);
Trang 22Một số câu lệnh, cấu trúc thường gặp:
Một số câu lệnh
// Dấu // dùng để giải thích, khi nội dung giải thích nằm trên 1 dòng, khi kiểm tra chương trình thì phần kiểm tra sẽ bỏ qua
phần này, không kiểm tra, /*
……….
*/
Ký hiệu này cũng dùng để giải thích, nhưng giải thích dành cho 1 đoạn, tức có thể xuống dòng được
#define Define nghĩa là định nghĩa, xác định Câu lệnh này nhằm gán
tên 1 biến vào 1 chân nào đó Ví dụ #define led13
digitalWrite
(chân, trạng thái);
Dùng để tắt, mở 1 chân ra Cú pháp của nó là digitalWrite (chân,trạng thái chân); Ở đây trạng thái chân có thể là HIGH hoặc LOW Ví dụ: digital (led, HIGH); hoặc digital (led, LOW); Chú ý dấu chấm phẩy đằng sau câu lệnh.
}
Trang 23Chương 3 GIAO TIẾP ARDUINO VỚI CÁC THIẾT BỊ NGOẠI VI
3.1 Giao tiếp với led đơn
digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin,LOW); delay(1000);
}->Sau khi gõ code vào chương trình soạn thảo ta click và để kiểm tralỗi
->TạoFile Hex Chúng ta cần phải có file Hex để cung cấp cho proteus và khibấm playchương trình mới hoạt động được Cách tạo file Hex trên ArduinoIDEnhư sau:
Click vào File chọn Prefere
Trang 24Ta check vào compilation và OK
Trang 25Bấm vào vị trí số1và chọn nơi lưu file hex ở trên chọn tiếp Open,
độ baud cho giao tiếp Serial
Cấu trúc của hàmpinMode() là như sau:
pinMode(pin,Mode);
pin:là vị trí chân digital.
Mode:là chế độ vào(INPUT), ra (OUTPUT) Lệnh tiếp theo.
Trang 26Lệnh này tạo một khoảng trễ với thời gian là 1giây.Trong hàm delay() của
Trang 27Phím nhấn sẽ ở vị trí chân số 2 và led chân số 13.
Ta khai báo một biến trạng thái của phím nhấn là intbuttonState = LOW;
Trong hàm setup() là khai chế độ(Mode) cho chân button và chân led Chân
button là chân ngõ vào và chân led là chân ngõ ra
pinMode(ledPin, OUTPUT);
pinMode(buttonPin,INPUT);
Trong hàm loop()ta có câu lệnh đầu tiên là :
buttonState =digitalRead(buttonPin);
Câu lệnh này có nghĩa là gán giá trị đọc được từ chân button (chân2) cho
biến buttonState buttonState sẽ có giá trị 0 nếu như button không được nhấn và
có giá trị 1 nếu được nhấn Bằng cách sử dụng hàm digitalRead() ta có thể kiểm
tra được các chân digital đang ở mức cao hay thấp
Sau khi đọc được giá trị có ở chân buttonPin(chân2) ta kiểm tra xem là
button có nhấn hay không
Nếu có tức là:
buttonState =HIGH thì lúc này ta bật led bằng lệnh digitalWrite()
if(buttonState == HIGH) {digitalWrite(ledPin, HIGH); }
Ngược lại thì ta một lần nửa sử dụng hàmdigitalWrite() để tắt led
else {
digitalWrite(ledPin,LOW);
Trang 283.3 Giao tiếp với động cơ ( PWM)
Trang 29Một câu hỏi đặt ra ở đây là nếu chúng ta không kết nối transistor điềukhiển động cơ vào chân số 9 mà thay vào đó là chân số 1 hoặc 2 để điều khiểntốc độ động cơ thì có được không?.
Câu trả lời là Không Vậy tại sao Không?
Tôi sẽ trả lời câu hỏi này sau Nhưng trước hết tôi nói về PWM.PWM(pulsewidth modulation) là phương pháp điều chế dựa trên sự thay đổi độ rộngcủa chuỗi xung dẫn đến sự thay đổi điện áp ra
Để tạo ra được PWM trên Arduino thì chúng ta sử dụng lệnh
analogWrite(Pin, Value);
Trong đó:
+ Pin: là vị trí chân, đối với ArduinoUno thì chỉ có các chân 3,5, 6, 9,10
và 11 mới có chức năng tạo PWM Vậy chúng ta có thể trả lời được câu hỏi bêntrên, các chân digital còn lại của có thể đọc hoặc xuất 2 giá trị là 0 và 1mà thôi
+ Value: Giá trị nằm trong khoảng 0 đến 255.
Để hiểu rõ hơnvề PWM tôi sẽ minh hoạ qua ví dụ sau
Nếu tôi sử dụng lệnh analogWrite(transistorPin,127); thì dạng xung ở chân9( transistorPin=9) sẽ như hình dưới và giá trị trung bình ngõ ra sẽ là 2,5V (50%).
Nếu Value =64 (hay25%) thì dạng xung như sau:
Value = 229(hay90%) thì dạng xung sẽ là
Từ ví dụ trên ta thấy sự thay đổi độ rộng của chuỗi xung dẫn đến sự thayđổi điện áp ra.Ta cũng thấy rằng điện áp trên motor cũng thay đổi tuyến tínhtheo sự thay đổi điện áp ngõ ra trên chân 9 Tức là nếu điện áp trung bình trên
Trang 30chân 9 là 2,5 volt(50%) thì điện áp trên hai đầu motor là 6 volt( nguồn motor là
Và câu lệnh cuối cùng là tạo PWM trên chân 9 để điều khiển tốc độ động cơ
analogWrite(transistorPin,potValue);
Nếu như đã điều kiển được tốc độ động cơ bằng PWM rồi thì việc điềukhiển độ sáng của Led hay đèn đối với các bạn bây giờ là chuyện quá đơn giản.Các bạn chỉ cần nối chân số 9 với một Led có điện trở hạn dòng là 220 ohmvàcode chương trình hoàn toàn giống như điều khiển động cơ Lưu ý là khi môphỏng các bạn sẽ không thấy được led thay đổi độ sáng mà chỉ thấy nhấp nháynguyên nhân là do phần mềm proteus không đáp ứng kịp sự thay đổi của cácxung PWM Nhưng khi làm thực tế các bạn sẽ thấy được sự thay đổi độ sángcủa Led rõ rệt
3.4 Giao tiếp với LCD 12x2
Giao tiếp giữa Arduino và LCD 16x2 rất đơn giản bởi vì Arduino IDE đã
có sẵn thư viện cho LCD là LiquidCrystal.h, công việc của chúng ta là hiểu vàbiết cách sử dụng thư viện này mà thôi
- Sơ đồ mạch: