SSCP - Access Controls - Implement Access Controls


Mandatory Access Control (MAC)



Các vấn đề của việc cố gắng dựa vào từng chủ sở hữu hệ thống để kiểm soát truy cập đúng vào từng đối tượng kiểm soát truy cập được loại bỏ bằng cách hệ thống tham gia ,áp dụng chính sách truy cập bắt buộc  chủ sở hữu hệ thống áp dụng các yếu tố cần biết.

Mỗi đối tượng hệ thống kiểm soát truy cập (người dùng và chương trình) được gán nhãn clearance  và các đối tượng hệ thống kiểm soát truy cập được gán nhãn sensitivity. Hệ thống sau đó tự động cung cấp quyền truy cập chính xác dựa trên việc so sánh nhãn đối tượng và chủ đề. Mandatory Access Control (MAC) cho phép kết hợp nhiều cấp độ bảo mật của cả đối tượng và đối tượng trong một hệ thống một cách an toàn.

Mandatory Access Control (MAC) có nghĩa là một central authority, chứ không phải bởi chủ sở hữu cá nhân của một đối tượng, đưa ra các quyết định chính sách kiểm soát truy cập và chủ sở hữu không thể thay đổi quyền truy cập. Một ví dụ về Mandatory Access Control (MAC) xảy ra trong an ninh quân sự, trong đó chủ sở hữu dữ liệu cá nhân không quyết định ai có clearance  tuyệt mật, chủ sở hữu cũng không thể thay đổi phân loại đối tượng từ Tuyệt mật(Top Secret) sang Bí mật (Secret).

Sự cần thiết phải có một cơ chế Mandatory Access Control (MAC) phát sinh khi chính sách bảo mật của một hệ thống ra lệnh rằng:
1.Quyết định bảo vệ không được quyết định bởi chủ sở hữu đối tượng

2.Hệ thống phải thi hành các quyết định bảo vệ tức là  hệ thống thực thi chính sách bảo mật theo mong muốn hoặc ý định của đối tượng.
Thông thường  một cơ chế ghi nhãn và một bộ giao diện được sử dụng để xác định quyền truy cập dựa trên chính sách Mandatory Access Control (MAC) .

Ví dụ: người dùng đang chạy một quy trình tại phân loại Secret không được phép đọc tệp có nhãn Top Secret. Điều này được biết đến như là quy tắc bảo mật đơn giản  hay không đọc được.

Ngược lại, người dùng đang chạy một quy trình có nhãn Secret  không được phép ghi vào một tệp có nhãn Secret , quy tắc này được gọi là quy tắc “*-property” (*star property rule)  hoặc “no write down.” và * -property là cần thiết để duy trì bảo mật hệ thống trong một môi trường tự động.

Một biến thể của quy tắc này được gọi là “strict *-property” yêu cầu thông tin có thể được ghi , nhưng không phải ở trên, mức độ clearance của đối tượng. Các mô hình bảo mật đa cấp như các mô hình Bảo mật Bell–LaPadula models Biba Integrity models được sử dụng để chỉ định chính thức loại chính sách Mandatory Access Control (MAC) này.


Non-Discretionary Access Control

Theo Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (NIST) nói chung  tất cả các chính sách kiểm soát truy cập khác với Discretionary Access Control (DAC) đều được nhóm trong danh mục kiểm soát truy cập không tùy ý (Non-Discretionary Access Control).

Như tên của nó, các chính sách trong danh mục này có các quy tắc không được thiết lập theo quyết định của người dùng. Chính sách không tự nguyện thiết lập các kiểm soát mà người dùng không thể thay đổi mà chỉ thông qua hành động quản trị.

Discretionary Access Control (DAC)

Chính sách Discretionary Access Control (DAC) là phương tiện gán quyền truy cập dựa trên các quy tắc được chỉ định bởi chủ sở hữu. Lớp chính sách này bao gồm mô hình cấp phép tệp được thực hiện bởi gần như tất cả các hệ điều hành.

Ví dụ : Trong Unix một danh sách thư mục có thể mang lại “... rwxr-xr-x ... SSCP File 1.txt”, có nghĩa là chủ sở hữu của tệp SSCP 1.txt có thể đọc, viết hoặc thực thi nó và người dùng khác có thể đọc hoặc thực thi tệp nhưng không ghi nó.
Tập hợp các quyền truy cập trong ví dụ này là (read, write, execute) và hệ điều hành làm trung gian cho tất cả các yêu cầu để thực hiện bất kỳ hành động nào trong số này, người dùng có thể thay đổi quyền trên các tệp mà họ sở hữu, biến điều này thành chính sách tùy ý.


