Thứ Tư, 9 tháng 11, 2016

ARDUINO - Nền tảng điều khiển tự động nên khám phá

ARDUINO - Nền tảng điều khiển tự động nên khám phá


1. Arduino là gì?
Arduino: là một nền tảng mã nguồn mở được sử dụng để xây dựng các ứng dụng điện tử.  Arduino gồm có board mạch có thể lập trình được ( thường gọi là vi điều khiển ) và các phần mềm hỗ trợ phát triển tích hợp IDE (Integrated Development Environment) dùng để soạn thảo, biên dịch code và nạp chương cho board.
- Arduino ngày nay rất phổ biến cho những người mới bắt đầu tìm hiểu về điện tử vì nó đơn giản, hiệu quả và dễ tiếp cận. Không giống như các loại vi điều khiển khác, Arduino không cần phải có các công cụ chuyên biệt để phục vụ việc nạp code, ví dụ để nạp code cho PIC cần phải có Pic Kit. Đối với Arduino rất đơn giản, ta có thể kết nối với máy tính bằng cáp USB.
- Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY (là những ngườ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ần giống với những gì Apple đã làm được trên thị trường thiết bị di động. Số lượng ngườ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 đại họ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 ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vua vào thế kỷ thứ 9 là King Arduin. 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ư Massimo Banzi, là một trong những người phát triển Arduino, tại trường Interaction Design Instistute Ivrea (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 đẹp củ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.


Những người sáng lập ra nền tảng Arduino


Board mạch Arduino Uno R3
 
 
2. Môi trường lập trình board mạch Arduino
Thiết kế board mạch nhỏ gọn, trang bị nhiều tính năng thông dụng mang lại nhiều lợi thế cho Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở phần mề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à quan trọ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ến nhấ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ởi người dùng có kinh nghiệm.
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ười dù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ếu muốn.

3. Các loại Board mạch Arduino
Được phát triển trong nhiều năm nên có rất nhiều loại Board Arduino được đề xuất. Ta sẽ đi tìm hiểu các chức năng của Board này để làm sao lựa chọn cho phù hợp với yêu cầu thiết kế của bạn.Tất cả các Board được thể hiện ở các hình trên, trên mỗi Board có in tên, bạn chú ý để khỏi nhầm lẫn.
3.1. Arduino Uno
Đây là Board cơ bản nhất cho người mới bắt đầu. Giá của nó khoảng 200 nghìn, bạn có thể hỏi mua ở nhiều nơi. Bạn có thể mua online tại hshop hoặc bất kỳ đâu.Nó có 14 chân dữ liệu số, có thế cấu hình làm chân lấy tín hiệu vào hoặc xuất tín hiệu ra là tùy bạn. 6 chân tương tự đầu vào 5V, độ phân giải 1024 mức. Tốc độ 16MHz, điện áp vào từ 7~12V, chân số có thể cấp điện áp ra 5V và 1A, nếu bạn điều khiển chân số ra tiêu tốn quá 1A thì Board sẽ bị hỏng. Kích thước Board khoảng 5,5x7cm.
3.2. Arduino Micro
Board này có thiết kế nhỏ, dành cho các không gian lắp đặt nhỏ, nhẹ. kích thước khoảng 5x2cm. Board này giống với  Arduino Uno. Có 20 chân số, trong đó có 7 chân có thể phát xung PWM. 12 chân tương tự. 
3.3. Arduino Pro/Pro Micro
Nhìn chung thiết kế giúp Arduino Uno. Có 2 loại, 3.3V và 5V. Nó không được thiết kế chân sẵn nên khi sử dụng bạn có thể hàn trực tiếp nhằm tiết kiệm không gian.
3.4. Arduino Nano
Board này có kích thước nhỏ nhất. gồm 14 chân số (6 chân PWM) và 8 chân tương tự. Kích thước khoảng 2x4cm. Nhỏ gọn, dễ lắp đặt ở bất kỳ đâu.
Sau đây là các Board có thiết kế cao cấp hơn:
3.5. Arduino Mega
Có thiết kế hoạt động tương tự Arduino UNO, tuy nhiên có số lượng chân vào ra lớn với 54 chân Số (14 chân PWM), 16 chân tương tự và 4 cổng truyền nối tiếp (RS232) dễ dàng giao tiếp với các board, thiết bị khác. Kích thước 5x10cm.
3.6. Arduino Leonardo
Đây là board có thiết kế giống Arduino Micro, sự khác biệt lớn nhất giữa nó và các board khác là nó không có cổng USB dành cho việc lập trình. Mọi thứ được đặt trong 1 chip điều khiển, cho phép giao tiếp thông qua cổng COM ảo và cho phép nó giao tiếp với chuột và phím máy tính dễ dàng. Không giống như các Board khác, khi cổng nối tiếp mở thì nó sẽ không bị reset, để gỡ rối cho chương trình thì bạn cần giao tiếp qua lệnh Serial.prints() trong hàm Setup().
3.7. Arduino Due
Đây là Board có thiết kế lớn và xấu nhất trong tất cả các Board, nó hoạt động ở điện áp 3.3V.  Các chân số có mức logic ở 3,3V nên khi giao tiếp bạn cần phải nâng áp để có thể giao tiếp bình thường. Gồm 54 chân số ( 12 chân tương tự). 4 cổng nối tiếp tương tự Arduino Mega. Nó chạy bộ xử lý 32bit, 84MHz. nó xử lý nhanh hơn gấp 5 lần so với các Board arduino khác. Xử lý chương trình nhanh hơn 10 lần. Vì vậy nó đọc các chân đầu vào và đáp ứng nhanh hơn.
3.8. Arduino Ethernet 
Như tên của nó, nó là 1 Arduino giống chức năng với UNO tuy nhiên nó được tích hợp Module Ethernet trong nó. có tích hợp thẻ SD. Thật ra với board này bạn c&oa

4. Khả năng ghép nối của Arduino.
4.1. Ghép nối với các cảm biến.
- Tất cả những cảm biến ghép nối được với vi điều khiển thì cũng ghép nối được với Arduino. Các cảm biến phổ biến gồm:
        Cảm biến nước, cảm biến nhiệt đô/ độ ẩm, cảm biến hồng ngoại/ ánh sáng, cảm biến màu, cảm biến rung, cảm biến âm thanh, cảm biến siêu âm, cảm biến khí, cảm biến áp suất, cảm biến chuyển động, cảm biến khoảng cách, cảm biến dòng điện, cảm biến góc/ gia tốc, cảm biến Hall, cảm biến từ trường, cảm biến quang điện......
4.2. Ghép nối với các module chức năng.
Nếu có kiến thức và kỹ năng về thiết kế mạch điện tử người sử dụng có thể tự thiết kế các module chức năng  ghép nối với Arduino. Tuy nhiên việc này đòi hỏi tốn thời gian chưa tính đến việc thiết kế bị lỗi phải thực chỉnh sửa và làm mới lại gây lãng phí.
Cộng đồng phát triển Arduino thiết kế và sản xuất hàng loạt các module chuẩn để kết nối với các Board mạch Arduino. Điều này giúp cho người thiết kế phần cứng "nhàn rỗi" hơn trong việc thiết kế và làm mạch in cho các ứng dụng và người sử dụng không phải bận tâm về các sai sót trong thiết kế phần cứng. Hiện nay có các module phổ biến sau:
        - Module LED, LCD.
        - Module đo thông số điện.
        - Module nguồn.
        - Module RF.
        - Module Bluetooth.
        - Module wifi.
        - Module Xbee.
        - Module GSM/ GPRS/ 3G/ GPS.
        - Module Finger Printer.
        - Module Driver.
        - Module Keypad.
        - Module Relay.
        - Module Thời gian....

5. Arduino làm được những gì?
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ức tạ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ủa Arduino do chúng có khả năng thực hiện nhiều nhiệm vụ rất phức tạp. Sau đây là danh sách một số ứng dụng nổi bật của Arduino.

Máy in 3D
Một cuộc cách mạng khác cũng đang âm thầm định hình nhờ vào Arduino, đó là sự phát triển máy in 3D nguồn mở Reprap. Máy in 3D là công cụ giúp tạo ra các vật thể thực trực tiếp từ các file CAD 3D. Công nghệ này hứa hẹn nhiều ứng dụng rất thú vị trong đó có cách mạng hóa việc sản xuất cá nhân.
Máy in 3D Makerbot điều khiển bằng Arduino Mega2560

Robot
Do kích thước nhỏ gọn và khả năng xử lý mạnh mẽ, Arduino được chọn làm bộ xử lý trung tâm của rất nhiều loại robot, đặc biệt là robot di động.


Robot di động tránh vật cản dùng Arduino nano và camera CMUCam
 
Thiết bị bay không người lái (UAV)
UAV là một ứng dụng đặc biệt thíchhợ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.


Một thiết bị UAV
 
Điều khiển ánh sáng
Cá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ực hiện với Arduino.


Ambilight với Arduino
 
Điều khiển nhà thông minh (Smart Home)
Kết hợp với các module chức năng bluetooth hoặc wifi..., với các ứng dụng cài đặt trên máy tính bảng, smartphone hay trình duyệt web người dùng có thể thiết kế hệ thống điều khiển giám sát thông minh các thiết bị điện trong ngôi nhà của mình khi ở trong nhà hoặc từ bất cứ nới nào (được kết nối internet).
 

Arduino Điều khiển nhà thông minh với Máy tính bảng và smartphone
 
Điều khiển nhiệtđộ, độ ẩm đất tự động
Với các module cảm biến nhiệt độ, độ ẩm được ghép nối với Arduino khu vườn sẽ trở thành "thông minh" tự động điều chỉnh nhiệt độ độ ẩm cho cây trồng...

 

Arduino điều khiển nhiệt độ - độ ẩm đất cho cây trồng
 
Trên đây là những ví dụ điển hình trong vô vàn các ứng dụng Arduino do người dùng phát triển. Chúng ta có thể phát triển các ứng dụng mới trên các ý tưởng sáng tạo của các nhân hoặc tham khảo các ứng dụng do cộng đồng Arduino phát triển.
 
Những ai có thể nghiên cứu học lập trình Arduino và học ở đâu?
- Thực tế rất nhiều người "không chuyên" về lĩnh vực điện - điện tử - tự động hóa vẫn có thể lập trình và ghép nối phần cứng để thực hiện các dự án điều khiển cho riêng mình thậm chí cả những học sinh trung học cơ sở yêu thích kỹ thuật cũng phát triển ứng dụng rất tốt. Để lập trình cho     Arduino cần có kiến thức cơ bản về nền tảng C/C++ rất quen thuộc với người làm kỹ thuật. Và quan trọ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. 
- Nếu Bạn là người có chuyên môn vực điện - điện tử - tự động hóa thì việc thiết kế phát triển ứng dụng Arduino sẽ nhiều thuận lợi hơn cũng như sản phẩm sẽ hoàn hảo hơn. Là người mới làm quen với Arduino bạn nên bắt đầu từ Board mạch Arduino Uno R3.
- Để học lập trình và ghép nối phần cứng Arduino hiện nay trên mạng internet cộng đồng những người ứng dùng Arduino lập nhiều diễn đàn trao đổi học hỏi kinh nghiệm, hướng dẫn học lập trình từ cơ bản đến nâng cao, giải pháp ghép nối phần cứng.....cũng như các gian hàng điện tử bán các bo mạch Arduino và các module, linh kiện điện tử. Điển hình:

Các trang web học lập trình ứng dụng Arduino:
          Arduino.vn
          https://www.arduino.cc/
          learn.adafruit.com
Các gian hàng điện tử bán Board mạch Arduino và linh kiện điện tử.
          arduino360.com
          http://banlinhkien.vn/
          http://mualinhkien.vn/

 
ThS. Nguyễn Đình Chung - GV Khoa Điện - Điện tử

CHỚP TẮT LED ARDUINO

BÀI 1 : CHỚP TẮT LED ARDUINO

Sau đây tôi sẽ  tạo  một project nhấp  nháy  led  thời  gian delay là  1 giây sử  dụng proteus
để mô phỏng.
Sơ đồ mạch : 

chớp tắt led arduino
Code chương trình.
int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Giải thích chương trình.
int ledPin = 9;
Khai báo một giá trị biến integer là ledPin = 9.
void setup()
{
pinMode(ledPin, OUTPUT); 
}
Trong  Arduino sketch  cần phải có  hàm  setup() và  loop() nếu  không có  thì  chương
trình  báo  lỗi.  Hàm Setup() chỉ  chạy  một lần  kể  từ  khi bắt  đầu  chương  trình. Hàm này có chức  năng  thiết  lập  chế  độ  vào,  ra cho các  chân digital hay tốc  độ  baud  cho giao tiếp  Serial...
Cấu trúc của hàm pinMode() 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.
pinMode(ledPin, OUTPUT);
Lệnh này thiết  lập chân số  9 trên board là chân ngõ  ra (OUTPUT). Nếu không khai
báo “ int ledPin = 9; ” thì bạn có thể viết cách sau nhưng ý nghĩa không thay đổi:
pinMode(9, OUTPUT);
Bắt buộc khai báo một hàm loop() trong Arduino IDE. Hàm này là vòng lặp vô hạn
void loop() 
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Tiếp  theo ta sẽ  phân tích  hàm digitalWrite(  ledPin, HIGH);  lệnh  này có  ý  nghĩa  là
xuất  ra chân digital có  tên là  ledPin  ( chân 9)  mức  cao  (  HIGH),  mức  cao tướng  ứng  là  5 volt.
delay(1000);
Lệnh này tạo một khoảng trễ với thời gian là 1 giây. Trong hàm delay() của IDE thì
1000 tương ứng với 1 giây.
digitalWrite(ledPin, LOW);
Cũng  giống  như  digitalWrite(  ledPin, HIGH);  lệnh  này xuất  ra chân ledPin  mức  thấp
(LOW) tức là 0 volt.
Và tiếp tục là một hàm delay().
Như  vậy  chúng  ta có  thể thấy  chương  trình  sẽ  thực  hiện  tắt  sáng  led  liên tục  không
ngừng trừ khi ta ngắt nguồn.

Bật tắt đèn bằng giọng nói với Arduino


Bật tắt đèn bằng giọng nói với Arduino

I. Giới thiệu

Đã có nhiều bài viết về sử dụng bluetooth để bật tắt thiết bị từ xa, hay là những cách điều khiển khác bằng button nhưng liệu bạn có nghĩ bạn có thể bật tắt thiết bị (Ví dụ ở đây là một đèn LED, nếu muốn bật tắt thiết bị 220V bạn tham khảo thêm bài này) từ xa bằng giọng nói hay không? Có vẻ có gì đó không ổn đúng không nào, nhưng nó không khó và không có gì là không ổn cả. Với bài viết này tác giả muốn giúp mọi người có thể làm được điều này một cách dễ dàng và ứng dụng nó làm điều mình thích!

II. Phần cứng

III. Tiến hành kết nối các thành phần

Lần này mình không giới thiệu về cách Module nửa vì hầu hết đã đều được các bài viết khác nói rất rõ.  Bạn cần biết thì có thể tìm ở đây http://arduino.vn/reference/howto...

Cách nối dây module HC-05

Lưu ý: Khi nạp chương trình vào Arduino, ta phải gỡ 2 dây gắn vào Tx và Rx trên board Arduino ra nhé. Sau khi quá trình upload hoàn thành thì bạn hẳn cắm 2 dây kia vào vị trí Rx và Tx vào lại. Đối với Arduino Mega do hỗ trợ thêm 3 cổng Serial nữa nên việc nối vào chân RX3 và TX3 không làm ảnh hưởng đến quá trình nạp chương trình, đó là lý do mình khuyên bạn nên sử dụng 2 chân này ở phía trên (có chút thoải mái khi không phải rút ra rút vô laugh)

Sau khi lắp xong module HC-05 ta tiến hành lắp thêm một đèn LED ở chân số 13 để điều khiển Nên nhớ cần phải lắp thêm điện trở tại đầu ra của chân 13 ( điện trở 220 Ohm ).

Gắn thêm đèn led để điều khiển

Nhiêu đó thôi không khó để lắp đúng không nào công việc tiếp theo là làm cho nó chạy !

IV. Lập trình và tinh chỉnh

1. Thiết lập điện thoại của bạn

Để có thể điều khiển được bằng giọng nói cụ thể ở đây là giọng nói tiếng việt thì ta cần phải cài đặt trên điện thoại của chúng ta.
Cụ thể các bạn làm theo những thao tác bên dưới để có thể làm được điều mong muốn ban đầu.

Bước 1

Bước 2

Bước 3

Bước 4
Xong công đoạn thiết lập cho cái điện thoại của bạn có thể dùng được vào việc tìm kiếm bằng giọng nói và dùng nó để điều khiển

2. Lập trình ứng dụng điều khiển

Để có thể điều khiển bằng giọng nói ta cần một ứng dụng để có thể nhận diện được giọng nói củng chúng ta.
Vậy làm sao có ứng dụng đó. Bài viết này tác giả sẽ không để link tải mà yêu cầu khi đọc bài viết này là phải thực hành để có được cái bạn muốn.
Có làm mới có ăn mà wink
Để có thể tự tạo 1 ứng dụng điều khiển tác giả đã xây dựng nó tại địa chỉ: ai2.appinventor.mit.edu heart việc tạo ra một ứng dụng rất đơn giản chỉ bằng cách kéo và thả. Từ bài viết này bạn có thể phát triển thêm để phục vụ nhiều công việc hơn.

a. Đây dao diện cho MONITOR

b. Các đối tượng dùng để lập trình

c. Khối code cho ứng dụng

Khối code dùng để kết nối điện thoại với board thông qua HC-05
Khối code dùng để nhận diện giọng nói và gửi đến Arduino
Nếu bạn chưa biết gì về App Inventor và thấy những dòng code trên thật khó hiểu, thì hãy đọc bài này.

3. Lập trình cho Arduino

  1. String data;
  2. int led1 = 2;
  3. int led2 = 3;
  4. void setup() {
  5. Serial.begin(9600);
  6. pinMode(led1, OUTPUT);
  7. pinMode(led2, OUTPUT);
  8. }
  9. void loop() {
  10. while (Serial.available()){ //Kiểm tra byte để đọc
  11. delay(30); //Delay để ổn định hơn
  12. char c = Serial.read(); // tiến hành đọc
  13. if (c == '#') {break;} //Thoát khỏi vòng lặp khi phát hiện từ #
  14. data += c; // data = data + c
  15. }
  16. if (data.length() > 0) {
  17. Serial.println(data);
  18. if(data == "bật đèn" ||data == "Bật đèn"||data == "1")
  19. {digitalWrite(led1, HIGH);}
  20. //////////////////////////////////////////////////////
  21. else if(data == "tắt đèn"||data == "Tắt đèn"||data == "10")
  22. {digitalWrite(led1, LOW);}
  23.  
  24. data="";}} //Thiết lập lại các biến
  25. // Có sự đóng góp và giúp đỡ của Tân_Oggy

V. Kết luận

Bấy nhiêu đó thôi từ những gì mình vừa chia sẽ chắc rằng là sẽ có nhiều ứng dụng hay với giọng nói. Hãy cùng phát triển nào và đừng quên chia sẽ dự án của mình với cộng đầu nhá ! Cảm ơn các bạn đã đọc bài viết !
Dưới đây là video demo dự án của mình và mình đã ứng dụng bài viết này vào đó ! Mong là sẽ có sản phẩm hay hơn từ các bạn
Youtube: