Nếu bạn có thể dùng mã nguồn mở, bạn cũng có thể làm phần cứng
(redeem-tomorrow.com)- Phần cứng vẫn khó vì các ràng buộc vật lý, nhưng nhờ khả năng tận dụng mã nguồn mở và hệ sinh thái linh kiện, ngay cả lập trình viên phần mềm cũng đã dễ tự làm các thiết bị hữu ích hơn trước
- Sau Arduino, các bo mạch vi điều khiển đã trở nên đa dạng hơn rất nhiều, và những bo như ESP32 và Pico W cho phép lặp đi lặp lại việc hiện thực logic tùy chỉnh trên linh kiện giá rẻ, thậm chí còn tích hợp cả WiFi và Bluetooth
- Các linh kiện dựa trên I2C và StemmaQT/Qwiic cho phép kết nối cảm biến và thiết bị nhập liệu mà không cần hàn, giúp tập trung vào việc ghép thư viện và mã ví dụ thay vì thiết kế mạch
- Dùng máy in 3D và công cụ CAD, bạn còn có thể tự làm cả vỏ enclosure tùy chỉnh để chứa mạch, đồng thời lặp lại việc sửa bố trí và vấn đề tản nhiệt với chi phí vật liệu thấp và thời gian in nhanh
- Khi khả năng kết hợp kiểu mã nguồn mở, tài liệu và hỗ trợ cộng đồng cũng xuất hiện trong việc chế tạo phần cứng, môi trường để cá nhân tạo ra sản phẩm vật lý giải quyết vấn đề của chính mình đã trở nên khả thi
Vì sao chế tạo phần cứng vẫn khó nhưng đã dễ hơn
- Phần cứng có một sức mạnh mà chỉ phần mềm khó mang lại được, ở chỗ nó tạo ra kết quả vật lý có thể chạm vào, nhưng đi kèm là độ phức tạp cũng lớn hơn
- Mạch điện có thể còn khó debug hơn cả code, và ngay cả khi logic lẫn điện áp đều đúng thì vẫn phải xử lý thêm các ràng buộc vật lý như đi dây, bố trí không gian và tản nhiệt
- Phát triển sản phẩm phần cứng là phiên bản có thêm các ràng buộc của thế giới vật lý vào những khó khăn vốn có của phát triển sản phẩm nói chung
- Dự án ThermTerm được tạo ra để thay đổi giao diện khó đọc và trải nghiệm lập trình bất tiện của chiếc điều khiển bơm nhiệt hiện có, đồng thời tích hợp bơm nhiệt vào hệ thống tự động hóa nhà ở
- Thiết bị hoàn chỉnh đã được lắp 5 bộ trong nhà
- Tác giả không phải kỹ sư điện tử, nhưng đã hoàn thiện thiết bị nhờ tận dụng mã nguồn mở và hệ sinh thái linh kiện
- Việc dùng mã nguồn mở bao gồm cả tìm kiếm trong kho lưu trữ, hiểu code của người khác, giải quyết vấn đề, tìm trợ giúp từ cộng đồng, và phân biệt dự án tốt với dự án kém
- Kinh nghiệm đó có thể mở rộng từ thế giới bit sang thế giới của điện tử và nguyên tử
Vi điều khiển và hệ sinh thái phần mềm
- Arduino là bước ngoặt về trải nghiệm lập trình, giúp người mới có thể viết vài đoạn C đơn giản và có trải nghiệm điện toán vật lý chỉ trong vài phút
- Từ đó, hệ sinh thái bo mạch vi điều khiển đã mở rộng rất mạnh
- Có đủ loại kích cỡ và cấu hình, từ cỡ chiếc sandwich đến cỡ tem bưu chính
- Vi điều khiển trở thành nền tảng để lặp lại liên tục logic tùy chỉnh trên linh kiện giá rẻ
- Mỗi bo mạch lại khác nhau về đầu nối, phụ kiện và kiến trúc chip
- Các bo dựa trên ESP32 hay Pico W còn tích hợp cả WiFi và Bluetooth
- Trục gắn kết nhiều loại bo khác nhau lại là hệ sinh thái phần mềm
- Có sẵn mã Arduino mã nguồn mở để giải quyết nhiều bài toán như mạng, xử lý nút bấm, v.v.
- Dù kiến trúc bo khác nhau, phần lớn vẫn có bản port môi trường Arduino nên có thể tận dụng code sẵn có cho dự án
- Nếu thích Python hơn C/C++, bạn có thể dùng MicroPython và CircuitPython làm lựa chọn thay thế
I2C và StemmaQT/Qwiic tạo ra các dự án điện tử lắp ghép
- I2C là chuẩn dữ liệu nối tiếp 2 dây ra đời năm 1982; thêm 2 dây nguồn và mass là có thể nối nhiều thiết bị trên cùng một bus
- Với người làm phần cứng như hobby, phần khó nhất thường là thiết kế mạch
- Điện tử là lĩnh vực đan xen giữa các định luật vật lý và kiến thức linh kiện tích lũy suốt hàng chục năm
- Cần tính đến cả điều chỉnh điện áp, quản lý điện trở, lẫn việc tạo ra một cấu hình đủ chắc chắn và dễ bảo trì về mặt vật lý
- Tương tự như cách phát triển phần mềm hiện đại ghép cơ sở dữ liệu, framework UI và thư viện HTTP, phần cứng giờ đây cũng có thể áp dụng cách kết hợp tương tự
- StemmaQT của Adafruit và Qwiic của Sparkfun là các chuẩn cáp dựa trên I2C, giúp nối nhanh nhiều bo mà không cần hàn
- Trong bộ điều khiển bơm nhiệt, các linh kiện sau được nối qua I2C
- Vi điều khiển tích hợp màn hình dựa trên ESP32
- Cảm biến ánh sáng: để tự động làm tối đèn quá sáng
- Cảm biến nhiệt độ và độ ẩm: để lấy dữ liệu nhiệt độ thực trong phòng
- Bo rotary encoder: để tạo núm xoay chỉnh nhiệt độ và chuyển nguồn
- Mỗi bo đều che giấu chi tiết triển khai bên trong như một thư viện được thiết kế tốt
- Không cần tự xử lý những chi tiết như quản lý nguồn hay diễn giải tín hiệu rotary encoder
- Sau khi đi dây, chỉ cần tìm mã ví dụ của từng linh kiện rồi chỉnh lại cho phù hợp với dự án
- Các nhà bán linh kiện tích cực duy trì thư viện hỗ trợ và tài liệu; riêng Adafruit còn cung cấp hàng trăm bo mạch hữu ích và độc đáo hỗ trợ kiểu kết hợp này
Biến mạch điện thành một vật thể hoàn chỉnh
- Sau khi đã tạo được mạch hoạt động, bạn còn có thể tự thiết kế và chế tạo vỏ enclosure tùy chỉnh cho nó
- Với khoảng $500, bạn có thể mua máy in 3D của Prusa
- Máy in của Prusa hoạt động tốt gần như ngay khi lấy ra khỏi hộp
- Tích hợp tốt với phần mềm slicer đa nền tảng của Prusa
- Cộng đồng người dùng rất sôi nổi nên dễ tìm trợ giúp
- Thể tích in ở tầm giá này không lớn, nhưng đủ cho các dự án điện tử
- Các hãng bán phần cứng mở thường cung cấp mô hình 3D sản phẩm, giúp thiết kế vỏ chính xác trong phần mềm CAD
- In 3D có chi phí lặp thấp và tốc độ nhanh
- Để thử một thiết kế mới chỉ cần vài cent tiền vật liệu và thời gian in
- Với bộ điều khiển bơm nhiệt, nhiệt thải từ vi điều khiển làm lệch giá trị cảm biến nhiệt độ, và vấn đề được giải quyết bằng cách lặp thiết kế để chuyển hai cảm biến lên phần trên của vỏ
- In 3D có đường cong học tập riêng
CAD và cộng đồng đã hạ thấp rào cản gia nhập
- Kỹ năng CAD cũng cần thiết, nhưng có thể bớt đau đầu và thú vị hơn bạn tưởng
- Làm CAD gần giống như vẽ các hình phẳng đơn giản, rồi đẩy kéo chúng thành vật thể 3D và gọt đi các chi tiết nhỏ
- Nhiều phần mềm CAD desktop giá rẻ từng bất tiện như cảm giác dùng một ứng dụng Flash cũ trên IE6, nhưng Shapr3D trên iPad cho phép tạo mô hình trực quan bằng Apple Pencil
- Khi học các công nghệ mới như in 3D, cộng đồng đóng vai trò rất lớn
- Những người dùng hobby tham gia rất sâu vào lĩnh vực in 3D
- Có thể tìm được trợ giúp từ khâu lên kế hoạch mô hình đến debug các vấn đề liên quan đến nhiệt trong lúc in
- Môi trường chế tạo phần cứng hiện nay đã tiếp nhận sự tiết kiệm công sức, khả năng kết hợp và niềm vui của mã nguồn mở
- Ngay cả cá nhân cũng có thể tự làm thiết bị mình cần, và tạo ra kết quả như bộ điều khiển bơm nhiệt có thể tự động hóa và điều khiển từ xa thiết bị tiêu thụ năng lượng lớn nhất trong nhà
1 bình luận
Ý kiến trên Hacker News
Tôi muốn nói phức tạp hơn một chút, đại loại là “nếu dùng được mã nguồn mở thì cũng có thể làm prototype phần cứng”
Làm phần cứng cũng bao gồm việc tạo ra thứ đủ bền để chịu được thế giới thực trong thời gian dài. Phải cân nhắc cảm biến độ ẩm bị môi trường xung quanh ảnh hưởng ra sao, thậm chí cả túi đóng gói; tôi thực sự từng bị vướng ở đó. Khi độ trôi tăng lên cũng phải có kế hoạch hiệu chuẩn lại. Đầu nối cho bó dây phải chịu được số lần cắm/rút dự kiến trong vòng đời sản phẩm, và độ dài bó dây cũng phải phù hợp để không bị hỏng khi mở vỏ để thay pin, v.v.
Cũng phải nghĩ đến ảnh hưởng của môi trường xung quanh lên phần còn lại của thiết kế. Ví dụ, trong môi trường độ ẩm cao, nên tránh tình huống phải định kỳ vệ sinh tiếp điểm chỉ vì không dùng tiếp điểm mạ vàng ở cả bó dây lẫn đầu nối.
Tất nhiên, phần lớn những điều này tôi đều tự học, và người làm hobby cũng hoàn toàn có thể đạt tới. Nhưng có khác biệt lớn giữa việc thay một bộ điều khiển relay thông minh này bằng một cái khác, và việc làm ra một bộ điều khiển relay thông minh đủ ổn để tặng chị/em vợ làm quà Giáng sinh.
Ngay cả khi đạt tới giai đoạn prototype, phần cứng nguồn mở nhiều khả năng thường chỉ hữu ích cho đúng một người đã làm ra nó.
Có khác biệt lớn giữa việc tạo prototype và việc ghi tài liệu quy trình build đủ chi tiết để người làm hobby khác có thể sao chép, chỉnh sửa và sử dụng. Ghi tài liệu phần cứng khó hơn nhiều so với ghi tài liệu phần mềm; nếu là một dự án thú vị, cả những người chưa từng có kinh nghiệm hàn hoặc đặt linh kiện cắt laser cũng sẽ nhảy vào, và rất khó hỗ trợ họ.
Tiến thêm một bước nữa, dù chỉ là bán thêm vài cái trên Tindie, đó đã là bán thiết kế cho những người làm hobby khác; còn nếu bán cho công chúng nói chung thì sẽ cần chứng nhận nhiễu FCC, và nếu lỗi thiết kế làm cháy vài căn nhà thì công ty phải chịu trách nhiệm. Có lý do các công ty phần cứng thuê kỹ sư thực thụ tuân theo tiêu chuẩn chuyên nghiệp. Trong bối cảnh chi phí biên trên mỗi đơn vị không dưới 1 cent như phần mềm, các vấn đề về dòng tiền và kinh doanh cũng kéo theo.
Ở mỗi giai đoạn như vậy thường phải lặp lại phần cứng nhiều lần, kéo theo lead time và chi phí.
Nếu hỏng thì bạn không thể mua một sản phẩm mới, cũng khó gọi thợ sửa với giá hợp lý. Nếu có phần mềm đi kèm thì nhiều khả năng cũng cần bảo trì. Nếu ban đầu muốn một cái, rất có thể sau này bạn sẽ cần thêm một cái nữa để mở rộng dự án.
Bạn có thể thiết kế một thiết bị phần cứng đáng tin cậy, nhưng nếu ngân sách không lớn thì không thể khiến nó chịu được cảnh bị đánh bằng gậy bóng chày hoặc bị đổ epoxy vào đầu nối. Vì vậy, khi thực tế có ai nhờ tôi làm gì đó, tôi cố giải quyết bằng linh kiện có sẵn nhiều nhất có thể.
Các dự án điện tử thật sự rất vui, nhưng điều làm giảm niềm vui là cuối cùng bạn còn lại một món đồ hoàn toàn độc nhất và không thể thay thế. Nếu dùng cho mục đích quan trọng thì nó trở thành yếu tố trách nhiệm, và thường bị buộc vào một công dụng; khi không còn cần nữa, khác với hàng có sẵn đa dụng, nó thành rác.
ESPHome và các module Amazon, cùng in 3D, trong nhiều trường hợp đem lại sự cân bằng khá tốt. Bạn có khả năng cấu hình lại, độ tin cậy ở mức hàn máy, một software stack dựng sẵn, nhưng vẫn đủ linh hoạt để tạo ra thứ mới.
Thiết kế phần cứng là tuyến phòng thủ cuối cùng trước khi gây thiệt hại cho thế giới thực.
Những yếu tố như cầu chì, bảo vệ phóng tĩnh điện và chống surge, watchdog timer thường bị thiếu ngay cả trong các dự án hobby hoặc thiết kế nguồn mở. Để biết khi nào cần những thứ này, đôi khi phải có kinh nghiệm đổi bằng vất vả.
Tôi cố tránh giúp tới mức thiết kế, nhưng ông ấy cứ thúc ép nên tôi đề xuất mắc song song vài con 7812 gói TO-3. Thử trên bàn thì chạy, và ông ấy ra về.
Vài năm sau tôi mới học được rằng không nên làm như vậy. Vì một bộ ổn áp có thể gánh tải và bị quá tải. Thay vào đó phải để một bộ ổn áp duy nhất làm việc thông qua pass transistor hoặc một cơ chế khác. Đến giờ tôi vẫn tự hỏi liệu máy bay của người đó có rơi trong biển lửa hay không.
Tôi từng tìm hiểu để làm thứ vượt quá phạm vi mà các bo mạch phát triển MCU dạng package nhỏ có thể làm, nhưng không thể nắm bắt được trong đầu. Có quá nhiều yếu tố tôi không giỏi.
Trong phần bình luận này có nhiều hành vi gác cổng và sự giễu cợt. Mỗi khi một việc khó trở nên dễ hơn, những người theo phái thuần túy đã vất vả nhất lại xuất hiện và cho bạn biết rằng việc bạn làm dễ dàng không tốt bằng việc khó mà họ đã làm từ khi còn rất trẻ.
Cách ghép các module với nhau rất tuyệt cho prototype và sản xuất quy mô nhỏ. Khi kỹ năng tăng lên và bạn học tối ưu BOM cũng như thiết kế để dễ sản xuất (DFM), bạn sẽ bắt đầu thay bo MCU bằng thiết kế tự làm. Bạn cũng sẽ thấy một encoder xoay I2C giá 10 đô có thể được thay bằng lượng linh kiện trị giá 1 đô gồm điện trở, tụ điện, diode Schottky và hex inverter.
Các công ty như JLBPCB hay PCBWay cung cấp dịch vụ in 3D và CNC, nên thậm chí bạn không cần mua máy in 3D để bắt đầu.
Hơn nữa, có https://wokwi.com/ thì có thể bạn cũng không cần linh kiện prototype.
Thị trường phần mềm dành cho kỹ sư phần cứng có cảm giác không sáng tạo hoặc tham vọng bằng mảng phần mềm thuần túy, DevOps hay hạ tầng.
Có cơ hội lớn
Thú vị, và tôi cũng ở cùng hoàn cảnh với tác giả. Gần đây tôi bắt đầu mày mò nhiều hơn với các thiết bị nhúng và đang làm cảm biến mực nước giếng
Ban đầu tôi định dùng bo mạch dựa trên NRF, nhưng bị kẹt ở hệ sinh thái SDK. Cảm giác rất rõ là nó nhắm đến các kỹ sư nhúng giàu kinh nghiệm trong công ty. Vì vậy tôi quay lại với các bo ESP32-C3/S3 đơn giản hơn nhiều; chúng tuyệt vời, được hỗ trợ rộng rãi, dễ cấu hình và khá ổn định. Tôi đã nối nó với cảm biến khoảng cách HC-SR04 và làm cho việc tính khoảng cách chạy được. Nếu muốn chạy bằng pin thì cảm biến cần 5V, nên phải thêm cả bộ chuyển đổi điện áp; sau khi đọc một chút và thử sai vài lần thì thấy cũng đủ dễ
Sau đó bo mạch và dây cáp trở thành một mớ hỗn độn, lại phải hàn lên bo nên cần công cụ và một chút thử sai. Giờ thì không có vỏ, tôi đã thử vài hộp nối bán sẵn nhưng không cái nào hoàn hảo, và cuối cùng quyết định tự mua máy in 3D. Tương lai đã tới rồi: tự in và học cách dựng mô hình
So với mọi thứ khác, máy in 3D lại khá dễ. Chưa đầy 1 giờ sau khi nhận máy in, tôi đã in mẫu đầu tiên; việc dựng mô hình kiểu lập trình bằng OpenSCAD, hoặc CadQuery mà giờ tôi thích hơn, cũng dễ học sau vài giờ mày mò. Tôi có máy in đúng một tuần, đã làm được gần 12 bản in thành công, và cũng đã thiết kế vài chi tiết dùng được, có chức năng thực sự
Không cần phải sợ máy in 3D. Bạn cũng có thể mua một máy in tốt với giá thấp hơn nhiều so với 500 đô la. Tôi mua một chiếc Sovol SV06 cũ dùng nhẹ với giá 150 euro; máy mới là 220 euro, và nó hoạt động rất tốt
Vì không tìm được cảm biến mực nước giếng có sẵn phù hợp mục đích, nên tôi đang tự làm. Giá BOM cuối cùng có lẽ khoảng 20 euro. Thời gian học và mày mò là hàng trăm giờ, và chi phí những món tôi đã mua cho việc này — máy in, kìm bấm đầu nối, dây cáp, MCU, bo hàn, cảm biến, hộp pin, linh kiện điện tử, filament, mỏ hàn, v.v. — giờ khoảng 500 euro. Dù vậy, tất cả đều đáng giá
In 3D có đường cong học tập, và có thể là yếu tố dốc nhất ở đây
Tôi thích CAD, nhưng thật sự ghét in 3D. Nó giống như một thiết bị được phát minh ra để minh họa định luật Murphy: “cái gì có thể sai thì sẽ sai”
Đầu phun lần nào cũng tắc. Filament đứt ở vị trí tệ nhất và muốn gỡ ra phải tháo một phần máy. Máy dừng vô cớ giữa một bản in dài. Bàn in không bao giờ phẳng chính xác. Nếu bạn không để cuộn filament quay đủ tự do, máy sẽ kéo filament làm rơi cuộn, rồi cuộn đó như trả thù mà kéo sập cả cái máy xuống
Tất nhiên là mọi thứ mất hàng giờ
Tôi gặp may hơn nhiều khi dùng dịch vụ bên ngoài: gửi file rồi họ gửi vật thể về. Nó đắt và thường mất lâu hơn so với làm ở nhà, nhưng sự yên tâm thì vô giá
Ví dụ, giải pháp công nghiệp cho một số vấn đề là kiểm tra máy in theo checklist trước mỗi công việc, nhưng ở nhà thì việc đó cực kỳ nhàm chán
Phần mềm tiếp xúc trực tiếp với thực tại cũng gặp những vấn đề kiểu này
Trong luyện kim, đúc là một kỹ thuật rất lâu đời. Tôi sẽ không nói nó là đơn giản nhất, nhưng việc con người tiền công nghiệp cũng có thể tìm ra được nói lên nhiều điều về độ phức tạp của nó
Tiện thì bắt đầu từ hình trụ hoặc đa diện
Thế nhưng chúng ta chỉ dùng cách gọt hình dạng ra khỏi một khối đa diện, hoặc xây dựng nó lên từ hư không. Với các vật thể phức tạp, lõm hoặc thắt nút, việc kết hợp in đắp lớp độ phân giải thấp với gia công cắt gọt độ phân giải cao có vẻ hợp lý hơn
Có thể máy CNC cần thêm một bậc tự do nữa. Không cần đến mức có hẳn một “đuôi để cầm nắm”, nhưng nếu có thể nghiêng đầu cắt khoảng 45 độ, khoảng cách giữa các hình dạng mà sản xuất đắp lớp và sản xuất cắt gọt có thể tạo ra sẽ thu hẹp đáng kể
Với tư cách một người chỉ làm phần mềm, bài viết này cho tôi rất nhiều dũng khí để thử các dự án phần cứng trong tương lai
Thành thật mà nói, vấn đề lớn hơn có lẽ là tôi không thực sự có trường hợp sử dụng nào cần giải quyết bằng dự án phần cứng tự làm. Tôi không cảm thấy trong cuộc sống hay trong nhà mình có thiếu sót nào cần một dự án phần cứng để khắc phục
Ngoài ra, thường thì tôi muốn giải pháp tốt nhất trong phạm vi mình có thể chi trả. Cho đến giờ, các sản phẩm thương mại đã đủ làm tôi hài lòng. Nếu tôi có thể trả tiền để mua một sản phẩm giải quyết vấn đề, tôi sẵn sàng làm vậy thay vì tự làm rồi đau đầu, vì tôi cho rằng thời gian của mình là thứ quý giá nhất
Rốt cuộc, để nhúng chân vào phần cứng, có lẽ cần phải có một vấn đề đủ khó chịu mà các sản phẩm sẵn có trên thị trường không giải quyết được. Tức là khi hàng có sẵn quá tệ hoặc hoàn toàn không tồn tại
Nghe giống kiểu nội dung điển hình của Internet ngày nay. Có đủ từ khóa thịnh hành để công cụ tìm kiếm tìm thấy, nhưng lại quá trừu tượng để thực sự hữu ích
Câu “Không thể thắng được Prusa. Máy in hoạt động hoàn hảo ngay khi lấy ra khỏi hộp” đi kèm cái giá là cũ và chậm
Sau khi Prusa về cơ bản đã nhường thị trường cho các hãng khác, thật khó chỉ toàn khen họ
Với 200 đô la, bạn có thể mua Sovol SV06, một bản lặp lại thông minh hơn của MK3/MK3S, và cả phần cứng lẫn phần mềm đều là mã nguồn mở. Với 500 đô la, bạn có thể mua Bambu P1P nhanh hơn nhiều và còn tích hợp dọc tốt hơn tới cả slicer. Thêm 100 đô la nữa thì có thể mua P1S, có cùng chức năng như P1P nhưng đã sẵn sàng cho in nhiệt độ cao
Tôi nghĩ mình không làm được
Hồi trong quân đội, tôi từng sửa thiết bị liên lạc vi ba. Phần đau khổ nhất trong khóa đào tạo là hàn thiếc cơ bản. Tôi hoàn toàn không hàn nổi, độ khéo léo của ngón tay thì như cục gạch
Vài năm trước tôi làm một bài đánh giá năng lực nghề nghiệp tổng hợp có phần kiểm tra độ khéo léo của ngón tay. Làm bài xong tôi nghĩ mình làm khá tốt, nhưng kết quả cho biết tôi thuộc nhóm 5% thấp nhất. Nếu tôi trở thành bác sĩ phẫu thuật, phí bảo hiểm trách nhiệm do sai sót y khoa chắc còn đắt hơn cả lương hằng năm của tôi
Đó không phải là làm phần cứng, mà là kết nối và giao tiếp với các linh kiện phần cứng có sẵn
Với đa số mục đích sử dụng, cách đó có lẽ hợp lý hơn nhiều so với tự thiết kế linh kiện phần cứng
Nhưng nó không giống những việc như thiết kế mạch, và ở khía cạnh đó tiêu đề hơi gây hiểu nhầm
Nếu đưa gỗ vào máy CNC để gia công, tôi vẫn xem là mình đã làm ra thứ gì đó. Dù tôi không trồng cây, không đốn cây, không sấy khô gỗ, cũng không cắt nó đúng kích thước để đưa vào máy CNC
Nếu bạn cần trợ giúp để thực sự làm một dự án hoặc sản phẩm phần cứng và đưa nó ra thị trường, cứ liên hệ với tôi bất cứ lúc nào. Thông tin liên hệ có trong hồ sơ của tôi