Các hệ thống thường lưu trữ thông tin từ ma trận này theo cột hoặc theo hàng. Việc triển khai lưu trữ theo cột thường được gọi là danh sách kiểm soát truy cập (ACL). Các hệ thống tệp trong Windows và Unix thường sử dụng cách triển khai như vậy: mỗi tệp được kèm theo một danh sách chứa các chủ đề và quyền của chúng đối với tệp đó. Việc triển khai lưu trữ theo hàng thường được gọi là danh sách khả năng.

Ví dụ, thật dễ dàng khi triển khai ACL để tìm tập hợp tất cả các đối tượng có thể đọc tệp, nhưng rất khó tìm thấy tập hợp tất cả các tệp mà đối tượng có thể đọc.

Triết lý cơ bản trong Discretionary Access Control (DAC) là các đối tượng có thể xác định ai có quyền truy cập vào đối tượng của họ. Trong Discretionary Access Control (DAC) chủ sở hữu của đối tượng kiểm soát truy cập sẽ xác định các đặc quyền (read, write, execute) của các đối tượng kiểm soát truy cập.

 Trong DoD 5200.28-STD tiêu chuẩn đánh giá hệ thống máy tính tin cậy của Bộ Quốc phòng, tiêu chí đánh giá hệ thống máy tính đáng tin cậy, kiểm soát truy cập tùy ý được định nghĩa là một phương tiện hạn chế quyền truy cập vào các đối tượng dựa trên danh tính của các đối tượng hoặc nhóm mà chúng thuộc về.

Các điều khiển tùy ý theo nghĩa là một chủ thể có quyền truy cập nhất định có khả năng chuyển quyền đó có thể gián tiếp cho bất kỳ chủ thể nào khác trừ khi bị hạn chế bởi kiểm soát truy cập bắt buộc.

Phương pháp này dựa trên quyền của chủ sở hữu đối tượng kiểm soát truy cập để xác định các quyền cụ thể của chủ thể kiểm soát truy cập. Do đó, bảo mật của đối tượng theo nghĩa đen tùy theo ý của chủ sở hữu đối tượng. Các bộ xử lý tín hiệu không có khả năng mở rộng  họ dựa vào các quyết định của từng chủ sở hữu đối tượng kiểm soát truy cập và có thể khó tìm được nguồn gốc của các vấn đề kiểm soát truy cập khi xảy ra sự cố.

Rule Set-Based Access Controls (RSBAC)

Là các điều khiển tùy ý cho phép chủ sở hữu dữ liệu tùy ý xác định các quy tắc cần thiết để tạo điều kiện truy cập. Rule Set-Based Access Controls (RSBAC) là một khung kiểm soát truy cập nguồn mở cho các nhân Linux hiện tại, được sử dụng từ tháng 1 năm 2000 (phiên bản 1.0.9a). Cho phép kiểm soát hoàn toàn chi tiết đối với các đối tượng (tệp, quy trình, người dùng, thiết bị, v.v.), ngăn chặn thực thi bộ nhớ (PaX, NX), phát hiện vi rút tích hợp thời gian thực và hơn thế nữa.

Logic khung RSBAC dựa trên công việc được thực hiện cho khung tổng quát cho kiểm soát truy cập (GFAC) của Abrams và LaPadula.

Tất cả các cuộc gọi hệ thống liên quan đến bảo mật được mở rộng bằng mã thực thi bảo mật. Mã này gọi thành phần quyết định trung tâm, lần lượt gọi tất cả các mô đun quyết định hoạt động (các mô đun khác nhau thực hiện các mô hình bảo mật khác nhau) và tạo ra quyết định cuối cùng kết hợp.

Quyết định này sau đó được thi hành bởi các phần mở rộng cuộc gọi hệ thống, các quyết định dựa trên loại quyền truy cập (loại yêu cầu), mục tiêu truy cập và các giá trị của các thuộc tính được gắn với đối tượng gọi và đối tượng cần truy cập. Các thuộc tính độc lập bổ sung có thể được sử dụng bởi các mô-đun riêng lẻ. Tất cả các thuộc tính được lưu trữ trong các thư mục được bảo vệ đầy đủ, một trên mỗi thiết bị được gắn. Do đó, thay đổi thuộc tính yêu cầu các cuộc gọi hệ thống đặc biệt được cung cấp.

