<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lập trình điện tử &#8211; Vietnam STEAM Union</title>
	<atom:link href="https://vsteam.edu.vn/category/lap-trinh-dien-tu/feed/" rel="self" type="application/rss+xml" />
	<link>https://vsteam.edu.vn</link>
	<description>Trang web chính thức của Vietnam STEAM Union - Liên minh các câu lạc bộ STEAM Việt Nam!</description>
	<lastBuildDate>Sun, 08 Sep 2024 16:25:20 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://vsteam.edu.vn/wp-content/uploads/2024/02/cropped-Untitled-design-1-32x32.png</url>
	<title>Lập trình điện tử &#8211; Vietnam STEAM Union</title>
	<link>https://vsteam.edu.vn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Git &#038; Github: Sử dụng cơ bản đến nâng cao</title>
		<link>https://vsteam.edu.vn/git-github-su-dung-co-ban-den-nang-cao/</link>
					<comments>https://vsteam.edu.vn/git-github-su-dung-co-ban-den-nang-cao/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 08 Sep 2024 16:25:20 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=1567</guid>

					<description><![CDATA[Lời nói đầu Trong hầu hết các dự án nhóm, đặc biệt là bài tập lớn, mỗi thành viên sẽ được phân bổ cho 1 phần code khác nhau nên khi cần tổng hợp lại thành 1 sản phẩm hoàn chỉnh sẽ làm như nào? Hầu hết các bạn sẽ nghĩ đến việc tập trung [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc71OmI_szlG3kdaqsz9LrqfEOCeJKMLFPsPt0YXY-0cZkxfXfBDGKfRf4USjNgcOVIgqk8JNIobv6LyT2_E-49ZleVIacVOq6rozoSeeNl8Oa6u9DIczEu8SSa19TVM67AbCDcA5MRkLi9bn2LYM5156O-Vgcwg48uSJFMltyiNTF2VVjYEVw?key=twlU_2_8ijJ4S-MhwEAgVA" width="577" height="65"></p>



<p>Lời nói đầu</p>



<p>Trong hầu hết các dự án nhóm, đặc biệt là bài tập lớn, mỗi thành viên sẽ được phân bổ cho 1 phần code khác nhau nên khi cần tổng hợp lại thành 1 sản phẩm hoàn chỉnh sẽ làm như nào? Hầu hết các bạn sẽ nghĩ đến việc tập trung tại nhà một thành viên, tại thư viện, tại quán cafe để ‘copy and paste’ và cùng chỉnh sửa, kiểm tra. Hoặc có thể là một thằng làm gánh cả team cho mượt.</p>



<p>Vậy trong các công ty, tổ chức lớn với những công việc nặng đô hơn, họ làm cách nào?</p>



<p>Câu trả lời khá đơn giản, họ sẽ sử dụng các hệ thống quản lý, thứ có thể đáp ứng các yêu cầu về việc đồng bộ, kiểm soát giữa các thành phần được tải lên dữ liệu đám mây, hay có thể hiểu là quản lý trực tuyến và đồng bộ giữa các máy chủ.</p>



<p>Khi tìm hiểu về lập trình và phần mềm điện tử, nhiều người đã từng nghe qua về Git hay Github nhưng chưa thực sự biết đến và sử dụng những hệ thống này trong cuộc sống cũng như công việc cá nhân. Vậy nên, trong tài liệu này, mình sẽ chia sẻ một số kiến thức về Git/Github từ cơ bản đến nâng cao.</p>



<p>Mục lục</p>



<p>Phần 1: Giới thiệu về Git và Github 4</p>



<ol class="wp-block-list">
<li>Git và Github là gì? 4</li>



<li>Git hoạt động thế nào? 4</li>
</ol>



<p>Phần 2: Git/Github dành cho người mới bắt đầu 6</p>



<ol class="wp-block-list">
<li>Một số khái niệm cơ bản 6</li>



<li>Cài đặt Git 7</li>



<li>Câu lệnh và thao tác cơ bản 7</li>
</ol>



<p>Phần 1: Giới thiệu về Git và Github</p>



<p>1. Git và Github là gì?</p>



<p>Git là một hệ thống giúp một nhóm developer trong 1 dự án phát triển phần mềm có thể quản lý tài liệu, source code, đồng thời ghi lại lịch sử chỉnh sửa về việc thay đổi cấu trúc, sửa lỗi, thêm tính năng,&#8230;&nbsp;</p>



<p>Nhờ vào những đặc điểm đó, người dùng có thể kiểm soát các lỗi hệ thống, tiến trình dự án và tối ưu tốc độ cũng như hiệu quả của chương trình.</p>



<p>Github là dịch vụ lưu trữ dựa trên web dành cho kho lưu trữ Git, cung cấp nền tảng cho các nhà phát triển cộng tác trong các dự án phần mềm, theo dõi sự cố và lỗi cũng như quản lý các phiên bản mã.</p>



<p>2. Git hoạt động thế nào?</p>



<p>Có một thuật ngữ cho hệ thống của Git đó là hệ thống quản lý phiên bản phân tán (Distributed Version Control System).</p>



<p>Trong hệ thống quản lý phiên bản phân tán, mọi thành viên đều có một bản sao cục bộ hay còn gọi là “clone” của kho lưu trữ chính, tức là mọi người đều được truy cập vào nguyên cả dự án của đội trong thiết bị cá nhân với tất cả dữ liệu, tệp tin,…</p>



<p>Bạn sẽ hiểu nó tốt hơn bằng cách tham khảo sơ đồ dưới đây:</p>



<p class="has-text-align-center"><img fetchpriority="high" decoding="async" width="602" height="399" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdn_e_K0kuIT5cKPYqqroo8ZfiiPGGcosgTihfJ2Q6eoS0BPOqjPavkOLYO3gTAGQmIvW__aenwnpdlFOl-V4CR9ILEevSqb9pg7qv2MlY85A2LQTloeMEiwBAdwEFCuBCHG5tzk1FCORnf73dhMJZARsI9tT7Ay6P3T9U_efmqJecewMbpkg?key=twlU_2_8ijJ4S-MhwEAgVA" alt="Quy trình làm việc của hệ thống kiểm soát phiên bản phân tán - Git là gì - Aptech Buôn Ma Thuột 768x508"></p>



<p><em>Quy trình làm việc của hệ thống kiểm soát phiên bản phân tán</em></p>



<p>Như bạn có thể thấy trong sơ đồ trên, mỗi lập trình viên tự duy trì một kho lưu trữ cục bộ, điều này có nghĩa rằng trên thiết bị của họ đều lưu trữ một bản sao giống hệt với kho lưu trữ trung tâm. Họ có thể cam kết (commit) và cập nhật (update) kho lưu trữ cục bộ của mình mà không có sự can thiệp nào.</p>



<p>Ngoài ra, khi cần đồng bộ và cập nhật dữ liệu, người dùng có thể sử dụng một hoạt động gọi là “pull”. Một hoạt động khác là “push” với chức năng đẩy các cập nhật của kho cục bộ cá nhân lên trung tâm chính.</p>



<p>Những đặc điểm trên giúp mỗi thành viên trong dự án đều được sử dụng, kết hợp toàn dự án với phần làm việc cá nhân. Điều này giúp chúng ta điều chỉnh source code nhanh chóng để thích hợp với mọi người.</p>



<p>Không chỉ vậy, người dùng không cần kết nối với máy chủ 24/7 nên có thể làm việc ở bất cứ đâu, chỉ khi cần “pull” và “push” mới cần có kết nối Internet. Đồng thời, việc ủy thác các thay đổi có thực hiện dễ dàng mà không chịu sự can thiệp của kho lưu trữ chính và được ghi lại rất rõ ràng. Đặc biệt nhất, nhờ vào việc các bản sao cục bộ được lưu trữ trên thiết bị riêng, dù máy chủ trung tâm bị sập thì vẫn có thể phục hồi dữ liệu dễ dàng.</p>



<p>Phần 2: Git/Github dành cho người mới bắt đầu</p>



<p>1. Một số khái niệm cơ bản</p>



<p>a.<strong> Repository</strong></p>



<p>Hiểu đơn giản thì đây là khó lưu trữ tất cả những thông tin về việc chỉnh sửa hay lịch sử dự án. Git có 2 loại repository là <strong>Remote Repository</strong> và <strong>Local Repository</strong>:</p>



<ul class="wp-block-list">
<li><strong>Local Repository: </strong>là repository lưu trữ trên thiết bị cá nhân của chúng ta, local repository được đồng bộ với máy chủ dữ liệu thông qua các câu lệnh của Git.</li>



<li><strong>Remote Repository: </strong>là repository được lưu trữ trên các nền tảng chuyên dụng. Một số nền tảng phổ biến là Github, Gitlab, Bitbucket,…</li>
</ul>



<p>Chốt lại, <strong>GitHub&nbsp;</strong>chính là một <strong>Remote Repository</strong> lưu trữ&nbsp;tất cả những thông tin cần thiết để quản lý các sửa đổi và lịch sử của toàn bộ project.</p>



<p>b. <strong>Working tree và Index (hoặc staging area)</strong></p>



<p>Đây là những thư mục được đặt trong sự quản lý của Git, nơi mọi người thực hiện công việc trên đó, được gọi là&nbsp;<strong>working tree.&nbsp;</strong>Giữa repository và working tree tồn tại một nơi gọi là index hay staging area. Staging area là nơi để chuẩn bị cho việc commit vào repository.</p>



<p class="has-text-align-left">Nói cách khác, staging area là nơi biểu thị những cập nhật của phần công việc của chúng ta so với dự án chung, những cập nhật đó đang được chạy trên thiết bị của chúng ta nhưng chưa được sát nhập lên dự án chung và tất nhiên mọi người chưa có ảnh hưởng gì từ những cập nhật đó.</p>



<p class="has-text-align-center"><img decoding="async" width="624" height="306" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcV8Ds5tQZjAa32zfBvPLyfCOItGV4iiRtNjHv9dt4Uv0GHgTvmunGNzIbMj-DI6QOzJ4rQIesnVcgPZEHxuJ7ug8ofCw519Ttn9MN6uQvwd2MecZRK8BEZd-5ROZZGREyOoiq7CiyEUko9FECuttXJn-CXLr7D5cTtuWRBSXntIwL2I82qPEU?key=twlU_2_8ijJ4S-MhwEAgVA" alt="A diagram of a diagram

Description automatically generated with medium confidence"></p>



<p><em>Sơ đồ biểu thị mối quan hệ giữa các thành phần</em></p>



<p>2. Cài đặt Git</p>



<p>Các bạn có thể truy cập vào đường dẫn: <a href="https://git-scm.com/downloads">https://git-scm.com/downloads</a> để tải và cài đặt Git theo từng hệ điều hành khác nhau</p>



<p>Để kiểm tra, các bạn hãy bật Command Prompt hoặc Terminal của máy tính lên rồi dùng câu lệnh <strong>git &#8211;version</strong> để kiểm tra, nếu màn hình in ra phiên bản Git hiện tại thì đã cài đặt thành công.</p>



<p>Với hệ điều hành Windows nói riêng, khi cài đặt Git có thể sẽ có một Terminal riêng đi kèm mang tên Git Bash.</p>



<p>Để thuận lợi cho việc sử dụng Git, hãy tạo 1 tài khoản Github trên <a href="http://github.com"><strong>Github.com</strong></a> và ghi nhớ tên gmail cũng như tên đăng nhập.</p>



<p>3. Câu lệnh và thao tác cơ bản</p>



<p>a. Khởi tạo 1 git repository</p>



<p class="has-text-align-center">Các bạn hãy chọn 1 Folder để chứa các thông tin quản lý về lịch sử của dự án, click chuột phải rồi chọn Git Bash Here<img decoding="async" alt="A screenshot of a computer menu

Description automatically generated" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdOQ2i4gWXed8hd8Ldqa1x1tQeqO9C0PIslgxv1G804yG8MbG9DMeAnRCufhAbh1y-Fh1Z-J2UvGJnidWttWdVwCFdUnE4kYEjnwdoUIXmIoMvqXLJObQNqvYv-v2ccUqbJWW6ndRI6fn3fHM-8dPlu3rII5UWRriqL7WrZqwNi1GGTb_7c4h8?key=twlU_2_8ijJ4S-MhwEAgVA" width="400.30199933052063" height="435.37443006038666"></p>



<p class="has-text-align-center">Sau khi cửa sổ console của Git Bash hiện lên, các bạn hãy gõ dòng lệnh <strong>git init</strong> để khởi tạo:<img decoding="async" alt="A screenshot of a computer program

Description automatically generated" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfObMlw4ba-BZqciqP0MT55NCUI38OsKjHjR0-WF5r0VbfQD7FH52dRBVBwhhdJZZczB15wjVbcpAUgIMSkYQ5i5LjqP8BkggKZePKVdsBzDuS6iUV0wNb6xbCd6i9Z26zRQg99rXTy5p7sS3Bopnbv7pR-PH7dsLwh5h5FI1-0KhyXZIsLSw?key=twlU_2_8ijJ4S-MhwEAgVA" width="896.1343703269958" height="493.4339418411255"></p>



<p>Tất cả các thông tin về quản lý lịch sử chỉnh sửa sẽ được lưu trong thư mục .git, đây là một thư mục quan trọng nên được lưu trữ như 1 hidden item, hãy suy nghĩ thật kĩ trước khi xóa file này nhée.</p>



<p>Sau khi khởi tạo, chúng ta sẽ đăng nhập vào tài khoản bằng 2 câu lệnh sau:</p>



<p><strong>git config &#8211;global user.email “&lt;email bạn dùng để tạo tài khoản&gt;”</strong></p>



<p><strong></strong><strong>git config &#8211;global user.name “&lt;tên đăng nhập của bạn&gt;”</strong></p>



<p>b. Cập nhật các thay đổi và đẩy lên Staging Area</p>



<p>Tại thư mục làm việc, bạn nhập câu lệnh <strong>git add .</strong><strong> </strong>hoặc <strong>git add -A</strong> thì mọi thay đổi trong thư mục làm việc của bạn sẽ được đẩy lên Staging Area.</p>



<p>Ngoài việc cập nhật tất cả chỉ mục bằng câu lệnh <strong>git add -A </strong>ra thì chúng ta có thể chỉ định các thư mục, tệp tin riêng lẻ bằng cú pháp:</p>



<p>git add &lt;đường dẫn&gt;</p>



<p>&lt;đường dẫn&gt; ở đây có thể là đường dẫn đến thư mục, tệp tin mà mình cần cập nhật.</p>



<p>c. Lưu các thay đổi trong thư mục làm việc vào repository</p>



<p>Để đẩy các cập nhật từ thiết bị cá nhân lên reposity, chúng ta sử dụng câu lệnh <strong>commit </strong>với cú pháp:</p>



<p><strong>git commit -m “&lt;thông báo, thông tin về các thay đổi&gt;”</strong></p>



<p>Các thông báo thường được ghi ngắn gọn, súc tích và tóm tắt các thay đổi mà bạn đưa ra.</p>



<p>d. Nạp các thay đổi từ kho lưu trữ trung tâm về kho lưu trữ cục bộ</p>



<p>Công việc này sẽ hợp nhất các thay đổi ở mã nguồn trong lưu trữ cục bộ trong thiết bị cá nhân của bạn.</p>



<p>Trước nhất, bạn cần phải tạo kết nối giữa kho lưu trữ cục bộ và kho lưu trữ trung tâm bằng cách đặt tên kho lưu trữ trung tâm là “origin” bằng cách sử dụng câu lệnh:&nbsp;</p>



<p><strong>git remote add origin &lt;đường dẫn đến repository&gt;</strong></p>



<p class="has-text-align-center">Ví dụ ở đây mình sẽ sử dụng repository của Maker Viet: <a href="https://github.com/makerviet/Arduino-PS2X-ESP32-Makerbot">https://github.com/makerviet/Arduino-PS2X-ESP32-Makerbot</a><img loading="lazy" decoding="async" alt="A screenshot of a computer program" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeruHDtVt9V3r_SZQ5uOG0C8b0OeIgm_bwApT4KoVrabGcw57bBbsGGVSRUvvZgWWT3tnw-bbGfwDU2PuUdOqYYlRgcZ4IHnI7EQlogtixX5je4daT3KhNV_2JYRVVL1aXVGJ3ybkZ9Fh46eFJoKLmwcTn_WL0XBqz4miqRoMSgPzuwRYoskUo?key=twlU_2_8ijJ4S-MhwEAgVA" width="624" height="249"></p>



<p>Sau khi tạo liên kết với Repository, chúng ta có thể kiểm tra các kết nối đã tạo bằng cách dùng câu lệnh:</p>



<p><strong>git remote -v</strong></p>



<p>Khi đã chuẩn bị xong, chúng ta chỉ cần sử dụng câu lệnh sau để tạo “clone” trong lần đầu sử dụng và cập nhật các thay đổi với kho lưu trữ cục bộ:</p>



<p><strong>git pull origin master</strong></p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="624" height="249" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfchf9A0FpEC9OVh2j0q3GUHJWn2KNeFeVwWr1UERsUMTAYv-sVSryXWQocjFQvXSbUq4SOs5dQV5oQi2dotALkLGXVICWZliX98XVVAqrZM2w_RNW-vKYt9evm7AILtQMBmOccE8FV31a3a1i7k9y808fobs-RBevVCNdYnPjJSZTQalm6zEo?key=twlU_2_8ijJ4S-MhwEAgVA" alt="A screenshot of a computer program

Description automatically generated"></p>



<p>Như vậy là các bạn đã nạp thành công. Trong trường hợp Git báo lỗi “<strong>fatal: refusing to merge unrelated histories” </strong>có thể do bạn đã xóa file .git trong thư mục làm việc hoặc có xung đột giữa các commit trong kho lưu trữ cục bộ và kho lưu trữ trung tâm. Để khắc phục lỗi, các bạn hãy dùng câu lệnh:</p>



<p><strong>git pull origin master &#8211;allow-unrellated-histories</strong></p>



<p>Câu lệnh này có chức năng hợp nhất tất cả các commit liên quan đến repository trở thành một bản giống trong file .git trên kho lưu trữ trung tâm.</p>



<p>Ngoài ra, bạn có thể nạp một nhánh khác của dự án bằng câu lệnh:</p>



<p><strong>git pull origin &lt;tên nhánh&gt;</strong></p>



<p>e. Đẩy các cam kết từ kho lưu trữ cục bộ lên kho lưu trữ trung tâm</p>



<p>Để có thể xuất bản các thay đổi cục bộ của bạn lên một kho lưu trữ trung tâm, bạn cần phải là Contributor của dự án để có quyền can thiệp vào các cập nhật của dự án. Sau khi bạn tích lũy được một số cam kết cục bộ và sẵn sàng chia sẻ chúng với các thành viên còn lại trong nhóm, bạn có thể đẩy chúng vào kho lưu trữ từ xa&nbsp;bằng cách sử dụng lệnh sau:</p>



<p><strong>git push &lt;tên remote&gt;</strong></p>



<p>Như ví dụ trên, khi chúng ta có một vài cam kết và chỉnh sửa quan trọng cần chia sẻ, các bạn có thể dùng câu lệnh “<strong>git push origin master” </strong>để đẩy phần công việc của mình lên kho lưu trữ trung tâm và chia sẻ với các thành viên khác.</p>



<p>f. Lệnh git status</p>



<p>Lệnh&nbsp;này được sử dụng để liệt kê tất cả các tệp đã bị sửa đổi, sẵn sàng để thêm vào kho lưu trữ cục bộ. Bạn có thể thử gõ:</p>



<p><strong>git status</strong></p>



<p>g. Lệnh touch và dir</p>



<p>Khi bạn muốn tạo một tệp tin mới bằng lệnh trong console, bạn có thể dùng câu lệnh sau:</p>



<p><strong>touch &lt;tên tệp tin&gt;</strong></p>



<p class="has-text-align-center">Bạn có thể xem tên các tệp tin có trong thư mục làm việc bằng các sử dụng câu lệnh <strong>dir</strong>:<img loading="lazy" decoding="async" alt="A screenshot of a computer program

Description automatically generated" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfizoH1-BF-nt67c5TDqruDe04TemE_Vh2xF2tr0S8wwrqzXz3fXMEeg5Ajpmh4ZB-7seEYP0mUlyC1V4vpisXoxycUlA3ClDHHMePNNDQqWXXQPGYQOZ-2adnuGwwK_DYdgWYc_qIF5VcRVd38-vTOPXtvFRUJQzvUHA2CIKt8ZqIn6ZKfzF4?key=twlU_2_8ijJ4S-MhwEAgVA" width="624" height="228"></p>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-text-align-center"><strong>Nguyễn Quốc Huy</strong></p>



<p class="has-text-align-center"><strong>Vietnam Steam Union</strong></p>



<p class="has-text-align-center" id="block-a63eab19-1e90-4d2a-b4bd-b78ba7771ad2"><strong>License.</strong></p>



<p class="has-text-align-center" id="block-5bad2a83-b77a-411c-8e71-cb4eb42df6ac">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>


<div class="wp-block-image">
<figure class="aligncenter" id="block-32bd0dd6-0a1c-465b-b4af-de1619bdc590"><img decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" alt="This image has an empty alt attribute; its file name is 38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA"/></figure></div>]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/git-github-su-dung-co-ban-den-nang-cao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Team FGC Vietnam 2023 Engineering Notebook</title>
		<link>https://vsteam.edu.vn/teamvietnam2023fgc/</link>
					<comments>https://vsteam.edu.vn/teamvietnam2023fgc/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 14 Jun 2024 15:38:28 +0000</pubDate>
				<category><![CDATA[Cơ khí thiết kế]]></category>
		<category><![CDATA[Lập trình điện tử]]></category>
		<category><![CDATA[Sổ tay kĩ thuật]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=1554</guid>

					<description><![CDATA[Powered By EmbedPress]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1554" class="elementor elementor-1554">
				<div class="elementor-element elementor-element-353d505 e-flex e-con-boxed e-con e-parent" data-id="353d505" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-05265f5 elementor-align-center elementor-widget elementor-widget-embedpress_pdf" data-id="05265f5" data-element_type="widget" data-widget_type="embedpress_pdf.default">
				<div class="elementor-widget-container">
					    <div class="embedpress-document-embed ep-doc-3b7779e8efe691b61567a25ff03821ee ose-document emebedpress-unit-px " data-thememode="default" data-customcolor="" data-toolbar="yes" data-toolbar-position="top" data-open="no" data-presentation-mode="yes" data-download="yes" data-copy="yes" data-rotate="yes" data-details="yes" data-id="embedpress-pdf-05265f5" style=" max-width:100%; display: inline-block">
        
        
                <div >
                
                    <div id="ep-elementor-content-05265f5" class="ep-elementor-content  ep-fixed-width   ep-content-protection-disabled">
                        <div id="05265f5" class="ep-embed-content-wraper">
                            <div><iframe title="Engineering Notebook" class="embedpress-embed-document-pdf embedpress-pdf-05265f5" style="width: 1000px!important;height: 1000px;; max-width:100%; display: inline-block" src="https://vsteam.edu.vn/wp-admin/admin-ajax.php?action=get_viewer&#038;file=https%3A%2F%2Fvsteam.edu.vn%2Fwp-content%2Fuploads%2F2024%2F06%2FEngineering-Notebook.pdf#key=dGhlbWVNb2RlPWRlZmF1bHQmdG9vbGJhcj10cnVlJnBvc2l0aW9uPXRvcCZwcmVzZW50YXRpb249dHJ1ZSZkb3dubG9hZD10cnVlJmNvcHlfdGV4dD10cnVlJmFkZF90ZXh0PXRydWUmZHJhdz10cnVlJnBkZl9yb3RhdGlvbj10cnVlJnBkZl9kZXRhaWxzPXRydWU=&#038;zoom=auto" class="embedpress-embed-document-pdf embedpress-pdf-05265f5" data-emid="embedpress-pdf-05265f5" https://vsteam.edu.vn/wp-content/uploads/2024/06/Engineering-Notebook.pdf="" frameborder="0"></iframe><p class="embedpress-el-powered">Powered By EmbedPress</p></div>                        </div>
                    </div>
                                    </div>
            
    </div>

				</div>
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/teamvietnam2023fgc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Encoder</title>
		<link>https://vsteam.edu.vn/encoder/</link>
					<comments>https://vsteam.edu.vn/encoder/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 14:39:41 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=1395</guid>

					<description><![CDATA[1. Khái niệm 2. Cấu tạo 3. Nguyên lý hoạt động của encoder 4. Các loại encoder Tùy vào độ phức tạp của đĩa quay, độ chính xác của các loại encoder là khác nhau.Từ đấy người ta chia encoder thành 2 loại chính: encoder tuyệt đối và encoder tươngđối. 5. Ứng dụng/ cách sử [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="116" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-4-1024x116.png" alt="" class="wp-image-601"/></figure></div>


<p>1. <strong>Khái niệm</strong></p>



<ul class="wp-block-list">
<li>Encoder còn được gọi là bộ mã hóa quay hoặc bộ mã hóa trục, là một thiết bị cơ điện<br>có chức năng chuyển đổi vị trí góc hoặc chuyển động của trục hoặc trục thành tín<br>hiệu đầu ra tương tự hoặc kỹ thuật số. Bộ mã hóa được sử dụng để phát hiện vị trí<br>động cơ, hướng di chuyển, tốc độ… bằng cách đếm số vòng quay của trục.</li>



<li>Động cơ encoder đơn giản là 1 chiếc động cơ được tích hợp thêm với 1 cái encoder.</li>



<li>Hiện nay, hầu hết động cơ từ servo đến DC đều là động cơ encoder.</li>
</ul>



<p>2. <strong>Cấu tạo</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="485" height="514" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-87.png" alt="" class="wp-image-1397"/></figure></div>


<ul class="wp-block-list">
<li>Cấu tạo encoder khá đơn giản, bao gồm:</li>



<li>Thân và trục</li>



<li>Nguồn phát sáng (lightsource): là 1 đèn LED</li>



<li>Đĩa mã hóa (code disk): có rãnh nhỏ quay quanh trục, khi đĩa này quay và chiếu đèn<br>LED lên trên mặt đĩa thì sẽ có sự ngắt quãng xảy ra. Các rãnh trên đĩa chia vòng tròn<br>thành các góc bằng nhau. Một đĩa có thể có nhiều dãy rãnh tính từ tâm tròn.</li>



<li>Bộ cảm biến ánh sáng thu tín hiệu (photosensor): là một con mắt thu quang điện để<br>nhận tín hiệu từ đĩa quay</li>



<li>Bo mạch điện tử (electronic board): giúp khuếch đại tín hiệu</li>
</ul>



<p>3. <strong>Nguyên lý hoạt động của encoder</strong></p>



<ul class="wp-block-list">
<li>Encoder hoạt động theo nguyên lý đĩa quay quanh trục. Trên đĩa mã hóa có các rãnh<br>nhỏ để nguồn phát sáng chiếu tín hiệu quang qua đĩa. Chỗ có rãnh thì ánh sáng<br>xuyên qua được, chỗ không có rãnh ánh sáng không xuyên qua được.</li>



<li>Với các tín hiệu có, hoặc không có ánh sáng chiếu qua, người ta ghi nhận được đèn<br>led có chiếu qua lỗ hay không. Số xung đếm được và tăng lên được tính bằng số lần<br>ánh sáng bị cắt.</li>



<li>Cảm biến thu ánh sáng sẽ bật tắt liên tục để tạo ra các xung vuông. Việc sử dụng các<br>bộ mã hóa sẽ ghi nhận lại số xung và tốc độ xung. Tín hiệu dạng xung sẽ được truyền<br>về bộ xử lý trung tâm (vi xử lý, PLC,…) và từ đó sẽ biết được vị trí và tốc độ của động<br>cơ.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="638" height="405" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-88.png" alt="" class="wp-image-1398"/></figure></div>


<p>4. <strong>Các loại encoder</strong></p>



<p>Tùy vào độ phức tạp của đĩa quay, độ chính xác của các loại encoder là khác nhau.<br>Từ đấy người ta chia encoder thành 2 loại chính: encoder tuyệt đối và encoder tương<br>đối.</p>



<ul class="wp-block-list">
<li>Encoder tuyệt đối (absolute encoder):</li>



<li>Dựa vào tín hiệu của encoder có thể biết chính xác vị trí và tốc độ của động cơ mà<br>không cần xử lý thêm.</li>



<li>Sử dụng đĩa theo mã nhị phân hoặc mã Gray.</li>



<li>Đĩa mã hóa ở Encoder được chế tạo từ vật liệu trong suốt, người ta đã chia mặt đĩa<br>thành các góc đều nhau cùng các đường tròn đồng tâm. Do đó, encoder có thể giữ<br>được vị trí kể cả khi mất nguồn.</li>



<li>Ưu điểm: dễ sử dụng, độ chính cao, giữ được vị trí sau khi mất nguồn.</li>



<li>Nhược điểm: giá thành cao do độ phức tạp.</li>



<li>Encoder tương đối (incremental encoder):</li>



<li>Phát ra tín hiệu tăng dần hoặc theo chu kỳ.</li>



<li>Đĩa mã hóa chỉ bao gồm một dãi băng tạo xung, thường được chia thành nhiều lỗ<br>bằng nhau và được cách đều nhau.</li>



<li>Ưu điểm: giá thành rẻ, chế tạo đơn giản.</li>



<li>Nhược điểm: Độ chính xác thấp, sai số cao đặc biệt khi hoạt động lâu dài.</li>
</ul>



<p>5. <strong>Ứng dụng/ cách sử dụng trong robotics</strong></p>



<ul class="wp-block-list">
<li>Đo tốc độ: Encoder có thể được sử dụng để đo tốc độ thực tế của robot, bằng cách<br>gắn trực tiếp encoder vào các động cơ chạy bánh, hoặc các cơ chế bằng cách gắn<br>encoder vào động cơ chạy cơ chế hoặc vào trục quay của cơ chế (Ví dụ: đo tốc độ<br>quay của động cơ bắn).</li>



<li>Xác định vị trí: Encoder có thể được sử dụng để xác định chính xác vị trí của robot<br>hoặc của cơ chế. (Ví dụ: xác định vị trí chính xác của cánh tay quay</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" id="block-a694562e-6742-41ef-9eae-7a7bceee7643"/>



<p class="has-text-align-center" id="block-3326c552-8159-4991-8349-2fbde426c42f"><strong>Tài liệu được trích dẫn, tham khảo từ các nguồn:</strong></p>



<ol class="wp-block-list" id="block-1b54f7a6-b956-4524-8da4-71b378b74f4b">
<li>Tài liệu team First Global Challenge VietNam</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity" id="block-7f36cab8-6a7b-4c8a-b0ec-62788a3b758a"/>



<p class="has-text-align-center" id="block-a63eab19-1e90-4d2a-b4bd-b78ba7771ad2"><strong>License.</strong></p>



<p class="has-text-align-center" id="block-5bad2a83-b77a-411c-8e71-cb4eb42df6ac">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>


<div class="wp-block-image">
<figure class="aligncenter" id="block-32bd0dd6-0a1c-465b-b4af-de1619bdc590"><img decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" alt="This image has an empty alt attribute; its file name is 38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA"/></figure></div>]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/encoder/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sensors</title>
		<link>https://vsteam.edu.vn/sensors/</link>
					<comments>https://vsteam.edu.vn/sensors/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 16:34:59 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=1307</guid>

					<description><![CDATA[A. Giới thiệu chung&#160; Một trong những lợi thế lớn nhất của mạch Arduino là sự đa dụng và tiện lợi của nó, và điểm mạnh ấy được thể hiện rõ nhất qua khả năng phối hợp với rất nhiều loại cảm biến khác nhau. Điều này khiến mạch Arduino trở thành lựa chọn phổ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="116" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-4-1024x116.png" alt="" class="wp-image-601" style="width:874px;height:auto"/></figure>



<p class="has-text-align-left"><strong>A. Giới thiệu chung&nbsp;</strong></p>



<p>Một trong những lợi thế lớn nhất của mạch Arduino là sự đa dụng và tiện lợi</p>



<p>của nó, và điểm mạnh ấy được thể hiện rõ nhất qua khả năng phối hợp với rất nhiều loại cảm biến khác nhau. Điều này khiến mạch Arduino trở thành lựa chọn phổ biến nhất cho các dự án tự động hóa quy mô nhỏ.&nbsp;</p>



<p>Một số loại cảm biến có thể kể đến như: khoảng cách, cảm biến góc, encoder, … </p>



<p><strong>B. Cảm biến khoảng cách&nbsp;</strong></p>



<p><strong>1. Khái niệm&nbsp;</strong></p>



<p>Cảm biến khoảng cách hay còn được gọi với tên cảm biến li độ, là thiết bị điện tử giúp xác định khoảng cách từ vị trí của điểm xét đến vật thể.&nbsp;</p>



<p><strong>2. Phân loại&nbsp;</strong></p>



<p>Cảm biến khoảng cách được phân loại theo nguyên lý hoạt động thành 1 số loại sau: </p>



<ul class="wp-block-list">
<li>Cảm biến siêu âm (ultrasonic sensor) </li>



<li>Cảm biến laser </li>



<li>Cảm biến từ </li>



<li>Cảm biến hồng ngoại (tiệm cận) </li>
</ul>



<p>Trong đó, giáo án này sẽ tập trung vào cảm biến siêu âm và cảm biến tiệm cận </p>



<p><strong>3. Cảm biến siêu âm (HC-SR04)&nbsp;</strong></p>



<p>● <strong>Cảm biến siêu âm HC-SR04 </strong>(Ultrasonic Sensor) được sử dụng rất phổ biến để xác định khoảng cách vì RẺ và CHÍNH XÁC. Cảm biến HC-SR04 sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 2 -> 300cm, với độ chính xác gần như chỉ phụ thuộc vào cách lập trình. </p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="466" height="466" src="https://lh7-us.googleusercontent.com/anErbbavDSaXBUGraatVfC891bGIp8ig3AXfZpfdgxEgz_ua5LEkAlbsRgeMy-lCuc8YzmOTbHRECfAcOIqUHAPvHnkq1_UUc1fvqnLEyLm0Pp0lIE5bwb37IIu3OkgVqypyMQaJwASv5TBhm-sw3QQ"></p>



<p><strong>● </strong><strong>Cấu tạo: </strong></p>



<ul class="wp-block-list">
<li><strong>Bộ phận phát sóng siêu âm: </strong>Cấu tạo của các đầu phát và đầu thu siêu âm là các loa gốm đặc biệt, phát siêu âm có cường độ cao ở tần số thường là 40kHz cho nhu cầu đo khoảng cách. </li>
</ul>



<p class="has-text-align-center">&#8211; <img loading="lazy" decoding="async" width="512" height="227" src="https://lh7-us.googleusercontent.com/H-2iPwhYD_NW1ZyLUI5ziPDMFS02V1D0pn_n-ZStNXvVtnfsabxPMRe3rfNUK7wbgLGVmJZlgZTpCsbiBVQdBnqcJXvnHUxG9qEAuxFLD3sHSQPvX081wewFMtU6A-VCViC2py4697LJZgNiuQpbcZI"></p>



<ul class="wp-block-list">
<li><strong>Bộ phận thu sóng siêu âm phản xạ: </strong>Thiết bị thu là dạng loa gốm có cấu tạo chỉ nhạy với một tần số chẳng hạn như 40KHz. Qua một loạt các linh kiện như OPAM TL072, transistor NPN…Tín hiệu này liên tục được khuếch đại biên độ và cuối cùng là đưa qua một bộ so sánh, kết hợp với tín hiệu từ bộ điều khiển để đưa về bộ điều khiển.</li>



<li><strong>Bộ phận xử lý, điều khiển tín hiệu: </strong>Vi điều khiển (PIC16F688, STC11,…) được sử dụng làm nhiệm vụ phát xung, xử lý tính toán thời gian từ khi phát đến khi thu được sóng siêu âm nếu nhận được tín hiệu TRIG. </li>
</ul>



<p><strong>● Nguyên lý hoạt động: </strong> Để đo khoảng cách bằng cảm biến siêu âm HC-SR04, bộ phận phát sóng sẽ phát 1 xung rất ngắn (5 microseconds) từ chân TRIG. Tiếp theo, 1 xung HIGH ở chân ECHO sẽ đượcphát đi cho đến khi nhận lại được sóng phản xạ ở chân này. Lúc này, độ rộng của xung sẽ bằng với thời gian sóng siêu âm được phát từ cảm biến và phản xạ lại. Sau khi đã tính được thời gian, cảm biến sẽ chia cho hằng số tốc độ âm thanh trong không khí để ra khoảng cách. </p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/YUu5LiFZ4JWkxWaZ-9FyZMjZaoJLjOERXE8WWAwEXRQUKxiII4wEV8rM3Q67JNEu28HnzLT3KPrhwY01X-AvogSw3YdxUzb6VCgr2-zSr6U7wjiHCQd6RTdiJpyl9G6P43eQmH3gbZmsTqmVyAYfgFU" alt=""/></figure></div>


<p><strong>● </strong><strong>Thông số kỹ thuật cảm biến siêu âm HC-SR04:&nbsp;</strong></p>



<ul class="wp-block-list">
<li>Model: HC-SR04 </li>



<li>Điện áp làm việc: 5VDC </li>



<li>Dòng điện: 15mA </li>



<li>Tần số: 40 KHz</li>



<li>Khoảng cách phát hiện: 2cm – 4m </li>



<li>Tín hiệu đầu ra: Xung mức cao 5V, mức thấp 0V </li>



<li>Góc cảm biến: Không quá 15 độ. </li>



<li>Độ chính xác: Lên đến 3mm </li>



<li>Chế độ kết nối: VCC / Trig (T-Trigger) / Echo (R-Receive) / GND</li>
</ul>



<p>● <strong>Sơ đồ kết nối:&nbsp;</strong></p>



<ul class="wp-block-list">
<li>Chân VCC: Chân nguồn 5V </li>



<li>Chân TRIG: Chân digital output </li>



<li>Chân ECHO: Chân digital input </li>



<li>Chân GND: Chân nguồn âm </li>
</ul>



<p><strong>● Code tham khảo: </strong></p>



<pre class="wp-block-code alignwide"><code>const int trig = 8; //chân TRIGcủa HC-SR04 
const int echo = 7; //chân ECHO của HC-SR04 
void setup() 
{
Serial.begin(9600); //giao tiếp Serial với baudrate 960 
pinMode(trig,OUTPUT); //chân TRIG sẽ phát tín hiệu 
pinMode(echo,INPUT); //chân ECHOsẽ nhận tín hiệu 
} 
void loop() 
{ 
unsigned long time; //biến đo thời gian 
int distance; //biến lưu khoảng cách 
/* Phát xung từ chân trig * 
digitalWrite(trig,0); //tắt chân trig 
delayMicroseconds(2) 
digitalWrite(trig,1); //phát xung từ chân trig 
delayMicroseconds(5); //xung có độ dài 5 microSeconds 
digitalWrite(trig,0); // tắt chân trig 
/* Tính toán thời gian * 
//Đo độ rộng xung HIGH ở chân echo. 
time = pulseIn(echo,HIGH); 
//Tính khoảng cách đến vật 
distance = int(time/2/29.412) 
/* In kết quả ra Serial Monitor * 
Serial.print(distance) 
Serial.println(“cm“) 
delay(200) 
} 
</code></pre>



<p>4. <strong>Cảm biến hồng ngoại (tiệm cận)&nbsp;</strong></p>



<p><strong></strong>● Cảm biến hồng ngoại (IR) là một “công tắc” cảm biến tiệm cận. Khi một vật thể hoặc chướng ngại vật đủ gần để chặn tầm nhìn phía trước của 2 đèn LED, nó sẽ kích hoạt module thu IR. Cảm biến sử dụng nguyên lý phản xạ điện từ, càng gần bề mặt phản xạ (vật thể) thì tín hiệu nhận được từ máy phát càng mạnh do khoảng cách truyền của sóng phản xạ càng ngắn.</p>



<p><strong>● </strong><strong>Nguyên lý hoạt động:&nbsp;</strong></p>



<ul class="wp-block-list">
<li>Khi có một vật cản đủ gần, phát hiện điện từ IR do bộ thu IR nhận được cao hơn mức ngưỡng (mức người dùng cài đặt trước), cảm biến sẽ thay đổi chế độ chuyển đổi đầu ra. Cảm biến hồng ngoại chỉ có 2 tín hiệu đầu ra Digital hoặc ở mức cao (5V hoặc 3,3V phụ thuộc vào điện áp đầu vào) hoặc thấp (0V), do đó cảm biến này không thể được sử dụng như một cảm biến khoảng cách mà chỉ như một công tắc kích hoạt. </li>



<li>Khi không có chướng ngại vật hoặc đối tượng trong khoảng cách phát hiện, đầu ra ở vị trí CAO (5V hoặc 3.3V). Khi khoảng cách ngắn hơn hoặc bằng ngưỡng đã đặt, tín hiệu đầu ra sẽ chuyển sang vị trí THẤP (0V). </li>



<li>Bởi nguyên lý hoạt động trên, cảm biến hồng ngoại rất thích hợp để ứng dụng làm công tắc ảo hoặc tránh chướng ngại vật. </li>
</ul>



<p><strong>● </strong><strong>Sơ đồ kết nối&nbsp;</strong></p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/xz_VuGRfhzEKw50ySX6z9mPBKu3IRsMPgckWqqPG5ECfXaRYxLuB08AD0fUxVwWSjXpRWrcBf-5po4xyClSyZ7qgDFkQoslRjzGEMVsyI2RyGQcqIqwbXtX831qVqgar8wWa9-z6eM70AIz62Vtcazs" alt=""/></figure></div>


<p><strong>● Code tham khảo: </strong></p>



<pre class="wp-block-code alignwide"><code>void setup() 
{ 
Serial.begin(9600); //giao tiếp Serial với baudrate 960 
} 
void loop() 
{ 
Serial.println(digitalRead(3)); //Chân output cắm vào cổng digital 3 }
</code></pre>



<p><strong>C. Cảm biến đo góc &#8211; Gyro&nbsp;</strong></p>



<p><strong>1. Khái niệm&nbsp;</strong></p>



<p>Là cảm biến dùng để đo gia tốc thẳng theo hướng ba trục x, y, z và vận tốc xoay quanh trục x, y, z trong hệ tọa độ không gian của cảm biến đó.&nbsp;</p>



<p><strong>2. Cấu tạo&nbsp;</strong></p>



<p>● Gồm 2 thành phần chính: <strong>Bộ phận đo </strong>và <strong>bộ phận xử lý&nbsp;</strong></p>



<ul class="wp-block-list">
<li>Với các cảm biến gyro hiện đại như hiện nay, <strong>bộ phận đo</strong> thường được cấu tạo bởi một cấu trúc gọi là MEMS (Micro-Electro-Mechanical-Systems). Đây là một cấu trúc cấu thành từ các phần tử nhỏ có kích cỡ từ 0.001 mm đến 0.1 mm, được làm từ nhiều vật liệu như kim loại, silicon, polymer,&#8230; Đơn giản có thể hiểu đây là một hệ thống cơ-điện tử siêu nhỏ được gắn trong con chip. </li>



<li><strong>Bộ phận xử lý </strong>sẽ xử lý các thông số được lấy bởi bộ phận đo và trả về bo mạch chủ. </li>
</ul>



<p><strong>3. Nguyên lý hoạt động&nbsp;</strong></p>



<p>● Cảm biến gia tốc (accelerometer) hoạt động dựa trên sự thay đổi điện dung của các bộ phận nhỏ vừa kể trên khi chuyển động. Nó giống như một vật có khối lượng gắn với một cái lò xo. Khi có gia tốc, vật sẽ bị kéo chuyển động ra/ vào, gây ra sự thay đổi về giá trị điện dung giữa vật đó và một điện cực. Dựa vào giá trị đo được, qua bộ xử lý sẽ cho ra gia tốc.&nbsp;</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="602" height="339" src="https://lh7-us.googleusercontent.com/NF2YNPvfLRndCCpDGYyKffRUD_G_fIs_h-MzY9SxqMTvtv6IuUafZECmr3FkvWop_Q_wEpFdEKcFLmNG67Zdk8J5Rcp8gAlloujV9QUdghnrxWzvCm_g1S7wtrbGS-D6KC75_IDy-8FHvDmY_l8bOl0"></p>



<p class="has-text-align-left">● Cảm biến vận tốc góc (gyroscope, hay còn gọi tắt là gyro) hoạt động dựa trên hiệu ứng Coriolis. Có thể tưởng tượng đơn giản: một vật nhỏ vừa chuyển động vừa quay sẽ bị lệch ra khỏi quỹ đạo của nó do một lực gọi là lực Coriolis. Từ việc lệch này, điện dung của vật đó so với một điện cực sẽ thay đổi, thông qua việc đo sự thay đổi điện dung, bộ xử lý tính được vận tốc góc. </p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="602" height="339" src="https://lh7-us.googleusercontent.com/-F-d2a2IHsOcp5tN7qdp76MsuWLVVWsgQSoFxWvKkXgvZKnHiowXc3egVNn_dcF1sg5GoMKM-_ERQzJHvyAmnPcVEtop_w9OC-qNasrdReA0OlN3eLwIwa0FaUSq0RqrVUYiakJ0bV1fh56Opl_YEc0"></p>



<p>● Cảm biến đo góc so với trục từ trái đất (magnetometer) hoạt động dựa trên hiệu ứng Hall và hiệu ứng biến đổi điện trở theo từ trường của một số kim loại đặc biệt. Hiệu ứng Hall hoạt động dựa trên việc đưa một dòng điện chạy qua một tấm kim loại. Khi có một từ trường tác động vào tấm kim loại, dòng điện chạy qua tấm kim loại sẽ bị ảnh hưởng. Thông qua việc đo sự thay đổi về hiệu điện thế, bộ xử lý sẽ tính ra được góc so với trục từ trái đất. Một số cảm biến sử dụng hiệu ứng biển đổi điện trở theo từ trường của một số kim loại như sắt và niken. </p>



<p><strong>4. MPU-6050&nbsp;</strong></p>



<p>● MPU6050 IMU là loại gyro phổ biến nhất trên thị trường hiện tại bởi giá thành rẻ (khoảng 50000 VND), độ chính xác cao và dễ tiếp cận.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/aqIpJ7kOjuf6xlgN73EpA9jbjZBY0QCjKCuKfqWm7k_q7o0sU0tDppsRk1yntH4-wGzyBy-J7uTCTBw_i-5Y1j0iuYxIF1iO2M_AHdtkgdHYoL0M2GQlngqL-IXpRn7TvxhHEzKFW6hfga2U-CJJWMc" alt=""/></figure></div>


<p>● <strong>Sơ đồ lắp mạch:&nbsp;</strong></p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/53_qx02YUX_UXgWJcxgypYD6kQunG5WVpCzR6hq4HFMWGet1IJXkLkuuLVi7up8Dcgvi_hAN7UDMRHBFh7THw-8agM-KWHPi-Tuvqopo-FoJT2dKU9pEi2ZHJJNvLTDFjUZgzfJXqkOFL0-Es5a7v1E" alt=""/></figure></div>

<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/UvxIPpsRjtiJSkQUuzWkNRetqmH1Xa3tUt03dXx2uUc9oMPf8NRwGSgZne9TtUFeuHzNGfhAV2M_AWNSx7nF0IWe9996rYaUi4_p3eN0jdXDxhPaJlA08u5HfLjnq__ZbAzk4hzI-3SoUUs5d4z8rOE" alt=""/></figure></div>


<p><strong>● Cách nối: </strong></p>



<ul class="wp-block-list">
<li>Cấp nguồn: nguồn được cấp cho cảm biến qua hai pin VCC và GND. VCC (cực dương) nối với nguồn điện 5V, còn GND (cực âm) nối với cực âm trên Arduino.</li>



<li>Kết nối I2C: kết nối I2C thông qua 2 pin là SCL (clock) và SDA (data). Nối pin SCL trên cảm biến với lỗ SCL trên Arduino (như hình), và nối pin SDA trên cảm biến với lỗ SDA trên Arduino (trên hình). </li>



<li>Các pin khác trên module cảm biến không nối gì. </li>
</ul>



<p><strong>● Cách lập trình:</strong></p>



<ul class="wp-block-list">
<li>Thông thường, để giao tiếp với các thiết bị I2C, người ta thường dùng các hàm để gửi / nhận command I2C từ thư viện `Wire.h` trên Arduino. Tuy nhiên, vì tính chất phức tạp của module này, việc tự viết các command I2C để gửi và nhận là khá phức tạp và rắc rối, đôi khi còn để lại một số lỗi khó tìm ra nếu không cẩn thận. Chính vì vậy, đã có nhiều thư viện mã nguồn mở được sinh ra để làm điều này một cách an toàn và dễ dàng hơn. Một trong các thư viện đó là thư viện Arduino-MPU6050: <a href="https://github.com/jarzebski/Arduino-MPU6050">https://github.com/jarzebski/Arduino-MPU6050</a></li>
</ul>



<ul class="wp-block-list">
<li>Cài đặt thư viện: </li>



<li>Tải file zip của repo https://github.com/jarzebski/Arduino-MPU6050 về (trong mục Code có phần tải zip) </li>
</ul>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="574" height="279" src="https://lh7-us.googleusercontent.com/LqWA14dx4iGkZvzmXi6deYNgG0M6qcawoB9cS6swIzyQV79PV2noMVPbwWz_88w75XNMhcPU7uP_A75ZxXGc7oAUH5y0YQHF7nN86jUvLN9_oPmJSDt8aLzZbrAZPV66SVFeKDBOu7mMQjjjvpDYGfM"></p>



<ul class="wp-block-list">
<li>Mở Sketch -> Include Library -> Add .ZIP Library </li>



<li>Chọn file zip vừa tải về. </li>



<li>Cài thành công sẽ có thông báo: </li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/GCxWLucGLnvKSZaxqOECvSczo-uRIEfAdso_ctBJ8WDdPis0RIV6CNyMbdwCx_Cm77OCHIlLXnv-YcSZysffVsNj_fGaVfcHozQVGYqFhqPq8ETD5bK6FClBX8VOkVhzP4EJOyy4PQ78e9DeONNeVP4" alt=""/></figure></div>


<ul class="wp-block-list">
<li>Thử một số ví dụ cơ bản </li>
</ul>



<p><strong>+ Tính toán các góc của Gyro </strong></p>



<pre class="wp-block-code alignwide"><code>// Đầu tiên, chúng ta sẽ include các thư viện cần dùng để giao tiếp với cảm biến này 
#include &lt;Wire.h> // Thư viện dùng để thực hiện giao tiếp I2C (lưu ý include trước thư viện MPU6050) 
#include &lt;MPU6050.h> // Thư viện để giao tiếp với MPU 
MPU6050 mpu; // Khai báo một cảm biến MPU6050
// Các biến dùng để đếm thời gian (sẽ giải thích bên dưới) 
unsigned long timer = 0; 
float timeStep = 0.01; 
// Các biến lưu giá trị các góc hiện tại 
float pitch = 0; // Pitch: góc quay so với trục Y (trục hướng về phía trước trên module cảm biến (xem ảnh ở trên). Hiểu đơn giản, với góc này ta xác định được cảm biến đang nghiêng sang trái hay sang phải (khác với xoay của trục Z) 
float roll = 0; // Roll: góc quay so với trục X (trục hướng sang ngang của cảm biến). Hiểu đơn giản, với góc này ta xác định được cảm biến đang nghiêng về phía trước hay đang được nâng mũi lên (nghiêng về phía sau) float yaw = 0; // Yaw: góc quay so với trục Z (trục hướng thẳng đứng, vuông góc với mặt đất). Hiểu đơn giản, với góc này ta xác định được cảm biển đang xoay trái hay phải 
void setup() 
{ 
// Mở serial port với baudrate 115200 bps 
Serial.begin(115200); 
// Khởi tạo kết nối với cảm biến 
// Khởi tạo kết nối sử dụng hàm mpu.begin() với hai tham số là MPU6050_SCALE_2000DPS và MPU6050_RANGE_2G để chỉ sample rate và range của cảm biến (không nên thay đổi trừ khi thấy không phù hợp với cảm biến của mình) 
// Khi khởi tạo thành công, hàm sẽ trả về giá trị boolean true, còn nếu không thì false. 
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) { 
Serial.println("Could not find a valid MPU6050 sensor, check wiring!"); // Thông báo chưa kết nối được 
delay(500); // Chờ 500 ms rồi kết nối lại 
} 
// Calibrate gyro (chỉnh gyro về giá trị ban đầu phù hợp) 
mpu.calibrateGyro(); 
void loop() 
{ 
// Lấy thời gian hiện tại tính theo ms kể từ lúc bật chương trình timer = millis(); 
// Đọc giá trị gyro 
Vector norm = mpu.readNormalizeGyro(); 
// Tính toán các giá trị góc
// Ở đây, giá trị góc hiện tại được tính bằng giá trị góc trước đó + vận tốc góc hiện tại * khoảng thời gian cố định 
pitch = pitch + norm.YAxis * timeStep; 
roll = roll + norm.XAxis * timeStep; 
yaw = yaw + norm.ZAxis * timeStep; 
// Xuất giá trị góc ra serial console 
Serial.print(" Pitch = "); 
Serial.print(pitch); 
Serial.print(" Roll = "); 
Serial.print(roll); 
Serial.print(" Yaw = "); 
Serial.println(yaw); 
// Chờ một khoảng thời gian bằng timeStep * 1000 - khoảng thời gian đã tốn để thực thi đoạn code trên rồi mới tiếp tục thực thi 
delay((timeStep*1000) - (millis() - timer)); 
} </code></pre>



<p><strong>+ Tính gia tốc theo hai trục X, Y và Z </strong></p>



<pre class="wp-block-code alignwide"><code>#include &lt;Wire.h> 
#include &lt;MPU6050.h> 
MPU6050 mpu; 
void setup() 
{ 
Serial.begin(115200); 
Serial.println("Initialize MPU6050"); 
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) { 
Serial.println("Could not find a valid MPU6050 sensor, check wiring!"); delay(500); 
} 
} 
void loop() 
{ 
// Đọc các giá trị gia tốc theo ba trục 
Vector normAccel = mpu.readNormalizeAccel();
Serial.print(" Xnorm = "); 
Serial.print(normAccel.XAxis); 
Serial.print(" Ynorm = "); 
Serial.print(normAccel.YAxis); 
Serial.print(" Znorm = "); 
Serial.println(normAccel.ZAxis); 
delay(10); 
} </code></pre>



<p><strong>+ Tính toán gia tốc quay theo hai trục X và Y </strong></p>



<pre class="wp-block-code alignwide"><code>#include &lt;Wire.h> 
#include &lt;MPU6050.h> 
MPU6050 mpu; 
void setup() 
{ 
Serial.begin(115200); 
Serial.println("Initialize MPU6050"); 
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) { 
Serial.println("Could not find a valid MPU6050 sensor, check wiring!"); delay(500); 
} 
} 
void loop() 
{ 
// Đọc giá trị gia tốc hiện tại 
Vector normAccel = mpu.readNormalizeAccel(); 
// Dùng lượng giác để tính toán gia tốc quay 
int pitch = -(atan2(normAccel.XAxis, sqrt(normAccel.YAxis*normAccel.YAxis + normAccel.ZAxis*normAccel.ZAxis))*180.0)/M_PI; 
int roll = (atan2(normAccel.YAxis, normAccel.ZAxis)*180.0)/M_PI; 
// Output 
Serial.print(" Pitch = "); 
Serial.print(pitch);
Serial.print(" Roll = "); Serial.print(roll); 
Serial.println(); 
delay(10); 
}

<span id="docs-internal-guid-b9f6fcfa-7fff-eb22-c88d-a8cd5a2850f1"><p dir="ltr" style="line-height:1.2;margin-left: 108.54000091552734pt;margin-top:19.121490478515625pt;margin-bottom:0pt;"></p></span></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" id="block-66ec5f6f-0be8-4826-a9c9-b4b49e310232"/>



<p class="has-text-align-center" id="block-9667350b-a743-46e4-a97b-55c91841eeb5"><strong>Tài liệu được trích dẫn, tham khảo từ các nguồn:</strong></p>



<ol class="wp-block-list" id="block-4e80e18a-cecd-40e0-9ae1-0e1ded8f74f1">
<li>Tài liệu team First Global Challenge VietNam</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity" id="block-aacd3b47-3a17-4cef-ad89-b056c06c4e77"/>



<p class="has-text-align-center" id="block-4c1eb010-c923-4cd3-9297-c2bd35a99dc5"><strong>License.</strong></p>



<p class="has-text-align-center" id="block-b36d8fa6-b01e-4bd5-9714-cc75f7971d12">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>


<div class="wp-block-image">
<figure class="aligncenter" id="block-461f2765-0d05-4f7e-9b09-bdaa5a1ccc8f"><img decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" alt="This image has an empty alt attribute; its file name is 38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA"/></figure></div>


<p><br></p>



<p><span id="docs-internal-guid-b9f6fcfa-7fff-eb22-c88d-a8cd5a2850f1"><p dir="ltr" style="line-height:1.2;margin-left: 90.31199645996094pt;margin-top:2.5584716796875pt;margin-bottom:0pt;"></p><div><span style="font-size: 12pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; vertical-align: baseline;"></span></div></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/sensors/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Blocky</title>
		<link>https://vsteam.edu.vn/blocky/</link>
					<comments>https://vsteam.edu.vn/blocky/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 16:01:52 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=1286</guid>

					<description><![CDATA[I. GIỚI THIỆU VỀ MẠCH ARDUINO UNO&#160; Mạch Arduino Uno là một trong những loại mạch phổ biến nhất được sử dụng cho nhiều mục đích công nghiệp cũng như việc giảng dạy về điện tử và lập trình.&#160; Dưới đây là một vài thông số cơ bản của một mạch điện Arduino Uno. Chi [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="116" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-4-1024x116.png" alt="" class="wp-image-601"/></figure></div>


<p><strong>I. GIỚI THIỆU VỀ MẠCH ARDUINO UNO&nbsp;</strong></p>



<p>Mạch Arduino Uno là một trong những loại mạch phổ biến nhất được sử dụng cho nhiều mục đích công nghiệp cũng như việc giảng dạy về điện tử và lập trình.&nbsp;</p>



<p>Dưới đây là một vài thông số cơ bản của một mạch điện Arduino Uno. </p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="576" height="366" src="https://lh7-us.googleusercontent.com/04aydY_26xKSj4HBe7Gq2Yiqllo1SCs8ynyE8dOvPWRb37rxVD6HA0dqnpzVY48aOW1oc7PHcRx34wfJAxaoDWOt8kKrjYLmrDp9B_r7KnCOUVx50EQiROxIfzXFc2BTTR8MxPDPVKaOS90UjlmfPTw"></p>



<p>Chi tiết hơn có thể tìm kiếm thông số trên trang chủ của Arduino. </p>



<p><strong>II. LẬP TRÌNH CÙNG ARDUINO&nbsp;</strong></p>



<p>Có rất nhiều ngôn ngữ lập trình khác nhau có thể được sử dụng để lập trình Arduino như C, Python, &#8230; tuy nhiên, giáo trình này sẽ hướng dẫn các bạn sử dụng lập trình kéo thả Blockly để điều khiển mạch Arduino.&nbsp;</p>



<p><strong>1. Cài đặt phần mềm&nbsp;</strong></p>



<p>Bước 1: Trước hết, chúng ta phải lên mạng để tải về những chương trình cần thiết. Các bạn có thể gõ lên thanh công cụ là <strong>github Blockly@duino </strong>hoặc truy cập vào đường link dưới đây.&nbsp;</p>



<p><a href="https://github.com/technologiescollege/BlocklyArduino_AIO">https://github.com/technologiescollege/BlocklyArduino_AIO</a></p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img decoding="async" src="https://lh7-us.googleusercontent.com/ftybXriPfPOyVH9VxET8Sc17s3v7syRmdYuFjvmeyA5_qBB_g4b2j3lJ-eLQx35qf7W7xCVrYg_LkQaHFwTrTQUXNpAiGEfRzn32RPPUtkxlDskcfTg_Gp_t7rzkIx6tSYbnVnBa9vXVJn8jSMNuajs" alt="" style="width:437px;height:auto"/></figure></div>


<p>Sau khi các bạn đã vào được trang github BlocklyArduino_AIO, màn hình của bạn sẽ hiện ra như sau.&nbsp;</p>



<p><strong>Bước 2: </strong>Các bạn bấm vào ô hình chữ nhật màu xanh lá cây có chữ Code ở góc bên tay trái. Một ô cửa sổ sẽ hiện ra cho bạn. Các bạn bấm tiếp vào Download Zip để tải chương trình về máy. </p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="473" height="266" src="https://lh7-us.googleusercontent.com/Fnr9xaGLAWt1XrIeHKy92Mdtz8532wjFUpEQVcwf4z8DdPuMbXfV9_JX8d1ShzaDhl4bxC2vdg3VudBKEzwHH0-uLTgVAZto9BPlwMkJ2HXUmzVAw1SQmwzWKYcB8T0LckcACnZ1hdSWD-fHekzCcHI"></p>



<p>Sau đó, các bạn lựa chọn vị trí ở trong ổ cứng của máy tính để các bạn tải về máy. </p>



<p>Sau khi tải thành công, vào địa chỉ mà các bạn đã lưu chương trình ở trên máy tính, các bạn sẽ nhìn thấy cửa sổ sau.&nbsp;</p>



<p><strong>2. Giao diện của phần mềm Blockly@rduino </strong></p>



<p>Sau khi đã tải về thành công, chúng ta kích đúp chuột trái vào file block@rduino_AIO.exe để chạy chương trình. Lưu ý, để chương trình chạy được, cần phải kết nối một bảng mạch Arduino với máy tính đang được dùng để lập trình.&nbsp;</p>



<p class="has-text-align-center">Dưới đây là giao diện của chương trình khi đã chạy được thành công. <img loading="lazy" decoding="async" src="https://lh7-us.googleusercontent.com/nMSorpK4wQGZypMDuuCSodPwo6VtAWFxcNX1zcSvFkidSfKy0p7mlK6KW7UzcxqefI528nk57LabELLKVcTDJzshStG8xxTg3rDPm0mPL-xNBNHm2B0j8fZsu0ASEccW3hAgLG9W1yp6pJnRoGSi3WU" width="576" height="276"></p>



<p>Nút Save project được sử dụng để lưu chương trình ở về máy tính.&nbsp;</p>



<p>Nút Load project được sử dụng để load chương trình từ máy tính lên app để viết chương trình.&nbsp;</p>



<p>Nút Open example sẽ mở ra một ô cửa sổ chứa các ví dụ khác nhau sử dụng mạch Arduino. </p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/7queSTq9GWsJK7bC-qEFLQamEHQ0oESFQqGr5NcrJ2ZcZl9uGVebhioUUQUdWEr3ZjQewe-GQIIXoy7cA0p1AOo26azgHK-hjsaTfU8yJmQboyfJ1H_nSbbodxqKRtVkXZAPQCgdjCiJkgEvXWvPLWE" alt=""/></figure></div>


<p>Nút màu xanh nước biển ở góc phía dưới bên tay trái ấn vào thì hiện ra một tab được dùng để tự tạo Block của mình.&nbsp;</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="576" height="280" src="https://lh7-us.googleusercontent.com/ZuoDcHCreCwFLy7YWCmic8nQmPh7l1Fdt0E7RnZS5bRI9UX-wM9Sr_5BTxp81t2YchNmByKU1TMfpUs5HiUVRgpTc39nGubDMLiamWnM7FgG9VomSSWS1xyMPwOVMRJEB-jazHo_t5aiJ9d5AIrgBCk"></p>



<p>Nút Modify examples được dùng để chỉnh sửa các ví dụ có sẵn. </p>



<p>Chương trình này được phát triển bởi người Pháp nên ngôn ngữ của nó là tiếng Pháp. Để chuyển sang tiếng Anh, chúng ta click chuột vào Project setup. Một ô cửa sổ sẽ hiện ra.&nbsp;</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="576" height="277" src="https://lh7-us.googleusercontent.com/KOuvhssa2GaYKd2-3CJQ9x_bH-0299Ods_Qqb4a6kaCgqcx62JVHy8Y_MYcx_Fi46cIEcKecUM3CARKgee4YJPLG5gsvOZ0n6qkuvVUgNzzGVEi7zOT7mkdUlh-KKtmhjHPKgd49TmZRQRWk82Zs4Rg"></p>



<p>Ô chứa chữ Language được dùng để lựa chọn ngôn ngữ. Chúng ta sẽ chọn English. Ô chứa chứ OpenDyslexic được dùng để lựa chọn kiểu chữ. </p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="576" height="277" src="https://lh7-us.googleusercontent.com/xtpZ5J73q__dxKMAWo_-EDBmLClq9bpbPPFmLskKycLsnGkxruuITWoO5ec02_VMcK_Zg6H9PsBNKbOiDQ3CD-3VRtGEmnW-m9gyNMhXYqQbiQpnJ1BIA6lG6-1wrt88Z2xg6gHJDBjGVWri6a-hqGI"></p>



<p>Ô chứa chữ Board được dùng để lựa chọn loại bảng mạch chúng ta sẽ sử dụng để lập trình. Chúng ta sẽ lựa chọn bảng mạch Arduino Uno.&nbsp;</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="576" height="276" src="https://lh7-us.googleusercontent.com/X-tsg6b7rTqHdBBjXfDNEtISlOzrbwAmz0TsRqBbtkTY61FY7DaZHAC26wjTQ-0MLt4zG35G3WqS4MsoCtbAmGe5KYVd9iteqkFcSVFRW-hfZ2QqN1Hgoip3Jvy_W3OB5aDUdIBsjon4BtYn5lKsKQ0"></p>



<p>Sau khi hoàn thành xong các bước, chúng ta nhận vào nút Ok để kết thúc. </p>



<p>Nút bấm Configure Block được sử dụng để lựa chọn những loại Block mà mình sẽ sử dụng.&nbsp;</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/RpO6TPGdCgtMD2KaFnIruP3cgFoBpwrsqABc-Jrb7D4Hk3p7iQlsjkKdikU7OCOElZd5kzPL57VwPE8E5r1amsdsiKxJ53JrDKmn064fH_2tk7LQXrT2eUbhzcxRxvZaUeYfyIculOcNov2JE1nW6NM" alt=""/></figure></div>


<p>Mình sẽ bấm vào thanh hình chữ nhật ở trên đầu của ô cửa sổ, nó sẽ hiện ra các cấp độ và mức độ khác nhau của Block. Mình sẽ bấm vào ô All để hiển thị toàn bộ các block được sử dụng. </p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/BBYXCWHnd0qRrkdI5x0Y18YdSgBKd6d1Ca531Kr-j4ME_k9ZvpLi6y328JlmffX66c2Wc_OT2BdpNsKC4KIdImzk3ne8mVVMliq0rJwaydSf-1dIbIjZ7LsIcNz9FN8HCRpg-iWlfxY3iFmUpf_vYEU" alt=""/></figure></div>


<p>Sau khi đã chọn xong, mình sẽ nhấn vào Ok để hoàn thành chương trình. Vậy là mình đã thực hiện xong phần set up xong.&nbsp;</p>



<p>Bên cạnh việc tải chương trình về máy, các bạn cũng có thể làm việc online bằng cách truy cập vào đường link sau:&nbsp;</p>



<p><strong>https://projecthub.arduino.cc/scanet/5756fb3f-c98f-4083-b230-0b44ff98a0bc </strong>Sau đó các bạn bấm vào nút Blockly@rduino để vào giao diện lập trình. </p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img decoding="async" src="https://lh7-us.googleusercontent.com/ZvU24xWIMeaaVz1UDvYYIYuIMrMh9APsrrKTHml0p0fPSp-BWQiTTgLYKpW1GeBTr7nsXV4HavdjI5k4ziM1Tyc990jAfUM8Z1gjpLOhObF8jOtw03QOjLuPSRBcMv0ZlSHZVKNXz2-q_SL-Yio5sBc" alt="" style="width:426px;height:auto"/></figure></div>


<p><strong>3. Lập trình Arduino Uno&nbsp;</strong></p>



<p>Trong lập trình Arduino, chúng ta sẽ thao tác chính với các kiểu dữ liệu sau. Int: số tự nhiên&nbsp;</p>



<p>Float: số thập phân&nbsp;</p>



<p>String: chuỗi kí tự&nbsp;</p>



<p>Char: mỗi đơn vị kí tự&nbsp;</p>



<p>Boolean: giá trị logic, gồm True và False.&nbsp;</p>



<p>Chương trình trong Arduino Blockly sẽ được đọc từ trên chạy xuống. Sau đây là các khối lệnh phổ biến được sử dụng nhiều trong Arduino Blockly. </p>



<p class="has-text-align-center"><strong>Khối lệnh Loops&nbsp;</strong><img loading="lazy" decoding="async" src="https://lh7-us.googleusercontent.com/H9QDqeLTl6X5YZPMyp86DtslO2iNejoBwWW17aAC1fDm8Pz2ihcqQ9OXKspUYD1rEwFclIK9aIAfqcETg4qARZvzxzFn1CrzPMcTo3YBYM2YI6jZrUfAKCKE418-2FGDprs-dyoSrr9LeKrBXdo0oh8" width="235" height="267"></p>



<p>Bất cứ khối lệnh nào đưa vào trong khối lệnh Loops đều sẽ lặp lại nhiều lần. Số lần lặp lại phụ thuộc vào số mình điền vào, có vòng lặp sẽ lặp đi lặp lại vô hạn lần. Ở khối lệnh thứ 1 và thứ 2, đó là vòng lặp chạy theo số lần mà mình đưa ra yêu cầu để chạy theo. Ví dụ ở đây là chạy 10 lần. Ở khối lệnh thứ 3, vòng lặp sẽ chạy theo một điều kiện, khi điều kiện ấy là đúng thì vòng lặp tiếp tục chạy, khi điều kiện ấy trở thành sai thì bỏ vòng lặp. Ở khối lệnh thứ 4, vòng lặp sẽ chạy theo một biến i. Biến i sẽ chạy từ giá trị 1 đến giá trị 10 như ví dụ ở trên, sau khi hoàn thành 1 vòng lặp nó sẽ cộng thêm 1 hoặc một giá trị tùy ý do mình tự điền vào. Khi chạm đến 10 hoặc vượt quá 10 thì chương trình sẽ tự động ngừng lại. Ở khối lệnh cuối cùng, vòng lặp sẽ kết thúc khi chạy đến khối lệnh này.</p>



<p class="has-text-align-center"> <strong>Khối lệnh Logic </strong><img loading="lazy" decoding="async" width="125" height="336" src="https://lh7-us.googleusercontent.com/eNAfdXb2ZBMNkbE0mcjrLD4WRq7NFHZC5pMchVZuD3VveT2otIfzo6kQpKc1ykixAQRFiuQ81c9rluzbaFN1gED1R1jR2SHhHiH_OVbI2JU6kZAAOEPDFmWvXO0qBHMgw0BSY9mHrEU3DTtXIMvDahg"></p>



<p>Khối lệnh điều kiện sẽ chạy theo một điều kiện xác định. Ở khối lệnh thứ nhất, chúng ta đặt một khối lệnh bên cạnh if để biểu thị điều kiện kiểm tra, ví dụ như 0 = 1. Nếu điều kiện đó là đúng, thì khối lệnh sẽ thực thi lệnh được bên cạnh chữ do. Ở khối lệnh thứ hai, chúng ta sẽ kiểm tra điều kiện của biến i ghi bên cạnh chữ Switch, nếu i bằng 1 chẳng hạn, hoặc i lớn hơn 10, thì sẽ thực hiện khối lệnh đặt bên cạnh chữ do. Ở khối lệnh thứ ba, đó là khối lệnh được dùng để kiểm tra hai kết quả có lớn hơn, bằng nhau hoặc nhỏ hơn. Ấn vào ô chữ nhật ở giữa để lựa chọn hình thức kiểm tra. Ở khối lệnh thứ tư là kiểm tra điều kiện đồng thời, hoặc 1 trong 2. Ở khối lệnh thứ năm là điều kiện ngược lại. Ở khối lệnh thứ sáu biểu thị giá trị Boolean là true (đúng) hoặc false(sai).</p>



<p><strong>Khối lệnh Math&nbsp;</strong></p>



<p>Các khối lệnh này được sử dụng để thực hiện hoặc biểu lộ các phép toán. Khối lệnh đầu tiên biểu thị giá trị số. Khối thứ 2 biểu thị giá trị góc. Khối thứ 3 biểu thị phép tính cộng, trừ, nhân, chia. Khối thứ 4 biểu thị các bất đẳng thức, lớn hơn, nhỏ hơn, bằng. Khói thứ 5 dùng để tính căn số. Khối thứ 6 được dùng để tính các hàm lượng giác. Khối thứ 7 được dùng để biểu thị các hằng số toán học như pi, e, Khối thứ 7 được dùng để kiểm tra tính chẵn lẻ của một số. Khối thứ 8 được dùng để tính tổng của một dãy. Khối thứ 9 được dùng để tính phần dư trong phép chia. Khối thứ 10 được dùng để giới hạn giá trị lớn nhất và bé nhất của một giá trị. Khối thứ 11 được dùng để chọn bừa 1 giá trị trong khoảng giữa 2 số. Khối thứ 11 được dùng để chọn bừa 1 phân số. </p>



<p><strong>Khối lệnh Arrays&nbsp;</strong></p>



<p>Khối lệnh này được sử dụng để thao tác với các chuổi và danh sách. Khối thứ nhất được sử dụng để tạo ra một chuỗi hoặc danh sách có tên xác định chứa những giá trị thuộc kiểu cụ thể và gồm tối đa bao nhiều thành phần. Khối thứ 2 được sử dụng để thay đổi một giá trị ở trong chuổi thành một giá trị khác. Khối thứ 3 được dùng để tạo 1 chuỗi rỗng với số lượng bất kì. Khối thứ 4 được dùng để tạo 1 chuỗi chứa những giá trị thuộc kiểu cụ thể. Khối thứ 5 được dùng để thay đổi giá trị của một giá trị trong chuỗi thành giá trị khác. Khối thứ 6 được dùng để trả về một giá trị ở trong chuỗi. Khói thứ 7 được dùng để lấy một giá trị có số thứ tự ở trong một chuỗi. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="194" height="346" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-59.png" alt="" class="wp-image-1289" style="width:194px;height:auto"/></figure></div>


<p><strong>Khối lệnh Variable&nbsp;</strong></p>



<p>Khối lệnh được sử dụng để tạo nên các biến. Click vào chữ Create variables sẽ hiện ra một cửa sổ để chúng ta có thể đặt tên biến.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="416" height="194" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-61.png" alt="" class="wp-image-1291" style="width:590px;height:auto"/></figure></div>


<p>Sau khi đã tạo xong biến, mình sẽ thấy tên của các hàm mới với biến mình đã tạo. Khối lệnh thứ nhất được sử dụng để gán giá trị cho biến mình đã tạo. Khối lệnh thứ hai được sử dụng để gán giá trị hằng số cho biến mình đã tạo và không thể thay đổi được nó. Khối lệnh thứ ba được sử dụng để gán kiểu cho một biến. Khối lệnh thứ tư khởi tạo một biến với kiểu xác định và có giá trị xác định. Khối lệnh thứ năm được sử dụng để thay đổi giá trị của một biến thành giá trị khác. Khối lệnh thứ 6 thể hiện biến. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="226" height="210" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-62.png" alt="" class="wp-image-1292"/></figure></div>


<p><strong>Khối lệnh Function </strong></p>



<p>Khối lệnh được sử dụng để thao tác tạo các hàm lệnh khác nhau để thực hiện các nhiệm vụ được giao. Khối lệnh đầu tiên được sử dụng để tạo ra các hàm có trả về giá trị như kết quả của một tính toán hoặc chữ cái. Chỗ type sẽ quy định giá trị trả về của hàm này thuộc kiểu nào. Khối lệnh thứ hai được sử dụng để tạo ra các hàm không trả về giá trị mà chỉ đơn thuần thực hiện hành động ví dụ như tính toán hoặc in ra màn hình. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="280" height="156" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-65.png" alt="" class="wp-image-1295"/></figure></div>


<p><strong>Khối lệnh Arduino&nbsp;</strong></p>



<p>Khối lệnh này sẽ bao gồm những câu lệnh được dùng để thao tác với mạch Arduino, cụ thể là mạch Arduino Uno. Lập trình Arduino gồm 3 phần. </p>



<p>Phần 1: Khởi tạo các biến, lựa chọn xem sử dụng các thư viện nào từ bên ngoài cho chương trình của mình. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="206" height="311" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-66.png" alt="" class="wp-image-1296"/></figure></div>


<p>Phần 2: Hàm setup() được sử dụng để chạy những hàm ở đầu chương trình để setup như gắn cổng, mặc định giá trị tốc độ trao đổi thông tin, … </p>



<p>Phần 3: Hàm loop() được dùng để chạy liên tục những hàm được cho vào trong đó. Khối lệnh số 1 ở bên tay trái được sử dụng để bắt đầu chương trình. Khối lệnh số 2 chính là hàm setup(). Bất cứ hàm nào cho vào trong khối lệnh này sẽ chạy đúng 1 lần duy nhất và chạy ở đầu chương trình. Khối lệnh thứ 3 chính là hàm loop(). Nó sẽ chạy ngay sau hàm setup() và bất cứ lệnh nào để trong khối lệnh này sẽ chạy liên tục không dừng. Khối lệnh thứ 4 là sự kết hợp của cả 2 khối lệnh trên. Khối lệnh thứ 5 được dùng để định nghĩa một biến. Ngay bên cạnh chữ Variable chúng ta sẽ cho khối lệnh Variable và bên cạnh chữ as chúng ta sẽ cho lấy khối lệnh chứa giá trị của chúng. Khối lệnh thứ 6 được dùng cũng để định nghĩa một biến. Khối lệnh thứ 7 được dùng để lấy thông tin từ một thư viện ở bên ngoài để dùng cho chương trình của mình. Ở trong ô chữ nhật xanh nhạt, mình có thể điền tên của file thư viện đó. Khối lệnh thứ 8 được dùng để lấy thông tin từ một file khác và dùng cho chương trình hiện giờ mình đang viết. Trong loạt khối lệnh dành cho Output, khối lệnh này được dùng để gửi giá trị đến các cổng khác nhau. Ví dụ, cổng digital sẽ nhận hai giá trị là 0 và 1, mỗi mức độ thì mạch sẽ cấp một hiệu điện thế nhất định cho cổng đấy. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="289" height="347" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-67.png" alt="" class="wp-image-1297"/></figure></div>


<p>Ví dụ từ 0,5 đến 0 V có thể tượng trưng cho mức 0. Từ 3,3 V đến 5 V có thể tượng trưng cho mức 1. HIGH tượng trưng cho mức 1. LOW tượng trưng cho mức 0. Khối lệnh thứ nhất được sử dụng để gắn cổng dẫn ra đèn led của mạch điện với một mức logic (HIGH hoặc LOW), Cổng này thường là cổng số 13 trên Arduino Uno. Khối lệnh thứ 2 được sử dụng để gắn một cổng digital với một mức logic. Khối lệnh thứ 3 được dùng để viết giá trị PWM vào một cổng xác định. Analog là một dạng tín hiệu liên tục, không bị ngắt quãng như Digital. Giá trị có thể là bất kì. PWM còn được gọi là tín hiệu giả analog. Như đã biết, digital pin chỉ cho phép 2 giá trị là 0 và 1. PWM cũng chỉ có 2 mức điện thế là thấp và cao nhưng thời gian giữa các xung tín hiệu là liên tục, qua đó nó trở thành dạng tín hiệu có thể coi như là liên tục với một mức độ chính xác nhất định. Tương tự như thế, khối lệnh thứ 4 được dùng dể viết giá trị vào một cổng Analog. 3 khối lệnh cuối có công dụng lần lượt giống khối lệnh 2, 3, 4 tuy chỉ có cách viết khác. Thay vì ta trực tiếp viết số mã hiệu của cổng thì ta sẽ gắn một khối code biểu thị số hiệu của cổng. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="247" height="268" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-68.png" alt="" class="wp-image-1298"/></figure></div>


<p>Trong mục Time, sẽ có 3 khối lệnh chính cần lưu ý. Khối lệnh số 1 được dùng để tạm dừng chương trình trong 1 đơn vị thời gian tính theo ms. Khối lệnh số 2 được dùng để tạm dừng chương trình trong 1 đơn vị thời gian tính theo s. Khối lệnh số 3 dùng để kiểm tra xem nếu tượng thời gian xác định đã trôi qua, thì thực hiện những khối lệnh được đặt ở trong nó. Khối lệnh số 4 được dùng để tính thời gian đã trôi qua từ khi bắt đầu theo ms. Tương tự thế, khối lệnh số 5 thời gian từ lúc bắt đầu nhưng theo đơn vị s. </p>



<p>Trong mục Serial Communication, sẽ có hai khối lệnh dưới đây cần lưu ý. Khối lệnh đầu tiên sẽ ra lệnh cho mạch thực hiện tốc độ giao tiếp thông tin. Tốc độ mặc định là 9600 bit/s nhưng có thể thay đổi được. Ví dụ như ở đây là 300 bps. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="251" height="90" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-69.png" alt="" class="wp-image-1299"/></figure></div>


<p>Khối lệnh thứ hai được dùng để in dự liệu theo dòng, Tức là mỗi giá trị được đặt ở trong dấu ngoặc kếp kia sẽ nằm trên đúng một dòng, nếu có khối lệnh in tiếp theo thì sẽ in ở dòng tiếp theo. Trong mục converting, ta sẽ có vài khối lệnh sau cần lưu ý. Khối lệnh số 1 để đổi giá trị sang kiểu char (character).Khối lệnh số 2 để đổi giá trị sang kiểu byte. Khối lệnh số 3 để đối giá trị sang kiểu int. Khối lệnh số 4 để đổi giá trị sang kiểu float. Khối lệnh số 5 để đổi giá trị sang kiểu String. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="211" height="188" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-70.png" alt="" class="wp-image-1300"/></figure></div>


<p><strong>4. Ví dụ&nbsp;</strong></p>



<p><strong>Dùng Arduino Blockly để điều khiển động cơ Servo quay một góc xác định. </strong><br>Trong khối lệnh setup(), ta có hai khối lệnh khác nhau. Khối lệnh đầu tiên được dùng để thiết lập tốc độ trao đổi thông tin là 115200 bps. Tiếp theo, khối lệnh tiếp theo được dùng để gắn cổng điều khiển của động cơ servo vào cổng số 19 ở trên bo mạch.</p>



<p>Trong khối lệnh loop(), ta có những câu lệnh sau. Khối lệnh đầu tiên được dùng để in ra giá trị lên trên Serial port để thể hiện giá trị góc mà mình đang muốn động cơ servo chạy đến, cụ thể ở đây là vị trí 0 độ. Khối lệnh tiếp theo được sử dụng để tạm dừng chương trình trong 2 s. Khối lệnh tiếp theo giống khối lệnh đầu để in ra vị trí mà hiện tại mình đang mong muốn động cơ servo của mình sẽ quay đến, cụ thể là 90 độ. Khối lệnh tiếp theo điều khiển động cơ servo chạy đến vị trí 90 độ. Khối lệnh cuối được dùng để tạm dừng chương trình trong 2s.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="254" height="247" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-71.png" alt="" class="wp-image-1301"/></figure>



<p>Toàn bộ chuỗi cụ thể của chương trình sẽ như sau. Ban đầu, mình sẽ in ra một dòng chữ là &#8220;Go to 0 degree&#8221; rồi động cơ servo sẽ chạy đến vị trí góc 0 độ rồi tạm nghỉ ở đó trong 2s. Rồi mình sẽ in tiếp ra dòng &#8220;Go to 90º&#8221; rồi động cơ servo sẽ chạy đến vị trí góc 90 độ, rồi dừng tại đó trong 2s. Sau đó, chương trình sẽ bắt đầu một chu trình mới, bắt đầu lại từ bước đầu cho đến khi ta ngắt nó khỏi chương trình.</p>



<p><strong>Dùng Arduino Blockly để điều khiển Motor quay theo Joystick theo hướng xác định. </strong></p>



<p>Lần này, mình sẽ sử dụng thêm một linh kiện điện tử mới là Adafruit motorshield ver 2 để hỗ trợ điều khiển động cơ. Trong khối lệnh setup(), có khối lệnh Serial communication để thiết lập tốc độ truyền tín hiệu ở mức 115200. Trong khối lệnh loop(), có khối lệnh điều khiển motor bằng joystick. Trục x của joystick được kết nối với cổng A0. Trục y của joystick được kết nối với cổng A1. Điều khiển 2 motor dc được gắn vào 2 cổng M1, M2 của motorshield, tốc độ nằm trong khoảng 0 đến 255 xung tín hiệu.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="233" height="259" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-72.png" alt="" class="wp-image-1302"/></figure></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="245" height="193" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-74.png" alt="" class="wp-image-1304"/></figure></div>


<p><strong>5. Load chương trình vào trong bo mạch.&nbsp;</strong></p>



<p>Chương trình sau khi đã được hoàn tất có thể được load vào mạch để thực hiện. Chương trình này hỗ trợ kết nối với mạch điện để có thể thực thi, tuy nhiên, do cách đó hơi đôi chút phức tạp nên trong giáo án này sẽ hướng dẫn cách khác dài hơn đôi chút nhưng dễ dàng hơn. </p>



<p>Bước 1: Tải Arduino IDLE từ trên trang chủ của Arduino xuống máy.&nbsp;</p>



<p>Bước 2: Bấm vào file exe của file Arduino, một ô cửa sổ sẽ hiện ra chứa những thủ tục và thông tin cần thiết để tải Arduino về máy. Thực hiện theo những yêu cầu đó.&nbsp;</p>



<p>Bước 3: Sau khi tải thành công, trên máy tính của bạn sẽ hiển thị phiên bản Arduino bạn đã tải về. Click đúp chuột để vào biểu tượng của Arduino. Một ô cửa sổ sẽ hiện ra. </p>



<p>Bước 4: Sau khi đã bấm vào, ô cửa sổ sau sẽ hiện lên.&nbsp;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="413" height="232" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-64.png" alt="" class="wp-image-1294" style="width:625px;height:auto"/></figure></div>


<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" id="block-a694562e-6742-41ef-9eae-7a7bceee7643"/>



<p id="block-3326c552-8159-4991-8349-2fbde426c42f"><strong>Tài liệu được trích dẫn, tham khảo từ các nguồn:</strong></p>



<ol class="wp-block-list" id="block-1b54f7a6-b956-4524-8da4-71b378b74f4b">
<li>Tài liệu team First Global Challenge VietNam</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity" id="block-7f36cab8-6a7b-4c8a-b0ec-62788a3b758a"/>



<p class="has-text-align-center" id="block-a63eab19-1e90-4d2a-b4bd-b78ba7771ad2"><strong>License.</strong></p>



<p class="has-text-align-center" id="block-5bad2a83-b77a-411c-8e71-cb4eb42df6ac">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>


<div class="wp-block-image">
<figure class="aligncenter" id="block-32bd0dd6-0a1c-465b-b4af-de1619bdc590"><img decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" alt="This image has an empty alt attribute; its file name is 38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA"/></figure></div>]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/blocky/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino: 3. Các lỗi thường gặp</title>
		<link>https://vsteam.edu.vn/arduino-cac-loi-thuong-gap/</link>
					<comments>https://vsteam.edu.vn/arduino-cac-loi-thuong-gap/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 25 Feb 2024 17:03:12 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=1243</guid>

					<description><![CDATA[PHẦN 5: CÁC LỖI THƯỜNG GẶP https://edshop.com.ua/viagrasofttabs-100mg-medikament/]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="116" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-19.png" alt="" class="wp-image-1244"/></figure>



<p><strong>PHẦN 5: CÁC LỖI THƯỜNG GẶP</strong></p>



<ol class="wp-block-list">
<li><strong>Một số khả năng khiến Arduino bị hỏng:</strong>
<ul class="wp-block-list">
<li>Nối trực tiếp một chân I/O ở mức HIGH xuống GND.</li>



<li>Nối trực tiếp một chân I/O ở mức HIGH với một chân I/O ở mức LOW.</li>



<li>Cấp điện áp lớn và đưa vào một chân I/O.</li>



<li>Cắm ngược cực khi cấp nguồn ngoài qua chân VIN &#8211; GND. (không thể thay thế được hoặc thay được nhưng tốn nhiều chi phí)</li>



<li>Cấp điện áp trên 5V vào chân 5V. (không thể thay thế được hoặc thấy được nhưng tốn nhiều chi phí)</li>



<li>Cấp điện áp trên 3.3V vào chân 3.3V. (không thể thay thế được hoặc thấy được nhưng tốn nhiều chi phí)</li>



<li>Nối trực tiếp chân VIN xuống GND.</li>



<li>Cấp nguồn 5V vào chân 5V và lấy nguồn ra từ chân VIN.</li>



<li>Cấp điện áp trên 13V vào chân RESET.</li>



<li>Cho vi điều khiển cấp dòng trên 200mA.</li>



<li>Nối trực tiếp chân 5V xuống GND.</li>
</ul>
</li>



<li><strong>Phân tích:</strong></li>
</ol>



<ul class="wp-block-list">
<li><strong><em>a) Nối trực tiếp một chân I/O ở mức HIGH xuống GND</em></strong>
<ul class="wp-block-list">
<li>Mô tả: Thiết lập một chân I/O ở chế độ OUTPUT và đặt nó ở mức HIGH sau đó nối thẳng xuống GND</li>
</ul>
</li>
</ul>



<pre class="wp-block-code alignwide"><code>// Phần mô tả: Thiết lập một chân I/O ở mức HIGH xuống GND.
// Mục tiêu: Thiết lập một chân I/O ở chế độ OUTPUT và đặt nó ở mức HIGH.

// Cài đặt chân D2
void setup() {
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH);
}

// Chương trình chính không có hành động gì trong vòng lặp
void loop() {}


</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="364" height="176" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-21.png" alt="" class="wp-image-1248"/></figure></div>


<ul class="wp-block-list">
<li>Nguyên nhân:<br>Do không có điều kiện hạn chế hành động nền với hành động này, dòng điều trợ chân I/O đôi khi vượt quá giới hạn 40 mA của một chân I/O. Điều này dẫn đến hỏng của chân I/O.</li>



<li>Khắc phục:<br>Một giải pháp là thêm một điều kiện hạn chế vào chân I/O bằng cách thêm một điện trở vào chân I/O, khoảng 220 ohm là giá trị đề xuất. Điều này giúp giảm dòng điều trợ. Tôi đề xuất sử dụng điện trở có giá trị khoảng 125 ohm.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="518" height="290" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-22.png" alt="" class="wp-image-1249"/></figure></div>


<ul class="wp-block-list">
<li><strong><em> b) Nối trực tiếp một chân I/O ở mức HIGH với một chân I/O ở mức LOW.</em></strong>
<ul class="wp-block-list">
<li>Mô tả: Thiết lập một chân I/O ở chế độ OUTPUT và đặt một chân I/O ở mức HIGH, còn chân còn lại ở mức LOW. Sau đó nối trực tiếp hai chân I/O D2 và D3 vào nhau</li>
</ul>
</li>
</ul>



<pre class="wp-block-code alignwide"><code>// Cài đặt chân D2, D3 ở void
void setup() {
  pinMode(2, OUTPUT); // Thiết lập chân số 2 ở chế độ OUTPUT
  pinMode(3, OUTPUT); // Thiết lập chân số 3 ở chế độ OUTPUT

  digitalWrite(2, HIGH); // Đặt chân số 2 ở mức HIGH
  digitalWrite(3, LOW);  // Đặt chân số 3 ở mức LOW
}
void loop() {}</code></pre>



<ul class="wp-block-list">
<li><strong><em>c) Cấp điện áp lớn vào một chân I/O.</em></strong>
<ul class="wp-block-list">
<li>Mô tả: cấp điện áp lợi nhuận hơn 5.5V vào một chân I/O bất kỳ</li>
</ul>
</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="440" height="179" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-24.png" alt="" class="wp-image-1251"/></figure></div>


<ul class="wp-block-list">
<li>Nguyên nhân: 5.5V là ngưỡng tối đa mà Arduino Uno R3 có thể chịu được, hay nói rõ hơn là vi điều khiển ATmega328P có thể chịu được. Các chân I/O trên mạch được nối trực tiếp với các chân của vi điều khiển này.</li>



<li>Khắc phục: Sử dụng diode zener để hạn áp xuống 5V. Cách này không chắc chắn rằng bạn sẽ có đúng 5V, nhưng nó đảm bảo rằng điện áp vào sẽ nằm trong phạm vi chịu đựoc của Arduino Uno R3.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="346" height="189" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-27.png" alt="" class="wp-image-1254"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>d) Cắm ngược cực khi cấp nguồn từ nguồn ngoại vi qua chân VIN &#8211; GND.</em></strong></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="518" height="323" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-28.png" alt="" class="wp-image-1255"/></figure></div>


<ul class="wp-block-list">
<li>Khắc phục: Sử dụng diode. Do sự sụt áp khi dòng điện lớn chạy qua diode nền P-N trên diode, điều này giảm điện áp cấp cho Arduino Uno R3 xuống khoảng 0.5V (tùy loại diode) so với điều áp cấp cho nguồn. Vì vậy, nếu bình thường mức điều áp cấp khuyến nghị cho nguồn ngoài là 7-12V, khi sử dụng diode, bạn sẽ phải trừ hao đi 0.5V, tức là 7.5-12.5V. Dù sao, pin 9V vẫn là một lựa chọn hợp lý.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="363" height="215" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-30.png" alt="" class="wp-image-1257"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>e) Cấp điện áp trên 5V vào chân 5V</em></strong>:
<ul class="wp-block-list">
<li>Cấp điện áp trên 5V vào chân 5V có thể làm hỏng một số bộ phận trên mạch, nhà sản xuất không khuyến cáo người sử dụng thực hiện điều này.</li>
</ul>
</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="329" height="241" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-32.png" alt="" class="wp-image-1259"/></figure></div>


<ul class="wp-block-list">
<li>Nguyên nhân: Arduino Uno R3 chỉ hoạt động ổn định ở mức điện áp 5V. Vi điều khiển ATmega328P và ATmega16u2 cũng chỉ chịu được điện áp tối đa là 5.5V. Mức điều áp giới hạn là 6V. Khi cấp nguồn vào chân 5V, bạn thực tế đang cấp nguồn trực tiếp cho 2 vi điều khiển ATmega16u2 và ATmega328P trên mạch.</li>



<li>Khắc phục:Sử dụng diode zener tượng tự như vấn đề 3, nhưng có thêm một transistor để đệm dòng.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="354" height="257" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-35.png" alt="" class="wp-image-1262"/></figure></div>


<ul class="wp-block-list">
<li>Ngoài ra các bạn có thể dùng các IC hạ nguồn như LM7805</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="359" height="191" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-36.png" alt="" class="wp-image-1263"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>f) Cấp điện áp trên 3.3V vào chân 3.3V:</em></strong>
<ul class="wp-block-list">
<li>Vấn đề này tương tự như vấn đề 5.</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><strong><em>g) Nối trực tiếp chân VIN xuống GND.</em></strong>
<ul class="wp-block-list">
<li>Theo nhà sản xuất, bạn có thể lấy nguồn 5V ra từ chân VIN để sử dụng khi cấp nguồn cho Arduino Uno R3 bằng jack cắm 2.1mm phía trước..</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li>Nguyên nhân: Hiện tượng này được gọi là chập mạch (short-circuit). Khi chập mạch xảy ra, dòng điện trong mạch tăng đột ngột vượt quá khả năng làm việc của các linh kiện ở trong mạch, có thể làm hỏng chuỗi và gây hư hại. Arduino Uno R3 không có các linh kiện bảo vệ chống chập mạch khi bạn lấy nguồn ra từ chân VIN để sử dụng.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="573" height="178" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-37.png" alt="" class="wp-image-1264"/></figure></div>


<ul class="wp-block-list">
<li>Khắc phục: Sử dụng cầu chì tự phục hồi (PTC Resettable Fuse). Bạn nên sử dụng cầu chì loại 500mA hoặc thấp hơn, tối đa là 1A. Arduino Uno R3 không được thiết kế để hoạt động với cường độ dòng điện lớn. </li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="364" height="184" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-39.png" alt="" class="wp-image-1266"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>h) Cấp nguồn 5V vào chân 5V và lấy nguồn ra từ chân VIN</em></strong>:</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="402" height="230" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-41.png" alt="" class="wp-image-1268"/></figure></div>


<ul class="wp-block-list">
<li>Nguyên nhân: Trên Arduino Uno R3 có một IC hạ áp (voltage regulator) đảm nhận vai trò chuyển đổi điện áp đầu vào từ chân VIN (thường được khuyến nghị từ 7-12V) thành điện áp 5V để cung cấp cho toàn mạch.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="446" height="166" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-43.png" alt="" class="wp-image-1270"/></figure></div>


<ul class="wp-block-list">
<li>Trong hình, hình dạng của đường điện được mô tả bằng cách các mũi tên màu đỏ. Khi bạn cấp nguồn vào chân 5V và lấy ra từ chân VIN, dòng điện sẽ có chiều như sau:</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="466" height="258" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-44.png" alt="" class="wp-image-1271"/></figure></div>


<ul class="wp-block-list">
<li>Có thể thấy, dòng điện chảy ngược qua IC chuyển đổi áp 5V có thể gây hỏng nó.</li>
</ul>



<ul class="wp-block-list">
<li>Khắc phục: Sử dụng diode với phía chân VIN để chống dòng ngược điều này.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="459" height="177" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-46.png" alt="" class="wp-image-1273"/></figure></div>


<ul class="wp-block-list">
<li>Bạn cũng có thể sử dụng diode để ngăn chặn dòng điện ngược cho chân 5V. Tuy nhiên, nếu bạn áp dụng cách này, điện áp đầu ra sẽ không phải là 5V mà khoảng 4.5V (tùy thuộc vào mức suy giảm của diode), do mất điện áp tạo ra bởi diode.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="467" height="201" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-47.png" alt="" class="wp-image-1274"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>i) Cấp điện áp 13V vào chân RESET</em></strong>:</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="459" height="309" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-49.png" alt="" class="wp-image-1276"/></figure></div>


<ul class="wp-block-list">
<li>Ở đây, chúng ta chỉ quan tâm đến điện áp, do đó vai trò của  điện trở là không quan trọng:</li>
</ul>



<ul class="wp-block-list">
<li>Nguyên nhân: Chân RESET trên mạch Arduino Uno R3 thường được kết nối trực tiếp đến chân reset của vi điều khiển ATmega328P. Theo đặc tính kĩ thuật của ATmega328P, điện áp đặt vào chân RESET không được vượt quá 13V</li>



<li>Khắc phục: Sử dụng diode zener để hạn chế điện áp đầu vào và tránh việc nó vượt quá giới hạn cho phép của chân reset, trong trường hợp này là 13V.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="360" height="213" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-51.png" alt="" class="wp-image-1279"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>j) Cho vi điều khiển cấp dòng trên 200mA</em></strong>:
<ul class="wp-block-list">
<li>Mô tả: Sử dụng các chân I/O để trực tiếp cấp nguồn cho các thiết bị khác mà không làm vượt quá dòng điều khiển 200mA.</li>
</ul>
</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="688" height="532" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-52.png" alt="" class="wp-image-1280"/></figure></div>


<ul class="wp-block-list">
<li>Nguyên nhân: Nguồn điện từ các chân I/O trên vi điều khiển chỉ cung cấp dòng giới hạn và không đủ để cấp nguồn cho các thiết bị yêu cầu dòng lớn hơn, dẫn đến việc vượt quá dòng điều khiển.</li>



<li>Khắc phục: Sử dụng cầu chì tự phục hồi (PTC Resettable Fuse) loại 150mA để giảm dòng điều khiển từ chân I/O. Cầu chì này sẽ tự động phục hồi sau khi dòng điều khiển giảm xuống mức an toàn. Bạn cần kiểm tra kỹ thuật hàn tốt để thực hiện điều này2</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="355" height="164" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-54.png" alt="" class="wp-image-1282"/></figure></div>


<ul class="wp-block-list">
<li><strong><em>k) Nối trực tiếp chân 5V xuống GND</em></strong>:</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="329" height="165" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-55.png" alt="" class="wp-image-1283"/></figure></div>


<ul class="wp-block-list">
<li>Nguyên nhân: Chắng có nguyên nhân nào ổn định cái đẩy cả. Có thể bạn sẽ nghĩ rằng vấn đề này cũng giống như những vấn đề trên, nhưng bạn đào nhàm. Arduino Uno R3 được tích hợp sẵn một cầu chì tự phục hồi (PTC Resettable Fuse) 500mA. Cầu chì này sẽ tự động đóng ống điện toàn bộ mạch khi cường độ dòng điều trở quá 500mA (trên lý thuyết). Sau khi tác nhân gây chập chờn làm mất cân nặng của mạch không còn nữa, cầu chì tự phục hồi sẽ trở lại trạng thái làm việc bình thường, bạn chỉ cần đợi vài giây để nó làm việc. Cầu chì bảo vệ này mang lại một ưu điểm vượt trội đối với Arduino Uno R3 so với các mô hình Arduino khác như Arduino Nano (không có cầu chì bảo vệ). Dưới đây là vị trí cầu chì bảo vệ trên Arduino Uno R3.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="412" height="295" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-56.png" alt="" class="wp-image-1284"/></figure></div><p><a href="https://edshop.com.ua/viagrasofttabs-100mg-medikament/" style="color:#ffffff">https://edshop.com.ua/viagrasofttabs-100mg-medikament/</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/arduino-cac-loi-thuong-gap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino: Xung PWM</title>
		<link>https://vsteam.edu.vn/arduino-xung-pwm/</link>
					<comments>https://vsteam.edu.vn/arduino-xung-pwm/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 18 Feb 2024 15:45:05 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=664</guid>

					<description><![CDATA[KIẾN THỨC CƠ BẢN Xung là các trạng thái cao / thấp (HIGH/LOW) về mức điện áp được lặp đi lặp lại. Đại lượng đặc trưng cho một xung PWM (Pulse Width Modulation) bao gồm&#160;tần số&#160;(frequency) và&#160;chu kì xung&#160;(duty cycle). Tần số là gì? Tần số là số lần lặp lại trong 1 đơn vị [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="116" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-4-1024x116.png" alt="" class="wp-image-601"/></figure></div>


<h2 class="wp-block-heading" id="index0"><strong>KIẾN THỨC CƠ BẢN</strong></h2>



<p>Xung là các trạng thái cao / thấp (HIGH/LOW) về mức điện áp được lặp đi lặp lại. Đại lượng đặc trưng cho một xung PWM (Pulse Width Modulation) bao gồm&nbsp;<strong>tần số</strong>&nbsp;(frequency) và&nbsp;<strong>chu kì xung</strong>&nbsp;(duty cycle).</p>



<p><strong>Tần số là gì?</strong></p>



<p>Tần số là số lần lặp lại trong 1 đơn vị thời gian. Đơn vị tần số là Hz, tức là số lần lặp lại dao động trong 1 giây.</p>



<p>Lấy ví dụ, 1Hz = 1 dao động trong 1 giây. 2Hz = 2 dao động trong 1 giây. 16MHz = 16 triệu dao động trong 1 giây.</p>



<p>Như vậy theo quy tắc tam suất: 16 triệu dao động – 1 giây –> 1 dao động tốn 1/16.000.000 (giây) = 0,0625 (micro giây)</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="276" height="183" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-15.png" alt="" class="wp-image-665" style="width:626px;height:auto"/></figure></div>


<p>Cách xác định 1 dao động như thế nào? Đa phần các bạn mới nghiên cứu điện tử thường mắc sai lầm ở việc xác định 1 dao động. Dao động được xác định từ trạng thái bắt đầu và kết thúc ngay trước khi trạng thái bắt đầu được lặp lại.</p>



<p><strong>Cách xác định 1 dao động</strong></p>



<p>Như vậy thông thường, 1 dao động sẽ bao gồm 2 trạng thái điện: mức cao (x giây) và mức thấp (y giây). Tỉ lệ phần trăm thời gian giữa 2 trạng thái điện này chính là chu kì xung.</p>



<p>Với x/y = 0% ta có xung chứa toàn bộ điện áp thấp (khái niệm xung nên hiểu mở rộng)</p>



<p>Với x/y = 50% thì 50% thời gian đầu, xung có điện áp cao, 50% sau xung có điện áp thấp.</p>



<p>Với x/y=100% ta có xung chứa toàn bộ điện áp cao.</p>



<p>Tóm lại, với 1 xung ta có:</p>



<ol class="wp-block-list">
<li>Tần số: để tính toán ra được thời gian của 1 xung</li>



<li>Chu kì xung: bao nhiêu thời gian xung có mức áp cao, bao nhiêu thời gian xung có mức áp thấp.</li>
</ol>



<h2 class="wp-block-heading" id="index1"><strong>Liên hệ với Arduino</strong></h2>



<p>Với kiến thức cơ bản về xung, các bạn sẽ hiểu rõ hơn về xung trong thực tế như thế nào.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="605" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-18.png" alt="" class="wp-image-669"/></figure>



<p><strong>Xung khi sử dụng với hàm analogWrite trong Arduino</strong></p>



<p>Giữa 2 vạch màu xanh lá cây là 1 xung.</p>



<figure class="wp-block-table"><table><tbody><tr><td class="has-text-align-center" data-align="center"><strong>ANALOGWRITE</strong></td><td class="has-text-align-center" data-align="center"><strong>TỈ LỆ</strong></td><td class="has-text-align-center" data-align="center"><strong>CHU KÌ XUNG</strong></td></tr><tr><td class="has-text-align-center" data-align="center">analogWrite(0)</td><td class="has-text-align-center" data-align="center">0/255</td><td class="has-text-align-center" data-align="center">0%</td></tr><tr><td class="has-text-align-center" data-align="center">analogWrite(64)</td><td class="has-text-align-center" data-align="center">64/255</td><td class="has-text-align-center" data-align="center">25%</td></tr><tr><td class="has-text-align-center" data-align="center">analogWrite(127)</td><td class="has-text-align-center" data-align="center">127/255</td><td class="has-text-align-center" data-align="center">50%</td></tr><tr><td class="has-text-align-center" data-align="center">analogWrite(191)</td><td class="has-text-align-center" data-align="center">191/255</td><td class="has-text-align-center" data-align="center">75%</td></tr><tr><td class="has-text-align-center" data-align="center">analogWrite(255)</td><td class="has-text-align-center" data-align="center">255/255</td><td class="has-text-align-center" data-align="center">100%</td></tr></tbody></table></figure>



<p>Hàm&nbsp;<a href="http://arduino.vn/reference/analogwrite" target="_blank" rel="noreferrer noopener">analogWrite()</a>&nbsp;trong Arduino giúp việc tạo 1 xung dễ dàng hơn. Hàm này truyền vào tham số cho phép thay đổi chu kì xung, bạn có thể tính toán ra được chu kì xung như ở bảng trên. Tần số xung được Arduino thiết lập mặc định.</p>



<p>Đối với board Arduino Uno, xung trên các chân 3,9,10,11 có tần số là 490Hz, xung trên chân 5,6 có tần số 980Hz. Làm thế nào để tạo ra các xung có tần số nhanh hơn? Bạn có thể tham khảo thêm các thư viện riêng hỗ trợ việc này. Trong mã nguồn Arduino gốc không hỗ trợ phần này.</p>



<p><em><strong>Lưu ý:</strong></em> xung điều khiển servo có tên gọi <a href="https://vsteam.edu.vn/arduino-co-ban-buoi-4-3-xung-ppm%ef%bf%bc/">PPM</a> (Pulse Position Modulation) khác với xung PWM.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-text-align-center" id="block-86e90cdc-8fc1-4a99-8a92-aa4c4a0ac3ad"><strong>Tài liệu được trích dẫn, tham khảo từ các nguồn:</strong></p>



<ol class="wp-block-list">
<li>Arduino.vn</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity" id="block-df3c50b9-08d5-4d35-8bdc-9eb453fa4cdf"/>



<div class="wp-block-group alignwide"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-text-align-center" id="block-73baec52-a97e-4da4-ab5a-c4818bea759a"><strong>License.</strong></p>



<p class="has-text-align-center" id="block-48f8ca7e-4fc2-44a2-a660-977a0e3a9b23">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" alt=""/></figure></div></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/arduino-xung-pwm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino: 2. Arduino IDE</title>
		<link>https://vsteam.edu.vn/arduino-2-arduino-ide/</link>
					<comments>https://vsteam.edu.vn/arduino-2-arduino-ide/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 18 Feb 2024 09:43:35 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=600</guid>

					<description><![CDATA[PHẦN 3: GIAO DIỆN CỦA PHẦN MỀM IDE Phần này nói về giao diện ứng dụng của phần mềm IDE. Hình bên dưới thể hiện những phần cơ bản của giao diện ứng dụng. Người dùng có thể tìm hiểu sâu hơn về giao diện này, tuy nhiên, đây là phần cơ bản nhất và [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="116" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-4-1024x116.png" alt="" class="wp-image-601"/></figure></div>


<p class="has-text-align-center"><strong>PHẦN 3: GIAO DIỆN CỦA PHẦN MỀM IDE</strong></p>



<p>Phần này nói về giao diện ứng dụng của phần mềm IDE. Hình bên dưới thể hiện những phần cơ bản của giao diện ứng dụng. Người dùng có thể tìm hiểu sâu hơn về giao diện này, tuy nhiên, đây là phần cơ bản nhất và thường được người dùng Arduino sử dụng khi họ muốn nắm bắt cơ bản về chương trình Arduino, khi có thời gian các bạn có thể tìm hiểu thêm các bài viết về nó trên <a href="http://arduino.cc">http://arduino.cc</a> hoặc google.com</p>



<p>Các chức năng cơ bản của các biểu tượng trên phần mềm được trình bày chi tiết như sau:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="574" height="570" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-5.png" alt="" class="wp-image-602"/></figure></div>


<p>Giao diện ứng dụng của phần mềm IDE Arduino có nhiều phần, tuy nhiên, chúng ta sẽ tập trung vào những phần quan trọng được nêu rõ trong hình dưới đây. Các chức năng cơ bản của từng phần như sau:</p>



<ol class="wp-block-list">
<li><strong>Nút Kiểm Tra Chương Trình:</strong>
<ul class="wp-block-list">
<li>Dùng để kiểm tra chương trình đã viết mà không cần tải lên bo Arduino.</li>



<li>Nếu có lỗi, thông tin lỗi sẽ hiển thị ở vùng vuông số 5.</li>
</ul>
</li>
</ol>



<ol class="wp-block-list" start="2">
<li><strong>Nút Nạp Chương Trình Xuống Bo Arduino:</strong>
<ul class="wp-block-list">
<li>Dùng để nạp chương trình đã viết xuống bo Arduino.</li>



<li>Trong quá trình nạp, chương trình sẽ được kiểm tra lỗi trước khi thực hiện việc nạp xuống bo Arduino.</li>
</ul>
</li>



<li><strong>Hiển Thị Màn Hình Giao Tiếp với Máy Tính:</strong>
<ul class="wp-block-list">
<li>Khi nhập vào biểu tượng kính lúp, phần giao tiếp với máy tính sẽ hiển thị.</li>



<li>Phần này sẽ hiển thị các thông số mà người dùng muốn đưa lên màn hình. Để đưa thông số lên màn hình, bạn cần sử dụng lệnh <code>Serial.print().</code></li>
</ul>
</li>



<li><strong>Vùng Lập Trình:</strong>
<ul class="wp-block-list">
<li>Vùng này dành cho việc lập trình chương trình Arduino của bạn.</li>



<li>Khi bạn đã viết xong chương trình, bạn có thể sử dụng nút &#8220;Nạp Chương Trình&#8221; để đưa chương trình vào bo Arduino</li>
</ul>
</li>



<li><strong>Vùng Thông Báo Lỗi và Thông Tin:</strong>
<ul class="wp-block-list">
<li>Khi có lỗi trong quá trình lập trình, thông tin lỗi sẽ hiển thị ở đây.</li>



<li>Cũng là nơi hiển thị các thông tin, thông báo từ chương trình Arduino.</li>
</ul>
</li>



<li><strong>Sử dụng một số menu thông dụng trong phần mềm IDE:</strong>
<ul class="wp-block-list">
<li>Có một vài menu thông dụng trong phần mềm IDE, tuy nhiên thông dụng nhất vẫn là menu File. Ngoài những tính năng như mở một file mới hoặc lưu một file, phần menu này còn có mục Example (Ví dụ),  cung cấp một số ví dụ sẵn có về các vấn đề thường gặp, giúp tiết kiệm thời gian làm việc và giảm bớt công sức cần thiết khi lập trình. Hình bên dưới thể hiện một ví dụ về việc chọn một ví dụ cho LED chớp tắt (blink) để nhập vào cho mạch Arduino. Ví dụ này thường được sử dụng để kiểm tra bảng mạch khi mới mua về</li>
</ul>
</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="684" height="384" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-7-e1708179610209.png" alt="" class="wp-image-604"/></figure></div>


<p><br>Để mở một menu thường được sử dụng khác là menu Tools. Khi bạn kết nối bo Arduino với máy tính và muốn chọn loại bo sử dụng, bạn có thể nhấp chuột và chọn Tools -&gt; Board. Phần mềm sẽ hiển thị danh sách các kiểu bo có sẵn, và bạn có thể chọn loại bo cụ thể bạn đang sử dụng. Thông thường, nếu người dùng đang sử dụng bo Arduino Uno, họ sẽ chọn loại bo này. Tuy nhiên, nếu người dùng sử dụng một loại bo khác, họ có thể chọn kiểu bo tương ứng trong menu này.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="684" height="383" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-6-e1708179820188.png" alt="" class="wp-image-603"/></figure></div>


<p>Bên cạnh việc chọn loại board, một phần quan trọng khác là chọn cổng COM. Khi bạn kết nối mạch Arduino vào máy tính, người sử dụng cần phải chọn cổng COM bằng cách vào Tools -&gt; Serial Port (hoặc một số phiên bản có thể sử dụng Port) sau đó chọn cổng COM, ví dụ như COM1. Tuy nhiên, sau khi đã đưa bo Arduino vào máy tính và đã cài đặt driver, bạn có thể không cần phải chọn cổng COM nếu bo đã được nhận diện tự động. Nếu bạn kết nối một bo Arduino khác vào máy tính, bạn có thể cần phải chọn cổng COM tương ứng. Quy trình này thực hiện tùy thuộc vào từng phiên bản phần mềm cụ thể.</p>



<p class="has-text-align-center"><strong>PHẦN 4: CẤU TRÚC CỦA  MỘT CHƯƠNG TRÌNH TRONG ARDUINO</strong></p>



<p>Trong ví dụ sau, chúng ta sẽ tạo một chương trình đơn giản để làm cho một đèn LED nhấp nháy:</p>



<pre class="wp-block-code alignwide"><code>// Định nghĩa chân kết nối của LED
int ledPin = 13;

// Hàm setup được gọi một lần khi bắt đầu chương trình
void setup() {
  pinMode(ledPin, OUTPUT);  // Thiết lập chân kết nối của LED là chân ra (OUTPUT)
}

// Hàm loop được gọi liên tục
void loop() {
  digitalWrite(ledPin, HIGH);  // Bật đèn LED
  delay(1000);                  // Đợi trong 1 giây (1000ms), có thể thay đổi giá trị này
  digitalWrite(ledPin, LOW);   // Tắt đèn LED
  delay(1000);                  // Đợi trong 1 giây (1000ms), có thể thay đổi giá trị này
}
</code></pre>



<p>Sau đây chúng ta sẽ tìm hiểu về cấu trúc của một chương trình trong Arduino thông qua ví dụ này:</p>



<ol class="wp-block-list">
<li><strong>Khai báo biến</strong></li>
</ol>



<p>Đây là phần khai báo kiểu biến, tên các biến, định nghĩa các chân trên board, một số kiểu khai báo biến thông dụng:</p>



<p><code>#define </code></p>



<p>Nghĩa của từ <code>define</code> là định nghĩa. Hàm <code>#define</code> thường được sử dụng để định nghĩa hay còn gọi là gán, tức là gán một chân, một ngõ ra nào đó với một cái tên. Ví dụ như:</p>



<p><code>#define LED 13</code></p>



<p><strong>Chú ý</strong>: sau #define thì không có dấu &#8220;,&#8221; (dấu phẩy)</p>



<p>      2. <strong>Thiết lập:</strong> <code>void setup()</code></p>



<p>Phần này dùng để thiết lập cho chương trình, cần nhớ rõ cấu trúc của nó </p>



<pre class="wp-block-code alignwide"><code>void setup() {
    # Chương trình được thiết lập trong hàm này
}</code></pre>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Nếu cấu trúc của hàm setup không chính xác thì chương trình sẽ báo lỗi</p>
</div></div>
</div></div>



<p>Phần này dùng để thiết lập các tốc độ truyền dữ liệu, kiểu chân là chân ra hay chân vào. Trong đó:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="670" height="90" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-9.png" alt="" class="wp-image-608"/></figure></div>


<p>      3. <strong>Vòng lặp:</strong></p>



<p>Dùng để viết các lệnh trong chương trình để mạch Arduino thực hiện các nhiệm vụ mà chúng ta mong muốn, thường bắt đầu bằng cú pháp:</p>



<pre class="wp-block-code alignwide"><code>void loop() {
    # Vòng lặp được viết trong này
}</code></pre>



<p>Một số câu lệnh, cấu trúc thường gặp:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-10.png" alt="" class="wp-image-609" style="width:589px;height:auto"/></figure></div>


<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" id="block-7971d569-3418-470e-838c-24beee29e12a"/>



<p class="has-text-align-center" id="block-86e90cdc-8fc1-4a99-8a92-aa4c4a0ac3ad"><strong>Tài liệu được trích dẫn, tham khảo từ các nguồn:</strong></p>



<ol class="wp-block-list" id="block-1e513b4e-9a7a-4391-a6f3-08f0811c8f46">
<li><strong>“Tự học nhanh Arduino cho người mới bắt đầu” </strong>&#8211; Thạc sỹ Huỳnh Minh Phú</li>



<li><strong>“Arduino guide” &#8211; ADaPT Club</strong></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity" id="block-df3c50b9-08d5-4d35-8bdc-9eb453fa4cdf"/>



<div class="wp-block-group alignwide"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-text-align-center" id="block-73baec52-a97e-4da4-ab5a-c4818bea759a"><strong>License.</strong></p>



<p class="has-text-align-center" id="block-48f8ca7e-4fc2-44a2-a660-977a0e3a9b23">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" alt=""/></figure></div></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/arduino-2-arduino-ide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino: 1. Giới thiệu về Arduino</title>
		<link>https://vsteam.edu.vn/arduino-1-gioi-thieu-ve-arduino/</link>
					<comments>https://vsteam.edu.vn/arduino-1-gioi-thieu-ve-arduino/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 17 Feb 2024 13:22:00 +0000</pubDate>
				<category><![CDATA[Lập trình điện tử]]></category>
		<guid isPermaLink="false">https://vsteam.edu.vn/?p=588</guid>

					<description><![CDATA[PHẦN 1: GIỚI THIỆU VỀ ARDUINO PHẦN 2: PHẦN CỨNG CỦA ARDUINO UNO R3 Như vậy, Arduino Uno R3 là một bo mạch linh hoạt và dễ sử dụng cho nhiều ứng dụng khác nhau. Tài liệu được trích dẫn, tham khảo từ các nguồn: License. This work is licensed under a Creative Commons Attribution-NonCommercial [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center"><strong><img loading="lazy" decoding="async" src="https://lh7-us.googleusercontent.com/0GqpABSwvzdMB3ynRedXoT7KwfesoVaHKZg8dIW9CPxt5F7TFl4X7PzhRMJilb8jybaaku1scWRLh4ahHsd9LyJgG9zLWZ4KxExSPPsFY7lDnfe6uGt0K3OawkIno0x7gUSZUukIZepuJEx1J3HUOA" width="577" height="65"></strong></p>



<p><strong>PHẦN 1: GIỚI THIỆU VỀ ARDUINO</strong></p>



<ol class="wp-block-list">
<li><strong>Arduino là gì?</strong>
<ul class="wp-block-list">
<li>Arduino là một bo mạch vi điều khiển.</li>



<li>Mạch Arduino được sử dụng để cảm nhận môi trường và điều khiển nhiều đối tượng khác nhau. Nó có thể thực hiện nhiều ứng dụng khác nhau như đèn led, cảm biến, đo nhiệt độ, và nhiều đối tượng khác.</li>
</ul>
</li>



<li><strong>Tại sao chọn Arduino?</strong>
<ul class="wp-block-list">
<li>Hiện tại ở Việt Nam và trên thế giới, có nhiều bo mạch vi điều khiển khác nhau. Tuy nhiên, Arduino có một số ưu điểm giúp nó trở nên phổ biến và được sử dụng rộng rãi trên thế giới.Những ưu điểm đó là: rẻ, tương thích được với nhiều hệ điều hành, chương trình lập trình đơn giản, rõ ràng, dễ sử dụng, sử dụng mã nguồn mở và có thể kết hợp với nhiều module khác nhau.</li>
</ul>
</li>
</ol>



<p class="has-text-align-center"><strong>PHẦN 2: PHẦN CỨNG CỦA ARDUINO UNO R3</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="646" height="382" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-1.png" alt="" class="wp-image-590"/></figure></div>


<ol class="wp-block-list">
<li><strong>Cáp USB:</strong>
<ul class="wp-block-list">
<li>Đây là dây cáp thông thường được bán kèm theo bo mạch Arduino. Dây cáp này được sử dụng để kết nối bo mạch Arduino vào máy tính để nạp chương trình cho bo và cũng để cung cấp nguồn từ máy tính khi bo mạch hoạt động. Ngoài ra, cáp USB cũng được sử dụng để truyền dữ liệu từ bo Arduino đến máy tính. Dây cáp có hai đầu, đầu 1a được sử dụng để kết nối vào cổng USB trên bo Arduino, còn đầu 1b được kết nối vào cổng USB trên máy tính. Ngoài ra, có thể sử dụng cổng 1b để kết nối vào sạc dự phòng để cung cấp điện.</li>
</ul>
</li>



<li><strong>IC ATmega 16U2:</strong>
<ul class="wp-block-list">
<li>Đây là chip chuyển đổi USB-to-Serial, giúp giao tiếp giữa Arduino và máy tính thông qua giao thức Serial (dùng cổng COM)</li>
</ul>
</li>



<li><strong>Cổng nguồn ngoài:</strong> 
<ul class="wp-block-list">
<li>Cổng nguồn ngoại vi của bo mạch Arduino Uno được sử dụng để cung cấp nguồn điện từ nguồn bên ngoài như pin, bình acquy hoặc các adapter phù hợp cho hoạt động của bo mạch Arduino. Nguồn điện cung cấp vào cổng này là nguồn DC có thể có điện áp từ 6V đến 20V. Tuy nhiên, để đảm bảo hiệu suất ổn định nhất, thì điện áp lý tưởng được khuyến nghị là từ 7V đến 12V.</li>
</ul>
</li>



<li><strong>Cổng USB:</strong>
<ul class="wp-block-list">
<li>Dùng để kết nối với cáp USB</li>
</ul>
</li>



<li><strong>Nút reset:</strong>
<ul class="wp-block-list">
<li>Nút reset dược sử dụng để reset lại chương trình đang chạy. Đôi khi chương trình gặp lỗi, người dùng có thể reset lại chương trình</li>
</ul>
</li>



<li><strong>ICSP của ATtmega 16U2:</strong>
<ul class="wp-block-list">
<li>ICSP là chữ viết tắt In-Circuit Serial Programming. Đây là các chân giao tiếp ISP của chíp ATmega 16U2. Các chân này thường ít được sử dụng trong các dự án vể Arduino</li>
</ul>
</li>



<li><strong>Chân xuất tín hiệu ra:</strong>
<ul class="wp-block-list">
<li>Có tất cả 14 chân xuất tín hiệu ra trong Arduino Uno, những chân có dấu &#8220;~&#8221; là những chân có thể có băm xung (PWM), tức là có thể điều khiển tốc độ động cơ hoặc độ sáng của dền. Hình 2 thể hiện rất rõ những chân để băm xung này</li>
</ul>
</li>



<li><strong>IC Ầtmega 328:</strong>
<ul class="wp-block-list">
<li>IC ATmega 328 là linh hồn của bo mạch Arduino Uno, IC này được sử dụng trong việc thu thập dữ liệu từ cảm biến, xử lí dữ liệu, xuất tín hiệu ra, …</li>
</ul>
</li>



<li><strong>Chân ICSP của Ầtmega 328:</strong>
<ul class="wp-block-list">
<li>Các chân ICSP của ATmega 328 được sử dụng cho giao tiếp SPI (Serial Peripheral Interface). Các chân này thường được sử dụng trong các ứng dụng như sử dụng module RFID RC522 với Arduino hoặc Ethernet Shield với Arduino.</li>
</ul>
</li>



<li><strong>Chân xuất tín hiệu analog:</strong>
<ul class="wp-block-list">
<li>Các chân này được sử dụng để lấy tín hiệu analog (tín hiệu liên tục) từ các cảm biến đến IC ATmega 328 xử lý. Có tất cả 6 chân lấy tín hiệu analog, từ A0 đến A5.</li>
</ul>
</li>



<li><strong>Chân cấp nguồn cho cảm biến:</strong>
<ul class="wp-block-list">
<li>Các chân này được dùng để cấp nguồn cho các thiết bị bên ngoài như cảm biến, servo motor, và các thiết bị khác. Trên khu vực này cũng có sẵn các chân GND (chân nối đất), chân 5V, chân 3.3V, như được thể hiện trong hình 2. Các chân này thường được sử dụng khi cấp nguồn cho cảm biến, servo motor, và các thiết bị khác. Ngoài ra, trên khu vực này còn có chân Vin, chân Reset, và chân IOREF. Tuy nhiên, các chân này thường ít được sử dụng nên trong tài liệu này xin phép không đi sâu vào chi tiết.</li>
</ul>
</li>



<li><strong>Các linh kiện khác trên bo mạch:</strong>
<ul class="wp-block-list">
<li>Bên cạnh các linh kiện trên bảng mạch, Arduino Uno còn có một số linh kiện khác. Trên bo mạch, có tổng cộng 4 đèn LED, bao gồm đèn nguồn (LED ON để biết bo đã được cấp nguồn), 2 đèn Tx và Rx, và 1 đèn L. Đèn Tx và Rx sáng nhấp nháy khi có dữ liệu truyền từ board lên máy tính hoặc ngược lại thông qua cổng USB. Đèn L được kết nối với chân số 13. Đèn này được gọi là đèn onboard (đèn trên bo mạch), giúp người dùng có thể thực hiện các bài đơn giản mà không cần dùng thêm đèn ngoài.</li>



<li>Trong 14 chân của bo mạch, còn có 2 chân 0 và 1 có thể được sử dụng để truyền nhận tín hiệu TTL. Có một số ứng dụng sử dụng tính năng này, ví dụ như ứng dụng điều khiển mạch Arduino Uno qua điện thoại sử dụng Bluetooth HC05. Ngoài ra, chân 2 và 3 cũng được sử dụng cho các chức năng ngắt (interrupt), đồng thời còn 1 số chân khác có thể được sử dụng cho các chức năng khác, như được thể hiện trong hình 3. Bảng 1 thể hiện thêm các thông số cho bo mạch Arduino Uno R3.</li>
</ul>
</li>
</ol>



<p>Như vậy, Arduino Uno R3 là một bo mạch linh hoạt và dễ sử dụng cho nhiều ứng dụng khác nhau.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-2.png" alt="" class="wp-image-592"/></figure></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="600" height="979" src="https://vsteam.edu.vn/wp-content/uploads/2024/02/image-3.png" alt="" class="wp-image-593"/></figure></div>


<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-text-align-center"><strong>Tài liệu được trích dẫn, tham khảo từ các nguồn:</strong></p>



<ol class="wp-block-list">
<li><strong>“Tự học nhanh Arduino cho người mới bắt đầu” </strong>&#8211; Thạc sỹ Huỳnh Minh Phú</li>



<li><strong>“Arduino guide” &#8211; ADaPT Club</strong></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-default"/>



<p class="has-text-align-center"><strong>License.</strong></p>



<p class="has-text-align-center">This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" src="https://lh7-us.googleusercontent.com/38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA" width="302" height="106"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://vsteam.edu.vn/arduino-1-gioi-thieu-ve-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