Vì tất cả các loại quyết định truy cập đều dựa trên các yêu cầu quyết định chung, nhiều chính sách bảo mật khác nhau có thể được triển khai như một mô-đun quyết định. Ngoài các mô hình tích hợp, đăng ký Module Registration (REG) cho phép đăng ký các mô-đun quyết định bổ sung, riêng lẻ khi chạy.
Với mô hình Role Compatibility (RC) , có thể bảo vệ tất cả các cài đặt cấu hình và thực thi đối với bất kỳ người dùng nào, kể cả root (trong trường hợp khai thác root). Do đó, việc thay đổi cấu hình hoặc truy cập vào các tệp như  ‘/etc/shadow’ chỉ có thể được thực hiện với một số chương trình có clearance  cụ thể.

Role-Based Access Control (RBAC)

Trong khuôn khổ Role-Based Access Control (RBAC), người dùng được cấp tư cách thành viên dựa trên năng lực và trách nhiệm của họ trong tổ chức. Các hoạt động mà người dùng được phép thực hiện dựa trên vai trò của người dùng.

Tư cách thành viên của người dùng trong các vai trò có thể bị thu hồi dễ dàng và tư cách thành viên mới được thiết lập khi phân công công việc. Các vai trò có thể được thiết lập khi các hoạt động mới được thành lập và các hoạt động cũ có thể bị xóa khi các chức năng tổ chức thay đổi và phát triển.
Điều này đơn giản hóa việc quản lý và quản lý các đặc quyền; vai trò có thể được cập nhật mà không cập nhật các đặc quyền cho mỗi người dùng trên cơ sở cá nhân.

Khi người dùng được liên kết với một vai trò, người dùng sẽ không được cung cấp nhiều đặc quyền hơn mức cần thiết để thực hiện vai trò của mình. Khái niệm đặc quyền tối thiểu này yêu cầu xác định các chức năng công việc của người dùng, xác định nhóm đặc quyền tối thiểu cần có để thực hiện chức năng đó và hạn chế người dùng thực hiện vai trò với các đặc quyền đó và không có gì nữa.

Trong các hệ thống được kiểm soát ít chính xác, điều này thường khó đạt được,ai đó được chỉ định vào một loại công việc có thể được phép nhiều đặc quyền hơn mức cần thiết bởi vì rất khó để điều chỉnh truy cập dựa trên các thuộc tính hoặc ràng buộc khác nhau.

Do nhiều trách nhiệm chồng chéo giữa các loại công việc, đặc quyền tối đa cho mỗi loại công việc có thể gây ra sự truy cập không mong muốn hoặc bất hợp pháp.

Theo Role-Based Access Control (RBAC), vai trò có thể có trách nhiệm và đặc quyền chồng chéo nghĩa là  người dùng thuộc các vai trò khác nhau có thể cần thực hiện các hoạt động chung. Hệ thống phân cấp vai trò có thể được thiết lập để cung cấp cho cấu trúc tự nhiên của một doanh nghiệp.

Hệ thống phân cấp vai trò xác định các vai trò có thuộc tính duy nhất và có thể chứa các vai trò khác  nghĩa là  một vai trò có thể bao gồm các hoạt động được liên kết với vai trò khác.

Trong mạng dựa trên Windows điển hình, một vai trò như quản trị viên chứa vai trò của các nhà khai thác sao lưu và người dùng nhật ký hiệu suất. Điều này có nghĩa là các thành viên của nhóm quản trị viên được liên kết ngầm với các hoạt động được xác định cho người vận hành sao lưu và người dùng nhật ký hiệu suất mà không phải liệt kê rõ ràng các vai trò riêng lẻ.

Role Hierarchies

Là một cách tự nhiên để tổ chức các vai trò để phản ánh thẩm quyền, trách nhiệm và năng lực. Vai trò mà người dùng đạt được tư cách thành viên không loại trừ lẫn nhau với vai trò khác mà người dùng đã sở hữu thành viên. Các hoạt động và vai trò này có thể phải tuân theo các chính sách hoặc ràng buộc của tổ chức. Khi các hoạt động chồng chéo, hệ thống phân cấp vai trò có thể được thiết lập thay vì thiết lập kiểm toán tốn kém để giám sát truy cập, các tổ chức có thể đặt các ràng buộc về quyền truy cập thông qua Role-Based Access Control (RBAC).

Role-Based Access Control (RBAC) hoạt động bằng cách gán vai trò cho các đối tượng kiểm soát truy cập cũng như nhãn cho các đối tượng kiểm soát truy cập chỉ định vai trò nào được phép truy cập vào các đối tượng kiểm soát truy cập tương ứng. Trong triển khai Role-Based Access Control (RBAC) khả năng cho phép hoặc từ chối kế thừa vai trò trong một hệ thống phân cấp nhất định là có sẵn.

Constrained User Interface (CUI)

Là một phương pháp giới hạn các hành động của người dùng đối với các chức năng cụ thể bằng cách không cho phép người dùng yêu cầu các chức năng nằm ngoài mức đặc quyền hoặc vai trò tương ứng của họ.

Có thể tìm thấy một trong những ví dụ phổ biến nhất về giao diện người dùng bị ràng buộc trong các ứng dụng ngân hàng trực tuyến và ATM nơi các menu giới hạn dễ thấy cho đến khi người dùng xác thực chính xác, từ đó thiết lập vai trò / cấp đặc quyền tương ứng của mình.

Types of Restricted Interfaces

Menu and Shells: Khi các giới hạn menu và shell được sử dụng, các tùy chọn người dùng được cung cấp là các lệnh họ có thể thực thi.
Ví dụ: nếu quản trị viên muốn người dùng chỉ có thể thực hiện một chương trình, chương trình đó sẽ là lựa chọn duy nhất có sẵn trên menu. Điều này giới hạn chức năng của người dùng. Shell là một loại môi trường ảo trong một hệ thống.
Nó là giao diện người dùng với hệ điều hành và hoạt động như một trình thông dịch lệnh. Nếu các shell bị hạn chế được sử dụng, shell sẽ chỉ chứa các lệnh mà quản trị viên muốn người dùng có thể thực thi.

Database views: Chế độ xem cơ sở dữ liệu là các cơ chế được sử dụng để hạn chế quyền truy cập của người dùng vào dữ liệu có trong cơ sở dữ liệu.

Physically constraining a user interface: Hạn chế giao diện người dùng có thể được thực hiện bằng cách chỉ cung cấp một số phím nhất định trên bàn phím hoặc một số nút cảm ứng nhất định trên màn hình. Bạn thấy điều này khi bạn nhận được tiền từ máy ATM. Thiết bị này có một loại hệ điều hành có thể chấp nhận tất cả các loại lệnh và thay đổi cấu hình, nhưng nó bị hạn chế về mặt vật lý từ việc có thể thực hiện các chức năng này.

View-Based Access Control (VBAC) : Một loại Constrained User Interface (CUI) khác thường được gọi là kiểm soát truy cập dựa trên View-Based Access Control (VBAC) nó thường được tìm thấy trong các ứng dụng cơ sở dữ liệu để kiểm soát truy cập vào các phần cụ thể của cơ sở dữ liệu.

Constrained User Interface (CUI) trong View-Based Access Control (VBAC) hạn chế hoặc giới hạn đối tượng kiểm soát truy cập khả năng xem hoặc có thể hành động trên các thành phần của đối tượng kiểm soát truy cập dựa trên cấp độ đối tượng kiểm soát truy cập.

Lượt xem được hệ thống tạo động cho mỗi lần truy cập được người dùng ủy quyền. Nói một cách đơn giản View-Based Access Control (VBAC) tách một đối tượng điều khiển truy cập nhất định thành các thành phần con và sau đó cho phép hoặc từ chối quyền truy cập cho đối tượng điều khiển truy cập để xem hoặc tương tác với các thành phần con cụ thể của đối tượng điều khiển truy cập bên dưới.

VBAC examples in a medical records database: Một nhân viên thanh toán (chủ thể kiểm soát truy cập) sẽ có thể xem các quy trình, vật tư và chi phí liên quan trong cơ sở dữ liệu (đối tượng kiểm soát truy cập) để thanh toán cho bệnh nhân và sẽ bị hạn chế xem kết quả của bất kỳ xét nghiệm cơ bản nào và có lẽ các bác sĩ lưu ý trong cùng một cơ sở dữ liệu  đối tượng kiểm soát truy cập .

Một y tá  (đối tượng kiểm soát truy cập) sẽ có thể xem kết quả của các thủ tục và xét nghiệm cũng như ghi chú của bác sĩ nhưng sẽ bị hạn chế xem chi phí cho các thủ tục và vật tư.

VBAC Examples : Quản trị viên firewall (chủ thể kiểm soát truy cập) có thể thêm người dùng mới và đặt lại mật khẩu người dùng trong firewalls database (đối tượng kiểm soát truy cập) nhưng sẽ bị hạn chế nhìn thấy cảnh báo hoặc thay đổi quy tắc ACL của tường lửa trong cùng cơ sở dữ liệu.

Firewall monitor (chủ thể kiểm soát truy cập) có thể thấy cảnh báo trong firewalls database  (đối tượng kiểm soát truy cập) nhưng không thể thấy hoặc thay đổi bất kỳ thông tin nào trong cơ sở dữ liệu liên quan đến người dùng hoặc quy tắc ACL.

Quản trị viên mạng riêng ảo (VPN) (chủ thể kiểm soát truy cập) sẽ có khả năng nhập các quy tắc liên quan đến VPN vào cơ sở dữ liệu tường lửa (đối tượng kiểm soát truy cập) để tạo điều kiện tạo point-to-point VPN tunnel hoặc có thể cho phép khách hàng để kết nối VPN máy chủ. Tuy nhiên, người dùng sẽ phải tồn tại trong cơ sở dữ liệu tường lửa (đối tượng kiểm soát truy cập) và quản trị viên VPN (chủ thể kiểm soát truy cập) sẽ bị hạn chế xem cảnh báo và quy tắc kiểm soát truy cập không liên quan cụ thể đến các hoạt động VPN trong cơ sở dữ liệu .


Nhãn:

Reference - Update firmware cho Esp8266 esp-01 trực tiếp trên Arduino


Sau một buổi cặm cuội nghiên cứu Esp8266 esp-01, phải công nhận rằng nó khá chua, từ việc chọn Lib để dùng, đến cách control nó nói chung khá chua, mới đầu nghĩ đơn giản nhưng để hiểu hết nó thật sự cần thời gian khá là dài, rất là căng.

Nói tới Esp8266 esp-01 thì cái đơn giản đầu tiên là update firmware cho nó, tùy vào nhu cầu mà lựa chọn sao cho phù hợp.

OK, nói về update firmware nha, trước tiên vào trang này để lấy cái mới nhất về

https://wiki.aprbrother.com/en/Firmware_For_ESP8266.html

Hiện tại giờ nó là v1.1.1 rồi, sau khi tải về lưu đó.


Cái thứ 2 là tải bộ tool này về, có nhiều tool nhưng thấy tool này khá gọn nhẹ : ESP8266 Flasher

https://drive.google.com/drive/folders/1xI1X0fyGxykSG61mLlZjmeo3R_Kxa2kf

Tải về đừng bận tâm gì nhiều, chỉ cần quan tâm đếm file esp8266_flasher.exe này thôi là ok

Vậy là gạo thức ăn đã chuẩn bị xong, bây giờ nấu thôi :)

Lên mạng tìm datasheet của Esp8266 esp-01 để xem




Hãy nhó các chân có chú thích rõ ràng, đừng tin vào trí nhớ của mình àm hãy mở datasheet lên là chắc nhất :)

Tiếp theo, cắm Arduino máy và reset cho nó sạch sẽ trước như sau : cắm vào máy tính mở ide và chọn New, xong upload trắng vào Arduino, vậy là xong (Chưa cắm j hết nhé)






Giờ mới bắt đầu upload firmware nè, dựa vào datasheet ở trên và cắm vào trong bo mạch cho chính xác, nó chỉ sao cắm vậy là ok. Nhưng lưu ý 1 điều cực quan trọn VCC ngta bảo +3.3v thì cứ cắm vào 5V đi, +3.3 mình sẽ cắm vào khi dùng, còn cập nhật firmware cứ cắm vào 5V, nó sẽ không cháy đâu mà sợ, nêu sợ gắn thêm resistor :) Vì cắm vào +3.3 ko update được.




Tiếp theo mở phần mềm lên là xúc :) Nhớ chọn gới mới nhất .bin và cổng Com chính xác




Cái này chạy tới 99% là đứng, cứ tắt đi và dùng là được, không bận tâm nhiều



Tiếp theo test phát xem



Ngon lành cành đào liền, cần test nhiều thì tải AT_Commands.pdf về gỏ gỏ cho hiểu là ok

Lưu ý khi update xong thì cắm về +3.3VCC mà dùng, có người bảo sài luôn 5V cũng được, theo cá nhân sẽ không làm vậy, nếu muốn dùng 5V thì như các bước ở trên xong làm phát reset 5V nữa là dùng.




Nhãn:

Reference - Nghiên cứu Arduino-IRremote-master library có những gì hay


Lại cuối tuần, đến hẹn lại lên :) Mở hộp đồ nghề bóc trúng đầu tiên là cái remote, ok thế là tiếp tục cuộc hành trình với cái remote. Để có thể làm việc với nó thì cần tìm một lib để điều khiển và cuối cùng chọn Arduino-IRremote-maste.

Đồ nghề hôm nay sẽ gồm có các món sau :

Một cái remote Car Mp3, hoặc remote gì cũng được :)



Cái thứ 2 là mắt thu hồng ngoài CHQ1838, có nhiều loại thu hồng ngoại, trong bộ có 1838 sài luôn.

CHQ1838 có 3 chân cứ đếm từ trái qua phải, tín hiệu, âm và dương.

Hôm nay nghiên cứu Arduino-IRremote-master library nên sẽ làm ví dụ dùng remote điều khiển độ sáng của led, như bấm - thì đèn mờ đi, bấm + thì tăng dần ...




OK, để bắt đầu làm thì việc đơn giản như sau, bóc tách nhỏ ra để giải quyết và cuối cùng là ráp lại thành 1 bài.

Led red : Trên led muốn biết độ sáng tăng thì cần biết về kỹ thuật PWM, vậy nó là gì.

PWM là viết tắt của Pulse Width Modulation(điều chế độ rộng xung ) và nó là một kỹ thuật được sử dụng để kiểm soát độ sáng của đèn LED, điều khiển tốc độ của động cơ DC, điều khiển mô tơ servo hoặc nơi bạn phải lấy đầu ra analog bằng phương tiện kỹ thuật số....

Hiểu sơ sơ về PWM xong qua bo mạch xem có gì khác lạ không.

Arduino UNO : Để làm ví dụ ở trên thì trên bo mạch cần hiểu các ký hiệu như sau

Trên Arduino Uno, các chân PWM là 3, 5, 6, 9, 10 và 11. Tần số của tín hiệu PWM trên các chân 5 và 6 sẽ là khoảng 980Hz và trên các chân khác sẽ là 490Hz và các chân PWM được dán nhãn ~ dấu. Tới đây là đã hiểu rằng cứ thấy các số có dấu ~ là cắm dùng thôi :) trên main cũng có ghi rõ.

OK, cách cắm như hình ở trên, cứ bất cứ thiết bị nào cần cấp nguồn âm và dương, nếu có signal thì cấm phù hợp (Xem hình trên) :)

Lib : Tải thư viện về theo link, tải về và import vào

https://github.com/z3t0/Arduino-IRremote


Mỗi remote có tín hiệu riêng để điều khiển, vậy sao biết được, nếu như remote LG, Samsung thì google tìm code điều khiển remote nó sẽ có, thường trang của hãng phần develop sẽ hỗ trợ.

Hôm nay cầm cái remote này biết mới lạ, vậy thì làm sao :) trước tiên cứ test trước, có connect được remote với Arduino không mới quan trọng rồi làm cao siêu j j đó sau .

Thế là làm pặc pặc như sau : 

Viết đoạn code bấm một phát sẽ sau mã code HEX ra, và lưu nó lại thành 1 một mã và dùng, nhanh gọn lẹ :)


Bật Serial Monitor lên và lấy kết quả



Cứ thế là có hết bảng mã, không biết có cách nào nhanh hơn không nhưng cái remote này 21 nút nên nhanh :) Cuối cùng là test xem hoạt động chưa và lấy được mã là ok, coi như bước đầu ok rồi.

Quay lại vần đề chính, hôm nay làm bài test dùng remote điều khiển độ sáng của đèn led, nên ráp thêm Led vào nữa và cuối cùng sẽ ráp lại bài lớn.

Trước tiên, khi lấy được list code HEX như trên thì sẽ khai báo nó ra để cần thì lôi ra dùng.

#include  
/*Khai bao nut remote*/
const uint32_t code1 = 0xFFA25D; //CH-
const uint32_t code2 = 0xFF629D; //CH
const uint32_t code3 = 0xFFE21D; //CH+
const uint32_t code4 = 0xFF22DD; //|<<
const uint32_t code5 = 0xFF02FD; //>>|
const uint32_t code6 = 0xFFC23D; //>||
const uint32_t code7 = 0xFFE01F; //-
const uint32_t code8 = 0xFFA857; //+
const uint32_t code9 = 0xFF906F; //EQ
const uint32_t code10 = 0xFF6897; //0
const uint32_t code11 = 0xFF9867; //100+
const uint32_t code12 = 0xFFB04F; //200+
const uint32_t code13 = 0xFF30CF; //1
const uint32_t code14 = 0xFF18E7; //2
const uint32_t code15 = 0xFF7A85; //3
const uint32_t code16 = 0xFF10EF; //4
const uint32_t code17 = 0xFF38C7; //5
const uint32_t code18 = 0xFF5AA5; //6
const uint32_t code19 = 0xFF42BD; //7
const uint32_t code20 = 0xFF4AB5; //8
const uint32_t code21 = 0xFF52AD; //9


Tiếp theo khai báo Led và hồng ngoại

/*khai bao led Chan 3*/
const int led_pin = 6;
/*Mac dinh khi mo len la led sang*/
float Count = 255;
/*Khai bao receive hong ngoai*/
const int receiverPin = 8; // chan digital 8 doc tin hieu
IRrecv irrecv(receiverPin); // tao doi tuong IRrecv
decode_results results;// luu ket qua giai ma tin hieu

Khai báo setup

void setup() {
   //Serial.begin(9600);
  // put your setup code here, to run once:
   pinMode(led_pin, OUTPUT);
   analogWrite(led_pin, Count);
   irrecv.enableIRIn(); // start the IR receiver  
}

Cuối cùng trong loop dùng switch case đề gọi các nút ra

void loop() {
  // put your main code here, to run repeatedly:
    if (irrecv.decode(&results)){
      unsigned int value = results.value;
      //Serial.println(value);
       switch(value) {
      /*Nhung nut - se giam den 1 led se mo */
      /*63.75 la 255/4 co nghia la tang giam bam 4 lan cho nhanh*/
        case code1 :
        case code4 :
        case code7 :
              if(Count > 1){
                Count = Count - 63.75 ;
              }
              /*Serial.println("giam :");
              Serial.println(Count);*/
               analogWrite(led_pin, Count);
               break;
/*Nhung nut + se tang den 255 led se sang nha */               
        case code3 :
        case code5 :
        case code8 :
              if(Count < 255){
                Count = Count  + 63.75 ;
              }
              /*Serial.println("Tang :");
              Serial.println(Count);*/
               analogWrite(led_pin, Count);
               break;
/*Nhung nut giua se chuyen led den muc sang trung binh */ 
        case code2 :
        case code6 :
        case code9 :
               analogWrite(led_pin, 255 / 2);
               break;
       }
       irrecv.resume();
    }
}

Sau khi nạp code xong sẽ test bằng cách bấm tăng giảm để xem :) sẽ thấy độ sáng thay đổi rõ rệt






Cuối cùng cũng thấy sự khác quắt , tính ra thấy thú vị, vì nó có thể hình thành nhiều ý tưởng.
Full code bài này như sau :

#include  
/*Khai bao nut remote*/
const uint32_t code1 = 0xFFA25D; //CH-
const uint32_t code2 = 0xFF629D; //CH
const uint32_t code3 = 0xFFE21D; //CH+
const uint32_t code4 = 0xFF22DD; //|<<
const uint32_t code5 = 0xFF02FD; //>>|
const uint32_t code6 = 0xFFC23D; //>||
const uint32_t code7 = 0xFFE01F; //-
const uint32_t code8 = 0xFFA857; //+
const uint32_t code9 = 0xFF906F; //EQ
const uint32_t code10 = 0xFF6897; //0
const uint32_t code11 = 0xFF9867; //100+
const uint32_t code12 = 0xFFB04F; //200+
const uint32_t code13 = 0xFF30CF; //1
const uint32_t code14 = 0xFF18E7; //2
const uint32_t code15 = 0xFF7A85; //3
const uint32_t code16 = 0xFF10EF; //4
const uint32_t code17 = 0xFF38C7; //5
const uint32_t code18 = 0xFF5AA5; //6
const uint32_t code19 = 0xFF42BD; //7
const uint32_t code20 = 0xFF4AB5; //8
const uint32_t code21 = 0xFF52AD; //9

/*khai bao led Chan 3*/
const int led_pin = 6;
/*Mac dinh khi mo len la led sang*/
float Count = 255;
/*Khai bao receive hong ngoai*/
const int receiverPin = 8; // chan digital 8 doc tin hieu
IRrecv irrecv(receiverPin); // tao doi tuong IRrecv
decode_results results;// luu ket qua giai ma tin hieu
void setup() {
   //Serial.begin(9600);
  // put your setup code here, to run once:
   pinMode(led_pin, OUTPUT);
   analogWrite(led_pin, Count);
   irrecv.enableIRIn(); // start the IR receiver  
}
void loop() {
  // put your main code here, to run repeatedly:
    if (irrecv.decode(&results)){
      unsigned int value = results.value;
      //Serial.println(value);
       switch(value) {
      /*Nhung nut - se giam den 1 led se mo */
      /*63.75 la 255/4 co nghia la tang giam bam 4 lan cho nhanh*/
        case code1 :
        case code4 :
        case code7 :
              if(Count > 1){
                Count = Count - 63.75 ;
              }
              /*Serial.println("giam :");
              Serial.println(Count);*/
               analogWrite(led_pin, Count);
               break;
/*Nhung nut + se tang den 255 led se sang nha */               
        case code3 :
        case code5 :
        case code8 :
              if(Count < 255){
                Count = Count  + 63.75 ;
              }
              /*Serial.println("Tang :");
              Serial.println(Count);*/
               analogWrite(led_pin, Count);
               break;
/*Nhung nut giua se chuyen led den muc sang trung binh */ 
        case code2 :
        case code6 :
        case code9 :
               analogWrite(led_pin, 255 / 2);
               break;
       }
       irrecv.resume();
    }
}


Nhãn:

Reference - Nghiên cứu New LiquidCrystal library có những gì hay


Hôm nay là ngày nghĩ cũng là ngày đầu tiên mày mò Arduino, về bản chất thì chẳng biết nó là cái gì, đặc biệt là linh kiện. Biết về nó khá lâu nhưng cũng chẳng quan tâm làm gì, hôm nay ôm bo mạch ngồi nhìn không biết đâu mà lần, sau một hồi google thì cũng biết cắm led này kia chớp nháy bla bla, khá là thú vị và quyết định mỗi tuần vọc vào ngày off.



Hôm nay nói về New LiquidCrystal library, nó là cái gì, ok nó là bộ thư viện dùng để điều khiển led, vì môn này khá mới mẻ với cá nhân, nên khi làm việc với màn hình led thì đào xâu vào để update kiến thức.

Trước hết cần thiết bị như sau :
1.LCD 16×2 : Màn hình led
2.Module I2C LCD 16×2 : Cái này giúp giao tiếp với LCD 16x2, có nó thì chỉ dùng 4 dây nên về phần phức tạp nó cũng ít đi.
3.Board Arduino Uno R3 : Bo mạch chính để điều khiển.

Sau một buổi mày mò hàn gắn LCD vào I2C, cuối cùng nó cũng hoàn tất, giai đoạn này nếu không có kinh nghiệm sẽ run tay liền, với cá nhân chắc do thô quá nên khá nhọc nhằn.




Vật lý
Sau khi hàn I2C vào Led  thì bước tiếp theo là cắm làm sao cho đúng, nếu không có I2C thì việc cắm dây rất cực, dây nhợ lằng nhằng nhưng nhờ có nó thì đỡ đi một phần, với dân không chuyên vậy là mừng lắm rồi :)

Ở đây là Uno và dựa vào bảng hướng dẫn nên dây từ : 

A4(Uno) === SDA(I2C) : SDA là serial data line
A5(Uno) === SCL(I2C): SCL là serial clock line
5V(Uno) === VCC(I2C)
GND(Uno) === GND(I2C) : Ground (GND) là mạch âm

Cứ như vậy cắm vào là xong, cực phần hàn thôi cứ cắm thì đơn giải hơn nhiều.

Code :
Khi dùng New LiquidCrystal library, nó là bộ thư viện dùng để điều khiển màn hình led , muốn dùng nó thì vào github tải về và import vào IDE.

https://github.com/fmalpartida/New-LiquidCrystal

Sau khi tải về thì mở document lên xem nó có cái gì, hôm nay sẽ làm quen với những cái nó giới thiệu.


Ví dụ 1 : Kế thừa các Functions như Begin, Clear , Home, setBacklightPin, setBacklight


Ví dụ 2 : Kế thừa func autoscroll, noautoscroll, setCursor 






Ví dụ 3 : Kế thừa createChar





Nói chúng chịu khó đọc tài liệu là có thể giải quyết được, càng làm thấy càng khá thú vị, hầu như nhiều lib hỗ trợ sẵn cá module nên quá trình học sẽ nhẹ hơn xíu, sau khi làm quen với thư viện xong có thể tùy biến .. Ví dụ như gắn bóng đèn và công tắc, khi bấm button thì show led đèn bật ngược lại là tắt.. :)

Nhãn: