diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.hr.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.hr.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.hr.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sl.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sl.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sl.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sr.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sr.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sr.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.hr.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.hr.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.hr.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sl.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sl.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sl.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sr.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sr.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sr.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.hr.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.hr.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.hr.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sl.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sl.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sl.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sr.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sr.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sr.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.hr.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.hr.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.hr.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sl.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sl.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sl.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sr.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sr.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sr.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.hr.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.hr.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.hr.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sl.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sl.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sl.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sr.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sr.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sr.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.hr.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.hr.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.hr.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sl.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sl.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sl.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sr.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sr.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sr.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.hr.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.hr.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.hr.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sl.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sl.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sl.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sr.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sr.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sr.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.hr.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.hr.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.hr.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sl.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sl.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sl.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sr.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sr.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sr.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.hr.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.hr.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.hr.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sl.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sl.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sl.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sr.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sr.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sr.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.hr.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.hr.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.hr.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sl.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sl.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sl.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sr.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sr.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sr.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.hr.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.hr.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.hr.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sl.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sl.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sl.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sr.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sr.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sr.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.hr.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.hr.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.hr.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sl.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sl.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sl.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sr.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sr.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sr.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.hr.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.hr.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.hr.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sl.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sl.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sl.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sr.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sr.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sr.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.hr.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.hr.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.hr.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sl.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sl.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sl.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sr.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sr.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sr.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.hr.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.hr.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.hr.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sl.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sl.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sl.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sr.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sr.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sr.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.hr.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.hr.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.hr.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sl.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sl.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sl.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sr.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sr.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sr.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.hr.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.hr.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.hr.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sl.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sl.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sl.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sr.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sr.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sr.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.hr.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.hr.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.hr.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sl.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sl.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sl.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sr.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sr.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sr.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.hr.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.hr.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.hr.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sl.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sl.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sl.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sr.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sr.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sr.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.hr.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.hr.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.hr.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sl.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sl.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sl.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sr.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sr.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sr.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.hr.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.hr.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.hr.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sl.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sl.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sl.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sr.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sr.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sr.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.hr.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.hr.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.hr.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sl.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sl.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sl.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sr.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sr.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sr.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.hr.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.hr.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.hr.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sl.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sl.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sl.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sr.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sr.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sr.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.hr.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.hr.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.hr.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sl.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sl.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sl.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sr.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sr.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sr.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.hr.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.hr.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.hr.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sl.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sl.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sl.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sr.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sr.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sr.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.hr.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.hr.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.hr.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sl.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sl.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sl.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sr.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sr.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sr.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.hr.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.hr.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.hr.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sl.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sl.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sl.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sr.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sr.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sr.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.hr.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.hr.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.hr.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sl.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sl.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sl.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sr.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sr.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sr.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.hr.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.hr.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.hr.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sl.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sl.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sl.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sr.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sr.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sr.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.hr.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.hr.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.hr.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sl.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sl.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sl.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sr.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sr.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sr.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.hr.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.hr.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.hr.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sl.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sl.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sl.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sr.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sr.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sr.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.hr.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.hr.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.hr.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sl.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sl.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sl.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sr.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sr.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sr.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.hr.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.hr.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.hr.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sl.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sl.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sl.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sr.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sr.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sr.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.hr.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.hr.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.hr.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sl.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sl.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sl.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sr.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sr.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sr.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.hr.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.hr.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.hr.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sl.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sl.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sl.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sr.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sr.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sr.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.hr.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.hr.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.hr.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sl.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sl.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sl.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sr.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sr.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sr.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.hr.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.hr.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.hr.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sl.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sl.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sl.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sr.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sr.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sr.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.hr.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.hr.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.hr.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sl.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sl.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sl.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sr.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sr.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sr.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.hr.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.hr.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.hr.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sl.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sl.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sl.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sr.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sr.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sr.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.hr.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.hr.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.hr.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sl.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sl.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sl.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sr.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sr.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sr.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.hr.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.hr.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.hr.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sl.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sl.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sl.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sr.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sr.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sr.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.hr.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.hr.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.hr.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sl.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sl.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sl.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sr.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sr.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sr.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.hr.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.hr.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.hr.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sl.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sl.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sl.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sr.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sr.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sr.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.hr.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.hr.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.hr.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sl.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sl.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sl.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sr.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sr.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sr.png differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.hr.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.hr.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.hr.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sl.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sl.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sl.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sr.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sr.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sr.jpg differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.hr.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.hr.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.hr.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sl.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sl.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sl.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sr.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sr.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sr.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.hr.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.hr.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.hr.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sl.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sl.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sl.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sr.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sr.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sr.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.hr.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.hr.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.hr.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sl.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sl.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sl.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sr.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sr.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sr.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.hr.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.hr.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.hr.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sl.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sl.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sl.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sr.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sr.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sr.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hr.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hr.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hr.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sl.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sl.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sl.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sr.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sr.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sr.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hr.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hr.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hr.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sl.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sl.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sl.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sr.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sr.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sr.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hr.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hr.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hr.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sl.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sl.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sl.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sr.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sr.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sr.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.hr.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.hr.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.hr.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sl.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sl.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sl.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sr.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sr.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sr.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hr.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hr.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hr.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sl.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sl.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sl.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sr.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sr.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sr.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.hr.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.hr.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.hr.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sl.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sl.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sl.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sr.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sr.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sr.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hr.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hr.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hr.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sl.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sl.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sl.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sr.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sr.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sr.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.hr.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.hr.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.hr.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sl.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sl.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sl.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sr.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sr.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sr.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hr.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hr.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hr.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sl.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sl.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sl.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sr.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sr.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sr.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hr.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hr.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hr.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sl.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sl.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sl.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sr.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sr.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sr.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.hr.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.hr.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.hr.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sl.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sl.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sl.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sr.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sr.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sr.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hr.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hr.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hr.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sl.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sl.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sl.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sr.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sr.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sr.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.hr.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.hr.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.hr.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sl.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sl.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sl.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sr.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sr.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sr.png differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.hr.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.hr.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.hr.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sl.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sl.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sl.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sr.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sr.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sr.jpg differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.hr.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.hr.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.hr.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sl.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sl.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sl.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sr.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sr.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sr.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.hr.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.hr.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.hr.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sl.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sl.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sl.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sr.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sr.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sr.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.hr.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.hr.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.hr.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sl.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sl.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sl.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sr.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sr.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sr.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.hr.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.hr.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.hr.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sl.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sl.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sl.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sr.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sr.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sr.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.hr.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.hr.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.hr.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sl.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sl.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sl.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sr.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sr.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sr.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.hr.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.hr.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.hr.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sl.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sl.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sl.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sr.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sr.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sr.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.hr.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.hr.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.hr.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sl.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sl.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sl.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sr.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sr.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sr.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.hr.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.hr.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.hr.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sl.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sl.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sl.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sr.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sr.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sr.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.hr.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.hr.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.hr.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sl.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sl.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sl.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sr.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sr.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sr.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.hr.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.hr.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.hr.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sl.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sl.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sl.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sr.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sr.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sr.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.hr.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.hr.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.hr.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sl.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sl.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sl.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sr.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sr.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sr.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.hr.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.hr.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.hr.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sl.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sl.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sl.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sr.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sr.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sr.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.hr.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.hr.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.hr.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sl.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sl.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sl.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sr.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sr.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sr.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.hr.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.hr.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.hr.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sl.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sl.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sl.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sr.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sr.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sr.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.hr.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.hr.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.hr.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sl.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sl.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sl.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sr.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sr.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sr.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.hr.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.hr.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.hr.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sl.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sl.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sl.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sr.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sr.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sr.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.hr.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.hr.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.hr.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sl.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sl.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sl.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sr.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sr.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sr.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.hr.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.hr.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.hr.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sl.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sl.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sl.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sr.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sr.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sr.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.hr.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.hr.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.hr.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sl.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sl.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sl.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sr.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sr.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sr.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.hr.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.hr.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.hr.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sl.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sl.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sl.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sr.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sr.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sr.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.hr.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.hr.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.hr.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sl.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sl.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sl.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sr.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sr.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sr.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.hr.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.hr.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.hr.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sl.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sl.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sl.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sr.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sr.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sr.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.hr.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.hr.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.hr.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sl.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sl.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sl.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sr.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sr.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sr.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.hr.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.hr.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.hr.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sl.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sl.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sl.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sr.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sr.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sr.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.hr.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.hr.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.hr.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sl.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sl.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sl.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sr.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sr.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sr.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.hr.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.hr.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.hr.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sl.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sl.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sl.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sr.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sr.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sr.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.hr.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.hr.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.hr.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sl.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sl.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sl.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sr.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sr.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sr.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.hr.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.hr.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.hr.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sl.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sl.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sl.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sr.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sr.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sr.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.hr.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.hr.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.hr.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sl.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sl.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sl.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sr.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sr.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sr.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.hr.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.hr.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.hr.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sl.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sl.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sl.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sr.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sr.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sr.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.hr.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.hr.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.hr.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sl.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sl.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sl.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sr.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sr.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sr.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.hr.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.hr.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.hr.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sl.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sl.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sl.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sr.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sr.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sr.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.hr.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.hr.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.hr.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sl.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sl.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sl.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sr.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sr.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sr.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.hr.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.hr.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.hr.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sl.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sl.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sl.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sr.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sr.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sr.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.hr.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.hr.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.hr.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sl.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sl.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sl.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sr.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sr.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sr.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.hr.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.hr.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.hr.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sl.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sl.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sl.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sr.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sr.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sr.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.hr.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.hr.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.hr.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sl.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sl.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sl.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sr.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sr.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sr.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.hr.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.hr.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.hr.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sl.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sl.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sl.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sr.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sr.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sr.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.hr.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.hr.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.hr.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sl.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sl.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sl.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sr.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sr.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sr.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.hr.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.hr.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.hr.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sl.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sl.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sl.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sr.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sr.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sr.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.hr.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.hr.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.hr.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sl.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sl.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sl.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sr.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sr.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sr.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.hr.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.hr.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.hr.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sl.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sl.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sl.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sr.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sr.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sr.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.hr.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.hr.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.hr.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sl.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sl.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sl.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sr.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sr.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sr.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.hr.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.hr.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.hr.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sl.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sl.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sl.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sr.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sr.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sr.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.hr.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.hr.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.hr.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sl.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sl.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sl.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sr.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sr.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sr.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.hr.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.hr.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.hr.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sl.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sl.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sl.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sr.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sr.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sr.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.hr.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.hr.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.hr.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sl.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sl.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sl.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sr.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sr.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sr.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.hr.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.hr.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.hr.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sl.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sl.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sl.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sr.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sr.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sr.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.hr.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.hr.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.hr.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sl.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sl.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sl.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sr.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sr.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sr.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.hr.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.hr.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.hr.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sl.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sl.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sl.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sr.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sr.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sr.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.hr.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.hr.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.hr.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sl.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sl.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sl.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sr.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sr.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sr.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.hr.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.hr.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.hr.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sl.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sl.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sl.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sr.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sr.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sr.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.hr.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.hr.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.hr.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sl.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sl.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sl.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sr.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sr.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sr.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.hr.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.hr.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.hr.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sl.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sl.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sl.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sr.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sr.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sr.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.hr.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.hr.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.hr.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sl.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sl.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sl.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sr.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sr.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sr.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.hr.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.hr.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.hr.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sl.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sl.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sl.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sr.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sr.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sr.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.hr.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.hr.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.hr.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sl.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sl.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sl.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sr.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sr.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sr.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.hr.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.hr.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.hr.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sl.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sl.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sl.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sr.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sr.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sr.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.hr.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.hr.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.hr.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sl.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sl.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sl.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sr.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sr.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sr.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.hr.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.hr.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.hr.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sl.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sl.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sl.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sr.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sr.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sr.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.hr.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.hr.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.hr.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sl.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sl.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sl.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sr.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sr.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sr.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hr.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hr.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hr.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sl.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sl.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sl.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sr.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sr.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sr.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.hr.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.hr.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.hr.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sl.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sl.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sl.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sr.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sr.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sr.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.hr.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.hr.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.hr.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sl.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sl.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sl.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sr.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sr.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sr.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hr.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hr.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hr.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sl.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sl.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sl.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sr.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sr.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sr.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.hr.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.hr.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.hr.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sl.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sl.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sl.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sr.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sr.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sr.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hr.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hr.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hr.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sl.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sl.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sl.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sr.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sr.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sr.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.hr.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.hr.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.hr.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sl.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sl.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sl.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sr.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sr.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sr.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.hr.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.hr.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.hr.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sl.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sl.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sl.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sr.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sr.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sr.png differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.hr.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.hr.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.hr.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sl.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sl.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sl.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sr.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sr.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sr.jpg differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.hr.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.hr.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.hr.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sl.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sl.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sl.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sr.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sr.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sr.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.hr.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.hr.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.hr.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sl.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sl.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sl.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sr.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sr.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sr.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.hr.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.hr.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.hr.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sl.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sl.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sl.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sr.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sr.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sr.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hr.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hr.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hr.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sl.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sl.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sl.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sr.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sr.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sr.png differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.hr.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.hr.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.hr.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sl.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sl.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sl.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sr.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sr.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sr.jpg differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.hr.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.hr.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.hr.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sl.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sl.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sl.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sr.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sr.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sr.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.hr.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.hr.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.hr.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sl.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sl.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sl.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sr.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sr.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sr.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.hr.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.hr.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.hr.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sl.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sl.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sl.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sr.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sr.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sr.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.hr.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.hr.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.hr.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sl.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sl.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sl.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sr.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sr.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sr.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.hr.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.hr.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.hr.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sl.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sl.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sl.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sr.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sr.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sr.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hr.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hr.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hr.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sl.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sl.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sl.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sr.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sr.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sr.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.hr.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.hr.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.hr.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sl.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sl.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sl.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sr.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sr.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sr.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.hr.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.hr.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.hr.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sl.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sl.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sl.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sr.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sr.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sr.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hr.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hr.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hr.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sl.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sl.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sl.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sr.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sr.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sr.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hr.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hr.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hr.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sl.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sl.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sl.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sr.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sr.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sr.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hr.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hr.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hr.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sl.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sl.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sl.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sr.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sr.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sr.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hr.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hr.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hr.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sl.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sl.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sl.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sr.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sr.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sr.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hr.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hr.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hr.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sl.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sl.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sl.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sr.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sr.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sr.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hr.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hr.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hr.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sl.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sl.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sl.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sr.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sr.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sr.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hr.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hr.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hr.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sl.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sl.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sl.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sr.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sr.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sr.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.hr.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.hr.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.hr.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sl.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sl.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sl.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sr.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sr.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sr.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hr.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hr.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hr.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sl.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sl.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sl.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sr.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sr.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sr.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hr.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hr.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hr.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sl.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sl.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sl.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sr.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sr.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sr.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hr.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hr.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hr.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sl.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sl.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sl.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sr.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sr.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sr.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hr.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hr.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hr.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sl.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sl.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sl.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sr.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sr.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sr.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hr.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hr.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hr.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sl.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sl.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sl.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sr.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sr.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sr.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hr.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hr.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hr.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sl.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sl.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sl.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sr.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sr.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sr.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hr.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hr.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hr.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sl.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sl.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sl.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sr.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sr.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sr.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hr.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hr.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hr.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sl.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sl.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sl.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sr.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sr.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sr.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hr.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hr.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hr.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sl.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sl.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sl.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sr.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sr.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sr.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hr.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hr.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hr.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sl.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sl.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sl.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sr.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sr.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sr.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hr.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hr.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hr.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sl.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sl.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sl.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sr.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sr.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sr.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.hr.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.hr.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.hr.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sl.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sl.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sl.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sr.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sr.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sr.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.hr.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.hr.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.hr.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sl.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sl.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sl.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sr.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sr.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sr.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.hr.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.hr.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.hr.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sl.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sl.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sl.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sr.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sr.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sr.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.hr.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.hr.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.hr.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sl.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sl.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sl.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sr.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sr.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sr.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.hr.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.hr.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.hr.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sl.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sl.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sl.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sr.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sr.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sr.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.hr.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.hr.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.hr.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sl.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sl.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sl.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sr.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sr.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sr.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.hr.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.hr.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.hr.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sl.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sl.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sl.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sr.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sr.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sr.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.hr.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.hr.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.hr.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sl.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sl.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sl.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sr.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sr.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sr.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hr.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hr.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hr.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sl.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sl.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sl.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sr.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sr.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sr.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.hr.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.hr.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.hr.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sl.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sl.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sl.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sr.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sr.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sr.png differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.hr.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.hr.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.hr.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sl.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sl.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sl.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sr.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sr.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sr.jpg differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hr.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hr.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hr.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sl.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sl.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sl.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sr.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sr.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sr.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hr.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hr.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hr.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sl.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sl.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sl.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sr.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sr.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sr.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.hr.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.hr.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.hr.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sl.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sl.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sl.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sr.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sr.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sr.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.hr.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.hr.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.hr.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sl.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sl.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sl.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sr.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sr.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sr.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hr.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hr.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hr.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sl.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sl.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sl.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sr.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sr.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sr.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.hr.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.hr.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.hr.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sl.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sl.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sl.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sr.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sr.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sr.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hr.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hr.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hr.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sl.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sl.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sl.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sr.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sr.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sr.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.hr.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.hr.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.hr.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sl.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sl.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sl.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sr.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sr.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sr.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.hr.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.hr.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.hr.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sl.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sl.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sl.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sr.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sr.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sr.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hr.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hr.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hr.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sl.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sl.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sl.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sr.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sr.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sr.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hr.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hr.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hr.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sl.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sl.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sl.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sr.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sr.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sr.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hr.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hr.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hr.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sl.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sl.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sl.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sr.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sr.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sr.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.hr.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.hr.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.hr.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sl.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sl.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sl.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sr.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sr.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sr.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.hr.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.hr.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.hr.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sl.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sl.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sl.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sr.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sr.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sr.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hr.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hr.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hr.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sl.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sl.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sl.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sr.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sr.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sr.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hr.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hr.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hr.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sl.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sl.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sl.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sr.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sr.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sr.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hr.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hr.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hr.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sl.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sl.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sl.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sr.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sr.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sr.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hr.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hr.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hr.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sl.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sl.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sl.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sr.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sr.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sr.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hr.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hr.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hr.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sl.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sl.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sl.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sr.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sr.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sr.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hr.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hr.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hr.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sl.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sl.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sl.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sr.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sr.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sr.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hr.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hr.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hr.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sl.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sl.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sl.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sr.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sr.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sr.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.hr.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.hr.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.hr.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sl.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sl.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sl.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sr.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sr.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sr.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hr.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hr.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hr.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sl.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sl.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sl.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sr.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sr.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sr.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hr.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hr.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hr.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sl.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sl.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sl.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sr.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sr.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sr.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hr.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hr.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hr.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sl.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sl.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sl.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sr.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sr.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sr.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.hr.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.hr.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.hr.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sl.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sl.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sl.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sr.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sr.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sr.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.hr.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.hr.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.hr.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sl.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sl.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sl.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sr.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sr.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sr.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.hr.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.hr.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.hr.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sl.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sl.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sl.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sr.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sr.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sr.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hr.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hr.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hr.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sl.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sl.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sl.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sr.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sr.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sr.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hr.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hr.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hr.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sl.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sl.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sl.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sr.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sr.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sr.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.hr.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.hr.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.hr.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sl.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sl.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sl.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sr.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sr.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sr.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.hr.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.hr.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.hr.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sl.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sl.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sl.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sr.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sr.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sr.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.hr.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.hr.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.hr.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sl.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sl.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sl.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sr.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sr.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sr.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.hr.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.hr.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.hr.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sl.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sl.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sl.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sr.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sr.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sr.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.hr.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.hr.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.hr.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sl.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sl.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sl.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sr.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sr.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sr.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hr.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hr.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hr.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sl.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sl.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sl.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sr.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sr.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sr.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.hr.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.hr.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.hr.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sl.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sl.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sl.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sr.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sr.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sr.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.hr.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.hr.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.hr.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sl.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sl.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sl.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sr.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sr.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sr.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.hr.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.hr.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.hr.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sl.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sl.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sl.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sr.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sr.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sr.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hr.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hr.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hr.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sl.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sl.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sl.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sr.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sr.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sr.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hr.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hr.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hr.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sl.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sl.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sl.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sr.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sr.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sr.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.hr.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.hr.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.hr.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sl.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sl.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sl.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sr.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sr.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sr.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hr.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hr.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hr.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sl.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sl.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sl.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sr.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sr.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sr.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.hr.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.hr.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.hr.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sl.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sl.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sl.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sr.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sr.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sr.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hr.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hr.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hr.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sl.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sl.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sl.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sr.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sr.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sr.png differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hr.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hr.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hr.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sl.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sl.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sl.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sr.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sr.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sr.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hr.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hr.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hr.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sl.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sl.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sl.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sr.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sr.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sr.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hr.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hr.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hr.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sl.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sl.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sl.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sr.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sr.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sr.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hr.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hr.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hr.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sl.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sl.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sl.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sr.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sr.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sr.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.hr.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.hr.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.hr.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sl.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sl.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sl.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sr.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sr.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sr.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.hr.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.hr.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.hr.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sl.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sl.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sl.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sr.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sr.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sr.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.hr.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.hr.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.hr.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sl.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sl.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sl.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sr.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sr.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sr.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.hr.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.hr.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.hr.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sl.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sl.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sl.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sr.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sr.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sr.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.hr.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.hr.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.hr.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sl.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sl.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sl.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sr.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sr.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sr.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.hr.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.hr.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.hr.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sl.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sl.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sl.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sr.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sr.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sr.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.hr.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.hr.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.hr.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sl.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sl.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sl.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sr.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sr.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sr.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hr.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hr.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hr.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sl.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sl.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sl.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sr.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sr.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sr.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.hr.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.hr.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.hr.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sl.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sl.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sl.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sr.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sr.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sr.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.hr.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.hr.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.hr.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sl.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sl.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sl.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sr.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sr.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sr.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.hr.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.hr.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.hr.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sl.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sl.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sl.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sr.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sr.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sr.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.hr.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.hr.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.hr.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sl.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sl.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sl.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sr.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sr.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sr.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.hr.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.hr.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.hr.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sl.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sl.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sl.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sr.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sr.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sr.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hr.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hr.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hr.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sl.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sl.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sl.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sr.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sr.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sr.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hr.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hr.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hr.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sl.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sl.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sl.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sr.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sr.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sr.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hr.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hr.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hr.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sl.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sl.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sl.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sr.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sr.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sr.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.hr.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.hr.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.hr.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sl.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sl.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sl.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sr.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sr.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sr.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hr.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hr.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hr.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sl.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sl.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sl.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sr.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sr.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sr.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hr.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hr.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hr.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sl.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sl.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sl.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sr.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sr.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sr.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hr.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hr.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hr.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sl.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sl.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sl.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sr.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sr.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sr.jpg differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hr.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hr.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hr.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sl.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sl.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sl.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sr.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sr.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sr.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.hr.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.hr.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.hr.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sl.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sl.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sl.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sr.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sr.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sr.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hr.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hr.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hr.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sl.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sl.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sl.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sr.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sr.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sr.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.hr.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.hr.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.hr.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sl.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sl.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sl.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sr.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sr.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sr.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.hr.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.hr.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.hr.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sl.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sl.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sl.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sr.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sr.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sr.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.hr.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.hr.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.hr.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sl.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sl.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sl.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sr.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sr.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sr.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.hr.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.hr.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.hr.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sl.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sl.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sl.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sr.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sr.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sr.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.hr.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.hr.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.hr.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sl.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sl.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sl.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sr.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sr.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sr.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.hr.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.hr.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.hr.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sl.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sl.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sl.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sr.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sr.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sr.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hr.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hr.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hr.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sl.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sl.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sl.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sr.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sr.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sr.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.hr.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.hr.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.hr.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sl.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sl.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sl.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sr.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sr.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sr.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hr.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hr.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hr.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sl.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sl.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sl.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sr.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sr.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sr.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hr.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hr.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hr.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sl.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sl.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sl.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sr.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sr.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sr.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hr.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hr.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hr.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sl.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sl.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sl.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sr.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sr.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sr.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.hr.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.hr.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.hr.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sl.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sl.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sl.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sr.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sr.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sr.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.hr.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.hr.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.hr.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sl.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sl.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sl.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sr.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sr.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sr.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.hr.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.hr.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.hr.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sl.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sl.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sl.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sr.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sr.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sr.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.hr.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.hr.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.hr.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sl.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sl.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sl.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sr.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sr.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sr.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.hr.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.hr.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.hr.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sl.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sl.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sl.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sr.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sr.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sr.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.hr.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.hr.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.hr.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sl.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sl.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sl.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sr.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sr.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sr.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.hr.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.hr.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.hr.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sl.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sl.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sl.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sr.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sr.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sr.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.hr.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.hr.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.hr.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sl.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sl.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sl.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sr.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sr.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sr.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.hr.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.hr.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.hr.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sl.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sl.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sl.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sr.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sr.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sr.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.hr.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.hr.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.hr.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sl.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sl.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sl.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sr.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sr.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sr.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hr.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hr.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hr.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sl.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sl.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sl.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sr.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sr.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sr.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.hr.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.hr.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.hr.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sl.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sl.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sl.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sr.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sr.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sr.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hr.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hr.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hr.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sl.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sl.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sl.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sr.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sr.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sr.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hr.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hr.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hr.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sl.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sl.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sl.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sr.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sr.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sr.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hr.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hr.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hr.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sl.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sl.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sl.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sr.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sr.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sr.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.hr.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.hr.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.hr.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sl.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sl.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sl.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sr.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sr.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sr.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hr.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hr.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hr.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sl.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sl.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sl.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sr.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sr.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sr.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hr.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hr.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hr.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sl.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sl.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sl.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sr.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sr.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sr.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.hr.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.hr.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.hr.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sl.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sl.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sl.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sr.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sr.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sr.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.hr.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.hr.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.hr.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sl.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sl.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sl.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sr.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sr.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sr.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hr.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hr.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hr.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sl.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sl.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sl.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sr.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sr.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sr.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.hr.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.hr.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.hr.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sl.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sl.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sl.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sr.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sr.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sr.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hr.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hr.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hr.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sl.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sl.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sl.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sr.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sr.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sr.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.hr.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.hr.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.hr.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sl.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sl.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sl.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sr.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sr.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sr.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hr.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hr.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hr.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sl.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sl.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sl.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sr.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sr.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sr.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hr.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hr.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hr.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sl.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sl.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sl.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sr.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sr.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sr.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hr.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hr.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hr.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sl.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sl.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sl.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sr.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sr.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sr.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hr.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hr.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hr.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sl.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sl.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sl.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sr.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sr.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sr.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hr.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hr.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hr.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sl.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sl.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sl.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sr.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sr.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sr.png differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sl.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sl.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sl.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sr.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sr.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sr.jpg differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hr.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hr.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hr.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sl.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sl.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sl.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sr.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sr.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sr.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hr.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hr.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hr.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sl.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sl.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sl.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sr.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sr.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sr.png differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hr.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hr.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hr.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sl.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sl.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sl.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sr.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sr.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sr.jpg differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hr.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hr.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hr.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sl.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sl.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sl.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sr.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sr.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sr.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hr.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hr.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hr.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sl.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sl.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sl.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sr.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sr.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sr.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.hr.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.hr.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.hr.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sl.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sl.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sl.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sr.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sr.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sr.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.hr.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.hr.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.hr.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sl.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sl.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sl.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sr.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sr.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sr.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.hr.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.hr.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.hr.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sl.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sl.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sl.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sr.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sr.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sr.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.hr.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.hr.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.hr.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sl.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sl.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sl.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sr.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sr.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sr.png differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.hr.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.hr.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.hr.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sl.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sl.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sl.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sr.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sr.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sr.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.hr.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.hr.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.hr.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sl.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sl.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sl.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sr.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sr.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sr.jpg differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.hr.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.hr.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.hr.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sl.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sl.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sl.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sr.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sr.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sr.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.hr.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.hr.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.hr.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sl.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sl.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sl.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sr.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sr.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sr.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hr.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hr.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hr.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sl.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sl.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sl.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sr.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sr.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sr.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.hr.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.hr.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.hr.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sl.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sl.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sl.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sr.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sr.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sr.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.hr.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.hr.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.hr.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sl.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sl.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sl.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sr.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sr.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sr.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hr.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hr.png new file mode 100644 index 00000000..cb4bc445 Binary files /dev/null and b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hr.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sl.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sl.png new file mode 100644 index 00000000..cb4bc445 Binary files /dev/null and b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sl.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sr.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sr.png new file mode 100644 index 00000000..cb4bc445 Binary files /dev/null and b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sr.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hr.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hr.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hr.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sl.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sl.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sl.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sr.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sr.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sr.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hr.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hr.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hr.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sl.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sl.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sl.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sr.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sr.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sr.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hr.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hr.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hr.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sl.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sl.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sl.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sr.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sr.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sr.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hr.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hr.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hr.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sl.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sl.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sl.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sr.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sr.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sr.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.hr.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.hr.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.hr.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sl.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sl.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sl.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sr.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sr.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sr.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hr.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hr.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hr.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sl.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sl.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sl.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sr.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sr.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sr.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.hr.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.hr.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.hr.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sl.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sl.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sl.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sr.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sr.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sr.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hr.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hr.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hr.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sl.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sl.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sl.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sr.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sr.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sr.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hr.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hr.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hr.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sl.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sl.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sl.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sr.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sr.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sr.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hr.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hr.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hr.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sl.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sl.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sl.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sr.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sr.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sr.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hr.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hr.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hr.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sl.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sl.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sl.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sr.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sr.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sr.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hr.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hr.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hr.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sl.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sl.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sl.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sr.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sr.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sr.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hr.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hr.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hr.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sl.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sl.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sl.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sr.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sr.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sr.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hr.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hr.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hr.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sl.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sl.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sl.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sr.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sr.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sr.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hr.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hr.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hr.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sl.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sl.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sl.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sr.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sr.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sr.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.hr.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.hr.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.hr.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sl.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sl.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sl.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sr.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sr.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sr.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.hr.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.hr.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.hr.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sl.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sl.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sl.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sr.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sr.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sr.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hr.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hr.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hr.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sl.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sl.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sl.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sr.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sr.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sr.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hr.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hr.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hr.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sl.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sl.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sl.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sr.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sr.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sr.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hr.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hr.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hr.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sl.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sl.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sl.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sr.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sr.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sr.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.hr.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.hr.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.hr.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sl.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sl.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sl.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sr.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sr.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sr.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.hr.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.hr.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.hr.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sl.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sl.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sl.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sr.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sr.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sr.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.hr.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.hr.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.hr.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sl.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sl.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sl.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sr.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sr.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sr.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.hr.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.hr.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.hr.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sl.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sl.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sl.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sr.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sr.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sr.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.hr.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.hr.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.hr.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sl.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sl.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sl.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sr.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sr.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sr.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hr.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hr.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hr.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sl.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sl.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sl.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sr.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sr.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sr.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hr.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hr.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hr.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sl.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sl.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sl.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sr.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sr.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sr.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hr.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hr.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hr.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sl.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sl.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sl.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sr.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sr.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sr.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hr.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hr.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hr.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sl.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sl.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sl.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sr.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sr.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sr.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hr.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hr.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hr.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sl.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sl.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sl.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sr.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sr.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sr.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hr.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hr.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hr.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sl.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sl.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sl.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sr.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sr.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sr.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.hr.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.hr.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.hr.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sl.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sl.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sl.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sr.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sr.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sr.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hr.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hr.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hr.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sl.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sl.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sl.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sr.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sr.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sr.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hr.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hr.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hr.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sl.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sl.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sl.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sr.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sr.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sr.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hr.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hr.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hr.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sl.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sl.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sl.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sr.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sr.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sr.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hr.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hr.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hr.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sl.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sl.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sl.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sr.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sr.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sr.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hr.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hr.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hr.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sl.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sl.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sl.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sr.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sr.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sr.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hr.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hr.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hr.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sl.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sl.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sl.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sr.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sr.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sr.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hr.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hr.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hr.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sl.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sl.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sl.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sr.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sr.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sr.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hr.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hr.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hr.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sl.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sl.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sl.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sr.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sr.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sr.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hr.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hr.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hr.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sl.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sl.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sl.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sr.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sr.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sr.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.hr.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.hr.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.hr.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sl.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sl.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sl.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sr.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sr.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sr.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hr.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hr.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hr.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sl.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sl.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sl.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sr.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sr.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sr.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hr.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hr.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hr.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sl.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sl.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sl.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sr.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sr.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sr.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.hr.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.hr.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.hr.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sl.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sl.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sl.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sr.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sr.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sr.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hr.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hr.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hr.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sl.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sl.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sl.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sr.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sr.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sr.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.hr.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.hr.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.hr.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sl.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sl.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sl.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sr.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sr.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sr.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.hr.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.hr.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.hr.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sl.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sl.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sl.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sr.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sr.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sr.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.hr.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.hr.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.hr.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sl.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sl.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sl.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sr.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sr.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sr.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.hr.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.hr.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.hr.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sl.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sl.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sl.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sr.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sr.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sr.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.hr.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.hr.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.hr.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sl.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sl.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sl.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sr.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sr.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sr.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.hr.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.hr.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.hr.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sl.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sl.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sl.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sr.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sr.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sr.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.hr.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.hr.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.hr.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sl.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sl.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sl.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sr.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sr.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sr.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.hr.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.hr.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.hr.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sl.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sl.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sl.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sr.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sr.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sr.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hr.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hr.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hr.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sl.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sl.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sl.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sr.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sr.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sr.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hr.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hr.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hr.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sl.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sl.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sl.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sr.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sr.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sr.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.hr.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.hr.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.hr.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sl.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sl.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sl.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sr.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sr.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sr.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.hr.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.hr.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.hr.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sl.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sl.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sl.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sr.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sr.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sr.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hr.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hr.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hr.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sl.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sl.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sl.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sr.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sr.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sr.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.hr.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.hr.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.hr.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sl.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sl.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sl.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sr.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sr.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sr.png differ diff --git a/translations/hr/1-getting-started/README.md b/translations/hr/1-getting-started/README.md new file mode 100644 index 00000000..26acbe7b --- /dev/null +++ b/translations/hr/1-getting-started/README.md @@ -0,0 +1,30 @@ + +# Početak rada s IoT-om + +U ovom dijelu kurikuluma upoznat Δ‡ete se s Internetom stvari (IoT) i naučiti osnovne pojmove, uključujuΔ‡i izradu vaΕ‘eg prvog 'Hello World' IoT projekta koji se povezuje s oblakom. Ovaj projekt je noΔ‡no svjetlo koje se pali kada razina svjetlosti, izmjerena senzorom, opadne. + +![LED povezan s WIO-om pali se i gasi kako se razina svjetlosti mijenja](../../../images/wio-running-assignment-1-1.gif) + +## Teme + +1. [Uvod u IoT](lessons/1-introduction-to-iot/README.md) +1. [Dublji uvid u IoT](lessons/2-deeper-dive/README.md) +1. [Interakcija s fizičkim svijetom pomoΔ‡u senzora i aktuatora](lessons/3-sensors-and-actuators/README.md) +1. [PoveΕΎite svoj ureΔ‘aj s Internetom](lessons/4-connect-internet/README.md) + +## Zasluge + +Sve lekcije napisane su s β™₯️ od strane [Jim Bennett](https://GitHub.com/JimBobBennett) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/1-introduction-to-iot/README.md b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/README.md new file mode 100644 index 00000000..5dfab7cb --- /dev/null +++ b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/README.md @@ -0,0 +1,242 @@ + +# Uvod u IoT + +![Pregled lekcije u obliku sketchnotea](../../../../../translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio serije [Hello IoT](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Lekcija je podijeljena u dva videa - jedan sat predavanja i jedan sat dodatnih pitanja i dubljeg objaΕ‘njavanja dijelova lekcije. + +[![Lekcija 1: Uvod u IoT](https://img.youtube.com/vi/bVFfcYh6UBw/0.jpg)](https://youtu.be/bVFfcYh6UBw) + +[![Lekcija 1: Uvod u IoT - Dodatna pitanja](https://img.youtube.com/vi/YI772q5v3yI/0.jpg)](https://youtu.be/YI772q5v3yI) + +> πŸŽ₯ Kliknite na slike iznad za gledanje videa + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/1) + +## Uvod + +Ova lekcija pokriva osnovne teme vezane uz Internet stvari (IoT) i pomaΕΎe vam u postavljanju vaΕ‘eg hardvera. + +U ovoj lekciji obradit Δ‡emo: + +* [Ε to je 'Internet stvari'?](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [IoT ureΔ‘aji](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [Postavljanje vaΕ‘eg ureΔ‘aja](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [Primjene IoT-a](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [Primjeri IoT ureΔ‘aja oko vas](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +## Ε to je 'Internet stvari'? + +Pojam 'Internet stvari' skovao je [Kevin Ashton](https://wikipedia.org/wiki/Kevin_Ashton) 1999. godine, kako bi opisao povezivanje Interneta s fizičkim svijetom putem senzora. Od tada, ovaj pojam se koristi za opisivanje bilo kojeg ureΔ‘aja koji komunicira s fizičkim svijetom oko sebe, bilo prikupljanjem podataka putem senzora ili pruΕΎanjem interakcija u stvarnom svijetu putem aktuatora (ureΔ‘aja koji obavljaju radnje poput uključivanja prekidača ili paljenja LED svjetla), obično povezanih s drugim ureΔ‘ajima ili Internetom. + +> **Senzori** prikupljaju informacije iz svijeta, poput mjerenja brzine, temperature ili lokacije. +> +> **Aktuatori** pretvaraju električne signale u interakcije u stvarnom svijetu, poput aktiviranja prekidača, paljenja svjetla, stvaranja zvukova ili slanja kontrolnih signala drugim hardverskim ureΔ‘ajima, na primjer, za uključivanje utičnice. + +IoT kao tehnoloΕ‘ko područje obuhvaΔ‡a viΕ‘e od samih ureΔ‘aja - uključuje usluge u oblaku koje mogu obraΔ‘ivati podatke senzora ili slati zahtjeve aktuatorima povezanim s IoT ureΔ‘ajima. TakoΔ‘er uključuje ureΔ‘aje koji nemaju ili ne trebaju internetsku povezanost, često nazvane rubni ureΔ‘aji. To su ureΔ‘aji koji mogu sami obraΔ‘ivati i reagirati na podatke senzora, obično koristeΔ‡i AI modele trenirane u oblaku. + +IoT je jedno od najbrΕΎe rastuΔ‡ih tehnoloΕ‘kih područja. Procjenjuje se da je do kraja 2020. godine bilo implementirano i povezano na Internet 30 milijardi IoT ureΔ‘aja. GledajuΔ‡i u buduΔ‡nost, procjenjuje se da Δ‡e do 2025. IoT ureΔ‘aji prikupljati gotovo 80 zettabajta podataka, odnosno 80 trilijuna gigabajta. To je ogromna količina podataka! + +![Graf koji prikazuje aktivne IoT ureΔ‘aje tijekom vremena, s rastuΔ‡im trendom od manje od 5 milijardi u 2015. do preko 30 milijardi u 2025.](../../../../../images/connected-iot-devices.svg) + +βœ… Malo istraΕΎite: Koliko podataka generiranih od strane IoT ureΔ‘aja se zapravo koristi, a koliko se zanemaruje? ZaΕ‘to se toliko podataka ignorira? + +Ti podaci su ključ uspjeha IoT-a. Da biste postali uspjeΕ‘an IoT programer, morate razumjeti koje podatke trebate prikupljati, kako ih prikupljati, kako donositi odluke na temelju tih podataka i kako koristiti te odluke za interakciju s fizičkim svijetom, ako je potrebno. + +## IoT ureΔ‘aji + +**T** u IoT-u označava **Things** (stvari) - ureΔ‘aje koji komuniciraju s fizičkim svijetom oko sebe bilo prikupljanjem podataka putem senzora ili pruΕΎanjem interakcija u stvarnom svijetu putem aktuatora. + +UreΔ‘aji za proizvodnju ili komercijalnu upotrebu, poput potroΕ‘ačkih fitness narukvica ili industrijskih kontrolera strojeva, obično su izraΔ‘eni po narudΕΎbi. Koriste prilagoΔ‘ene elektroničke ploče, moΕΎda čak i prilagoΔ‘ene procesore, dizajnirane da zadovolje potrebe odreΔ‘enog zadatka, bilo da su dovoljno mali da stanu na zapeΕ‘Δ‡e ili dovoljno izdrΕΎljivi da rade u visokotemperaturnom, stresnom ili vibracijskom okruΕΎenju tvornice. + +Kao programer koji uči o IoT-u ili stvara prototip ureΔ‘aja, trebat Δ‡ete započeti s razvojnim kompletom. To su univerzalni IoT ureΔ‘aji dizajnirani za programere, često s funkcijama koje ne biste imali na proizvodnom ureΔ‘aju, poput seta vanjskih pinova za povezivanje senzora ili aktuatora, hardvera za podrΕ‘ku otklanjanju greΕ‘aka ili dodatnih resursa koji bi dodali nepotrebne troΕ‘kove pri velikoj proizvodnji. + +Ovi razvojni kompleti obično spadaju u dvije kategorije - mikrokontrolere i jednopločne računala. Ovdje Δ‡e biti predstavljeni, a u sljedeΔ‡oj lekciji Δ‡emo ih detaljnije obraditi. + +> πŸ’ VaΕ‘ telefon takoΔ‘er se moΕΎe smatrati univerzalnim IoT ureΔ‘ajem, s ugraΔ‘enim senzorima i aktuatorima, pri čemu različite aplikacije koriste senzore i aktuatore na različite načine uz različite usluge u oblaku. MoΕΎete čak pronaΔ‡i neke IoT tutorijale koji koriste aplikaciju na telefonu kao IoT ureΔ‘aj. + +### Mikrokontroleri + +Mikrokontroler (takoΔ‘er poznat kao MCU, skraΔ‡eno od microcontroller unit) je mali računalni ureΔ‘aj koji se sastoji od: + +🧠 Jednog ili viΕ‘e centralnih procesorskih jedinica (CPU-a) - 'mozga' mikrokontrolera koji pokreΔ‡e vaΕ‘ program + +πŸ’Ύ Memorije (RAM i memorije programa) - gdje se pohranjuju vaΕ‘ program, podaci i varijable + +πŸ”Œ Programabilnih ulazno/izlaznih (I/O) priključaka - za komunikaciju s vanjskim perifernim ureΔ‘ajima (povezanim ureΔ‘ajima) poput senzora i aktuatora + +Mikrokontroleri su obično jeftini računalni ureΔ‘aji, s prosječnim cijenama za one koji se koriste u prilagoΔ‘enom hardveru padajuΔ‡i na oko 0,50 USD, a neki ureΔ‘aji su jeftini i do 0,03 USD. Razvojni kompleti mogu početi od 4 USD, a cijene rastu kako dodajete viΕ‘e funkcija. [Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html), razvojni komplet mikrokontrolera iz [Seeed Studios](https://www.seeedstudio.com) koji ima senzore, aktuatore, WiFi i ekran, koΕ‘ta oko 30 USD. + +![Wio Terminal](../../../../../translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hr.png) + +> πŸ’ Kada pretraΕΎujete Internet za mikrokontrolere, budite oprezni s pretraΕΎivanjem pojma **MCU**, jer Δ‡e vam se vratiti puno rezultata vezanih uz Marvel Cinematic Universe, a ne mikrokontrolere. + +Mikrokontroleri su dizajnirani da budu programirani za obavljanje ograničenog broja vrlo specifičnih zadataka, umjesto da budu univerzalna računala poput PC-a ili Maca. Osim u vrlo specifičnim scenarijima, ne moΕΎete povezati monitor, tipkovnicu i miΕ‘ i koristiti ih za opΔ‡e zadatke. + +Razvojni kompleti mikrokontrolera obično dolaze s dodatnim senzorima i aktuatorima na ploči. VeΔ‡ina ploča Δ‡e imati jedan ili viΕ‘e LED svjetala koje moΕΎete programirati, zajedno s drugim ureΔ‘ajima poput standardnih priključaka za dodavanje viΕ‘e senzora ili aktuatora koristeΔ‡i ekosustave različitih proizvoΔ‘ača ili ugraΔ‘ene senzore (obično najpopularnije poput senzora temperature). Neki mikrokontroleri imaju ugraΔ‘enu beΕΎičnu povezanost poput Bluetootha ili WiFi-a ili imaju dodatne mikrokontrolere na ploči za dodavanje ove povezanosti. + +> πŸ’ Mikrokontroleri se obično programiraju u C/C++. + +### Jednopločna računala + +Jednopločno računalo je mali računalni ureΔ‘aj koji ima sve elemente kompletnog računala sadrΕΎane na jednoj maloj ploči. To su ureΔ‘aji koji imaju specifikacije bliske stolnim ili prijenosnim računalima, pokreΔ‡u puni operativni sustav, ali su mali, troΕ‘e manje energije i znatno su jeftiniji. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg) + +Raspberry Pi je jedno od najpopularnijih jednopločnih računala. + +Poput mikrokontrolera, jednopločna računala imaju CPU, memoriju i ulazno/izlazne pinove, ali imaju dodatne funkcije poput grafičkog čipa za povezivanje monitora, audio izlaza i USB priključaka za povezivanje tipkovnica, miΕ‘eva i drugih standardnih USB ureΔ‘aja poput web kamera ili vanjske pohrane. Programi se pohranjuju na SD kartice ili tvrde diskove zajedno s operativnim sustavom, umjesto na memorijski čip ugraΔ‘en u ploču. + +> πŸŽ“ Jednopločno računalo moΕΎete zamisliti kao manju, jeftiniju verziju PC-a ili Maca na kojem čitate ovaj tekst, s dodatkom GPIO (general-purpose input/output) pinova za interakciju sa senzorima i aktuatorima. + +Jednopločna računala su potpuno funkcionalna računala, pa se mogu programirati u bilo kojem jeziku. IoT ureΔ‘aji se obično programiraju u Pythonu. + +### Izbor hardvera za ostatak lekcija + +Sve sljedeΔ‡e lekcije uključuju zadatke koji koriste IoT ureΔ‘aj za interakciju s fizičkim svijetom i komunikaciju s oblakom. Svaka lekcija podrΕΎava 3 izbora ureΔ‘aja - Arduino (koristeΔ‡i Seeed Studios Wio Terminal), ili jednopločno računalo, bilo fizički ureΔ‘aj (Raspberry Pi 4) ili virtualno jednopločno računalo koje radi na vaΕ‘em PC-u ili Macu. + +MoΕΎete pročitati o potrebnom hardveru za dovrΕ‘avanje svih zadataka u [vodiču za hardver](../../../hardware.md). + +> πŸ’ Ne trebate kupiti nikakav IoT hardver za dovrΕ‘avanje zadataka, sve moΕΎete napraviti koristeΔ‡i virtualno jednopločno računalo. + +Koji hardver odaberete ovisi o tome Ε‘to imate dostupno kod kuΔ‡e ili u Ε‘koli, te koji programski jezik poznajete ili planirate naučiti. Oba hardverska varijanta koristit Δ‡e isti ekosustav senzora, pa ako započnete s jednim putem, moΕΎete se prebaciti na drugi bez potrebe za zamjenom veΔ‡ine opreme. Virtualno jednopločno računalo bit Δ‡e ekvivalent učenju na Raspberry Pi-u, s veΔ‡inom koda koji se moΕΎe prenijeti na Pi ako ga kasnije nabavite zajedno sa senzorima. + +### Arduino razvojni komplet + +Ako ste zainteresirani za učenje razvoja mikrokontrolera, zadatke moΕΎete dovrΕ‘iti koristeΔ‡i Arduino ureΔ‘aj. Trebat Δ‡ete osnovno razumijevanje programiranja u C/C++, jer lekcije Δ‡e podučavati samo kod koji je relevantan za Arduino okvir, senzore i aktuatore koji se koriste, te biblioteke koje komuniciraju s oblakom. + +Zadaci Δ‡e koristiti [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn) s [PlatformIO ekstenzijom za razvoj mikrokontrolera](https://platformio.org). TakoΔ‘er moΕΎete koristiti Arduino IDE ako ste iskusni s ovim alatom, jer upute neΔ‡e biti pruΕΎene. + +### Razvojni komplet jednopločnog računala + +Ako ste zainteresirani za učenje razvoja IoT-a koristeΔ‡i jednopločna računala, zadatke moΕΎete dovrΕ‘iti koristeΔ‡i Raspberry Pi ili virtualni ureΔ‘aj koji radi na vaΕ‘em PC-u ili Macu. + +Trebat Δ‡ete osnovno razumijevanje programiranja u Pythonu, jer lekcije Δ‡e podučavati samo kod koji je relevantan za senzore i aktuatore koji se koriste, te biblioteke koje komuniciraju s oblakom. + +> πŸ’ Ako ΕΎelite naučiti programirati u Pythonu, pogledajte sljedeΔ‡e dvije serije videa: +> +> * [Python za početnike](https://channel9.msdn.com/Series/Intro-to-Python-Development?WT.mc_id=academic-17441-jabenn) +> * [ViΕ‘e o Pythonu za početnike](https://channel9.msdn.com/Series/More-Python-for-Beginners?WT.mc_id=academic-7372-jabenn) + +Zadaci Δ‡e koristiti [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn). + +Ako koristite Raspberry Pi, moΕΎete pokrenuti svoj Pi koristeΔ‡i punu desktop verziju Raspberry Pi OS-a i raditi sav kod direktno na Pi-u koristeΔ‡i [verziju VS Code-a za Raspberry Pi OS](https://code.visualstudio.com/docs/setup/raspberry-pi?WT.mc_id=academic-17441-jabenn), ili pokrenuti svoj Pi kao ureΔ‘aj bez monitora i kodirati s vaΕ‘eg PC-a ili Maca koristeΔ‡i VS Code s [Remote SSH ekstenzijom](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn) koja vam omoguΔ‡uje povezivanje s vaΕ‘im Pi-jem i ureΔ‘ivanje, otklanjanje greΕ‘aka i pokretanje koda kao da ga direktno kodirate na njemu. + +Ako koristite opciju virtualnog ureΔ‘aja, kodirat Δ‡ete direktno na svom računalu. Umjesto pristupa senzorima i aktuatorima, koristit Δ‡ete alat za simulaciju ovog hardvera koji pruΕΎa vrijednosti senzora koje moΕΎete definirati i prikazuje rezultate aktuatora na ekranu. + +## Postavljanje vaΕ‘eg ureΔ‘aja + +Prije nego Ε‘to započnete s programiranjem vaΕ‘eg IoT ureΔ‘aja, trebate napraviti malo postavljanja. Slijedite relevantne upute u nastavku ovisno o tome koji ureΔ‘aj Δ‡ete koristiti. +πŸ’ Ako joΕ‘ nemate ureΔ‘aj, pogledajte [vodič za hardver](../../../hardware.md) kako biste odlučili koji ureΔ‘aj Δ‡ete koristiti i koji dodatni hardver trebate kupiti. Nije potrebno kupovati hardver, jer se svi projekti mogu pokrenuti na virtualnom hardveru. +Ove upute uključuju poveznice na web stranice treΔ‡ih strana koje su kreirali proizvoΔ‘ači hardvera ili alata koje Δ‡ete koristiti. Cilj je osigurati da uvijek koristite najnovije upute za različite alate i hardver. + +ProΔ‘ite kroz relevantni vodič kako biste postavili svoj ureΔ‘aj i dovrΕ‘ili projekt 'Hello World'. Ovo Δ‡e biti prvi korak u stvaranju IoT noΔ‡nog svjetla tijekom 4 lekcije u ovom uvodnom dijelu. + +* [Arduino - Wio Terminal](wio-terminal.md) +* [Jednoplano računalo - Raspberry Pi](pi.md) +* [Jednoplano računalo - Virtualni ureΔ‘aj](virtual-device.md) + +βœ… Koristit Δ‡ete VS Code za Arduino i jednoplana računala. Ako ga dosad niste koristili, pročitajte viΕ‘e o njemu na [VS Code stranici](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn). + +## Primjene IoT-a + +IoT pokriva Ε‘irok raspon primjena, podijeljenih u nekoliko glavnih skupina: + +* PotroΕ‘ački IoT +* Komercijalni IoT +* Industrijski IoT +* Infrastrukturni IoT + +βœ… Malo istraΕΎite: Za svako od područja opisanih u nastavku pronaΔ‘ite jedan konkretan primjer koji nije naveden u tekstu. + +### PotroΕ‘ački IoT + +PotroΕ‘ački IoT odnosi se na IoT ureΔ‘aje koje potroΕ‘ači kupuju i koriste u kuΔ‡anstvu. Neki od ovih ureΔ‘aja su iznimno korisni, poput pametnih zvučnika, pametnih sustava grijanja i robotskih usisavača. Drugi su upitni u svojoj korisnosti, poput slavina koje se kontroliraju glasom, a koje se ne mogu isključiti jer glasovna kontrola ne čuje preko zvuka tekuΔ‡e vode. + +PotroΕ‘ački IoT ureΔ‘aji omoguΔ‡uju ljudima da postignu viΕ‘e u svom okruΕΎenju, posebno milijardu ljudi koji imaju neku vrstu invaliditeta. Robotski usisavači mogu osigurati čiste podove osobama s poteΕ‘koΔ‡ama u kretanju koje ne mogu sami usisavati, peΔ‡nice koje se kontroliraju glasom omoguΔ‡uju osobama s ograničenim vidom ili motoričkom kontrolom da zagriju peΔ‡nicu samo glasom, a zdravstveni monitori omoguΔ‡uju pacijentima praΔ‡enje kroničnih stanja s redovitijim i detaljnijim aΕΎuriranjima o njihovom stanju. Ovi ureΔ‘aji postaju toliko uobičajeni da ih čak i mala djeca koriste u svakodnevnom ΕΎivotu, primjerice učenici koji tijekom pandemije COVID-a postavljaju timere na pametnim kuΔ‡nim ureΔ‘ajima kako bi pratili Ε‘kolske zadatke ili alarme za podsjetnike na nadolazeΔ‡e sastanke razreda. + +βœ… Koje potroΕ‘ačke IoT ureΔ‘aje imate kod kuΔ‡e ili na sebi? + +### Komercijalni IoT + +Komercijalni IoT obuhvaΔ‡a upotrebu IoT-a na radnom mjestu. U uredskom okruΕΎenju mogu postojati senzori za prisutnost i detektori pokreta za upravljanje rasvjetom i grijanjem, kako bi se svjetla i grijanje uključivali samo kada su potrebni, smanjujuΔ‡i troΕ‘kove i emisiju ugljika. U tvornici, IoT ureΔ‘aji mogu pratiti sigurnosne opasnosti, poput radnika koji ne nose zaΕ‘titne kacige ili buke koja je dosegnula opasne razine. U maloprodaji, IoT ureΔ‘aji mogu mjeriti temperaturu hladnog skladiΕ‘ta, upozoravajuΔ‡i vlasnika trgovine ako hladnjak ili zamrzivač izaΔ‘u iz potrebnog temperaturnog raspona, ili mogu pratiti artikle na policama kako bi usmjerili zaposlenike da dopune proizvode koji su prodani. Transportna industrija sve viΕ‘e koristi IoT za praΔ‡enje lokacija vozila, praΔ‡enje kilometraΕΎe na cesti za naplatu koriΕ‘tenja cesta, praΔ‡enje sati vozača i poΕ‘tivanje pauza, ili obavjeΕ‘tavanje osoblja kada se vozilo pribliΕΎava skladiΕ‘tu kako bi se pripremilo za utovar ili istovar. + +βœ… Koje komercijalne IoT ureΔ‘aje imate u Ε‘koli ili na radnom mjestu? + +### Industrijski IoT (IIoT) + +Industrijski IoT, ili IIoT, odnosi se na upotrebu IoT ureΔ‘aja za upravljanje i kontrolu strojeva na velikoj skali. Ovo pokriva Ε‘irok raspon primjena, od tvornica do digitalne poljoprivrede. + +Tvornice koriste IoT ureΔ‘aje na mnogo različitih načina. Strojevi se mogu pratiti pomoΔ‡u viΕ‘e senzora za praΔ‡enje stvari poput temperature, vibracija i brzine rotacije. Ovi podaci mogu se pratiti kako bi se omoguΔ‡ilo zaustavljanje stroja ako izaΔ‘e iz odreΔ‘enih tolerancija - primjerice, ako se pregrije, moΕΎe se automatski isključiti. Ovi podaci takoΔ‘er se mogu prikupljati i analizirati tijekom vremena za prediktivno odrΕΎavanje, gdje AI modeli analiziraju podatke koji prethode kvaru i koriste ih za predviΔ‘anje drugih kvarova prije nego Ε‘to se dogode. + +Digitalna poljoprivreda je vaΕΎna ako planet ΕΎeli nahraniti rastuΔ‡u populaciju, posebno za 2 milijarde ljudi u 500 milijuna kuΔ‡anstava koji ovise o [samoodrΕΎivoj poljoprivredi](https://wikipedia.org/wiki/Subsistence_agriculture). Digitalna poljoprivreda moΕΎe se kretati od nekoliko senzora koji koΕ‘taju nekoliko dolara do velikih komercijalnih sustava. Poljoprivrednik moΕΎe započeti praΔ‡enjem temperatura i koriΕ‘tenjem [dana rasta](https://wikipedia.org/wiki/Growing_degree-day) za predviΔ‘anje kada Δ‡e usjev biti spreman za berbu. Mogu povezati praΔ‡enje vlaΕΎnosti tla s automatiziranim sustavima navodnjavanja kako bi svojim biljkama dali onoliko vode koliko im je potrebno, ali ne viΕ‘e, kako bi osigurali da njihovi usjevi ne presuΕ‘e bez rasipanja vode. Poljoprivrednici idu i dalje koristeΔ‡i dronove, satelitske podatke i AI za praΔ‡enje rasta usjeva, bolesti i kvalitete tla na velikim područjima poljoprivrednog zemljiΕ‘ta. + +βœ… Koji drugi IoT ureΔ‘aji bi mogli pomoΔ‡i poljoprivrednicima? + +### Infrastrukturni IoT + +Infrastrukturni IoT odnosi se na praΔ‡enje i upravljanje lokalnom i globalnom infrastrukturom koju ljudi koriste svakodnevno. + +[Pametni gradovi](https://wikipedia.org/wiki/Smart_city) su urbane zone koje koriste IoT ureΔ‘aje za prikupljanje podataka o gradu i koriΕ‘tenje tih podataka za poboljΕ‘anje funkcioniranja grada. Ovi gradovi obično se vode suradnjom lokalnih vlasti, akademske zajednice i lokalnih poduzeΔ‡a, prateΔ‡i i upravljajuΔ‡i stvarima poput transporta, parkiranja i zagaΔ‘enja. Na primjer, u Kopenhagenu, Danska, zagaΔ‘enje zraka je vaΕΎno lokalnim stanovnicima, pa se mjeri i podaci se koriste za pruΕΎanje informacija o najčiΕ‘Δ‡im rutama za bicikliranje i trčanje. + +[Pametne električne mreΕΎe](https://wikipedia.org/wiki/Smart_grid) omoguΔ‡uju bolje analize potraΕΎnje za električnom energijom prikupljanjem podataka o potroΕ‘nji na razini pojedinačnih kuΔ‡anstava. Ovi podaci mogu voditi odluke na razini drΕΎave, uključujuΔ‡i gdje izgraditi nove elektrane, i na osobnoj razini, dajuΔ‡i korisnicima uvid u to koliko energije koriste, kada je koriste, pa čak i prijedloge kako smanjiti troΕ‘kove, poput punjenja električnih automobila noΔ‡u. + +βœ… Kada biste mogli dodati IoT ureΔ‘aje za mjerenje bilo čega u vaΕ‘em mjestu, Ε‘to bi to bilo? + +## Primjeri IoT ureΔ‘aja koje moΕΎda imate oko sebe + +Iznenadili biste se koliko IoT ureΔ‘aja imate oko sebe. Ovo piΕ‘em od kuΔ‡e i imam sljedeΔ‡e ureΔ‘aje povezane na Internet s pametnim značajkama poput kontrole putem aplikacije, glasovne kontrole ili moguΔ‡nosti slanja podataka na moj telefon: + +* ViΕ‘e pametnih zvučnika +* Hladnjak, perilica posuΔ‘a, peΔ‡nica i mikrovalna +* Monitor električne energije za solarne panele +* Pametne utičnice +* Video portafon i sigurnosne kamere +* Pametni termostat s viΕ‘e pametnih senzora za prostorije +* Otvarač garaΕΎnih vrata +* KuΔ‡ni zabavni sustavi i televizori s glasovnom kontrolom +* Rasvjeta +* Fitness i zdravstveni monitori + +Svi ovi ureΔ‘aji imaju senzore i/ili aktuatore i komuniciraju s Internetom. Mogu saznati putem telefona je li moja garaΕΎna vrata otvorena i zamoliti pametni zvučnik da ih zatvori. Čak mogu postaviti timer tako da se, ako su joΕ‘ otvorena noΔ‡u, automatski zatvore. Kada mi zvoni portafon, mogu vidjeti tko je tamo putem telefona, gdje god se nalazim u svijetu, i razgovarati s njima putem zvučnika i mikrofona ugraΔ‘enih u portafon. Mogu pratiti razinu glukoze u krvi, otkucaje srca i obrasce spavanja, traΕΎeΔ‡i obrasce u podacima kako bih poboljΕ‘ao svoje zdravlje. Mogu upravljati rasvjetom putem oblaka i sjediti u mraku kada mi se prekine internetska veza. + +--- + +## πŸš€ Izazov + +Nabrojite Ε‘to viΕ‘e IoT ureΔ‘aja koje imate kod kuΔ‡e, u Ε‘koli ili na radnom mjestu - moΕΎda ih ima viΕ‘e nego Ε‘to mislite! + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/2) + +## Pregled i samostalno učenje + +Pročitajte o prednostima i neuspjesima potroΕ‘ačkih IoT projekata. Provjerite vijesti za članke o tome kada su stvari krenule po zlu, poput problema s privatnoΕ‘Δ‡u, hardverskih problema ili problema uzrokovanih nedostatkom povezivosti. + +Neki primjeri: + +* Pogledajte Twitter račun **[Internet of Sh*t](https://twitter.com/internetofshit)** *(upozorenje na nepristojan jezik)* za dobre primjere neuspjeha potroΕ‘ačkog IoT-a. +* [c|net - Moj Apple Watch mi je spasio ΕΎivot: 5 ljudi dijeli svoje priče](https://www.cnet.com/news/apple-watch-lifesaving-health-features-read-5-peoples-stories/) +* [c|net - ADT tehničar priznao krivnju za Ε‘pijuniranje kamera kupaca godinama](https://www.cnet.com/news/adt-home-security-technician-pleads-guilty-to-spying-on-customer-camera-feeds-for-years/) *(upozorenje na osjetljiv sadrΕΎaj - neovlaΕ‘teno voajerstvo)* + +## Zadatak + +[IstraΕΎite IoT projekt](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/1-introduction-to-iot/assignment.md b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/assignment.md new file mode 100644 index 00000000..dea04cb4 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/assignment.md @@ -0,0 +1,27 @@ + +# IstraΕΎite IoT projekt + +## Upute + +Diljem svijeta provode se mnogi veliki i mali IoT projekti, od pametnih farmi do pametnih gradova, u praΔ‡enju zdravlja, transportu i koriΕ‘tenju javnih prostora. + +PretraΕΎite internet za detalje o projektu koji vas zanima, po moguΔ‡nosti onom koji je blizu vaΕ‘eg mjesta stanovanja. Objasnite prednosti i nedostatke projekta, poput koristi koje donosi, problema koje uzrokuje i kako se vodi računa o privatnosti. + +## Rubrika + +| Kriterij | Primjeran | ZadovoljavajuΔ‡i | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Objasniti prednosti i nedostatke | Jasno objaΕ‘njene prednosti i nedostaci projekta | Ukratko objaΕ‘njene prednosti i nedostaci | Nisu objaΕ‘njeni ni prednosti ni nedostaci | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/1-introduction-to-iot/pi.md b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/pi.md new file mode 100644 index 00000000..a57b539a --- /dev/null +++ b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/pi.md @@ -0,0 +1,286 @@ + +# Raspberry Pi + +[Raspberry Pi](https://raspberrypi.org) je računalo na jednoj ploči. MoΕΎete dodati senzore i aktuatore koristeΔ‡i Ε‘irok raspon ureΔ‘aja i ekosustava, a za ove lekcije koristit Δ‡emo hardverski ekosustav nazvan [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html). Kodirat Δ‡ete svoj Pi i pristupati Grove senzorima koristeΔ‡i Python. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg) + +## Postavljanje + +Ako koristite Raspberry Pi kao svoj IoT hardver, imate dvije opcije - moΕΎete proΔ‡i kroz sve ove lekcije i kodirati direktno na Pi-u, ili se moΕΎete povezati na 'headless' Pi i kodirati s vaΕ‘eg računala. + +Prije nego Ε‘to počnete, takoΔ‘er trebate spojiti Grove Base Hat na svoj Pi. + +### Zadatak - postavljanje + +Instalirajte Grove Base Hat na svoj Pi i konfigurirajte Pi. + +1. Spojite Grove Base Hat na svoj Pi. Utor na hatu odgovara svim GPIO pinovima na Pi-u, klizi niz pinove dok čvrsto ne sjedne na bazu. Hat prekriva Pi. + + ![Postavljanje Grove Hata](../../../../../images/pi-grove-hat-fitting.gif) + +1. Odlučite kako ΕΎelite programirati svoj Pi i idite na odgovarajuΔ‡i odjeljak u nastavku: + + * [Rad direktno na Pi-u](../../../../../1-getting-started/lessons/1-introduction-to-iot) + * [Daljinski pristup za kodiranje Pi-a](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +### Rad direktno na Pi-u + +Ako ΕΎelite raditi direktno na Pi-u, moΕΎete koristiti desktop verziju Raspberry Pi OS-a i instalirati sve potrebne alate. + +#### Zadatak - rad direktno na Pi-u + +Postavite svoj Pi za razvoj. + +1. Slijedite upute u [vodiču za postavljanje Raspberry Pi-a](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up) kako biste postavili svoj Pi, spojili ga na tipkovnicu/miΕ‘/monitor, povezali ga na WiFi ili ethernet mreΕΎu i aΕΎurirali softver. + +Za programiranje Pi-a koristeΔ‡i Grove senzore i aktuatore, trebat Δ‡ete instalirati editor za pisanje koda za ureΔ‘aje, kao i razne biblioteke i alate koji komuniciraju s Grove hardverom. + +1. Nakon Ε‘to se Pi ponovno pokrene, pokrenite Terminal klikom na ikonu **Terminal** na gornjoj traci izbornika ili odaberite *Menu -> Accessories -> Terminal*. + +1. Pokrenite sljedeΔ‡u naredbu kako biste osigurali da su OS i instalirani softver aΕΎurirani: + + ```sh + sudo apt update && sudo apt full-upgrade --yes + ``` + +1. Pokrenite sljedeΔ‡e naredbe za instalaciju svih potrebnih biblioteka za Grove hardver: + + ```sh + sudo apt install git python3-dev python3-pip --yes + + git clone https://github.com/Seeed-Studio/grove.py + cd grove.py + sudo pip3 install . + + sudo raspi-config nonint do_i2c 0 + ``` + + Ovo započinje instalacijom Git-a, zajedno s Pip-om za instalaciju Python paketa. + + Jedna od moΔ‡nih značajki Pythona je moguΔ‡nost instalacije [Pip paketa](https://pypi.org) - to su paketi koda koje su napisali drugi ljudi i objavili na internetu. MoΕΎete instalirati Pip paket na svoje računalo jednom naredbom, a zatim koristiti taj paket u svom kodu. + + Seeed Grove Python paketi trebaju biti instalirani iz izvornog koda. Ove naredbe klonirat Δ‡e repozitorij koji sadrΕΎi izvorni kod za ovaj paket, a zatim ga instalirati lokalno. + + > πŸ’ Po defaultu, kada instalirate paket, on je dostupan svugdje na vaΕ‘em računalu, Ε‘to moΕΎe dovesti do problema s verzijama paketa - na primjer, jedna aplikacija ovisi o jednoj verziji paketa koja se moΕΎe pokvariti kada instalirate novu verziju za drugu aplikaciju. Kako biste zaobiΕ‘li ovaj problem, moΕΎete koristiti [Python virtualno okruΕΎenje](https://docs.python.org/3/library/venv.html), Ε‘to je zapravo kopija Pythona u posveΔ‡enom folderu, a kada instalirate Pip pakete, oni se instaliraju samo u taj folder. NeΔ‡ete koristiti virtualna okruΕΎenja kada koristite svoj Pi. Grove instalacijski skript instalira Grove Python pakete globalno, tako da biste za koriΕ‘tenje virtualnog okruΕΎenja trebali postaviti virtualno okruΕΎenje, a zatim ručno ponovno instalirati Grove pakete unutar tog okruΕΎenja. LakΕ‘e je jednostavno koristiti globalne pakete, pogotovo jer mnogi Pi developeri ponovno flashaju čistu SD karticu za svaki projekt. + + Na kraju, ovo omoguΔ‡uje I2C sučelje. + +1. Ponovno pokrenite Pi koristeΔ‡i izbornik ili pokretanjem sljedeΔ‡e naredbe u Terminalu: + + ```sh + sudo reboot + ``` + +1. Nakon Ε‘to se Pi ponovno pokrene, ponovno pokrenite Terminal i pokrenite sljedeΔ‡u naredbu za instalaciju [Visual Studio Code (VS Code)](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) - ovo je editor koji Δ‡ete koristiti za pisanje koda za ureΔ‘aje u Pythonu. + + ```sh + sudo apt install code + ``` + + Nakon Ε‘to je instaliran, VS Code Δ‡e biti dostupan s gornjeg izbornika. + + > πŸ’ Slobodni ste koristiti bilo koji Python IDE ili editor za ove lekcije ako imate preferirani alat, ali lekcije Δ‡e davati upute na temelju koriΕ‘tenja VS Code-a. + +1. Instalirajte Pylance. Ovo je ekstenzija za VS Code koja pruΕΎa podrΕ‘ku za Python jezik. Pogledajte [dokumentaciju za Pylance ekstenziju](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) za upute o instalaciji ove ekstenzije u VS Code-u. + +### Daljinski pristup za kodiranje Pi-a + +Umjesto kodiranja direktno na Pi-u, on moΕΎe raditi 'headless', tj. bez povezivanja na tipkovnicu/miΕ‘/monitor, a vi ga moΕΎete konfigurirati i kodirati s vaΕ‘eg računala koristeΔ‡i Visual Studio Code. + +#### Postavljanje Pi OS-a + +Za daljinsko kodiranje, Pi OS treba biti instaliran na SD kartici. + +##### Zadatak - postavljanje Pi OS-a + +Postavite headless Pi OS. + +1. Preuzmite **Raspberry Pi Imager** sa [stranice za Raspberry Pi OS softver](https://www.raspberrypi.org/software/) i instalirajte ga. + +1. Umetnite SD karticu u svoje računalo, koristeΔ‡i adapter ako je potrebno. + +1. Pokrenite Raspberry Pi Imager. + +1. U Raspberry Pi Imageru odaberite gumb **CHOOSE OS**, zatim odaberite *Raspberry Pi OS (Other)*, a potom *Raspberry Pi OS Lite (32-bit)*. + + ![Raspberry Pi Imager s odabranim Raspberry Pi OS Lite](../../../../../translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hr.png) + + > πŸ’ Raspberry Pi OS Lite je verzija Raspberry Pi OS-a koja nema desktop UI ili alate bazirane na UI-u. Ovi nisu potrebni za headless Pi i čine instalaciju manjom i vrijeme pokretanja brΕΎim. + +1. Odaberite gumb **CHOOSE STORAGE**, zatim odaberite svoju SD karticu. + +1. Pokrenite **Advanced Options** pritiskom na `Ctrl+Shift+X`. Ove opcije omoguΔ‡uju neku predkonfiguraciju Raspberry Pi OS-a prije nego Ε‘to se snimi na SD karticu. + + 1. Označite kuΔ‡icu **Enable SSH** i postavite lozinku za korisnika `pi`. Ovo je lozinka koju Δ‡ete koristiti za prijavu na Pi kasnije. + + 1. Ako planirate povezivanje na Pi putem WiFi-a, označite kuΔ‡icu **Configure WiFi** i unesite svoj WiFi SSID i lozinku, kao i odaberite svoju WiFi zemlju. Ovo nije potrebno ako Δ‡ete koristiti ethernet kabel. Pobrinite se da je mreΕΎa na koju se povezujete ista ona na kojoj je vaΕ‘e računalo. + + 1. Označite kuΔ‡icu **Set locale settings** i postavite svoju zemlju i vremensku zonu. + + 1. Odaberite gumb **SAVE**. + +1. Odaberite gumb **WRITE** za snimanje OS-a na SD karticu. Ako koristite macOS, bit Δ‡ete zamoljeni da unesete svoju lozinku jer alat koji snima slike diska zahtijeva privilegirani pristup. + +OS Δ‡e biti snimljen na SD karticu, a nakon zavrΕ‘etka kartica Δ‡e biti izbačena od strane OS-a, te Δ‡ete biti obavijeΕ‘teni. Izvadite SD karticu iz svog računala, umetnite je u Pi, uključite Pi i pričekajte oko 2 minute da se pravilno pokrene. + +#### Povezivanje na Pi + +SljedeΔ‡i korak je daljinski pristup Pi-u. To moΕΎete učiniti koristeΔ‡i `ssh`, koji je dostupan na macOS-u, Linuxu i novijim verzijama Windowsa. + +##### Zadatak - povezivanje na Pi + +Daljinski pristupite Pi-u. + +1. Pokrenite Terminal ili Command Prompt i unesite sljedeΔ‡u naredbu za povezivanje na Pi: + + ```sh + ssh pi@raspberrypi.local + ``` + + Ako koristite Windows starije verzije koje nemaju instaliran `ssh`, moΕΎete koristiti OpenSSH. Upute za instalaciju moΕΎete pronaΔ‡i u [dokumentaciji za instalaciju OpenSSH-a](https://docs.microsoft.com//windows-server/administration/openssh/openssh_install_firstuse?WT.mc_id=academic-17441-jabenn). + +1. Ovo bi vas trebalo povezati na vaΕ‘ Pi i zatraΕΎiti lozinku. + + MoguΔ‡nost pronalaΕΎenja računala na vaΕ‘oj mreΕΎi koristeΔ‡i `.local` je prilično nedavna dodatna značajka za Linux i Windows. Ako koristite Linux ili Windows i dobijete bilo kakve greΕ‘ke o tome da Hostname nije pronaΔ‘en, trebat Δ‡ete instalirati dodatni softver za omoguΔ‡avanje ZeroConf mreΕΎnog povezivanja (takoΔ‘er poznatog od strane Apple-a kao Bonjour): + + 1. Ako koristite Linux, instalirajte Avahi koristeΔ‡i sljedeΔ‡u naredbu: + + ```sh + sudo apt-get install avahi-daemon + ``` + + 1. Ako koristite Windows, najlakΕ‘i način za omoguΔ‡avanje ZeroConf-a je instalacija [Bonjour Print Services za Windows](http://support.apple.com/kb/DL999). TakoΔ‘er moΕΎete instalirati [iTunes za Windows](https://www.apple.com/itunes/download/) kako biste dobili noviju verziju alata (koja nije dostupna samostalno). + + > πŸ’ Ako se ne moΕΎete povezati koristeΔ‡i `raspberrypi.local`, moΕΎete koristiti IP adresu vaΕ‘eg Pi-a. Pogledajte [dokumentaciju za IP adresu Raspberry Pi-a](https://www.raspberrypi.org/documentation/remote-access/ip-address.md) za upute o nekoliko načina kako dobiti IP adresu. + +1. Unesite lozinku koju ste postavili u Advanced Options Raspberry Pi Imager-a. + +#### Konfiguracija softvera na Pi-u + +Nakon Ε‘to ste povezani na Pi, trebate osigurati da je OS aΕΎuriran i instalirati razne biblioteke i alate koji komuniciraju s Grove hardverom. + +##### Zadatak - konfiguracija softvera na Pi-u + +Konfigurirajte instalirani softver na Pi-u i instalirajte Grove biblioteke. + +1. Iz vaΕ‘e `ssh` sesije, pokrenite sljedeΔ‡u naredbu za aΕΎuriranje, a zatim ponovno pokrenite Pi: + + ```sh + sudo apt update && sudo apt full-upgrade --yes && sudo reboot + ``` + + Pi Δ‡e biti aΕΎuriran i ponovno pokrenut. `ssh` sesija Δ‡e zavrΕ‘iti kada se Pi ponovno pokrene, pa pričekajte oko 30 sekundi, a zatim se ponovno poveΕΎite. + +1. Iz ponovno povezane `ssh` sesije, pokrenite sljedeΔ‡e naredbe za instalaciju svih potrebnih biblioteka za Grove hardver: + + ```sh + sudo apt install git python3-dev python3-pip --yes + + git clone https://github.com/Seeed-Studio/grove.py + cd grove.py + sudo pip3 install . + + sudo raspi-config nonint do_i2c 0 + ``` + + Ovo započinje instalacijom Git-a, zajedno s Pip-om za instalaciju Python paketa. + + Jedna od moΔ‡nih značajki Pythona je moguΔ‡nost instalacije [Pip paketa](https://pypi.org) - to su paketi koda koje su napisali drugi ljudi i objavili na internetu. MoΕΎete instalirati Pip paket na svoje računalo jednom naredbom, a zatim koristiti taj paket u svom kodu. + + Seeed Grove Python paketi trebaju biti instalirani iz izvornog koda. Ove naredbe klonirat Δ‡e repozitorij koji sadrΕΎi izvorni kod za ovaj paket, a zatim ga instalirati lokalno. + + > πŸ’ Po defaultu, kada instalirate paket, on je dostupan svugdje na vaΕ‘em računalu, Ε‘to moΕΎe dovesti do problema s verzijama paketa - na primjer, jedna aplikacija ovisi o jednoj verziji paketa koja se moΕΎe pokvariti kada instalirate novu verziju za drugu aplikaciju. Kako biste zaobiΕ‘li ovaj problem, moΕΎete koristiti [Python virtualno okruΕΎenje](https://docs.python.org/3/library/venv.html), Ε‘to je zapravo kopija Pythona u posveΔ‡enom folderu, a kada instalirate Pip pakete, oni se instaliraju samo u taj folder. NeΔ‡ete koristiti virtualna okruΕΎenja kada koristite svoj Pi. Grove instalacijski skript instalira Grove Python pakete globalno, tako da biste za koriΕ‘tenje virtualnog okruΕΎenja trebali postaviti virtualno okruΕΎenje, a zatim ručno ponovno instalirati Grove pakete unutar tog okruΕΎenja. LakΕ‘e je jednostavno koristiti globalne pakete, pogotovo jer mnogi Pi developeri ponovno flashaju čistu SD karticu za svaki projekt. + + Na kraju, ovo omoguΔ‡uje I2C sučelje. + +1. Ponovno pokrenite Pi pokretanjem sljedeΔ‡e naredbe: + + ```sh + sudo reboot + ``` + + `ssh` sesija Δ‡e zavrΕ‘iti kada se Pi ponovno pokrene. Nema potrebe za ponovnim povezivanjem. + +#### Konfiguracija VS Code-a za daljinski pristup + +Nakon Ε‘to je Pi konfiguriran, moΕΎete se povezati na njega koristeΔ‡i Visual Studio Code (VS Code) sa svog računala - ovo je besplatni tekstualni editor za razvoj koji Δ‡ete koristiti za pisanje koda za ureΔ‘aje u Pythonu. + +##### Zadatak - konfiguracija VS Code-a za daljinski pristup + +Instalirajte potrebni softver i poveΕΎite se daljinski na svoj Pi. + +1. Instalirajte VS Code na svoje računalo slijedeΔ‡i [dokumentaciju za VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn). + +1. Slijedite upute u [dokumentaciji za daljinski razvoj VS Code-a koristeΔ‡i SSH](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn) za instalaciju potrebnih komponenti. + +1. SlijedeΔ‡i iste upute, poveΕΎite VS Code na Pi. + +1. Nakon povezivanja, slijedite upute za [upravljanje ekstenzijama](https://code.visualstudio.com/docs/remote/ssh#_managing-extensions?WT.mc_id=academic-17441-jabenn) kako biste instalirali [Pylance ekstenziju](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) daljinski na Pi. + +## Hello world +Tradicionalno je, kada započinjete s novim programskim jezikom ili tehnologijom, kreirati aplikaciju 'Hello World' - malu aplikaciju koja ispisuje tekst poput `"Hello World"` kako bi se pokazalo da su svi alati ispravno konfigurirani. + +Hello World aplikacija za Pi osigurat Δ‡e da imate ispravno instalirane Python i Visual Studio Code. + +Ova aplikacija bit Δ‡e smjeΕ‘tena u mapu pod nazivom `nightlight`, a kasnije Δ‡e se ponovno koristiti s različitim kodom u drugim dijelovima ovog zadatka za izradu aplikacije noΔ‡nog svjetla. + +### Zadatak - hello world + +Kreirajte Hello World aplikaciju. + +1. Pokrenite VS Code, bilo direktno na Pi-ju, ili na vaΕ‘em računalu povezanom s Pi-jem koristeΔ‡i Remote SSH ekstenziju. + +1. Pokrenite VS Code Terminal odabirom *Terminal -> New Terminal*, ili pritiskom na `` CTRL+` ``. Otvorit Δ‡e se u početnom direktoriju korisnika `pi`. + +1. Pokrenite sljedeΔ‡e naredbe kako biste kreirali direktorij za vaΕ‘ kod i kreirali Python datoteku pod nazivom `app.py` unutar tog direktorija: + + ```sh + mkdir nightlight + cd nightlight + touch app.py + ``` + +1. Otvorite ovu mapu u VS Code odabirom *File -> Open...* i odabirom mape *nightlight*, zatim odaberite **OK**. + + ![Dijalog za otvaranje u VS Code prikazuje mapu nightlight](../../../../../translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hr.png) + +1. Otvorite datoteku `app.py` iz VS Code explorer-a i dodajte sljedeΔ‡i kod: + + ```python + print('Hello World!') + ``` + + Funkcija `print` ispisuje na konzolu sve Ε‘to joj se proslijedi. + +1. Iz VS Code Terminala pokrenite sljedeΔ‡e kako biste pokrenuli vaΕ‘u Python aplikaciju: + + ```sh + python app.py + ``` + + > πŸ’ MoΕΎda Δ‡ete morati eksplicitno pozvati `python3` kako biste pokrenuli ovaj kod ako imate instaliran Python 2 uz Python 3 (najnoviju verziju). Ako imate instaliran Python 2, poziv `python` koristit Δ‡e Python 2 umjesto Python 3. Prema zadanim postavkama, najnovije verzije Raspberry Pi OS-a imaju instaliran samo Python 3. + + SljedeΔ‡i izlaz pojavit Δ‡e se u terminalu: + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Hello World! + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/pi](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/pi). + +πŸ˜€ VaΕ‘ 'Hello World' program je uspjeΕ‘no pokrenut! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md new file mode 100644 index 00000000..85992fc5 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md @@ -0,0 +1,245 @@ + +# Virtualno računalo s jednom pločom + +Umjesto kupnje IoT ureΔ‘aja, zajedno sa senzorima i aktuatorima, moΕΎete koristiti svoje računalo za simulaciju IoT hardvera. [CounterFit projekt](https://github.com/CounterFit-IoT/CounterFit) omoguΔ‡uje vam pokretanje aplikacije lokalno koja simulira IoT hardver poput senzora i aktuatora te pristup tim senzorima i aktuatorima iz lokalnog Python koda napisanog na isti način kao Ε‘to biste pisali na Raspberry Pi-ju koristeΔ‡i fizički hardver. + +## Postavljanje + +Za koriΕ‘tenje CounterFit-a, potrebno je instalirati besplatan softver na svoje računalo. + +### Zadatak + +Instalirajte potreban softver. + +1. Instalirajte Python. Pogledajte [stranicu za preuzimanje Pythona](https://www.python.org/downloads/) za upute o instalaciji najnovije verzije Pythona. + +1. Instalirajte Visual Studio Code (VS Code). Ovo je ureΔ‘ivač koji Δ‡ete koristiti za pisanje koda za vaΕ‘ virtualni ureΔ‘aj u Pythonu. Pogledajte [dokumentaciju za VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) za upute o instalaciji VS Code-a. + + > πŸ’ Slobodno koristite bilo koji Python IDE ili ureΔ‘ivač za ove lekcije ako imate omiljeni alat, ali upute u lekcijama Δ‡e se temeljiti na koriΕ‘tenju VS Code-a. + +1. Instalirajte Pylance ekstenziju za VS Code. Ovo je ekstenzija za VS Code koja pruΕΎa podrΕ‘ku za Python jezik. Pogledajte [dokumentaciju za Pylance ekstenziju](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) za upute o instalaciji ove ekstenzije u VS Code-u. + +Upute za instalaciju i konfiguraciju CounterFit aplikacije bit Δ‡e dane u odgovarajuΔ‡em trenutku u uputama za zadatak jer se instalira za svaki projekt zasebno. + +## Hello world + +Tradicionalno je, kada započinjete s novim programskim jezikom ili tehnologijom, stvoriti aplikaciju 'Hello World' - malu aplikaciju koja ispisuje tekst poput `"Hello World"` kako bi pokazala da su svi alati ispravno konfigurirani. + +Hello World aplikacija za virtualni IoT hardver osigurat Δ‡e da su Python i Visual Studio Code ispravno instalirani. TakoΔ‘er Δ‡e se povezati s CounterFit-om za virtualne IoT senzore i aktuatore. NeΔ‡e koristiti nikakav hardver, samo Δ‡e se povezati kako bi dokazala da sve radi. + +Ova aplikacija bit Δ‡e u mapi pod nazivom `nightlight`, a ponovno Δ‡e se koristiti s različitim kodom u kasnijim dijelovima ovog zadatka za izradu aplikacije za noΔ‡no svjetlo. + +### Konfiguriranje Python virtualnog okruΕΎenja + +Jedna od snaΕΎnih značajki Pythona je moguΔ‡nost instalacije [Pip paketa](https://pypi.org) - to su paketi koda koje su napisali drugi ljudi i objavili na internetu. MoΕΎete instalirati Pip paket na svoje računalo jednim naredbom, a zatim koristiti taj paket u svom kodu. Koristit Δ‡ete Pip za instalaciju paketa za komunikaciju s CounterFit-om. + +Po zadanim postavkama, kada instalirate paket, on je dostupan svugdje na vaΕ‘em računalu, Ε‘to moΕΎe dovesti do problema s verzijama paketa - na primjer, jedna aplikacija ovisi o jednoj verziji paketa koja prestaje raditi kada instalirate novu verziju za drugu aplikaciju. Kako biste zaobiΕ‘li ovaj problem, moΕΎete koristiti [Python virtualno okruΕΎenje](https://docs.python.org/3/library/venv.html), Ε‘to je u osnovi kopija Pythona u namjenskoj mapi, a kada instalirate Pip pakete, oni se instaliraju samo u tu mapu. + +> πŸ’ Ako koristite Raspberry Pi, tada niste postavili virtualno okruΕΎenje na tom ureΔ‘aju za upravljanje Pip paketima, veΔ‡ koristite globalne pakete jer su Grove paketi globalno instalirani pomoΔ‡u instalacijskog skripta. + +#### Zadatak - konfiguriranje Python virtualnog okruΕΎenja + +Konfigurirajte Python virtualno okruΕΎenje i instalirajte Pip pakete za CounterFit. + +1. Iz svog terminala ili naredbenog retka pokrenite sljedeΔ‡e na lokaciji po vaΕ‘em izboru kako biste stvorili i preΕ‘li u novi direktorij: + + ```sh + mkdir nightlight + cd nightlight + ``` + +1. Sada pokrenite sljedeΔ‡e kako biste stvorili virtualno okruΕΎenje u mapi `.venv`: + + ```sh + python3 -m venv .venv + ``` + + > πŸ’ Morate eksplicitno pozvati `python3` kako biste stvorili virtualno okruΕΎenje za slučaj da imate instaliran Python 2 uz Python 3 (najnoviju verziju). Ako imate instaliran Python 2, pozivanje `python` koristit Δ‡e Python 2 umjesto Pythona 3. + +1. Aktivirajte virtualno okruΕΎenje: + + * Na Windowsu: + * Ako koristite Command Prompt ili Command Prompt kroz Windows Terminal, pokrenite: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * Ako koristite PowerShell, pokrenite: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + > Ako dobijete greΕ‘ku o tome da je pokretanje skripti onemoguΔ‡eno na ovom sustavu, morat Δ‡ete omoguΔ‡iti pokretanje skripti postavljanjem odgovarajuΔ‡e politike izvrΕ‘avanja. To moΕΎete učiniti pokretanjem PowerShell-a kao administrator, a zatim pokretanjem sljedeΔ‡e naredbe: + + ```powershell + Set-ExecutionPolicy -ExecutionPolicy Unrestricted + ``` + + Unesite `Y` kada se zatraΕΎi potvrda. Zatim ponovno pokrenite PowerShell i pokuΕ‘ajte ponovno. + + MoΕΎete resetirati ovu politiku izvrΕ‘avanja kasnije ako je potrebno. ViΕ‘e o tome moΕΎete pročitati na [stranici o politikama izvrΕ‘avanja na Microsoft Docs](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?WT.mc_id=academic-17441-jabenn). + + * Na macOS-u ili Linuxu, pokrenite: + + ```cmd + source ./.venv/bin/activate + ``` + + > πŸ’ Ove naredbe trebaju se pokrenuti s iste lokacije na kojoj ste pokrenuli naredbu za stvaranje virtualnog okruΕΎenja. Nikada neΔ‡ete trebati navigirati u mapu `.venv`, uvijek biste trebali pokrenuti naredbu za aktivaciju i bilo koje naredbe za instalaciju paketa ili pokretanje koda iz mape u kojoj ste bili kada ste stvorili virtualno okruΕΎenje. + +1. Kada je virtualno okruΕΎenje aktivirano, zadana naredba `python` pokrenut Δ‡e verziju Pythona koja je koriΕ‘tena za stvaranje virtualnog okruΕΎenja. Pokrenite sljedeΔ‡e kako biste dobili verziju: + + ```sh + python --version + ``` + + Izlaz bi trebao sadrΕΎavati sljedeΔ‡e: + + ```output + (.venv) ➜ nightlight python --version + Python 3.9.1 + ``` + + > πŸ’ VaΕ‘a verzija Pythona moΕΎe biti drugačija - sve dok je verzija 3.6 ili novija, sve je u redu. Ako nije, izbriΕ‘ite ovu mapu, instalirajte noviju verziju Pythona i pokuΕ‘ajte ponovno. + +1. Pokrenite sljedeΔ‡e naredbe za instalaciju Pip paketa za CounterFit. Ovi paketi uključuju glavnu CounterFit aplikaciju kao i shims za Grove hardver. Ovi shims omoguΔ‡uju vam pisanje koda kao da programirate koristeΔ‡i fizičke senzore i aktuatore iz Grove ekosustava, ali povezane s virtualnim IoT ureΔ‘ajima. + + ```sh + pip install CounterFit + pip install counterfit-connection + pip install counterfit-shims-grove + ``` + + Ovi Pip paketi bit Δ‡e instalirani samo u virtualnom okruΕΎenju i neΔ‡e biti dostupni izvan njega. + +### Pisanje koda + +Kada je Python virtualno okruΕΎenje spremno, moΕΎete napisati kod za aplikaciju 'Hello World'. + +#### Zadatak - pisanje koda + +Stvorite Python aplikaciju koja ispisuje `"Hello World"` na konzolu. + +1. Iz svog terminala ili naredbenog retka pokrenite sljedeΔ‡e unutar virtualnog okruΕΎenja kako biste stvorili Python datoteku pod nazivom `app.py`: + + * Na Windowsu pokrenite: + + ```cmd + type nul > app.py + ``` + + * Na macOS-u ili Linuxu pokrenite: + + ```cmd + touch app.py + ``` + +1. Otvorite trenutnu mapu u VS Code-u: + + ```sh + code . + ``` + + > πŸ’ Ako vaΕ‘ terminal vrati `command not found` na macOS-u, to znači da VS Code nije dodan u vaΕ‘ PATH. MoΕΎete dodati VS Code u svoj PATH slijedeΔ‡i upute u [odjeljku Pokretanje iz naredbenog retka u dokumentaciji za VS Code](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) i zatim pokrenuti naredbu. VS Code je prema zadanim postavkama dodan u PATH na Windowsu i Linuxu. + +1. Kada se VS Code pokrene, aktivirat Δ‡e Python virtualno okruΕΎenje. Odabrano virtualno okruΕΎenje pojavit Δ‡e se u donjoj statusnoj traci: + + ![VS Code prikazuje odabrano virtualno okruΕΎenje](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hr.png) + +1. Ako je VS Code Terminal veΔ‡ pokrenut kada se VS Code pokrene, neΔ‡e imati aktivirano virtualno okruΕΎenje u njemu. NajlakΕ‘e je zatvoriti terminal pomoΔ‡u gumba **Kill the active terminal instance**: + + ![VS Code gumb za zatvaranje aktivnog terminala](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hr.png) + + MoΕΎete prepoznati je li terminal aktivirao virtualno okruΕΎenje jer Δ‡e ime virtualnog okruΕΎenja biti prefiks na terminalskom promptu. Na primjer, moglo bi biti: + + ```sh + (.venv) ➜ nightlight + ``` + + Ako nemate `.venv` kao prefiks na promptu, virtualno okruΕΎenje nije aktivno u terminalu. + +1. Pokrenite novi VS Code Terminal odabirom *Terminal -> New Terminal* ili pritiskom na `` CTRL+` ``. Novi terminal učitat Δ‡e virtualno okruΕΎenje, a poziv za aktivaciju pojavit Δ‡e se u terminalu. Prompt Δ‡e takoΔ‘er imati ime virtualnog okruΕΎenja (`.venv`): + + ```output + ➜ nightlight source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. Otvorite datoteku `app.py` iz VS Code explorera i dodajte sljedeΔ‡i kod: + + ```python + print('Hello World!') + ``` + + Funkcija `print` ispisuje sve Ε‘to joj se proslijedi na konzolu. + +1. Iz VS Code terminala pokrenite sljedeΔ‡e kako biste pokrenuli svoju Python aplikaciju: + + ```sh + python app.py + ``` + + SljedeΔ‡e Δ‡e biti u izlazu: + + ```output + (.venv) ➜ nightlight python app.py + Hello World! + ``` + +πŸ˜€ VaΕ‘ 'Hello World' program je uspjeΕ‘no pokrenut! + +### Povezivanje 'hardvera' + +Kao drugi korak 'Hello World', pokrenut Δ‡ete CounterFit aplikaciju i povezati svoj kod s njom. Ovo je virtualni ekvivalent priključivanja IoT hardvera na razvojni komplet. + +#### Zadatak - povezivanje 'hardvera' + +1. Iz VS Code terminala pokrenite CounterFit aplikaciju sljedeΔ‡om naredbom: + + ```sh + counterfit + ``` + + Aplikacija Δ‡e se pokrenuti i otvoriti u vaΕ‘em web pregledniku: + + ![Counter Fit aplikacija pokrenuta u pregledniku](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hr.png) + + Bit Δ‡e označena kao *Disconnected*, s LED-icom u gornjem desnom kutu isključenom. + +1. Dodajte sljedeΔ‡i kod na vrh `app.py`: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + + Ovaj kod uvozi klasu `CounterFitConnection` iz modula `counterfit_connection`, koji dolazi iz `counterfit-connection` pip paketa koji ste ranije instalirali. Zatim inicijalizira vezu s CounterFit aplikacijom koja radi na `127.0.0.1`, Ε‘to je IP adresa koju uvijek moΕΎete koristiti za pristup svom lokalnom računalu (često se naziva *localhost*), na portu 5000. + + > πŸ’ Ako imate druge aplikacije koje rade na portu 5000, moΕΎete to promijeniti aΕΎuriranjem porta u kodu i pokretanjem CounterFit-a pomoΔ‡u `CounterFit --port `, zamjenjujuΔ‡i `` s portom koji ΕΎelite koristiti. + +1. Morat Δ‡ete pokrenuti novi VS Code terminal odabirom gumba **Create a new integrated terminal**. To je zato Ε‘to CounterFit aplikacija radi u trenutnom terminalu. + + ![VS Code gumb za stvaranje novog integriranog terminala](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hr.png) + +1. U ovom novom terminalu pokrenite datoteku `app.py` kao i prije. Status CounterFit-a promijenit Δ‡e se u **Connected** i LED-ica Δ‡e se upaliti. + + ![Counter Fit prikazuje status povezan](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hr.png) + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device). + +πŸ˜€ VaΕ‘a veza s hardverom je uspjeΕ‘no uspostavljena! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md new file mode 100644 index 00000000..bd0eee05 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md @@ -0,0 +1,222 @@ + +# Wio Terminal + +[Wio Terminal od Seeed Studios](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) je mikrokontroler kompatibilan s Arduinom, s ugraΔ‘enim WiFi-jem, senzorima i aktuatorima, kao i priključcima za dodavanje dodatnih senzora i aktuatora koristeΔ‡i hardverski ekosustav nazvan [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html). + +![Wio Terminal od Seeed Studios](../../../../../translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hr.png) + +## Postavljanje + +Za koriΕ‘tenje Wio Terminala, potrebno je instalirati besplatan softver na vaΕ‘e računalo. TakoΔ‘er, potrebno je aΕΎurirati firmware Wio Terminala prije nego Ε‘to ga poveΕΎete s WiFi-jem. + +### Zadatak - postavljanje + +Instalirajte potrebni softver i aΕΎurirajte firmware. + +1. Instalirajte Visual Studio Code (VS Code). Ovo je editor koji Δ‡ete koristiti za pisanje koda za ureΔ‘aj u C/C++. Pogledajte [dokumentaciju za VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) za upute o instalaciji. + + > πŸ’ Drugi popularni IDE za razvoj s Arduinom je [Arduino IDE](https://www.arduino.cc/en/software). Ako ste veΔ‡ upoznati s ovim alatom, moΕΎete ga koristiti umjesto VS Code-a i PlatformIO-a, ali lekcije Δ‡e se temeljiti na koriΕ‘tenju VS Code-a. + +1. Instalirajte PlatformIO ekstenziju za VS Code. Ovo je ekstenzija za VS Code koja podrΕΎava programiranje mikrokontrolera u C/C++. Pogledajte [dokumentaciju za PlatformIO ekstenziju](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=platformio.platformio-ide) za upute o instalaciji ove ekstenzije u VS Code. Ova ekstenzija ovisi o Microsoft C/C++ ekstenziji koja se automatski instalira prilikom instalacije PlatformIO-a. + +1. PoveΕΎite Wio Terminal s vaΕ‘im računalom. Wio Terminal ima USB-C priključak na dnu, koji treba povezati s USB priključkom na vaΕ‘em računalu. Wio Terminal dolazi s USB-C na USB-A kabelom, ali ako vaΕ‘e računalo ima samo USB-C priključke, trebat Δ‡e vam USB-C kabel ili USB-A na USB-C adapter. + +1. Slijedite upute u [Wio Terminal Wiki WiFi Overview dokumentaciji](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/) za postavljanje vaΕ‘eg Wio Terminala i aΕΎuriranje firmware-a. + +## Hello world + +Tradicionalno je, kada započinjete s novim programskim jezikom ili tehnologijom, kreirati aplikaciju 'Hello World' - malu aplikaciju koja ispisuje tekst poput `"Hello World"` kako bi se pokazalo da su svi alati ispravno konfigurirani. + +Hello World aplikacija za Wio Terminal osigurat Δ‡e da imate ispravno instaliran Visual Studio Code s PlatformIO-om i postavljen za razvoj mikrokontrolera. + +### Kreiranje PlatformIO projekta + +Prvi korak je kreiranje novog projekta koristeΔ‡i PlatformIO konfiguriranog za Wio Terminal. + +#### Zadatak - kreiranje PlatformIO projekta + +Kreirajte PlatformIO projekt. + +1. PoveΕΎite Wio Terminal s vaΕ‘im računalom. + +1. Pokrenite VS Code. + +1. Ikona PlatformIO-a bit Δ‡e na bočnoj traci izbornika: + + ![Opcija PlatformIO izbornika](../../../../../translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hr.png) + + Odaberite ovu opciju izbornika, zatim odaberite *PIO Home -> Open*. + + ![Opcija PlatformIO otvaranja](../../../../../translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hr.png) + +1. Na početnom zaslonu odaberite gumb **+ New Project**. + + ![Gumb za novi projekt](../../../../../translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hr.png) + +1. Konfigurirajte projekt u *Project Wizard*-u: + + 1. Nazovite svoj projekt `nightlight`. + + 1. U padajuΔ‡em izborniku *Board* upiΕ‘ite `WIO` kako biste filtrirali ploče i odaberite *Seeeduino Wio Terminal*. + + 1. Ostavite *Framework* kao *Arduino*. + + 1. Ostavite označen *Use default location* ili ga odznačite i odaberite lokaciju za vaΕ‘ projekt. + + 1. Odaberite gumb **Finish**. + + ![DovrΕ‘eni čarobnjak za projekt](../../../../../translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hr.png) + + PlatformIO Δ‡e preuzeti komponente potrebne za kompajliranje koda za Wio Terminal i kreirati vaΕ‘ projekt. Ovo moΕΎe potrajati nekoliko minuta. + +### IstraΕΎivanje PlatformIO projekta + +VS Code explorer prikazat Δ‡e niz datoteka i mapa koje je kreirao PlatformIO čarobnjak. + +#### Mape + +* `.pio` - ova mapa sadrΕΎi privremene podatke potrebne PlatformIO-u, poput biblioteka ili kompajliranog koda. Automatski se ponovno kreira ako se izbriΕ‘e, i ne trebate je dodavati u kontrolu izvornog koda ako dijelite svoj projekt na stranicama poput GitHuba. +* `.vscode` - ova mapa sadrΕΎi konfiguraciju koju koriste PlatformIO i VS Code. Automatski se ponovno kreira ako se izbriΕ‘e, i ne trebate je dodavati u kontrolu izvornog koda ako dijelite svoj projekt na stranicama poput GitHuba. +* `include` - ova mapa je za vanjske header datoteke potrebne prilikom dodavanja dodatnih biblioteka u vaΕ‘ kod. NeΔ‡ete koristiti ovu mapu u ovim lekcijama. +* `lib` - ova mapa je za vanjske biblioteke koje ΕΎelite pozvati iz vaΕ‘eg koda. NeΔ‡ete koristiti ovu mapu u ovim lekcijama. +* `src` - ova mapa sadrΕΎi glavni izvorni kod za vaΕ‘u aplikaciju. U početku Δ‡e sadrΕΎavati jednu datoteku - `main.cpp`. +* `test` - ova mapa je mjesto gdje biste stavili sve unit testove za vaΕ‘ kod. + +#### Datoteke + +* `main.cpp` - ova datoteka u mapi `src` sadrΕΎi ulaznu točku za vaΕ‘u aplikaciju. Otvorite ovu datoteku, i sadrΕΎavat Δ‡e sljedeΔ‡i kod: + + ```cpp + #include + + void setup() { + // put your setup code here, to run once: + } + + void loop() { + // put your main code here, to run repeatedly: + } + ``` + + Kada se ureΔ‘aj pokrene, Arduino framework Δ‡e jednom pokrenuti funkciju `setup`, a zatim Δ‡e funkciju `loop` pokretati opetovano dok se ureΔ‘aj ne isključi. + +* `.gitignore` - ova datoteka navodi datoteke i direktorije koje treba ignorirati prilikom dodavanja vaΕ‘eg koda u git kontrolu izvornog koda, poput učitavanja u repozitorij na GitHubu. + +* `platformio.ini` - ova datoteka sadrΕΎi konfiguraciju za vaΕ‘ ureΔ‘aj i aplikaciju. Otvorite ovu datoteku, i sadrΕΎavat Δ‡e sljedeΔ‡i kod: + + ```ini + [env:seeed_wio_terminal] + platform = atmelsam + board = seeed_wio_terminal + framework = arduino + ``` + + Sekcija `[env:seeed_wio_terminal]` ima konfiguraciju za Wio Terminal. MoΕΎete imati viΕ‘e `env` sekcija kako bi vaΕ‘ kod mogao biti kompajliran za viΕ‘e ploča. + + Ostale vrijednosti odgovaraju konfiguraciji iz čarobnjaka za projekt: + + * `platform = atmelsam` definira hardver koji koristi Wio Terminal (mikrokontroler baziran na ATSAMD51). + * `board = seeed_wio_terminal` definira tip mikrokontrolerske ploče (Wio Terminal). + * `framework = arduino` definira da ovaj projekt koristi Arduino framework. + +### Pisanje Hello World aplikacije + +Sada ste spremni napisati Hello World aplikaciju. + +#### Zadatak - pisanje Hello World aplikacije + +NapiΕ‘ite Hello World aplikaciju. + +1. Otvorite datoteku `main.cpp` u VS Code-u. + +1. Promijenite kod tako da odgovara sljedeΔ‡em: + + ```cpp + #include + + void setup() + { + Serial.begin(9600); + + while (!Serial) + ; // Wait for Serial to be ready + + delay(1000); + } + + void loop() + { + Serial.println("Hello World"); + delay(5000); + } + ``` + + Funkcija `setup` inicijalizira vezu s serijskim portom - u ovom slučaju, USB port koji se koristi za povezivanje Wio Terminala s vaΕ‘im računalom. Parametar `9600` je [baud rate](https://wikipedia.org/wiki/Symbol_rate) (poznat i kao simbolička brzina), odnosno brzina kojom Δ‡e se podaci slati preko serijskog porta u bitovima po sekundi. Ova postavka znači da se 9,600 bitova (0 i 1) podataka Ε‘alje svake sekunde. Zatim čeka da serijski port bude spreman. + + Funkcija `loop` Ε‘alje liniju `Hello World!` na serijski port, zajedno s novim znakom za red. Zatim spava 5,000 milisekundi ili 5 sekundi. Nakon Ε‘to funkcija `loop` zavrΕ‘i, ponovno se pokreΔ‡e, i tako dalje sve dok je mikrokontroler uključen. + +1. Stavite Wio Terminal u način za učitavanje. Ovo Δ‡ete morati učiniti svaki put kada učitavate novi kod na ureΔ‘aj: + + 1. Dvaput brzo povucite prekidač za napajanje prema dolje - on Δ‡e se svaki put vratiti u uključeni poloΕΎaj. + + 1. Provjerite plavu statusnu LED diodu s desne strane USB priključka. Trebala bi pulsirati. + + [![Video koji pokazuje kako staviti Wio Terminal u način za učitavanje](https://img.youtube.com/vi/LeKU_7zLRrQ/0.jpg)](https://youtu.be/LeKU_7zLRrQ) + + Kliknite na sliku iznad za video koji pokazuje kako to učiniti. + +1. Kompajlirajte i učitajte kod na Wio Terminal. + + 1. Otvorite VS Code naredbeni izbornik. + + 1. UpiΕ‘ite `PlatformIO Upload` kako biste pretraΕΎili opciju za učitavanje i odaberite *PlatformIO: Upload*. + + ![Opcija PlatformIO učitavanja u naredbenom izborniku](../../../../../translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hr.png) + + PlatformIO Δ‡e automatski kompajlirati kod ako je potrebno prije učitavanja. + + 1. Kod Δ‡e biti kompajliran i učitan na Wio Terminal. + + > πŸ’ Ako koristite macOS, pojavit Δ‡e se obavijest o *DISK NOT EJECTED PROPERLY*. To je zato Ε‘to se Wio Terminal montira kao disk tijekom procesa učitavanja, i odspaja se kada se kompajlirani kod zapisuje na ureΔ‘aj. MoΕΎete ignorirati ovu obavijest. + + ⚠️ Ako dobijete greΕ‘ke o nedostupnosti porta za učitavanje, prvo provjerite imate li Wio Terminal povezan s vaΕ‘im računalom, uključen pomoΔ‡u prekidača na lijevoj strani zaslona i postavljen u način za učitavanje. Zelena svjetlost na dnu trebala bi biti uključena, a plava svjetlost trebala bi pulsirati. Ako i dalje dobijete greΕ‘ku, povucite prekidač za uključivanje/isključivanje dvaput brzo kako biste prisilili Wio Terminal u način za učitavanje i pokuΕ‘ajte ponovno učitati kod. + +PlatformIO ima Serijski Monitor koji moΕΎe pratiti podatke poslane preko USB kabela s Wio Terminala. Ovo vam omoguΔ‡uje praΔ‡enje podataka koje Ε‘alje naredba `Serial.println("Hello World");`. + +1. Otvorite VS Code naredbeni izbornik. + +1. UpiΕ‘ite `PlatformIO Serial` kako biste pretraΕΎili opciju za Serijski Monitor i odaberite *PlatformIO: Serial Monitor*. + + ![Opcija PlatformIO Serijskog Monitora u naredbenom izborniku](../../../../../translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hr.png) + + Otvorit Δ‡e se novi terminal, i podaci poslani preko serijskog porta bit Δ‡e prikazani u ovom terminalu: + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Hello World + Hello World + ``` + + `Hello World` Δ‡e se ispisivati na serijskom monitoru svakih 5 sekundi. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/wio-terminal](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/wio-terminal). + +πŸ˜€ VaΕ‘ 'Hello World' program je uspjeΕ‘no pokrenut! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/2-deeper-dive/README.md b/translations/hr/1-getting-started/lessons/2-deeper-dive/README.md new file mode 100644 index 00000000..6092341f --- /dev/null +++ b/translations/hr/1-getting-started/lessons/2-deeper-dive/README.md @@ -0,0 +1,277 @@ + +# Dublje istraΕΎivanje IoT-a + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio serije [Hello IoT](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Lekcija je podijeljena u 2 videa - jednosatnu lekciju i jednosatni uredski sat za dublje istraΕΎivanje dijelova lekcije i odgovaranje na pitanja. + +[![Lekcija 2: Dublje istraΕΎivanje IoT-a](https://img.youtube.com/vi/t0SySWw3z9M/0.jpg)](https://youtu.be/t0SySWw3z9M) + +[![Lekcija 2: Dublje istraΕΎivanje IoT-a - Uredski sat](https://img.youtube.com/vi/tTZYf9EST1E/0.jpg)](https://youtu.be/tTZYf9EST1E) + +> πŸŽ₯ Kliknite na slike iznad za gledanje videa + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3) + +## Uvod + +Ova lekcija dublje istraΕΎuje neke od koncepata obraΔ‘enih u prethodnoj lekciji. + +U ovoj lekciji obradit Δ‡emo: + +* [Komponente IoT aplikacije](../../../../../1-getting-started/lessons/2-deeper-dive) +* [Dublje istraΕΎivanje mikrokontrolera](../../../../../1-getting-started/lessons/2-deeper-dive) +* [Dublje istraΕΎivanje jednopločnih računala](../../../../../1-getting-started/lessons/2-deeper-dive) + +## Komponente IoT aplikacije + +Dvije glavne komponente IoT aplikacije su *Internet* i *stvar*. Pogledajmo ove dvije komponente detaljnije. + +### Stvar + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg) + +**Stvar** u IoT-u odnosi se na ureΔ‘aj koji moΕΎe komunicirati s fizičkim svijetom. Ovi ureΔ‘aji su obično mali, jeftini računari, koji rade pri niskim brzinama i koriste malo energije - na primjer, jednostavni mikrokontroleri s kilobajtima RAM-a (za razliku od gigabajta u PC-ju) koji rade na samo nekoliko stotina megaherca (za razliku od gigaherca u PC-ju), ali troΕ‘e toliko malo energije da mogu raditi tjednima, mjesecima ili čak godinama na baterijama. + +Ovi ureΔ‘aji komuniciraju s fizičkim svijetom, bilo pomoΔ‡u senzora za prikupljanje podataka iz okoline ili kontroliranjem izlaza ili aktuatora za fizičke promjene. Tipičan primjer je pametni termostat - ureΔ‘aj koji ima senzor temperature, način za postavljanje ΕΎeljene temperature poput kotačiΔ‡a ili zaslona osjetljivog na dodir, i vezu s grijanjem ili hlaΔ‘enjem koje se moΕΎe uključiti kada je detektirana temperatura izvan ΕΎeljenog raspona. Senzor temperature detektira da je prostorija prehladna, a aktuator uključuje grijanje. + +![Dijagram koji prikazuje temperaturu i kotačiΔ‡ kao ulaze u IoT ureΔ‘aj, te kontrolu grijalice kao izlaz](../../../../../translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hr.png) + +Postoji ogroman raspon različitih stvari koje mogu djelovati kao IoT ureΔ‘aji, od specijaliziranog hardvera koji detektira jednu stvar, do ureΔ‘aja opΔ‡e namjene, pa čak i vaΕ‘eg pametnog telefona! Pametni telefon moΕΎe koristiti senzore za detekciju svijeta oko sebe i aktuatora za interakciju sa svijetom - na primjer, koristeΔ‡i GPS senzor za detekciju vaΕ‘e lokacije i zvučnik za davanje uputa za navigaciju do odrediΕ‘ta. + +βœ… Razmislite o drugim sustavima koje imate oko sebe koji čitaju podatke sa senzora i koriste ih za donoΕ‘enje odluka. Jedan primjer bio bi termostat u peΔ‡nici. MoΕΎete li pronaΔ‡i joΕ‘ primjera? + +### Internet + +**Internet** strana IoT aplikacije sastoji se od aplikacija na koje se IoT ureΔ‘aj moΕΎe povezati za slanje i primanje podataka, kao i drugih aplikacija koje mogu obraΔ‘ivati podatke s IoT ureΔ‘aja i pomoΔ‡i u donoΕ‘enju odluka o tome koje zahtjeve poslati aktuatorima IoT ureΔ‘aja. + +Jedna tipična postavka bila bi neka vrsta cloud servisa na koji se IoT ureΔ‘aj povezuje, a taj cloud servis upravlja stvarima poput sigurnosti, primanja poruka od IoT ureΔ‘aja i slanja poruka natrag ureΔ‘aju. Taj cloud servis bi se zatim povezao s drugim aplikacijama koje mogu obraΔ‘ivati ili pohranjivati podatke senzora, ili koristiti podatke senzora zajedno s podacima iz drugih sustava za donoΕ‘enje odluka. + +UreΔ‘aji takoΔ‘er ne moraju uvijek izravno povezivati na Internet putem WiFi-a ili ΕΎičnih veza. Neki ureΔ‘aji koriste mreΕΎno umreΕΎavanje za meΔ‘usobnu komunikaciju putem tehnologija poput Bluetootha, povezujuΔ‡i se putem srediΕ‘njeg ureΔ‘aja koji ima internetsku vezu. + +U primjeru pametnog termostata, termostat bi se povezao putem kuΔ‡nog WiFi-a na cloud servis. Poslao bi podatke o temperaturi ovom cloud servisu, a odatle bi se ti podaci zapisali u neku vrstu baze podataka, omoguΔ‡ujuΔ‡i vlasniku kuΔ‡e da provjeri trenutne i proΕ‘le temperature putem aplikacije na telefonu. Drugi servis u oblaku znao bi ΕΎeljenu temperaturu vlasnika kuΔ‡e i slao poruke natrag IoT ureΔ‘aju putem cloud servisa kako bi rekao sustavu grijanja da se uključi ili isključi. + +![Dijagram koji prikazuje temperaturu i kotačiΔ‡ kao ulaze u IoT ureΔ‘aj, IoT ureΔ‘aj s dvosmjernom komunikacijom s oblakom, koji zauzvrat ima dvosmjernu komunikaciju s telefonom, te kontrolu grijalice kao izlaz iz IoT ureΔ‘aja](../../../../../translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hr.png) + +JoΕ‘ pametnija verzija mogla bi koristiti AI u oblaku s podacima iz drugih senzora povezanih s drugim IoT ureΔ‘ajima, poput senzora prisutnosti koji detektiraju koje su prostorije u upotrebi, kao i podatke poput vremenske prognoze ili čak vaΕ‘eg kalendara, za donoΕ‘enje odluka o tome kako pametno postaviti temperaturu. Na primjer, mogla bi isključiti grijanje ako iz vaΕ‘eg kalendara pročita da ste na odmoru, ili isključiti grijanje po sobama ovisno o tome koje prostorije koristite, učeΔ‡i iz podataka kako bi s vremenom postajala sve preciznija. + +![Dijagram koji prikazuje viΕ‘e senzora temperature i kotačiΔ‡ kao ulaze u IoT ureΔ‘aj, IoT ureΔ‘aj s dvosmjernom komunikacijom s oblakom, koji zauzvrat ima dvosmjernu komunikaciju s telefonom, kalendarom i vremenskom prognozom, te kontrolu grijalice kao izlaz iz IoT ureΔ‘aja](../../../../../translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hr.png) + +βœ… Koji bi drugi podaci mogli pomoΔ‡i da Internet povezani termostat postane pametniji? + +### IoT na rubu + +Iako I u IoT-u označava Internet, ovi ureΔ‘aji ne moraju se nuΕΎno povezivati na Internet. U nekim slučajevima, ureΔ‘aji se mogu povezati na 'edge' ureΔ‘aje - gateway ureΔ‘aje koji rade na vaΕ‘oj lokalnoj mreΕΎi, omoguΔ‡ujuΔ‡i obradu podataka bez poziva preko Interneta. Ovo moΕΎe biti brΕΎe kada imate puno podataka ili sporu internetsku vezu, omoguΔ‡uje rad offline gdje internetska povezanost nije moguΔ‡a, poput broda ili područja pogoΔ‘enog katastrofom, i omoguΔ‡uje zadrΕΎavanje podataka privatnima. Neki ureΔ‘aji Δ‡e sadrΕΎavati procesni kod kreiran pomoΔ‡u cloud alata i pokretati ga lokalno kako bi prikupljali i odgovarali na podatke bez koriΕ‘tenja internetske veze za donoΕ‘enje odluka. + +Jedan primjer ovoga je pametni kuΔ‡ni ureΔ‘aj poput Apple HomePod-a, Amazon Alexe ili Google Home-a, koji Δ‡e sluΕ‘ati vaΕ‘ glas koristeΔ‡i AI modele trenirane u oblaku, ali koji se pokreΔ‡u lokalno na ureΔ‘aju. Ovi ureΔ‘aji Δ‡e se 'probuditi' kada se izgovori odreΔ‘ena riječ ili fraza, i tek tada poslati vaΕ‘ govor preko Interneta na obradu. UreΔ‘aj Δ‡e prestati slati govor u odgovarajuΔ‡em trenutku, poput kada detektira pauzu u vaΕ‘em govoru. Sve Ε‘to kaΕΎete prije buΔ‘enja ureΔ‘aja s ključnom riječju i sve Ε‘to kaΕΎete nakon Ε‘to ureΔ‘aj prestane sluΕ‘ati neΔ‡e biti poslano preko Interneta pruΕΎatelju ureΔ‘aja, i stoga Δ‡e ostati privatno. + +βœ… Razmislite o drugim scenarijima gdje je privatnost vaΕΎna, pa bi obrada podataka bila bolja na rubu nego u oblaku. Kao savjet - razmislite o IoT ureΔ‘ajima s kamerama ili drugim ureΔ‘ajima za snimanje slike. + +### IoT sigurnost + +Kod svake internetske veze, sigurnost je vaΕΎan faktor. Postoji stara Ε‘ala da 'S u IoT-u označava sigurnost' - nema 'S' u IoT-u, Ε‘to implicira da nije siguran. + +IoT ureΔ‘aji se povezuju na cloud servis, i stoga su sigurni samo koliko i taj cloud servis - ako vaΕ‘ cloud servis dopuΕ‘ta bilo kojem ureΔ‘aju da se poveΕΎe, tada se mogu slati zlonamjerni podaci ili se mogu dogoditi virusni napadi. Ovo moΕΎe imati vrlo stvarne posljedice jer IoT ureΔ‘aji komuniciraju i kontroliraju druge ureΔ‘aje. Na primjer, [Stuxnet crv](https://wikipedia.org/wiki/Stuxnet) manipulirao je ventilima u centrifugama kako bi ih oΕ‘tetio. Hakeri su takoΔ‘er iskoristili [slabu sigurnost za pristup baby monitorima](https://www.npr.org/sections/thetwo-way/2018/06/05/617196788/s-c-mom-says-baby-monitor-was-hacked-experts-say-many-devices-are-vulnerable) i drugim kuΔ‡nim nadzornim ureΔ‘ajima. + +> πŸ’ Ponekad IoT ureΔ‘aji i edge ureΔ‘aji rade na mreΕΎi potpuno izoliranoj od Interneta kako bi podaci ostali privatni i sigurni. Ovo je poznato kao [air-gapping](https://wikipedia.org/wiki/Air_gap_(networking)). + +## Dublje istraΕΎivanje mikrokontrolera + +U prethodnoj lekciji predstavili smo mikrokontrolere. Sada Δ‡emo ih detaljnije istraΕΎiti. + +### CPU + +CPU je 'mozak' mikrokontrolera. To je procesor koji pokreΔ‡e vaΕ‘ kod i moΕΎe slati podatke na i primati podatke s bilo kojih povezanih ureΔ‘aja. CPU-ovi mogu sadrΕΎavati jednu ili viΕ‘e jezgri - u osnovi jedan ili viΕ‘e CPU-ova koji mogu zajedno raditi na pokretanju vaΕ‘eg koda. + +CPU-ovi se oslanjaju na sat koji otkucava milijune ili milijarde puta u sekundi. Svaki otkucaj, ili ciklus, sinkronizira radnje koje CPU moΕΎe poduzeti. Sa svakim otkucajem, CPU moΕΎe izvrΕ‘iti instrukciju iz programa, poput dohvaΔ‡anja podataka s vanjskog ureΔ‘aja ili izvoΔ‘enja matematičkog izračuna. Ovaj redoviti ciklus omoguΔ‡uje da se sve radnje dovrΕ‘e prije nego Ε‘to se obradi sljedeΔ‡a instrukcija. + +Ε to je brΕΎi ciklus sata, to se viΕ‘e instrukcija moΕΎe obraditi svake sekunde, i stoga je CPU brΕΎi. Brzine CPU-a mjere se u [Hercima (Hz)](https://wikipedia.org/wiki/Hertz), standardnoj jedinici gdje 1 Hz znači jedan ciklus ili otkucaj sata u sekundi. + +> πŸŽ“ Brzine CPU-a često se izraΕΎavaju u MHz ili GHz. 1MHz je 1 milijun Hz, 1GHz je 1 milijarda Hz. + +> πŸ’ CPU-ovi izvrΕ‘avaju programe koristeΔ‡i [ciklus dohvaΔ‡anja-dekodiranja-izvrΕ‘avanja](https://wikipedia.org/wiki/Instruction_cycle). Za svaki otkucaj sata, CPU Δ‡e dohvatiti sljedeΔ‡u instrukciju iz memorije, dekodirati je, a zatim je izvrΕ‘iti, poput koriΕ‘tenja aritmetičko-logičke jedinice (ALU) za zbrajanje 2 broja. Neka izvrΕ‘enja Δ‡e trajati viΕ‘e otkucaja, pa Δ‡e sljedeΔ‡i ciklus započeti nakon Ε‘to se instrukcija dovrΕ‘i. + +![Ciklus dohvaΔ‡anja-dekodiranja-izvrΕ‘avanja koji prikazuje dohvaΔ‡anje instrukcije iz programa pohranjenog u RAM-u, zatim dekodiranje i izvrΕ‘avanje na CPU-u](../../../../../translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hr.png) + +Mikrokontroleri imaju mnogo niΕΎe brzine sata od stolnih ili prijenosnih računala, pa čak i veΔ‡ine pametnih telefona. Na primjer, Wio Terminal ima CPU koji radi na 120MHz ili 120.000.000 ciklusa u sekundi. + +βœ… Prosječno PC ili Mac računalo ima CPU s viΕ‘e jezgri koje rade na viΕ‘e gigaherca, Ε‘to znači da sat otkucava milijarde puta u sekundi. IstraΕΎite brzinu sata vaΕ‘eg računala i usporedite koliko je puta brΕΎe od Wio Terminala. + +Svaki ciklus sata troΕ‘i energiju i generira toplinu. Ε to su otkucaji brΕΎi, to se viΕ‘e energije troΕ‘i i viΕ‘e topline generira. PC-ovi imaju hladnjake i ventilatore za uklanjanje topline, bez kojih bi se pregrijali i isključili u roku od nekoliko sekundi. Mikrokontroleri često nemaju ni jedno ni drugo jer rade mnogo hladnije i stoga mnogo sporije. PC-ovi rade na mreΕΎnom napajanju ili velikim baterijama nekoliko sati, dok mikrokontroleri mogu raditi danima, mjesecima ili čak godinama na malim baterijama. Mikrokontroleri takoΔ‘er mogu imati jezgre koje rade na različitim brzinama, prebacujuΔ‡i se na sporije jezgre s niskom potroΕ‘njom kada je optereΔ‡enje CPU-a nisko kako bi se smanjila potroΕ‘nja energije. + +> πŸ’ Neka PC i Mac računala usvajaju isti miks brzih jezgri visokih performansi i sporijih jezgri niske potroΕ‘nje, prebacujuΔ‡i se kako bi optimizirali trajanje baterije ili brzinu ovisno o zadatku koji se izvodi. Na primjer, M1 čip u najnovijim Apple prijenosnicima moΕΎe se prebacivati izmeΔ‘u 4 jezgre za performanse i 4 jezgre za učinkovitost kako bi optimizirao trajanje baterije ili brzinu. + +βœ… Malo istraΕΎite: Pročitajte o CPU-ovima na [Wikipedia članku o CPU-ovima](https://wikipedia.org/wiki/Central_processing_unit) + +#### Zadatak + +IstraΕΎite Wio Terminal. + +Ako koristite Wio Terminal za ove lekcije, pokuΕ‘ajte pronaΔ‡i CPU. PronaΔ‘ite odjeljak *Pregled hardvera* na [stranici proizvoda Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) za sliku unutraΕ‘njosti i pokuΕ‘ajte pronaΔ‡i CPU kroz prozirni plastični prozor na straΕΎnjoj strani. + +### Memorija + +Mikrokontroleri obično imaju dvije vrste memorije - memoriju programa i memoriju s nasumičnim pristupom (RAM). + +Memorija programa je nevolatilna, Ε‘to znači da sve Ε‘to je zapisano u nju ostaje kada ureΔ‘aj nema napajanja. Ovo je memorija koja pohranjuje vaΕ‘ programski kod. + +RAM je memorija koju program koristi za rad, sadrΕΎi varijable koje vaΕ‘ program alocira i podatke prikupljene s perifernih ureΔ‘aja. RAM je volatilna memorija, Ε‘to znači da se njezin sadrΕΎaj gubi kada nestane napajanja, Ε‘to u biti resetira vaΕ‘ program. +πŸŽ“ Programska memorija pohranjuje vaΕ‘ kod i ostaje čak i kad nema napajanja. +πŸŽ“ RAM se koristi za pokretanje vaΕ‘eg programa i resetira se kada nema napajanja + +Kao i kod CPU-a, memorija na mikrokontroleru je za nekoliko redova veličine manja nego na PC-u ili Macu. Tipično računalo moΕΎe imati 8 gigabajta (GB) RAM-a, ili 8.000.000.000 bajtova, pri čemu svaki bajt ima dovoljno prostora za pohranu jednog slova ili broja od 0-255. Mikrokontroler bi imao samo kilobajte (KB) RAM-a, pri čemu je kilobajt 1.000 bajtova. Wio terminal spomenut gore ima 192KB RAM-a, ili 192.000 bajtova - viΕ‘e od 40.000 puta manje od prosječnog računala! + +Dijagram ispod prikazuje relativnu razliku u veličini izmeΔ‘u 192KB i 8GB - mala točka u sredini predstavlja 192KB. + +![Usporedba izmeΔ‘u 192KB i 8GB - viΕ‘e od 40.000 puta veΔ‡e](../../../../../translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hr.png) + +Prostor za pohranu programa takoΔ‘er je manji nego na PC-u. Tipično računalo moΕΎe imati tvrdi disk od 500GB za pohranu programa, dok mikrokontroler moΕΎe imati samo kilobajte ili moΕΎda nekoliko megabajta (MB) prostora za pohranu (1MB je 1.000KB, ili 1.000.000 bajtova). Wio terminal ima 4MB prostora za pohranu programa. + +βœ… IstraΕΎite malo: Koliko RAM-a i prostora za pohranu ima računalo koje koristite za čitanje ovoga? Kako se to usporeΔ‘uje s mikrokontrolerom? + +### Ulaz/Izlaz + +Mikrokontrolerima su potrebne ulazne i izlazne (I/O) veze za čitanje podataka sa senzora i slanje kontrolnih signala aktuatorima. Obično sadrΕΎe odreΔ‘eni broj viΕ‘enamjenskih ulazno/izlaznih (GPIO) pinova. Ovi pinovi mogu se konfigurirati putem softvera kao ulazni (primaju signal) ili izlazni (Ε‘alju signal). + +πŸ§ β¬…οΈ Ulazni pinovi koriste se za čitanje vrijednosti sa senzora + +🧠➑️ Izlazni pinovi Ε‘alju upute aktuatorima + +βœ… O ovome Δ‡ete naučiti viΕ‘e u sljedeΔ‡oj lekciji. + +#### Zadatak + +IstraΕΎite Wio Terminal. + +Ako koristite Wio Terminal za ove lekcije, pronaΔ‘ite GPIO pinove. PronaΔ‘ite odjeljak *Pinout diagram* na [stranici proizvoda Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) kako biste saznali koji pinovi su koji. Wio Terminal dolazi s naljepnicom koju moΕΎete zalijepiti na straΕΎnju stranu s brojevima pinova, pa je dodajte sada ako veΔ‡ niste. + +### Fizička veličina + +Mikrokontroleri su obično malih dimenzija, a najmanji, [Freescale Kinetis KL03 MCU, dovoljno je malen da stane u udubljenje golf loptice](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/). Samo CPU u PC-u moΕΎe mjeriti 40mm x 40mm, a to ne uključuje hladnjake i ventilatore potrebne da CPU radi dulje od nekoliko sekundi bez pregrijavanja, Ε‘to je znatno veΔ‡e od kompletnog mikrokontrolera. Wio terminal razvojni komplet s mikrokontrolerom, kuΔ‡iΕ‘tem, zaslonom i nizom priključaka i komponenti nije puno veΔ‡i od golog Intel i9 CPU-a, a znatno je manji od CPU-a s hladnjakom i ventilatorom! + +| UreΔ‘aj | Veličina | +| ------------------------------- | --------------------- | +| Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm | +| Wio terminal | 72mm x 57mm x 12mm | +| Intel i9 CPU, hladnjak i ventilator | 136mm x 145mm x 103mm | + +### Okviri i operativni sustavi + +Zbog svoje male brzine i veličine memorije, mikrokontroleri ne koriste operativni sustav (OS) u smislu desktop računala. Operativni sustav koji pokreΔ‡e vaΕ‘e računalo (Windows, Linux ili macOS) zahtijeva puno memorije i procesorske snage za izvoΔ‘enje zadataka koji su potpuno nepotrebni za mikrokontroler. Zapamtite da su mikrokontroleri obično programirani za obavljanje jednog ili viΕ‘e vrlo specifičnih zadataka, za razliku od računala opΔ‡e namjene poput PC-a ili Maca koji mora podrΕΎavati korisničko sučelje, reproducirati glazbu ili filmove, pruΕΎati alate za pisanje dokumenata ili koda, igranje igara ili pregledavanje interneta. + +Za programiranje mikrokontrolera bez OS-a potrebni su alati koji omoguΔ‡uju izgradnju vaΕ‘eg koda na način da ga mikrokontroler moΕΎe pokrenuti, koristeΔ‡i API-je koji mogu komunicirati s perifernim ureΔ‘ajima. Svaki mikrokontroler je drugačiji, pa proizvoΔ‘ači obično podrΕΎavaju standardne okvire koji vam omoguΔ‡uju da slijedite standardni 'recept' za izgradnju vaΕ‘eg koda i njegovo pokretanje na bilo kojem mikrokontroleru koji podrΕΎava taj okvir. + +Mikrokontroleri se mogu programirati i s OS-om - često nazvanim operativni sustav u stvarnom vremenu (RTOS), jer su dizajnirani za rukovanje slanjem podataka perifernim ureΔ‘ajima u stvarnom vremenu. Ovi operativni sustavi su vrlo lagani i pruΕΎaju značajke poput: + +* ViΕ‘ezadaΔ‡nosti, omoguΔ‡ujuΔ‡i vaΕ‘em kodu da istovremeno pokreΔ‡e viΕ‘e blokova koda, bilo na viΕ‘e jezgri ili naizmjenično na jednoj jezgri +* UmreΕΎavanja za sigurnu komunikaciju putem interneta +* Komponenti grafičkog korisničkog sučelja (GUI) za izgradnju korisničkih sučelja (UI) na ureΔ‘ajima koji imaju zaslone. + +βœ… Pročitajte viΕ‘e o različitim RTOS-ima: [Azure RTOS](https://azure.microsoft.com/services/rtos/?WT.mc_id=academic-17441-jabenn), [FreeRTOS](https://www.freertos.org), [Zephyr](https://www.zephyrproject.org) + +#### Arduino + +![Arduino logo](../../../../../images/arduino-logo.svg) + +[Arduino](https://www.arduino.cc) je vjerojatno najpopularniji okvir za mikrokontrolere, posebno meΔ‘u studentima, hobistima i entuzijastima. Arduino je platforma za elektroniku otvorenog koda koja kombinira softver i hardver. MoΕΎete kupiti Arduino kompatibilne ploče od samog Arduina ili od drugih proizvoΔ‘ača, a zatim ih programirati koristeΔ‡i Arduino okvir. + +Arduino ploče programiraju se u C ili C++. KoriΕ‘tenje C/C++ omoguΔ‡uje da vaΕ‘ kod bude vrlo malen i brz, Ε‘to je potrebno na ureΔ‘aju s ograničenim resursima poput mikrokontrolera. Jezgra Arduino aplikacije naziva se skica i to je C/C++ kod s dvije funkcije - `setup` i `loop`. Kada se ploča pokrene, Arduino okvir Δ‡e pokrenuti funkciju `setup` jednom, a zatim Δ‡e funkciju `loop` pokretati iznova i iznova, kontinuirano dok se napajanje ne isključi. + +U funkciji `setup` napisali biste kod za inicijalizaciju, poput povezivanja na WiFi i cloud usluge ili inicijalizacije pinova za ulaz i izlaz. VaΕ‘ kod u funkciji `loop` sadrΕΎavao bi obradu, poput čitanja sa senzora i slanja vrijednosti u oblak. Obično biste uključili odgodu u svaku petlju, na primjer, ako ΕΎelite da se podaci senzora Ε‘alju svakih 10 sekundi, dodali biste odgodu od 10 sekundi na kraju petlje kako bi mikrokontroler mogao spavati, Ε‘tedeΔ‡i energiju, a zatim ponovno pokrenuti petlju kada je potrebno. + +![Arduino skica koja prvo pokreΔ‡e setup, a zatim kontinuirano pokreΔ‡e loop](../../../../../translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hr.png) + +βœ… Ova arhitektura programa poznata je kao *petlja dogaΔ‘aja* ili *petlja poruka*. Mnoge aplikacije koriste ovo u pozadini i to je standard za veΔ‡inu desktop aplikacija koje rade na OS-ima poput Windowsa, macOS-a ili Linuxa. `Loop` osluΕ‘kuje poruke od korisničkih sučelja poput tipki ili ureΔ‘aja poput tipkovnice i reagira na njih. ViΕ‘e moΕΎete pročitati u ovom [članku o petlji dogaΔ‘aja](https://wikipedia.org/wiki/Event_loop). + +Arduino pruΕΎa standardne biblioteke za interakciju s mikrokontrolerima i GPIO pinovima, s različitim implementacijama u pozadini za rad na različitim mikrokontrolerima. Na primjer, funkcija [`delay`](https://www.arduino.cc/reference/en/language/functions/time/delay/) zaustavit Δ‡e program na odreΔ‘eno vrijeme, dok Δ‡e funkcija [`digitalRead`](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/) očitati vrijednost `HIGH` ili `LOW` s odreΔ‘enog pina, bez obzira na to na kojoj ploči se kod pokreΔ‡e. Ove standardne biblioteke znače da se Arduino kod napisan za jednu ploču moΕΎe ponovno kompajlirati za bilo koju drugu Arduino ploču i radit Δ‡e, pod uvjetom da su pinovi isti i da ploče podrΕΎavaju iste značajke. + +Postoji veliki ekosustav Arduino biblioteka treΔ‡ih strana koje omoguΔ‡uju dodavanje dodatnih značajki vaΕ‘im Arduino projektima, poput koriΕ‘tenja senzora i aktuatora ili povezivanja s cloud IoT uslugama. + +##### Zadatak + +IstraΕΎite Wio Terminal. + +Ako koristite Wio Terminal za ove lekcije, ponovno pročitajte kod koji ste napisali u proΕ‘loj lekciji. PronaΔ‘ite funkcije `setup` i `loop`. Pratite serijski izlaz za funkciju `loop` koja se poziva viΕ‘e puta. PokuΕ‘ajte dodati kod u funkciju `setup` za pisanje na serijski port i promatrajte da se ovaj kod poziva samo jednom svaki put kada ponovno pokrenete ureΔ‘aj. PokuΕ‘ajte ponovno pokrenuti ureΔ‘aj pomoΔ‡u prekidača za napajanje sa strane kako biste pokazali da se ovo poziva svaki put kada se ureΔ‘aj ponovno pokrene. + +## Dublje istraΕΎivanje jednopločnih računala + +U proΕ‘loj lekciji predstavili smo jednopločna računala. Sada Δ‡emo ih detaljnije istraΕΎiti. + +### Raspberry Pi + +![Raspberry Pi logo](../../../../../translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hr.png) + +[Raspberry Pi Foundation](https://www.raspberrypi.org) je dobrotvorna organizacija iz Ujedinjenog Kraljevstva osnovana 2009. godine s ciljem promicanja proučavanja računalnih znanosti, posebno na razini Ε‘kola. Kao dio ove misije, razvili su jednopločno računalo nazvano Raspberry Pi. Raspberry Pi trenutno je dostupan u 3 varijante - punoj veličini, manjem Pi Zero i računalnom modulu koji se moΕΎe ugraditi u vaΕ‘ konačni IoT ureΔ‘aj. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hr.jpg) + +Najnovija iteracija Raspberry Pi-ja pune veličine je Raspberry Pi 4B. Ima četverojezgreni (4 jezgre) CPU koji radi na 1.5GHz, 2, 4 ili 8GB RAM-a, gigabitni ethernet, WiFi, 2 HDMI porta koji podrΕΎavaju 4k zaslone, audio i kompozitni video izlaz, USB portove (2 USB 2.0, 2 USB 3.0), 40 GPIO pinova, konektor za kameru za Raspberry Pi modul kamere i utor za SD karticu. Sve to na ploči dimenzija 88mm x 58mm x 19.5mm, napajanoj USB-C adapterom od 3A. Cijena počinje od 35 USD, Ε‘to je znatno jeftinije od PC-a ili Maca. + +> πŸ’ Postoji i Pi400, sve-u-jednom računalo s Pi4 ugraΔ‘enim u tipkovnicu. + +![Raspberry Pi Zero](../../../../../translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hr.jpg) + +Pi Zero je mnogo manji, s niΕΎom snagom. Ima jednojezgreni CPU od 1GHz, 512MB RAM-a, WiFi (u modelu Zero W), jedan HDMI port, mikro-USB port, 40 GPIO pinova, konektor za kameru za Raspberry Pi modul kamere i utor za SD karticu. Dimenzije su mu 65mm x 30mm x 5mm, a troΕ‘i vrlo malo energije. Zero koΕ‘ta 5 USD, dok verzija s WiFi-jem (Zero W) koΕ‘ta 10 USD. + +> πŸŽ“ CPU-i u oba ova ureΔ‘aja su ARM procesori, za razliku od Intel/AMD x86 ili x64 procesora koji se nalaze u veΔ‡ini PC-a i Macova. Slični su procesorima koji se nalaze u nekim mikrokontrolerima, kao i u gotovo svim mobilnim telefonima, Microsoft Surface X-u i novim Apple Silicon Macovima. + +Sve varijante Raspberry Pi-ja koriste verziju Debian Linuxa nazvanu Raspberry Pi OS. Dostupan je kao lagana verzija bez desktopa, Ε‘to je savrΕ‘eno za 'headless' projekte gdje vam ne treba zaslon, ili puna verzija s kompletnim desktop okruΕΎenjem, web preglednikom, uredskim aplikacijama, alatima za kodiranje i igrama. BuduΔ‡i da je OS verzija Debian Linuxa, moΕΎete instalirati bilo koju aplikaciju ili alat koji radi na Debianu i izgraΔ‘en je za ARM procesor unutar Pi-ja. + +#### Zadatak + +IstraΕΎite Raspberry Pi. + +Ako koristite Raspberry Pi za ove lekcije, pročitajte viΕ‘e o različitim hardverskim komponentama na ploči. + +* MoΕΎete pronaΔ‡i detalje o procesorima koriΕ‘tenim na [stranici dokumentacije o hardveru Raspberry Pi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/). Pročitajte viΕ‘e o procesoru koriΕ‘tenom u Pi-ju koji koristite. +* PronaΔ‘ite GPIO pinove. Pročitajte viΕ‘e o njima na [dokumentaciji o GPIO pinovima Raspberry Pi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md). Koristite [Vodič za koriΕ‘tenje GPIO pinova](https://www.raspberrypi.org/documentation/usage/gpio/README.md) kako biste identificirali različite pinove na svom Pi-ju. + +### Programiranje jednopločnih računala + +Jednopločna računala su puna računala koja koriste puni OS. To znači da postoji Ε‘irok raspon programskih jezika, okvira i alata koje moΕΎete koristiti za njihovo programiranje, za razliku od mikrokontrolera koji ovise o podrΕ‘ci za ploču u okvirima poput Arduina. VeΔ‡ina programskih jezika ima biblioteke koje omoguΔ‡uju pristup GPIO pinovima za slanje i primanje podataka sa senzora i aktuatora. + +βœ… Koje programske jezike poznajete? Jesu li podrΕΎani na Linuxu? + +NajčeΕ‘Δ‡i programski jezik za izgradnju IoT aplikacija na Raspberry Pi-ju je Python. Postoji ogroman ekosustav hardvera dizajniranog za Pi, a gotovo svi uključuju relevantan kod potreban za njihovo koriΕ‘tenje kao Python biblioteke. Neki od ovih ekosustava temelje se na 'hatovima' - tako nazvanima jer sjede na vrhu Pi-ja poput Ε‘eΕ‘ira i povezuju se s velikim konektorom na 40 GPIO pinova. Ovi hatovi pruΕΎaju dodatne moguΔ‡nosti, poput zaslona, senzora, daljinski upravljanih automobila ili adaptera za spajanje senzora sa standardiziranim kabelima. +### KoriΕ‘tenje jednopločastih računala u profesionalnim IoT implementacijama + +Jednopločasta računala koriste se za profesionalne IoT implementacije, a ne samo kao razvojni kompleti. Ona mogu pruΕΎiti snaΕΎan način za upravljanje hardverom i izvoΔ‘enje sloΕΎenih zadataka poput pokretanja modela strojnog učenja. Na primjer, postoji [Raspberry Pi 4 compute module](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/) koji nudi svu snagu Raspberry Pi 4, ali u kompaktnijem i jeftinijem obliku bez veΔ‡ine priključaka, dizajniran za ugradnju u prilagoΔ‘eni hardver. + +--- + +## πŸš€ Izazov + +Izazov u posljednjoj lekciji bio je nabrojati Ε‘to viΕ‘e IoT ureΔ‘aja koje moΕΎete pronaΔ‡i u svom domu, Ε‘koli ili na radnom mjestu. Za svaki ureΔ‘aj na ovom popisu, mislite li da su izraΔ‘eni oko mikrokontrolera, jednopločastih računala ili čak kombinacije oboje? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4) + +## Pregled i samostalno učenje + +* Pročitajte [Arduino vodič za početnike](https://www.arduino.cc/en/Guide/Introduction) kako biste bolje razumjeli Arduino platformu. +* Pročitajte [uvod u Raspberry Pi 4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) kako biste saznali viΕ‘e o Raspberry Pi ureΔ‘ajima. +* Saznajte viΕ‘e o nekim konceptima i akronimima u članku [Ε to su zapravo CPU-i, MPU-i, MCU-i i GPU-i u časopisu Electrical Engineering Journal](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/). + +βœ… Koristite ove vodiče, zajedno s troΕ‘kovima prikazanim putem poveznica u [vodiču za hardver](../../../hardware.md), kako biste odlučili koju hardversku platformu ΕΎelite koristiti ili biste radije koristili virtualni ureΔ‘aj. + +## Zadatak + +[Usporedite i kontrastirajte mikrokontrolere i jednopločasta računala](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden koriΕ‘tenjem AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/2-deeper-dive/assignment.md b/translations/hr/1-getting-started/lessons/2-deeper-dive/assignment.md new file mode 100644 index 00000000..7320aa19 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/2-deeper-dive/assignment.md @@ -0,0 +1,26 @@ + +# Usporedba i kontrast mikrokontrolera i jednopločnih računala + +## Upute + +Ova lekcija obuhvatila je mikrokontrolere i jednopločna računala. Izradite tablicu koja usporeΔ‘uje i kontrastira ove dvije tehnologije te navedite barem 2 razloga zaΕ‘to biste koristili mikrokontroler umjesto jednopločnog računala, i barem 2 razloga zaΕ‘to biste koristili jednopločno računalo umjesto mikrokontrolera. + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Izrada tablice za usporedbu mikrokontrolera i jednopločnih računala | IzraΔ‘en popis s viΕ‘e stavki koje ispravno usporeΔ‘uju i kontrastiraju | IzraΔ‘en popis s samo nekoliko stavki | IzraΔ‘en samo jedan ili nijedan element za usporedbu i kontrast | +| Razlozi za koriΕ‘tenje jednog u odnosu na drugo | Navedena 2 ili viΕ‘e razloga za mikrokontrolere i 2 ili viΕ‘e razloga za jednopločna računala | Navedeno samo 1-2 razloga za mikrokontrolere i 1-2 razloga za jednopločna računala | Nije navedeno 1 ili viΕ‘e razloga za mikrokontrolere ili jednopločna računala | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/README.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/README.md new file mode 100644 index 00000000..973079c7 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/README.md @@ -0,0 +1,230 @@ + +# Interakcija s fizičkim svijetom pomoΔ‡u senzora i aktuatora + +![Pregled lekcije u obliku sketchnotea](../../../../../translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio serije [Hello IoT](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Lekcija je podijeljena u dva videa - jedan sat predavanja i jedan sat dodatnih pitanja i dubljeg objaΕ‘njavanja dijelova lekcije. + +[![Lekcija 3: Interakcija s fizičkim svijetom pomoΔ‡u senzora i aktuatora](https://img.youtube.com/vi/Lqalu1v6aF4/0.jpg)](https://youtu.be/Lqalu1v6aF4) + +[![Lekcija 3: Interakcija s fizičkim svijetom pomoΔ‡u senzora i aktuatora - Dodatni sat](https://img.youtube.com/vi/qR3ekcMlLWA/0.jpg)](https://youtu.be/qR3ekcMlLWA) + +> πŸŽ₯ Kliknite na slike iznad za gledanje videa + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/5) + +## Uvod + +Ova lekcija uvodi dva vaΕΎna koncepta za vaΕ‘ IoT ureΔ‘aj - senzore i aktuatore. TakoΔ‘er Δ‡ete praktično raditi s njima, dodajuΔ‡i senzor svjetla svom IoT projektu, a zatim LED koji se kontrolira razinom svjetla, čime Δ‡ete efektivno izraditi noΔ‡no svjetlo. + +U ovoj lekciji obradit Δ‡emo: + +* [Ε to su senzori?](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [KoriΕ‘tenje senzora](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Vrste senzora](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Ε to su aktuatori?](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [KoriΕ‘tenje aktuatora](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Vrste aktuatora](../../../../../1-getting-started/lessons/3-sensors-and-actuators) + +## Ε to su senzori? + +Senzori su hardverski ureΔ‘aji koji opaΕΎaju fizički svijet - mjere jedno ili viΕ‘e svojstava oko sebe i Ε‘alju informacije IoT ureΔ‘aju. Senzori pokrivaju Ε‘irok raspon ureΔ‘aja jer postoji mnogo stvari koje se mogu mjeriti, od prirodnih svojstava poput temperature zraka do fizičkih interakcija poput pokreta. + +Neki uobičajeni senzori uključuju: + +* Senzori temperature - mjere temperaturu zraka ili temperaturu objekta u kojem se nalaze. Za hobiste i programere često su kombinirani s mjerenjem tlaka zraka i vlage u jednom senzoru. +* Tipke - detektiraju kada su pritisnute. +* Senzori svjetla - detektiraju razinu svjetla i mogu biti specifični za odreΔ‘ene boje, UV svjetlo, IR svjetlo ili opΔ‡enito vidljivo svjetlo. +* Kamere - opaΕΎaju vizualnu reprezentaciju svijeta snimanjem fotografija ili video streamova. +* Akcelerometri - detektiraju pokret u viΕ‘e smjerova. +* Mikrofoni - detektiraju zvuk, bilo opΔ‡u razinu zvuka ili usmjereni zvuk. + +βœ… IstraΕΎite. Koje senzore ima vaΕ‘ telefon? + +Svi senzori imaju jednu zajedničku stvar - pretvaraju ono Ε‘to opaΕΎaju u električni signal koji IoT ureΔ‘aj moΕΎe interpretirati. Način na koji se taj električni signal interpretira ovisi o senzoru, kao i o komunikacijskom protokolu koji se koristi za komunikaciju s IoT ureΔ‘ajem. + +## KoriΕ‘tenje senzora + +Slijedite odgovarajuΔ‡i vodič kako biste dodali senzor svom IoT ureΔ‘aju: + +* [Arduino - Wio Terminal](wio-terminal-sensor.md) +* [Jednoplani računalo - Raspberry Pi](pi-sensor.md) +* [Jednoplani računalo - Virtualni ureΔ‘aj](virtual-device-sensor.md) + +## Vrste senzora + +Senzori mogu biti analogni ili digitalni. + +### Analogni senzori + +Neki od najosnovnijih senzora su analogni senzori. Ovi senzori primaju napon od IoT ureΔ‘aja, komponente senzora prilagoΔ‘avaju taj napon, a napon koji se vraΔ‡a iz senzora mjeri se kako bi se dobila vrijednost senzora. + +> πŸŽ“ Napon je mjera koliko "guranja" postoji za premjeΕ‘tanje električne energije s jednog mjesta na drugo, poput premjeΕ‘tanja s pozitivnog terminala baterije na negativni terminal. Na primjer, standardna AA baterija ima 1,5V (V je simbol za volt) i moΕΎe gurati električnu energiju silom od 1,5V s pozitivnog terminala na negativni terminal. Različiti električni hardver zahtijeva različite napone za rad, na primjer, LED moΕΎe svijetliti s izmeΔ‘u 2-3V, ali ΕΎarulja od 100W trebala bi 240V. ViΕ‘e o naponu moΕΎete pročitati na [stranici o naponu na Wikipediji](https://wikipedia.org/wiki/Voltage). + +Jedan primjer je potenciometar. To je kotačiΔ‡ koji moΕΎete rotirati izmeΔ‘u dvije pozicije, a senzor mjeri rotaciju. + +![Potenciometar postavljen na srednju točku, primajuΔ‡i 5 volti i vraΔ‡ajuΔ‡i 3,8 volti](../../../../../translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hr.png) + +IoT ureΔ‘aj Ε‘alje električni signal potenciometru na odreΔ‘enom naponu, poput 5 volti (5V). Kako se potenciometar prilagoΔ‘ava, mijenja napon koji izlazi s druge strane. Zamislite da imate potenciometar označen kao kotačiΔ‡ koji ide od 0 do [11](https://wikipedia.org/wiki/Up_to_eleven), poput gumba za glasnoΔ‡u na pojačalu. Kada je potenciometar u potpuno isključenom poloΕΎaju (0), izlazi 0V (0 volti). Kada je u potpuno uključenom poloΕΎaju (11), izlazi 5V (5 volti). + +> πŸŽ“ Ovo je pojednostavljenje, a viΕ‘e moΕΎete pročitati o potenciometrima i promjenjivim otpornicima na [stranici o potenciometrima na Wikipediji](https://wikipedia.org/wiki/Potentiometer). + +Napon koji izlazi iz senzora zatim čita IoT ureΔ‘aj, a ureΔ‘aj moΕΎe reagirati na njega. Ovisno o senzoru, ovaj napon moΕΎe biti proizvoljna vrijednost ili moΕΎe odgovarati standardnoj jedinici. Na primjer, analogni senzor temperature baziran na [termistoru](https://wikipedia.org/wiki/Thermistor) mijenja svoj otpor ovisno o temperaturi. Izlazni napon moΕΎe se zatim pretvoriti u temperaturu u Kelvinima, a odgovarajuΔ‡e u Β°C ili Β°F, pomoΔ‡u izračuna u kodu. + +βœ… Ε to mislite da se dogaΔ‘a ako senzor vrati viΕ‘i napon nego Ε‘to je poslan (na primjer, dolazi iz vanjskog izvora napajanja)? ⛔️ NEMOJTE testirati ovo. + +#### Pretvorba analognog u digitalno + +IoT ureΔ‘aji su digitalni - ne mogu raditi s analognim vrijednostima, veΔ‡ samo s 0 i 1. To znači da analogne vrijednosti senzora trebaju biti pretvorene u digitalni signal prije nego Ε‘to se mogu obraditi. Mnogi IoT ureΔ‘aji imaju pretvarače analognog u digitalno (ADC) za pretvaranje analognih ulaza u digitalne reprezentacije njihovih vrijednosti. Senzori takoΔ‘er mogu raditi s ADC-ovima putem konektorske ploče. Na primjer, u Seeed Grove ekosustavu s Raspberry Pi-jem, analogni senzori se povezuju na specifične portove na 'hat-u' koji se postavlja na Pi povezan s GPIO pinovima Pi-ja, a ovaj hat ima ADC za pretvaranje napona u digitalni signal koji se moΕΎe poslati s GPIO pinova Pi-ja. + +Zamislite da imate analogni senzor svjetla povezan s IoT ureΔ‘ajem koji koristi 3,3V i vraΔ‡a vrijednost od 1V. Taj 1V ne znači niΕ‘ta u digitalnom svijetu, pa ga treba pretvoriti. Napon Δ‡e se pretvoriti u analognu vrijednost koristeΔ‡i ljestvicu ovisno o ureΔ‘aju i senzoru. Jedan primjer je Seeed Grove senzor svjetla koji daje vrijednosti od 0 do 1.023. Za ovaj senzor koji radi na 3,3V, izlaz od 1V bio bi vrijednost od 300. IoT ureΔ‘aj ne moΕΎe raditi s 300 kao analognom vrijednoΕ‘Δ‡u, pa bi vrijednost bila pretvorena u `0000000100101100`, binarnu reprezentaciju 300 od strane Grove hat-a. Ovo bi zatim obradio IoT ureΔ‘aj. + +βœ… Ako ne znate binarni sustav, istraΕΎite kako se brojevi predstavljaju pomoΔ‡u 0 i 1. [BBC Bitesize uvod u binarni sustav](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1) je odlično mjesto za početak. + +S programerske strane, sve ovo obično se rjeΕ‘ava pomoΔ‡u biblioteka koje dolaze sa senzorima, tako da se ne morate brinuti o ovoj pretvorbi sami. Za Grove senzor svjetla koristili biste Python biblioteku i pozvali svojstvo `light`, ili koristili Arduino biblioteku i pozvali `analogRead` kako biste dobili vrijednost od 300. + +### Digitalni senzori + +Digitalni senzori, poput analognih senzora, opaΕΎaju svijet oko sebe koristeΔ‡i promjene u električnom naponu. Razlika je u tome Ε‘to oni izlaz daju kao digitalni signal, bilo mjerenjem samo dva stanja ili koriΕ‘tenjem ugraΔ‘enog ADC-a. Digitalni senzori postaju sve čeΕ‘Δ‡i kako bi se izbjegla potreba za koriΕ‘tenjem ADC-a bilo na konektorskoj ploči ili na samom IoT ureΔ‘aju. + +Najjednostavniji digitalni senzor je tipka ili prekidač. To je senzor s dva stanja, uključen ili isključen. + +![Tipka prima 5 volti. Kada nije pritisnuta vraΔ‡a 0 volti, kada je pritisnuta vraΔ‡a 5 volti](../../../../../translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hr.png) + +Pinovi na IoT ureΔ‘ajima poput GPIO pinova mogu izravno mjeriti ovaj signal kao 0 ili 1. Ako je napon poslan isti kao napon vraΔ‡en, očitana vrijednost je 1, inače je očitana vrijednost 0. Nema potrebe za pretvorbom signala, moΕΎe biti samo 1 ili 0. + +> πŸ’ Naponi nikada nisu potpuno točni, posebno jer komponente u senzoru imaju odreΔ‘eni otpor, pa obično postoji tolerancija. Na primjer, GPIO pinovi na Raspberry Pi-ju rade na 3,3V i očitavaju povratni signal iznad 1,8V kao 1, ispod 1,8V kao 0. + +* 3,3V ulazi u tipku. Tipka je isključena pa izlazi 0V, dajuΔ‡i vrijednost 0 +* 3,3V ulazi u tipku. Tipka je uključena pa izlazi 3,3V, dajuΔ‡i vrijednost 1 + +Napredniji digitalni senzori očitavaju analogne vrijednosti, a zatim ih pretvaraju pomoΔ‡u ugraΔ‘enih ADC-a u digitalne signale. Na primjer, digitalni senzor temperature i dalje koristi termoelement na isti način kao analogni senzor, i dalje mjeri promjenu napona uzrokovanu otporom termoelementa na trenutnoj temperaturi. Umjesto da vraΔ‡a analognu vrijednost i oslanja se na ureΔ‘aj ili konektorsku ploču za pretvorbu u digitalni signal, ADC ugraΔ‘en u senzor pretvara vrijednost i Ε‘alje je kao niz 0 i 1 IoT ureΔ‘aju. Ovi 0 i 1 Ε‘alju se na isti način kao digitalni signal za tipku, pri čemu je 1 puni napon, a 0 je 0V. + +![Digitalni senzor temperature pretvara analogno očitanje u binarne podatke s 0 kao 0 volti i 1 kao 5 volti prije slanja IoT ureΔ‘aju](../../../../../translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hr.png) + +Slanje digitalnih podataka omoguΔ‡uje senzorima da postanu sloΕΎeniji i Ε‘alju detaljnije podatke, čak i Ε‘ifrirane podatke za sigurne senzore. Jedan primjer je kamera. To je senzor koji snima sliku i Ε‘alje je kao digitalne podatke koji sadrΕΎe tu sliku, obično u komprimiranom formatu poput JPEG-a, kako bi ih pročitao IoT ureΔ‘aj. MoΕΎe čak i streamati video snimanjem slika i slanjem ili kompletne slike okvir po okvir ili komprimiranog video streama. + +## Ε to su aktuatori? + +Aktuatori su suprotnost senzorima - oni pretvaraju električni signal iz vaΕ‘eg IoT ureΔ‘aja u interakciju s fizičkim svijetom, poput emitiranja svjetla ili zvuka, ili pokretanja motora. + +Neki uobičajeni aktuatori uključuju: + +* LED - emitira svjetlo kada se uključi +* Zvučnik - emitira zvuk na temelju signala koji mu se Ε‘alje, od osnovnog zujalice do audio zvučnika koji moΕΎe reproducirati glazbu +* Stepper motor - pretvara signal u definiranu količinu rotacije, poput okretanja kotačiΔ‡a za 90Β° +* Relej - prekidači koji se mogu uključiti ili isključiti električnim signalom. OmoguΔ‡uju malom naponu iz IoT ureΔ‘aja da uključi veΔ‡e napone. +* Ekrani - sloΕΎeniji aktuatori koji prikazuju informacije na viΕ‘esegmentnom zaslonu. Ekrani variraju od jednostavnih LED prikaza do visokorezolucijskih video monitora. + +βœ… IstraΕΎite. Koje aktuatore ima vaΕ‘ telefon? + +## KoriΕ‘tenje aktuatora + +Slijedite odgovarajuΔ‡i vodič kako biste dodali aktuator svom IoT ureΔ‘aju, kontroliran senzorom, za izradu IoT noΔ‡nog svjetla. Ono Δ‡e prikupljati razine svjetla iz senzora svjetla i koristiti aktuator u obliku LED-a za emitiranje svjetla kada je detektirana razina svjetla preniska. + +![Dijagram toka zadatka koji prikazuje očitavanje i provjeru razina svjetla te kontrolu LED-a](../../../../../translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hr.png) + +* [Arduino - Wio Terminal](wio-terminal-actuator.md) +* [Jednoplani računalo - Raspberry Pi](pi-actuator.md) +* [Jednoplani računalo - Virtualni ureΔ‘aj](virtual-device-actuator.md) + +## Vrste aktuatora + +Kao i senzori, aktuatori mogu biti analogni ili digitalni. + +### Analogni aktuatori + +Analogni aktuatori uzimaju analogni signal i pretvaraju ga u neku vrstu interakcije, gdje se interakcija mijenja ovisno o naponu koji se isporučuje. + +Jedan primjer je svjetlo koje se moΕΎe priguΕ‘iti, poput onih koje moΕΎda imate u svom domu. Količina napona isporučena svjetlu odreΔ‘uje koliko jako svijetli. +![Svjetlo priguΕ‘eno na niskom naponu i svjetlije na viΕ‘em naponu](../../../../../translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hr.png) + +Kao i kod senzora, stvarni IoT ureΔ‘aj radi na digitalnim signalima, a ne analognim. To znači da za slanje analognog signala IoT ureΔ‘aj treba digitalno-analogni pretvarač (DAC), bilo direktno na IoT ureΔ‘aju ili na priključnoj ploči. Ovo Δ‡e pretvoriti 0 i 1 iz IoT ureΔ‘aja u analogni napon koji aktuator moΕΎe koristiti. + +βœ… Ε to mislite da se dogaΔ‘a ako IoT ureΔ‘aj poΕ‘alje viΕ‘i napon nego Ε‘to aktuator moΕΎe podnijeti? +⛔️ NEMOJTE ovo testirati. + +#### Modulacija Ε‘irine impulsa + +Druga opcija za pretvaranje digitalnih signala iz IoT ureΔ‘aja u analogni signal je modulacija Ε‘irine impulsa (PWM). Ovo uključuje slanje puno kratkih digitalnih impulsa koji djeluju kao analogni signal. + +Na primjer, PWM moΕΎete koristiti za kontrolu brzine motora. + +Zamislite da kontrolirate motor s napajanjem od 5V. PoΕ‘aljete kratki impuls svom motoru, prebacujuΔ‡i napon na visoki (5V) na dvije stotinke sekunde (0,02s). U tom vremenu vaΕ‘ motor moΕΎe napraviti jednu desetinu okreta, ili 36Β°. Signal se zatim pauzira na dvije stotinke sekunde (0,02s), Ε‘aljuΔ‡i niski signal (0V). Svaki ciklus uključivanja i isključivanja traje 0,04s. Ciklus se zatim ponavlja. + +![Modulacija Ε‘irine impulsa rotacija motora na 150 RPM](../../../../../translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hr.png) + +To znači da u jednoj sekundi imate 25 impulsa od 5V koji traju 0,02s i rotiraju motor, svaki praΔ‡en pauzom od 0,02s na 0V kada motor ne rotira. Svaki impuls rotira motor za jednu desetinu okreta, Ε‘to znači da motor zavrΕ‘i 2,5 okreta u sekundi. Koristili ste digitalni signal za rotaciju motora na 2,5 okreta u sekundi, ili 150 [okreta u minuti](https://wikipedia.org/wiki/Revolutions_per_minute) (ne-standardna mjera brzine rotacije). + +```output +25 pulses per second x 0.1 rotations per pulse = 2.5 rotations per second +2.5 rotations per second x 60 seconds in a minute = 150rpm +``` + +> πŸŽ“ Kada je PWM signal uključen pola vremena, a isključen pola vremena, to se naziva [radni ciklus od 50%](https://wikipedia.org/wiki/Duty_cycle). Radni ciklusi se mjere kao postotak vremena kada je signal u stanju uključen u odnosu na stanje isključen. + +![Modulacija Ε‘irine impulsa rotacija motora na 75 RPM](../../../../../translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hr.png) + +Brzinu motora moΕΎete promijeniti promjenom veličine impulsa. Na primjer, s istim motorom moΕΎete zadrΕΎati isto vrijeme ciklusa od 0,04s, s impulsom uključenim prepolovljenim na 0,01s, dok se impuls isključen poveΔ‡ava na 0,03s. Imate isti broj impulsa po sekundi (25), ali svaki impuls uključen je upola kraΔ‡i. Impuls upola kraΔ‡i okreΔ‡e motor za jednu dvadesetinu okreta, a pri 25 impulsa u sekundi motor Δ‡e zavrΕ‘iti 1,25 okreta u sekundi ili 75 okreta u minuti. Promjenom brzine impulsa digitalnog signala prepolovili ste brzinu analognog motora. + +```output +25 pulses per second x 0.05 rotations per pulse = 1.25 rotations per second +1.25 rotations per second x 60 seconds in a minute = 75rpm +``` + +βœ… Kako biste odrΕΎali glatku rotaciju motora, posebno pri niskim brzinama? Biste li koristili mali broj dugih impulsa s dugim pauzama ili puno vrlo kratkih impulsa s vrlo kratkim pauzama? + +> πŸ’ Neki senzori takoΔ‘er koriste PWM za pretvaranje analognih signala u digitalne signale. + +> πŸŽ“ ViΕ‘e o modulaciji Ε‘irine impulsa moΕΎete pročitati na [stranici o modulaciji Ε‘irine impulsa na Wikipediji](https://wikipedia.org/wiki/Pulse-width_modulation). + +### Digitalni aktuatori + +Digitalni aktuatori, poput digitalnih senzora, imaju ili dva stanja koja se kontroliraju visokim ili niskim naponom ili imaju ugraΔ‘en DAC koji moΕΎe pretvoriti digitalni signal u analogni. + +Jedan jednostavan digitalni aktuator je LED. Kada ureΔ‘aj poΕ‘alje digitalni signal 1, Ε‘alje se visoki napon koji pali LED. Kada se poΕ‘alje digitalni signal 0, napon pada na 0V i LED se gasi. + +![LED je ugaΕ‘en na 0 volti i upaljen na 5V](../../../../../translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hr.png) + +βœ… Koje druge jednostavne aktuatore s 2 stanja moΕΎete zamisliti? Jedan primjer je solenoid, koji je elektromagnet koji se moΕΎe aktivirati za obavljanje stvari poput pomicanja zasuna vrata za zaključavanje/otključavanje vrata. + +Napredniji digitalni aktuatori, poput ekrana, zahtijevaju da se digitalni podaci Ε‘alju u odreΔ‘enim formatima. Obično dolaze s bibliotekama koje olakΕ‘avaju slanje ispravnih podataka za njihovu kontrolu. + +--- + +## πŸš€ Izazov + +Izazov u posljednje dvije lekcije bio je nabrojati Ε‘to viΕ‘e IoT ureΔ‘aja koje moΕΎete pronaΔ‡i u svom domu, Ε‘koli ili radnom mjestu i odlučiti jesu li izgraΔ‘eni oko mikrokontrolera ili jednopločnih računala, ili čak mjeΕ‘avine oboje. + +Za svaki ureΔ‘aj koji ste nabrojali, koji su senzori i aktuatori povezani s njim? Koja je svrha svakog senzora i aktuatora povezanog s tim ureΔ‘ajima? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/6) + +## Pregled i samostalno učenje + +* Pročitajte o električnoj energiji i krugovima na [ThingLearn](http://thinglearn.jenlooper.com/curriculum/). +* Pročitajte o različitim vrstama temperaturnih senzora na [Seeed Studios vodiču za temperaturne senzore](https://www.seeedstudio.com/blog/2019/10/14/temperature-sensors-for-arduino-projects/) +* Pročitajte o LED diodama na [Wikipedijinoj stranici o LED diodama](https://wikipedia.org/wiki/Light-emitting_diode) + +## Zadatak + +[IstraΕΎite senzore i aktuatore](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/assignment.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/assignment.md new file mode 100644 index 00000000..fcd951fa --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/assignment.md @@ -0,0 +1,31 @@ + +# IstraΕΎivanje senzora i aktuatora + +## Upute + +Ova lekcija obradila je senzore i aktuatore. IstraΕΎite i opiΕ‘ite jedan senzor i jedan aktuator koji se mogu koristiti s IoT razvojnim kompletom, uključujuΔ‡i: + +* Ε to radi +* Elektroniku/hardver koji se koristi unutar ureΔ‘aja +* Je li analogni ili digitalni +* Koje su jedinice i raspon ulaza ili mjerenja + +## Rubrika + +| Kriterij | Primjerno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Opis senzora | Opisan senzor s detaljima za sve 4 navedene točke. | Opisan senzor, ali su navedene samo 2-3 od gore navedenih točaka. | Opisan senzor, ali je navedena samo 1 od gore navedenih točaka. | +| Opis aktuatora | Opisan aktuator s detaljima za sve 4 navedene točke. | Opisan aktuator, ali su navedene samo 2-3 od gore navedenih točaka. | Opisan aktuator, ali je navedena samo 1 od gore navedenih točaka. | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md new file mode 100644 index 00000000..f7256f3d --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md @@ -0,0 +1,130 @@ + +# Izradite noΔ‡no svjetlo - Raspberry Pi + +U ovom dijelu lekcije dodati Δ‡ete LED na svoj Raspberry Pi i koristiti ga za stvaranje noΔ‡nog svjetla. + +## Hardver + +NoΔ‡nom svjetlu sada je potreban aktuator. + +Aktuator je **LED**, [svjetleΔ‡a dioda](https://wikipedia.org/wiki/Light-emitting_diode) koja emitira svjetlost kada kroz nju teče struja. Ovo je digitalni aktuator koji ima dva stanja, uključeno i isključeno. Slanjem vrijednosti 1 LED se uključuje, a vrijednosti 0 ga isključuje. LED je vanjski Grove aktuator i mora biti povezan na Grove Base hat na Raspberry Pi-u. + +Logika noΔ‡nog svjetla u pseudo-kodu je: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### PoveΕΎite LED + +Grove LED dolazi kao modul s izborom LED-ova, omoguΔ‡ujuΔ‡i vam da odaberete boju. + +#### Zadatak - poveΕΎite LED + +PoveΕΎite LED. + +![Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hr.png) + +1. Odaberite svoj omiljeni LED i umetnite nogice u dvije rupe na LED modulu. + + LED-ovi su svjetleΔ‡e diode, a diode su elektronički ureΔ‘aji koji mogu provoditi struju samo u jednom smjeru. To znači da LED mora biti povezan na ispravan način, inače neΔ‡e raditi. + + Jedna od nogica LED-a je pozitivni pin, a druga je negativni pin. LED nije savrΕ‘eno okrugao i malo je spljoΕ‘ten na jednoj strani. Malo spljoΕ‘tena strana je negativni pin. Kada povezujete LED s modulom, pazite da je pin uz zaobljenu stranu povezan s utičnicom označenom **+** na vanjskoj strani modula, a spljoΕ‘tena strana povezana s utičnicom bliΕΎe sredini modula. + +1. LED modul ima okretni gumb koji vam omoguΔ‡uje kontrolu svjetline. Za početak ga potpuno pojačajte okretanjem u smjeru suprotnom od kazaljke na satu koliko god ide pomoΔ‡u malog odvijača s kriΕΎnom glavom. + +1. Umetnite jedan kraj Grove kabela u utičnicu na LED modulu. Kabel Δ‡e uΔ‡i samo u jednom smjeru. + +1. Dok je Raspberry Pi isključen, poveΕΎite drugi kraj Grove kabela s digitalnom utičnicom označenom **D5** na Grove Base hatu pričvrΕ‘Δ‡enom na Pi. Ova utičnica je druga s lijeva, u redu utičnica pored GPIO pinova. + +![Grove LED povezan s utičnicom D5](../../../../../translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hr.png) + +## Programirajte noΔ‡no svjetlo + +NoΔ‡no svjetlo sada se moΕΎe programirati pomoΔ‡u Grove senzora svjetla i Grove LED-a. + +### Zadatak - programirajte noΔ‡no svjetlo + +Programirajte noΔ‡no svjetlo. + +1. Uključite Pi i pričekajte da se pokrene. + +1. Otvorite projekt noΔ‡nog svjetla u VS Code koji ste kreirali u prethodnom dijelu zadatka, bilo da ga pokreΔ‡ete izravno na Pi-u ili se povezujete pomoΔ‡u Remote SSH ekstenzije. + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` kako biste uvezli potrebnu biblioteku. Ovo treba dodati na vrh, ispod ostalih `import` linija. + + ```python + from grove.grove_led import GroveLed + ``` + + Izjava `from grove.grove_led import GroveLed` uvozi `GroveLed` iz Grove Python biblioteka. Ova biblioteka sadrΕΎi kod za interakciju s Grove LED-om. + +1. Dodajte sljedeΔ‡i kod nakon deklaracije `light_sensor` kako biste kreirali instancu klase koja upravlja LED-om: + + ```python + led = GroveLed(5) + ``` + + Linija `led = GroveLed(5)` kreira instancu klase `GroveLed` povezujuΔ‡i se s pinom **D5** - digitalnim Grove pinom na koji je LED povezan. + + > πŸ’ Sve utičnice imaju jedinstvene brojeve pinova. Pinovi 0, 2, 4 i 6 su analogni pinovi, a pinovi 5, 16, 18, 22, 24 i 26 su digitalni pinovi. + +1. Dodajte provjeru unutar `while` petlje, prije `time.sleep`, kako biste provjerili razinu svjetla i uključili ili isključili LED: + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + Ovaj kod provjerava vrijednost `light`. Ako je manja od 300, poziva metodu `on` klase `GroveLed` koja Ε‘alje digitalnu vrijednost 1 LED-u, uključujuΔ‡i ga. Ako je vrijednost svjetla veΔ‡a ili jednaka 300, poziva metodu `off`, Ε‘aljuΔ‡i digitalnu vrijednost 0 LED-u, isključujuΔ‡i ga. + + > πŸ’ Ovaj kod treba biti uvučen na istu razinu kao linija `print('Light level:', light)` kako bi bio unutar while petlje! + + > πŸ’ Kada Ε‘aljete digitalne vrijednosti aktuatorima, vrijednost 0 je 0V, a vrijednost 1 je maksimalni napon za ureΔ‘aj. Za Raspberry Pi s Grove senzorima i aktuatorima, napon vrijednosti 1 je 3.3V. + +1. Iz terminala u VS Code-u pokrenite sljedeΔ‡e kako biste pokrenuli svoju Python aplikaciju: + + ```sh + python3 app.py + ``` + + Vrijednosti svjetla Δ‡e se ispisivati na konzolu. + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Light level: 634 + Light level: 634 + Light level: 634 + Light level: 230 + Light level: 104 + Light level: 290 + ``` + +1. Pokrijte i otkrijte senzor svjetla. Primijetite kako Δ‡e se LED upaliti ako je razina svjetla 300 ili manje, i ugasiti kada je razina svjetla veΔ‡a od 300. + + > πŸ’ Ako se LED ne upali, provjerite je li povezan na ispravan način i je li okretni gumb postavljen na maksimalnu svjetlinu. + +![LED povezan s Pi-jem koji se pali i gasi kako se razina svjetla mijenja](../../../../../images/pi-running-assignment-1-1.gif) + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-actuator/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/pi). + +πŸ˜€ VaΕ‘ program za noΔ‡no svjetlo je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakva pogreΕ‘na tumačenja ili nesporazume koji mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md new file mode 100644 index 00000000..4eb6fe12 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md @@ -0,0 +1,110 @@ + +# Izradite noΔ‡no svjetlo - Raspberry Pi + +U ovom dijelu lekcije dodati Δ‡ete senzor svjetla na svoj Raspberry Pi. + +## Hardver + +Senzor za ovu lekciju je **senzor svjetla** koji koristi [fotodiodu](https://wikipedia.org/wiki/Photodiode) za pretvaranje svjetla u električni signal. Ovo je analogni senzor koji Ε‘alje cjelobrojnu vrijednost od 0 do 1.000, označavajuΔ‡i relativnu količinu svjetla koja ne odgovara nijednoj standardnoj jedinici mjerenja poput [luks](https://wikipedia.org/wiki/Lux). + +Senzor svjetla je vanjski Grove senzor i mora biti povezan na Grove Base hat na Raspberry Pi-ju. + +### PoveΕΎite senzor svjetla + +Grove senzor svjetla koji se koristi za detekciju razine svjetla mora biti povezan na Raspberry Pi. + +#### Zadatak - poveΕΎite senzor svjetla + +PoveΕΎite senzor svjetla. + +![Grove senzor svjetla](../../../../../translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na modulu senzora svjetla. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Raspberry Pi isključen, poveΕΎite drugi kraj Grove kabela s analognom utičnicom označenom **A0** na Grove Base hatu pričvrΕ‘Δ‡enom na Pi. Ova utičnica je druga s desna, u redu utičnica pored GPIO pinova. + +![Grove senzor svjetla povezan na utičnicu A0](../../../../../translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hr.png) + +## Programirajte senzor svjetla + +UreΔ‘aj sada moΕΎe biti programiran pomoΔ‡u Grove senzora svjetla. + +### Zadatak - programirajte senzor svjetla + +Programirajte ureΔ‘aj. + +1. Uključite Pi i pričekajte da se pokrene. + +1. Otvorite projekt noΔ‡nog svjetla u VS Code koji ste kreirali u prethodnom dijelu ovog zadatka, bilo da radi direktno na Pi-ju ili je povezan pomoΔ‡u Remote SSH ekstenzije. + +1. Otvorite datoteku `app.py` i uklonite sav kod iz nje. + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` za uvoz potrebnih biblioteka: + + ```python + import time + from grove.grove_light_sensor_v1_2 import GroveLightSensor + ``` + + Izjava `import time` uvozi modul `time` koji Δ‡e se koristiti kasnije u ovom zadatku. + + Izjava `from grove.grove_light_sensor_v1_2 import GroveLightSensor` uvozi `GroveLightSensor` iz Grove Python biblioteka. Ova biblioteka sadrΕΎi kod za interakciju s Grove senzorom svjetla i instalirana je globalno tijekom postavljanja Pi-ja. + +1. Dodajte sljedeΔ‡i kod nakon prethodnog koda za kreiranje instance klase koja upravlja senzorom svjetla: + + ```python + light_sensor = GroveLightSensor(0) + ``` + + Linija `light_sensor = GroveLightSensor(0)` kreira instancu klase `GroveLightSensor` povezujuΔ‡i se na pin **A0** - analogni Grove pin na koji je senzor svjetla povezan. + +1. Dodajte beskonačnu petlju nakon prethodnog koda za očitavanje vrijednosti senzora svjetla i ispisivanje na konzolu: + + ```python + while True: + light = light_sensor.light + print('Light level:', light) + ``` + + Ovo Δ‡e očitati trenutnu razinu svjetla na skali od 0-1.023 koristeΔ‡i svojstvo `light` klase `GroveLightSensor`. Ovo svojstvo očitava analognu vrijednost s pina. Ta vrijednost se zatim ispisuje na konzolu. + +1. Dodajte kratku pauzu od jedne sekunde na kraju `loop` jer razine svjetla ne trebaju biti provjeravane kontinuirano. Pauza smanjuje potroΕ‘nju energije ureΔ‘aja. + + ```python + time.sleep(1) + ``` + +1. Iz terminala u VS Code-u pokrenite sljedeΔ‡e za pokretanje vaΕ‘e Python aplikacije: + + ```sh + python3 app.py + ``` + + Vrijednosti svjetla Δ‡e se ispisivati na konzolu. Pokrijte i otkrijte senzor svjetla, i vrijednosti Δ‡e se mijenjati: + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Light level: 634 + Light level: 634 + Light level: 634 + Light level: 230 + Light level: 104 + Light level: 290 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-sensor/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/pi). + +πŸ˜€ Dodavanje senzora vaΕ‘em programu za noΔ‡no svjetlo je bilo uspjeΕ‘no! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije proizaΕ‘le iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md new file mode 100644 index 00000000..0a97937b --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md @@ -0,0 +1,124 @@ + +# Izradite noΔ‡no svjetlo - Virtualni IoT hardver + +U ovom dijelu lekcije, dodati Δ‡ete LED na svoj virtualni IoT ureΔ‘aj i koristiti ga za stvaranje noΔ‡nog svjetla. + +## Virtualni hardver + +NoΔ‡no svjetlo zahtijeva jedan aktuator, kreiran u CounterFit aplikaciji. + +Aktuator je **LED**. Na fizičkom IoT ureΔ‘aju, to bi bila [svjetleΔ‡a dioda](https://wikipedia.org/wiki/Light-emitting_diode) koja emitira svjetlo kada kroz nju teče struja. Ovo je digitalni aktuator koji ima 2 stanja, uključeno i isključeno. Slanje vrijednosti 1 uključuje LED, a vrijednost 0 ga isključuje. + +Logika noΔ‡nog svjetla u pseudo-kodu je: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### Dodavanje aktuatora u CounterFit + +Za koriΕ‘tenje virtualnog LED-a, potrebno ga je dodati u CounterFit aplikaciju. + +#### Zadatak - dodajte aktuator u CounterFit + +Dodajte LED u CounterFit aplikaciju. + +1. Provjerite je li CounterFit web aplikacija pokrenuta iz prethodnog dijela zadatka. Ako nije, pokrenite je i ponovno dodajte senzor svjetla. + +1. Kreirajte LED: + + 1. U okviru *Create actuator* u *Actuator* panelu, otvorite padajuΔ‡i izbornik *Actuator type* i odaberite *LED*. + + 1. Postavite *Pin* na *5*. + + 1. Kliknite na gumb **Add** za kreiranje LED-a na pinu 5. + + ![Postavke LED-a](../../../../../translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hr.png) + + LED Δ‡e biti kreiran i pojavit Δ‡e se na popisu aktuatora. + + ![Kreirani LED](../../../../../translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hr.png) + + Nakon Ε‘to je LED kreiran, moΕΎete promijeniti boju koristeΔ‡i *Color* alat za odabir boje. Kliknite na gumb **Set** za promjenu boje nakon Ε‘to je odabrana. + +### Programiranje noΔ‡nog svjetla + +NoΔ‡no svjetlo sada se moΕΎe programirati koristeΔ‡i CounterFit senzor svjetla i LED. + +#### Zadatak - programirajte noΔ‡no svjetlo + +Programirajte noΔ‡no svjetlo. + +1. Otvorite projekt noΔ‡nog svjetla u VS Code koji ste kreirali u prethodnom dijelu zadatka. Ako je potrebno, zatvorite i ponovno kreirajte terminal kako biste osigurali da radi unutar virtualnog okruΕΎenja. + +1. Otvorite datoteku `app.py`. + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` za uvoz potrebne biblioteke. Ovo treba dodati na vrh, ispod ostalih `import` linija. + + ```python + from counterfit_shims_grove.grove_led import GroveLed + ``` + + Izjava `from counterfit_shims_grove.grove_led import GroveLed` uvozi `GroveLed` iz CounterFit Grove shim Python biblioteka. Ova biblioteka sadrΕΎi kod za interakciju s LED-om kreiranim u CounterFit aplikaciji. + +1. Dodajte sljedeΔ‡i kod nakon deklaracije `light_sensor` za kreiranje instance klase koja upravlja LED-om: + + ```python + led = GroveLed(5) + ``` + + Linija `led = GroveLed(5)` kreira instancu klase `GroveLed` povezujuΔ‡i se na pin **5** - CounterFit Grove pin na koji je LED povezan. + +1. Dodajte provjeru unutar `while` petlje, prije `time.sleep`, za provjeru razine svjetla i uključivanje ili isključivanje LED-a: + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + Ovaj kod provjerava vrijednost `light`. Ako je manja od 300, poziva metodu `on` klase `GroveLed` koja Ε‘alje digitalnu vrijednost 1 LED-u, uključujuΔ‡i ga. Ako je vrijednost svjetla veΔ‡a ili jednaka 300, poziva metodu `off`, Ε‘aljuΔ‡i digitalnu vrijednost 0 LED-u, isključujuΔ‡i ga. + + > πŸ’ Ovaj kod treba biti uvučen na istu razinu kao linija `print('Light level:', light)` kako bi bio unutar `while` petlje! + +1. Iz terminala u VS Code-u, pokrenite sljedeΔ‡e za pokretanje vaΕ‘e Python aplikacije: + + ```sh + python3 app.py + ``` + + Vrijednosti svjetla Δ‡e se ispisivati na konzolu. + + ```output + (.venv) ➜ GroveTest python3 app.py + Light level: 143 + Light level: 244 + Light level: 246 + Light level: 253 + ``` + +1. Promijenite *Value* ili postavke *Random* kako biste varirali razinu svjetla iznad i ispod 300. LED Δ‡e se uključivati i isključivati. + +![LED u CounterFit aplikaciji se uključuje i isključuje kako se razina svjetla mijenja](../../../../../images/virtual-device-running-assignment-1-1.gif) + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-actuator/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/virtual-device). + +πŸ˜€ VaΕ‘ program za noΔ‡no svjetlo je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md new file mode 100644 index 00000000..a6a2b75b --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md @@ -0,0 +1,124 @@ + +# Izradite noΔ‡no svjetlo - Virtualni IoT hardver + +U ovom dijelu lekcije dodat Δ‡ete senzor svjetla svom virtualnom IoT ureΔ‘aju. + +## Virtualni hardver + +NoΔ‡nom svjetlu potreban je jedan senzor, kreiran u aplikaciji CounterFit. + +Taj senzor je **senzor svjetla**. Na fizičkom IoT ureΔ‘aju to bi bio [fotodioda](https://wikipedia.org/wiki/Photodiode) koja pretvara svjetlost u električni signal. Senzori svjetla su analogni senzori koji Ε‘alju cjelobrojnu vrijednost koja označava relativnu količinu svjetla, ali ne odgovara nijednoj standardnoj jedinici mjere poput [luks](https://wikipedia.org/wiki/Lux). + +### Dodavanje senzora u CounterFit + +Za koriΕ‘tenje virtualnog senzora svjetla, potrebno ga je dodati u aplikaciju CounterFit. + +#### Zadatak - dodavanje senzora u CounterFit + +Dodajte senzor svjetla u aplikaciju CounterFit. + +1. Provjerite je li CounterFit web aplikacija pokrenuta iz prethodnog dijela zadatka. Ako nije, pokrenite je. + +1. Kreirajte senzor svjetla: + + 1. U okviru *Create sensor* u odjeljku *Sensors*, otvorite padajuΔ‡i izbornik *Sensor type* i odaberite *Light*. + + 1. Ostavite *Units* postavljeno na *NoUnits*. + + 1. Provjerite je li *Pin* postavljen na *0*. + + 1. Kliknite na gumb **Add** kako biste kreirali senzor svjetla na pinu 0. + + ![Postavke senzora svjetla](../../../../../translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hr.png) + + Senzor svjetla Δ‡e biti kreiran i pojavit Δ‡e se na popisu senzora. + + ![Kreirani senzor svjetla](../../../../../translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hr.png) + +## Programiranje senzora svjetla + +UreΔ‘aj sada moΕΎe biti programiran za koriΕ‘tenje ugraΔ‘enog senzora svjetla. + +### Zadatak - programiranje senzora svjetla + +Programirajte ureΔ‘aj. + +1. Otvorite projekt noΔ‡nog svjetla u VS Code koji ste kreirali u prethodnom dijelu zadatka. Ako je potrebno, zatvorite i ponovno otvorite terminal kako biste osigurali da radi s virtualnim okruΕΎenjem. + +1. Otvorite datoteku `app.py`. + +1. Dodajte sljedeΔ‡i kod na vrh datoteke `app.py` uz ostale `import` naredbe kako biste uvezli potrebne biblioteke: + + ```python + import time + from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor + ``` + + Naredba `import time` uvozi Python modul `time` koji Δ‡e se koristiti kasnije u ovom zadatku. + + Naredba `from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor` uvozi `GroveLightSensor` iz CounterFit Grove shim Python biblioteka. Ova biblioteka sadrΕΎi kod za interakciju sa senzorom svjetla kreiranim u aplikaciji CounterFit. + +1. Dodajte sljedeΔ‡i kod na dno datoteke kako biste kreirali instance klasa koje upravljaju senzorom svjetla: + + ```python + light_sensor = GroveLightSensor(0) + ``` + + Linija `light_sensor = GroveLightSensor(0)` kreira instancu klase `GroveLightSensor` povezanu s pinom **0** - CounterFit Grove pin na koji je povezan senzor svjetla. + +1. Dodajte beskonačnu petlju nakon gore navedenog koda kako biste očitavali vrijednost senzora svjetla i ispisivali je u konzolu: + + ```python + while True: + light = light_sensor.light + print('Light level:', light) + ``` + + Ovo Δ‡e očitati trenutnu razinu svjetla koristeΔ‡i svojstvo `light` klase `GroveLightSensor`. Ovo svojstvo očitava analognu vrijednost s pina. Ta vrijednost se zatim ispisuje u konzolu. + +1. Dodajte kratku pauzu od jedne sekunde na kraju `while` petlje jer nije potrebno kontinuirano provjeravati razine svjetla. Pauza smanjuje potroΕ‘nju energije ureΔ‘aja. + + ```python + time.sleep(1) + ``` + +1. Iz terminala u VS Code-u pokrenite sljedeΔ‡e kako biste pokrenuli svoju Python aplikaciju: + + ```sh + python3 app.py + ``` + + Vrijednosti svjetla Δ‡e se ispisivati u konzolu. Početna vrijednost Δ‡e biti 0. + +1. U aplikaciji CounterFit promijenite vrijednost senzora svjetla koju Δ‡e aplikacija očitati. To moΕΎete učiniti na jedan od dva načina: + + * Unesite broj u okvir *Value* za senzor svjetla, a zatim kliknite na gumb **Set**. Broj koji unesete bit Δ‡e vrijednost koju senzor vraΔ‡a. + + * Označite kuΔ‡icu *Random* i unesite vrijednosti *Min* i *Max*, a zatim kliknite na gumb **Set**. Svaki put kada senzor očita vrijednost, očitat Δ‡e nasumičan broj izmeΔ‘u *Min* i *Max*. + + Vrijednosti koje postavite ispisivat Δ‡e se u konzolu. Promijenite *Value* ili postavke *Random* kako biste promijenili vrijednost. + + ```output + (.venv) ➜ GroveTest python3 app.py + Light level: 143 + Light level: 244 + Light level: 246 + Light level: 253 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-sensor/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/virtual-device). + +πŸ˜€ VaΕ‘ program za noΔ‡no svjetlo je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md new file mode 100644 index 00000000..427f4a54 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md @@ -0,0 +1,124 @@ + +# Napravite noΔ‡no svjetlo - Wio Terminal + +U ovom dijelu lekcije, dodat Δ‡ete LED na svoj Wio Terminal i koristiti ga za izradu noΔ‡nog svjetla. + +## Hardver + +NoΔ‡nom svjetlu sada je potreban aktuator. + +Aktuator je **LED**, [svjetleΔ‡a dioda](https://wikipedia.org/wiki/Light-emitting_diode) koja emitira svjetlost kada kroz nju prolazi struja. Ovo je digitalni aktuator koji ima dva stanja: uključeno i isključeno. Slanje vrijednosti 1 uključuje LED, a vrijednost 0 ga isključuje. Ovo je vanjski Grove aktuator i treba ga spojiti na Wio Terminal. + +Logika noΔ‡nog svjetla u pseudo-kodu je: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### Spojite LED + +Grove LED dolazi kao modul s izborom LED-ova, omoguΔ‡ujuΔ‡i vam da odaberete boju. + +#### Zadatak - spojite LED + +Spojite LED. + +![Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hr.png) + +1. Odaberite svoj omiljeni LED i umetnite njegove noΕΎice u dvije rupe na LED modulu. + + LED-ovi su svjetleΔ‡e diode, a diode su elektronički ureΔ‘aji koji mogu provoditi struju samo u jednom smjeru. To znači da LED mora biti pravilno spojen, inače neΔ‡e raditi. + + Jedna od noΕΎica LED-a je pozitivni pin, a druga je negativni pin. LED nije savrΕ‘eno okrugao i malo je spljoΕ‘ten na jednoj strani. Ta spljoΕ‘tena strana je negativni pin. Kada spajate LED na modul, provjerite je li pin na zaobljenoj strani spojen na utičnicu označenu **+** na vanjskoj strani modula, a spljoΕ‘tena strana na utičnicu bliΕΎe sredini modula. + +1. LED modul ima okretni gumb koji vam omoguΔ‡uje kontrolu svjetline. Za početak ga okrenite do kraja u smjeru suprotnom od kazaljke na satu pomoΔ‡u malog kriΕΎnog odvijača. + +1. Umetnite jedan kraj Grove kabela u utičnicu na LED modulu. Kabel Δ‡e uΔ‡i samo u jednom smjeru. + +1. Dok je Wio Terminal isključen iz računala ili drugog izvora napajanja, spojite drugi kraj Grove kabela na desnu Grove utičnicu na Wio Terminalu gledajuΔ‡i prema ekranu. To je utičnica najudaljenija od gumba za napajanje. + + > πŸ’ Desna Grove utičnica moΕΎe se koristiti s analognim ili digitalnim senzorima i aktuatorima. Lijeva utičnica je samo za I2C i digitalne senzore i aktuatore. O tome Δ‡e biti riječi u kasnijoj lekciji. + +![Grove LED spojen na desnu utičnicu](../../../../../translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hr.png) + +## Programirajte noΔ‡no svjetlo + +NoΔ‡no svjetlo sada se moΕΎe programirati koristeΔ‡i ugraΔ‘eni senzor svjetla i Grove LED. + +### Zadatak - programirajte noΔ‡no svjetlo + +Programirajte noΔ‡no svjetlo. + +1. Otvorite projekt noΔ‡nog svjetla u VS Code koji ste kreirali u prethodnom dijelu ovog zadatka. + +1. Dodajte sljedeΔ‡i redak na dno funkcije `setup`: + + ```cpp + pinMode(D0, OUTPUT); + ``` + + Ovaj redak konfigurira pin koji se koristi za komunikaciju s LED-om putem Grove porta. + + Pin `D0` je digitalni pin za desnu Grove utičnicu. Ovaj pin je postavljen na `OUTPUT`, Ε‘to znači da je povezan s aktuatorom i podaci Δ‡e se slati na pin. + +1. Dodajte sljedeΔ‡i kod neposredno prije `delay` u funkciji `loop`: + + ```cpp + if (light < 300) + { + digitalWrite(D0, HIGH); + } + else + { + digitalWrite(D0, LOW); + } + ``` + + Ovaj kod provjerava vrijednost `light`. Ako je manja od 300, Ε‘alje vrijednost `HIGH` na digitalni pin `D0`. Ova vrijednost `HIGH` je 1, Ε‘to uključuje LED. Ako je svjetlost veΔ‡a ili jednaka 300, Ε‘alje se vrijednost `LOW` od 0, Ε‘to isključuje LED. + + > πŸ’ Kada Ε‘aljete digitalne vrijednosti aktuatorima, vrijednost LOW je 0V, a HIGH je maksimalni napon za ureΔ‘aj. Za Wio Terminal, HIGH napon je 3.3V. + +1. Ponovno spojite Wio Terminal na svoje računalo i prenesite novi kod kao Ε‘to ste to učinili ranije. + +1. Spojite Serial Monitor. Vrijednosti svjetla Δ‡e se ispisivati na terminal. + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Light value: 4 + Light value: 5 + Light value: 4 + Light value: 158 + Light value: 343 + Light value: 348 + Light value: 344 + ``` + +1. Pokrijte i otkrijte senzor svjetla. Primijetit Δ‡ete kako se LED pali ako je razina svjetla 300 ili manja, i gasi kada je razina svjetla veΔ‡a od 300. + +![LED spojen na WIO koji se pali i gasi ovisno o razini svjetla](../../../../../images/wio-running-assignment-1-1.gif) + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-actuator/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/wio-terminal). + +πŸ˜€ VaΕ‘ program za noΔ‡no svjetlo je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md new file mode 100644 index 00000000..c7a94813 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md @@ -0,0 +1,87 @@ + +# Dodavanje senzora - Wio Terminal + +U ovom dijelu lekcije koristit Δ‡ete senzor svjetla na svom Wio Terminalu. + +## Hardver + +Senzor za ovu lekciju je **senzor svjetla** koji koristi [fotodiodu](https://wikipedia.org/wiki/Photodiode) za pretvaranje svjetla u električni signal. Ovo je analogni senzor koji Ε‘alje cijeli broj od 0 do 1.023, Ε‘to označava relativnu količinu svjetla koja se ne odnosi na standardnu mjeru poput [luxa](https://wikipedia.org/wiki/Lux). + +Senzor svjetla ugraΔ‘en je u Wio Terminal i vidljiv je kroz prozirni plastični prozor na straΕΎnjoj strani. + +![Senzor svjetla na straΕΎnjoj strani Wio Terminala](../../../../../translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hr.png) + +## Programiranje senzora svjetla + +UreΔ‘aj sada moΕΎe biti programiran za koriΕ‘tenje ugraΔ‘enog senzora svjetla. + +### Zadatak + +Programirajte ureΔ‘aj. + +1. Otvorite projekt noΔ‡nog svjetla u VS Codeu koji ste kreirali u prethodnom dijelu ovog zadatka. + +1. Dodajte sljedeΔ‡i redak na dno funkcije `setup`: + + ```cpp + pinMode(WIO_LIGHT, INPUT); + ``` + + Ovaj redak konfigurira pinove koji se koriste za komunikaciju s hardverom senzora. + + Pin `WIO_LIGHT` je broj GPIO pina povezanog s ugraΔ‘enim senzorom svjetla. Ovaj pin je postavljen na `INPUT`, Ε‘to znači da je povezan sa senzorom i podaci Δ‡e se čitati s tog pina. + +1. ObriΕ‘ite sadrΕΎaj funkcije `loop`. + +1. Dodajte sljedeΔ‡i kod u sada praznu funkciju `loop`. + + ```cpp + int light = analogRead(WIO_LIGHT); + Serial.print("Light value: "); + Serial.println(light); + ``` + + Ovaj kod čita analognu vrijednost s pina `WIO_LIGHT`. Ova vrijednost je u rasponu od 0 do 1.023 i dolazi s ugraΔ‘enog senzora svjetla. Vrijednost se zatim Ε‘alje na serijski port kako biste je mogli pročitati u Serial Monitoru dok ovaj kod radi. `Serial.print` ispisuje tekst bez novog retka na kraju, tako da Δ‡e svaki redak započeti s `Light value:` i zavrΕ‘iti stvarnom vrijednoΕ‘Δ‡u svjetla. + +1. Dodajte kratku pauzu od jedne sekunde (1.000 ms) na kraj funkcije `loop`, jer razine svjetla nije potrebno provjeravati kontinuirano. Pauza smanjuje potroΕ‘nju energije ureΔ‘aja. + + ```cpp + delay(1000); + ``` + +1. Ponovno poveΕΎite Wio Terminal s računalom i učitajte novi kod kao Ε‘to ste to učinili ranije. + +1. PoveΕΎite se s Serial Monitorom. Vrijednosti svjetla Δ‡e se ispisivati na terminalu. Pokrijte i otkrijte senzor svjetla na straΕΎnjoj strani Wio Terminala i vrijednosti Δ‡e se mijenjati. + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Light value: 4 + Light value: 5 + Light value: 4 + Light value: 158 + Light value: 343 + Light value: 348 + Light value: 344 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-sensor/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/wio-terminal). + +πŸ˜€ Dodavanje senzora vaΕ‘em programu za noΔ‡no svjetlo bilo je uspjeΕ‘no! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/README.md b/translations/hr/1-getting-started/lessons/4-connect-internet/README.md new file mode 100644 index 00000000..ce2182f7 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/README.md @@ -0,0 +1,466 @@ + +# PoveΕΎite svoj ureΔ‘aj s internetom + +![Pregled lekcije u obliku sketchnotea](../../../../../translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio serije [Hello IoT](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Lekcija je podijeljena u dva videa - sat vremena predavanja i sat vremena dodatnih pitanja i dubljeg objaΕ‘njenja dijelova lekcije. + +[![Lekcija 4: PoveΕΎite svoj ureΔ‘aj s internetom](https://img.youtube.com/vi/O4dd172mZhs/0.jpg)](https://youtu.be/O4dd172mZhs) + +[![Lekcija 4: PoveΕΎite svoj ureΔ‘aj s internetom - Dodatna pitanja](https://img.youtube.com/vi/j-cVCzRDE2Q/0.jpg)](https://youtu.be/j-cVCzRDE2Q) + +> πŸŽ₯ Kliknite na slike iznad za gledanje videa + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/7) + +## Uvod + +**I** u IoT označava **Internet** - povezivanje s oblakom i usluge koje omoguΔ‡uju mnoge značajke IoT ureΔ‘aja, od prikupljanja mjerenja sa senzora povezanih s ureΔ‘ajem do slanja poruka za upravljanje aktuatorima. IoT ureΔ‘aji obično se povezuju s jednom uslugom u oblaku koristeΔ‡i standardni komunikacijski protokol, a ta usluga je povezana s ostatkom vaΕ‘e IoT aplikacije, od AI usluga za donoΕ‘enje pametnih odluka na temelju podataka do web aplikacija za upravljanje ili izvjeΕ‘tavanje. + +> πŸŽ“ Podaci prikupljeni sa senzora i poslani u oblak nazivaju se telemetrija. + +IoT ureΔ‘aji mogu primati poruke iz oblaka. Često te poruke sadrΕΎe naredbe - upute za izvrΕ‘avanje neke radnje, bilo interno (kao Ε‘to je ponovno pokretanje ili aΕΎuriranje firmwarea) ili pomoΔ‡u aktuatora (kao Ε‘to je uključivanje svjetla). + +Ova lekcija uvodi neke od komunikacijskih protokola koje IoT ureΔ‘aji mogu koristiti za povezivanje s oblakom, kao i vrste podataka koje mogu slati ili primati. TakoΔ‘er Δ‡ete praktično raditi s njima, dodajuΔ‡i internetsku kontrolu svom noΔ‡nom svjetlu, premjeΕ‘tajuΔ‡i logiku upravljanja LED-om na 'server' kod koji se lokalno izvrΕ‘ava. + +U ovoj lekciji obradit Δ‡emo: + +* [Komunikacijski protokoli](../../../../../1-getting-started/lessons/4-connect-internet) +* [Message Queueing Telemetry Transport (MQTT)](../../../../../1-getting-started/lessons/4-connect-internet) +* [Telemetrija](../../../../../1-getting-started/lessons/4-connect-internet) +* [Naredbe](../../../../../1-getting-started/lessons/4-connect-internet) + +## Komunikacijski protokoli + +Postoji nekoliko popularnih komunikacijskih protokola koje IoT ureΔ‘aji koriste za komunikaciju s internetom. Najpopularniji su oni koji se temelje na objavljivanju/pretplati putem posrednika (broker). IoT ureΔ‘aji povezuju se s posrednikom, objavljuju telemetriju i pretplaΔ‡uju se na naredbe. Usluge u oblaku takoΔ‘er se povezuju s posrednikom, pretplaΔ‡uju se na sve telemetrijske poruke i objavljuju naredbe ili za specifične ureΔ‘aje ili za grupe ureΔ‘aja. + +![IoT ureΔ‘aji povezuju se s posrednikom, objavljuju telemetriju i pretplaΔ‡uju se na naredbe. Usluge u oblaku povezuju se s posrednikom, pretplaΔ‡uju se na sve telemetrijske poruke i Ε‘alju naredbe specifičnim ureΔ‘ajima.](../../../../../translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hr.png) + +MQTT je najpopularniji komunikacijski protokol za IoT ureΔ‘aje i obraΔ‘en je u ovoj lekciji. Ostali protokoli uključuju AMQP i HTTP/HTTPS. + +## Message Queueing Telemetry Transport (MQTT) + +[MQTT](http://mqtt.org) je lagani, otvoreni standardni protokol za razmjenu poruka koji omoguΔ‡uje slanje poruka izmeΔ‘u ureΔ‘aja. Dizajniran je 1999. za praΔ‡enje naftovoda, a 15 godina kasnije IBM ga je objavio kao otvoreni standard. + +MQTT ima jednog posrednika i viΕ‘e klijenata. Svi klijenti povezuju se s posrednikom, a posrednik usmjerava poruke relevantnim klijentima. Poruke se usmjeravaju pomoΔ‡u imenovanih tema, umjesto da se Ε‘alju izravno pojedinom klijentu. Klijent moΕΎe objaviti poruku na temu, a svi klijenti pretplaΔ‡eni na tu temu primit Δ‡e poruku. + +![IoT ureΔ‘aj objavljuje telemetriju na temu /telemetry, a usluga u oblaku pretplaΔ‡ena je na tu temu](../../../../../translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hr.png) + +βœ… IstraΕΎite. Ako imate mnogo IoT ureΔ‘aja, kako moΕΎete osigurati da vaΕ‘ MQTT posrednik moΕΎe obraditi sve poruke? + +### PoveΕΎite svoj IoT ureΔ‘aj s MQTT-om + +Prvi korak u dodavanju internetske kontrole vaΕ‘em noΔ‡nom svjetlu je povezivanje s MQTT posrednikom. + +#### Zadatak + +PoveΕΎite svoj ureΔ‘aj s MQTT posrednikom. + +U ovom dijelu lekcije povezat Δ‡ete svoje IoT noΔ‡no svjetlo s internetom kako biste ga mogli daljinski kontrolirati. Kasnije u ovoj lekciji, vaΕ‘ IoT ureΔ‘aj poslat Δ‡e telemetrijsku poruku putem MQTT-a javnom MQTT posredniku s razinom svjetlosti, gdje Δ‡e je preuzeti neki server kod koji Δ‡ete napisati. Ovaj kod provjerit Δ‡e razinu svjetlosti i poslati povratnu naredbu ureΔ‘aju s uputom da uključi ili isključi LED. + +Stvarni slučaj upotrebe za ovakvu postavku mogao bi biti prikupljanje podataka s viΕ‘e senzora svjetlosti prije donoΕ‘enja odluke o uključivanju svjetala na lokaciji s mnogo svjetala, poput stadiona. Ovo bi moglo spriječiti uključivanje svjetala ako je samo jedan senzor prekriven oblacima ili pticom, dok ostali senzori detektiraju dovoljno svjetla. + +βœ… Koje bi druge situacije zahtijevale procjenu podataka s viΕ‘e senzora prije slanja naredbi? + +Umjesto da se bavite sloΕΎenostima postavljanja MQTT posrednika kao dijela ovog zadatka, moΕΎete koristiti javni testni server koji pokreΔ‡e [Eclipse Mosquitto](https://www.mosquitto.org), otvoreni MQTT posrednik. Ovaj testni posrednik javno je dostupan na [test.mosquitto.org](https://test.mosquitto.org) i ne zahtijeva postavljanje računa, Ε‘to ga čini izvrsnim alatom za testiranje MQTT klijenata i servera. + +> πŸ’ Ovaj testni posrednik je javan i nije siguran. Svatko moΕΎe sluΕ‘ati Ε‘to objavljujete, stoga ga nemojte koristiti za podatke koji trebaju ostati privatni. + +![Dijagram toka zadatka koji prikazuje očitavanje i provjeru razine svjetlosti te upravljanje LED-om](../../../../../translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hr.png) + +Slijedite odgovarajuΔ‡i korak u nastavku kako biste povezali svoj ureΔ‘aj s MQTT posrednikom: + +* [Arduino - Wio Terminal](wio-terminal-mqtt.md) +* [Jednoplatično računalo - Raspberry Pi/Virtualni IoT ureΔ‘aj](single-board-computer-mqtt.md) + +### Dublje istraΕΎivanje MQTT-a + +Teme mogu imati hijerarhiju, a klijenti se mogu pretplatiti na različite razine hijerarhije koristeΔ‡i zamjenske znakove. Na primjer, moΕΎete slati telemetrijske poruke o temperaturi na temu `/telemetry/temperature` i poruke o vlaΕΎnosti na temu `/telemetry/humidity`, a zatim se u svojoj aplikaciji u oblaku pretplatiti na temu `/telemetry/*` kako biste primali i poruke o temperaturi i o vlaΕΎnosti. + +Poruke se mogu slati s različitim razinama kvalitete usluge (QoS), Ε‘to odreΔ‘uje jamstvo primitka poruke. + +* NajviΕ‘e jednom - poruka se Ε‘alje samo jednom, a klijent i posrednik ne poduzimaju dodatne korake za potvrdu isporuke (poΕ‘alji i zaboravi). +* Najmanje jednom - poruka se viΕ‘e puta Ε‘alje dok se ne primi potvrda (potvrΔ‘ena isporuka). +* Točno jednom - poΕ‘iljatelj i primatelj provode dvostupanjsko rukovanje kako bi osigurali da se poruka primi samo jednom (osigurana isporuka). + +βœ… Koje bi situacije zahtijevale osiguranu isporuku poruke umjesto "poΕ‘alji i zaboravi" poruke? + +Iako naziv uključuje Message Queueing (MQTT), protokol zapravo ne podrΕΎava redove poruka. To znači da, ako se klijent odspoji pa ponovno poveΕΎe, neΔ‡e primiti poruke poslane tijekom prekida veze, osim onih koje je veΔ‡ počeo obraΔ‘ivati koristeΔ‡i QoS proces. Poruke mogu imati postavljenu zastavicu za zadrΕΎavanje. Ako je postavljena, MQTT posrednik pohranit Δ‡e posljednju poruku poslanu na temu s tom zastavicom i poslati je svim klijentima koji se kasnije pretplate na tu temu. Na taj način klijenti Δ‡e uvijek dobiti najnoviju poruku. + +MQTT takoΔ‘er podrΕΎava funkciju odrΕΎavanja veze koja provjerava je li veza joΕ‘ uvijek aktivna tijekom dugih razmaka izmeΔ‘u poruka. + +> 🦟 [Mosquitto iz Eclipse Foundation](https://mosquitto.org) nudi besplatni MQTT posrednik koji moΕΎete sami pokrenuti za eksperimentiranje s MQTT-om, kao i javni MQTT posrednik koji moΕΎete koristiti za testiranje svog koda, dostupan na [test.mosquitto.org](https://test.mosquitto.org). + +MQTT veze mogu biti javne i otvorene ili Ε‘ifrirane i osigurane pomoΔ‡u korisničkih imena i lozinki ili certifikata. + +> πŸ’ MQTT komunicira putem TCP/IP-a, istog osnovnog mreΕΎnog protokola kao i HTTP, ali na drugom portu. TakoΔ‘er moΕΎete koristiti MQTT preko websockets-a za komunikaciju s web aplikacijama koje se izvode u pregledniku ili u situacijama gdje vatrozidi ili druga mreΕΎna pravila blokiraju standardne MQTT veze. + +## Telemetrija + +Riječ telemetrija dolazi od grčkih korijena i znači mjerenje na daljinu. Telemetrija je čin prikupljanja podataka sa senzora i slanja tih podataka u oblak. + +> πŸ’ Jedan od prvih ureΔ‘aja za telemetriju izumljen je u Francuskoj 1874. godine i slao je podatke o vremenu i dubini snijega u stvarnom vremenu s Mont Blanca u Pariz. Koristio je fizičke ΕΎice jer beΕΎične tehnologije tada nisu bile dostupne. + +Pogledajmo ponovno primjer pametnog termostata iz Lekcije 1. + +![Internet povezani termostat s viΕ‘e sobnih senzora](../../../../../translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hr.png) + +Termostat ima senzore temperature za prikupljanje telemetrije. Najvjerojatnije bi imao jedan ugraΔ‘eni senzor temperature, a mogao bi se povezati s viΕ‘e vanjskih senzora temperature putem beΕΎičnog protokola poput [Bluetooth Low Energy](https://wikipedia.org/wiki/Bluetooth_Low_Energy) (BLE). + +Primjer telemetrijskih podataka koje bi mogao poslati: + +| Naziv | Vrijednost | Opis | +| ----- | --------- | ----- | +| `thermostat_temperature` | 18Β°C | Temperatura izmjerena ugraΔ‘enim senzorom temperature termostata | +| `livingroom_temperature` | 19Β°C | Temperatura izmjerena udaljenim senzorom temperature koji je nazvan `livingroom` kako bi se identificirala soba u kojoj se nalazi | +| `bedroom_temperature` | 21Β°C | Temperatura izmjerena udaljenim senzorom temperature koji je nazvan `bedroom` kako bi se identificirala soba u kojoj se nalazi | + +Usluga u oblaku tada moΕΎe koristiti ove telemetrijske podatke za donoΕ‘enje odluka o tome koje naredbe poslati za upravljanje grijanjem. + +### Slanje telemetrije s vaΕ‘eg IoT ureΔ‘aja + +SljedeΔ‡i korak u dodavanju internetske kontrole vaΕ‘em noΔ‡nom svjetlu je slanje telemetrije o razini svjetlosti MQTT posredniku na telemetrijsku temu. + +#### Zadatak - slanje telemetrije s vaΕ‘eg IoT ureΔ‘aja + +PoΕ‘aljite telemetriju o razini svjetlosti MQTT posredniku. + +Podaci se Ε‘alju kodirani kao JSON - skraΔ‡enica za JavaScript Object Notation, standard za kodiranje podataka u tekstu koristeΔ‡i parove ključ/vrijednost. + +βœ… Ako se joΕ‘ niste susreli s JSON-om, moΕΎete saznati viΕ‘e o njemu u [JSON.org dokumentaciji](https://www.json.org/). + +Slijedite odgovarajuΔ‡i korak u nastavku kako biste poslali telemetriju s vaΕ‘eg ureΔ‘aja MQTT posredniku: + +* [Arduino - Wio Terminal](wio-terminal-telemetry.md) +* [Jednoplatično računalo - Raspberry Pi/Virtualni IoT ureΔ‘aj](single-board-computer-telemetry.md) + +### Primanje telemetrije od MQTT posrednika + +Nema smisla slati telemetriju ako na drugom kraju nema niΕ‘ta Ε‘to je sluΕ‘a. Telemetrija o razini svjetlosti treba neΕ‘to Ε‘to Δ‡e je sluΕ‘ati i obraΔ‘ivati. Ovaj 'server' kod je vrsta koda koju Δ‡ete implementirati na uslugu u oblaku kao dio veΔ‡e IoT aplikacije, ali ovdje Δ‡ete taj kod pokrenuti lokalno na svom računalu (ili na svom Raspberry Pi-ju ako tamo kodirate). Server kod sastoji se od Python aplikacije koja sluΕ‘a telemetrijske poruke putem MQTT-a s razinama svjetlosti. Kasnije u ovoj lekciji, učinit Δ‡ete da odgovara naredbenom porukom s uputama za uključivanje ili isključivanje LED-a. + +βœ… IstraΕΎite: Ε to se dogaΔ‘a s MQTT porukama ako nema sluΕ‘atelja? + +#### Instalirajte Python i VS Code + +Ako nemate instalirane Python i VS Code lokalno, trebat Δ‡ete ih instalirati kako biste mogli pisati server kod. Ako koristite virtualni IoT ureΔ‘aj ili radite na svom Raspberry Pi-ju, moΕΎete preskočiti ovaj korak jer biste to veΔ‡ trebali imati instalirano i konfigurirano. + +##### Zadatak - instalirajte Python i VS Code + +Instalirajte Python i VS Code. + +1. Instalirajte Python. Pogledajte [stranicu za preuzimanje Pythona](https://www.python.org/downloads/) za upute o instalaciji najnovije verzije Pythona. + +2. Instalirajte Visual Studio Code (VS Code). Ovo je ureΔ‘ivač koji Δ‡ete koristiti za pisanje koda vaΕ‘eg virtualnog ureΔ‘aja u Pythonu. Pogledajte [dokumentaciju za VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) za upute o instalaciji VS Code-a. +πŸ’ Slobodno koristite bilo koji Python IDE ili ureΔ‘ivač za ove lekcije ako imate omiljeni alat, ali lekcije Δ‡e davati upute na temelju koriΕ‘tenja VS Code-a. +1. Instalirajte VS Code Pylance ekstenziju. Ovo je ekstenzija za VS Code koja pruΕΎa podrΕ‘ku za Python programski jezik. Pogledajte [dokumentaciju za Pylance ekstenziju](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) za upute o instalaciji ove ekstenzije u VS Code. + +#### Konfigurirajte Python virtualno okruΕΎenje + +Jedna od moΔ‡nih značajki Pythona je moguΔ‡nost instalacije [pip paketa](https://pypi.org) - to su paketi koda koje su napisali drugi ljudi i objavili na internetu. Pip paket moΕΎete instalirati na svoje računalo jednim naredbom, a zatim koristiti taj paket u svom kodu. Koristit Δ‡ete pip za instalaciju paketa za komunikaciju putem MQTT-a. + +Po defaultu, kada instalirate paket, on je dostupan svugdje na vaΕ‘em računalu, Ε‘to moΕΎe dovesti do problema s verzijama paketa - na primjer, jedna aplikacija ovisi o jednoj verziji paketa koja se moΕΎe pokvariti kada instalirate novu verziju za drugu aplikaciju. Da biste zaobiΕ‘li ovaj problem, moΕΎete koristiti [Python virtualno okruΕΎenje](https://docs.python.org/3/library/venv.html), Ε‘to je u suΕ‘tini kopija Pythona u posveΔ‡enom direktoriju, a kada instalirate pip pakete, oni se instaliraju samo u taj direktorij. + +##### Zadatak - konfigurirajte Python virtualno okruΕΎenje + +Konfigurirajte Python virtualno okruΕΎenje i instalirajte MQTT pip pakete. + +1. Iz terminala ili naredbenog retka pokrenite sljedeΔ‡e na lokaciji po vaΕ‘em izboru kako biste kreirali i navigirali u novi direktorij: + + ```sh + mkdir nightlight-server + cd nightlight-server + ``` + +1. Sada pokrenite sljedeΔ‡e kako biste kreirali virtualno okruΕΎenje u `.venv` direktoriju: + + ```sh + python3 -m venv .venv + ``` + + > πŸ’ Morate eksplicitno pozvati `python3` kako biste kreirali virtualno okruΕΎenje, za slučaj da imate instaliran Python 2 uz Python 3 (najnoviju verziju). Ako imate instaliran Python 2, pozivanje `python` Δ‡e koristiti Python 2 umjesto Python 3. + +1. Aktivirajte virtualno okruΕΎenje: + + * Na Windowsu: + * Ako koristite Command Prompt ili Command Prompt kroz Windows Terminal, pokrenite: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * Ako koristite PowerShell, pokrenite: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + * Na macOS-u ili Linuxu, pokrenite: + + ```cmd + source ./.venv/bin/activate + ``` + + > πŸ’ Ove naredbe treba pokrenuti s iste lokacije na kojoj ste pokrenuli naredbu za kreiranje virtualnog okruΕΎenja. Nikada neΔ‡ete trebati navigirati u `.venv` direktorij, uvijek biste trebali pokrenuti naredbu za aktivaciju i bilo koje naredbe za instalaciju paketa ili pokretanje koda iz direktorija u kojem ste kreirali virtualno okruΕΎenje. + +1. Kada je virtualno okruΕΎenje aktivirano, defaultna naredba `python` Δ‡e pokrenuti verziju Pythona koja je koriΕ‘tena za kreiranje virtualnog okruΕΎenja. Pokrenite sljedeΔ‡e kako biste dobili verziju: + + ```sh + python --version + ``` + + Izlaz Δ‡e biti sličan sljedeΔ‡em: + + ```output + (.venv) ➜ nightlight-server python --version + Python 3.9.1 + ``` + + > πŸ’ VaΕ‘a verzija Pythona moΕΎe biti drugačija - sve dok je verzija 3.6 ili novija, u redu je. Ako nije, izbriΕ‘ite ovaj direktorij, instalirajte noviju verziju Pythona i pokuΕ‘ajte ponovno. + +1. Pokrenite sljedeΔ‡e naredbe kako biste instalirali pip paket za [Paho-MQTT](https://pypi.org/project/paho-mqtt/), popularnu MQTT biblioteku. + + ```sh + pip install paho-mqtt + ``` + + Ovaj pip paket Δ‡e biti instaliran samo u virtualnom okruΕΎenju i neΔ‡e biti dostupan izvan njega. + +#### NapiΕ‘ite kod za server + +Sada se moΕΎe napisati kod za server u Pythonu. + +##### Zadatak - napiΕ‘ite kod za server + +NapiΕ‘ite kod za server. + +1. Iz terminala ili naredbenog retka pokrenite sljedeΔ‡e unutar virtualnog okruΕΎenja kako biste kreirali Python datoteku pod nazivom `app.py`: + + * Na Windowsu pokrenite: + + ```cmd + type nul > app.py + ``` + + * Na macOS-u ili Linuxu pokrenite: + + ```cmd + touch app.py + ``` + +1. Otvorite trenutni direktorij u VS Code: + + ```sh + code . + ``` + +1. Kada se VS Code pokrene, aktivirat Δ‡e Python virtualno okruΕΎenje. Ovo Δ‡e biti prikazano u donjoj statusnoj traci: + + ![VS Code prikazuje odabrano virtualno okruΕΎenje](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hr.png) + +1. Ako je VS Code Terminal veΔ‡ pokrenut kada se VS Code pokrene, virtualno okruΕΎenje neΔ‡e biti aktivirano u njemu. NajlakΕ‘e je ubiti terminal koristeΔ‡i gumb **Kill the active terminal instance**: + + ![VS Code gumb za ubijanje aktivnog terminal instance](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hr.png) + +1. Pokrenite novi VS Code Terminal odabirom *Terminal -> New Terminal*, ili pritiskom na `` CTRL+` ``. Novi terminal Δ‡e učitati virtualno okruΕΎenje, s pozivom za aktivaciju koji se pojavljuje u terminalu. Ime virtualnog okruΕΎenja (`.venv`) takoΔ‘er Δ‡e biti u promptu: + + ```output + ➜ nightlight-server source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. Otvorite datoteku `app.py` iz VS Code explorera i dodajte sljedeΔ‡i kod: + + ```python + import json + import time + + import paho.mqtt.client as mqtt + + id = '' + + client_telemetry_topic = id + '/telemetry' + client_name = id + 'nightlight_server' + + mqtt_client = mqtt.Client(client_name) + mqtt_client.connect('test.mosquitto.org') + + mqtt_client.loop_start() + + def handle_telemetry(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + mqtt_client.subscribe(client_telemetry_topic) + mqtt_client.on_message = handle_telemetry + + while True: + time.sleep(2) + ``` + + Zamijenite `` u liniji 6 s jedinstvenim ID-om koji ste koristili prilikom kreiranja koda za ureΔ‘aj. + + ⚠️ Ovo **mora** biti isti ID koji ste koristili na svom ureΔ‘aju, inače kod za server neΔ‡e pretplatiti ili objaviti na ispravnu temu. + + Ovaj kod kreira MQTT klijent s jedinstvenim imenom i povezuje se na *test.mosquitto.org* broker. Zatim pokreΔ‡e procesnu petlju koja radi u pozadinskoj niti i sluΕ‘a poruke na svim pretplaΔ‡enim temama. + + Klijent se zatim pretplaΔ‡uje na poruke na telemetrijskoj temi i definira funkciju koja se poziva kada se poruka primi. Kada se primi telemetrijska poruka, funkcija `handle_telemetry` se poziva, ispisujuΔ‡i primljenu poruku na konzolu. + + Na kraju, beskonačna petlja odrΕΎava aplikaciju aktivnom. MQTT klijent sluΕ‘a poruke u pozadinskoj niti i radi sve dok glavna aplikacija radi. + +1. Iz VS Code terminala pokrenite sljedeΔ‡e kako biste pokrenuli svoju Python aplikaciju: + + ```sh + python app.py + ``` + + Aplikacija Δ‡e početi sluΕ‘ati poruke s IoT ureΔ‘aja. + +1. Provjerite je li vaΕ‘ ureΔ‘aj pokrenut i Ε‘alje telemetrijske poruke. Podesite razine svjetlosti koje detektira vaΕ‘ fizički ili virtualni ureΔ‘aj. Poruke koje se primaju bit Δ‡e ispisane na terminalu. + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Message received: {'light': 400} + ``` + + Datoteka app.py u virtualnom okruΕΎenju nightlight mora biti pokrenuta kako bi datoteka app.py u virtualnom okruΕΎenju nightlight-server primila poruke koje se Ε‘alju. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u [code-server/server](../../../../../1-getting-started/lessons/4-connect-internet/code-server/server) direktoriju. + +### Koliko često treba slati telemetriju? + +Jedno vaΕΎno razmatranje kod telemetrije je koliko često mjeriti i slati podatke? Odgovor je - ovisi. Ako mjerite često, moΕΎete brΕΎe reagirati na promjene u mjerenjima, ali koristite viΕ‘e energije, viΕ‘e propusnosti, generirate viΕ‘e podataka i trebate viΕ‘e resursa u oblaku za obradu. Trebate mjeriti dovoljno često, ali ne prečesto. + +Za termostat, mjerenje svakih nekoliko minuta vjerojatno je viΕ‘e nego dovoljno jer se temperature ne mijenjaju tako često. Ako mjerite samo jednom dnevno, mogli biste zavrΕ‘iti s grijanjem kuΔ‡e za noΔ‡ne temperature usred sunčanog dana, dok ako mjerite svake sekunde, imat Δ‡ete tisuΔ‡e nepotrebno dupliciranih mjerenja temperature koja Δ‡e usporiti korisnikov internet i propusnost (problem za ljude s ograničenim planovima propusnosti), koristiti viΕ‘e energije Ε‘to moΕΎe biti problem za ureΔ‘aje na baterije poput udaljenih senzora, i poveΔ‡ati troΕ‘kove resursa za obradu i pohranu u oblaku. + +Ako pratite podatke oko stroja u tvornici koji, ako se pokvari, moΕΎe uzrokovati katastrofalnu Ε‘tetu i milijune dolara izgubljenog prihoda, tada bi mjerenje viΕ‘e puta u sekundi moglo biti potrebno. Bolje je potroΕ‘iti propusnost nego propustiti telemetriju koja ukazuje na to da stroj treba zaustaviti i popraviti prije nego Ε‘to se pokvari. + +> πŸ’ U takvoj situaciji, mogli biste razmotriti koriΕ‘tenje edge ureΔ‘aja za obradu telemetrije kako biste smanjili oslanjanje na internet. + +### Gubitak povezivosti + +Internetske veze mogu biti nepouzdane, s čestim prekidima. Ε to bi IoT ureΔ‘aj trebao učiniti u takvim okolnostima - treba li izgubiti podatke ili ih pohraniti dok se povezanost ne obnovi? Opet, odgovor je - ovisi. + +Za termostat podaci se vjerojatno mogu izgubiti čim se uzme novo mjerenje temperature. Sustav grijanja ne mari za to da je prije 20 minuta temperatura bila 20.5Β°C ako je sada 19Β°C, trenutna temperatura odreΔ‘uje treba li grijanje biti uključeno ili isključeno. + +Za strojeve moΕΎda ΕΎelite zadrΕΎati podatke, pogotovo ako se koriste za traΕΎenje trendova. Postoje modeli strojnog učenja koji mogu otkriti anomalije u tokovima podataka gledajuΔ‡i podatke iz definiranog vremenskog razdoblja (kao Ε‘to je posljednji sat) i uočavajuΔ‡i anomalne podatke. Ovo se često koristi za prediktivno odrΕΎavanje, traΕΎeΔ‡i indikacije da bi neΕ‘to moglo uskoro puknuti kako biste to mogli popraviti ili zamijeniti prije nego Ε‘to se dogodi. MoΕΎda ΕΎelite da se sva telemetrija za stroj poΕ‘alje kako bi se mogla obraditi za otkrivanje anomalija, pa kada se IoT ureΔ‘aj ponovno poveΕΎe, poslat Δ‡e svu telemetriju generiranu tijekom prekida interneta. + +Dizajneri IoT ureΔ‘aja takoΔ‘er bi trebali razmotriti moΕΎe li se IoT ureΔ‘aj koristiti tijekom prekida interneta ili gubitka signala uzrokovanog lokacijom. Pametni termostat trebao bi moΔ‡i donositi neke ograničene odluke za kontrolu grijanja ako ne moΕΎe poslati telemetriju u oblak zbog prekida. + +[![Ovaj Ferrari je postao neupotrebljiv jer je netko pokuΕ‘ao nadograditi softver pod zemljom gdje nema mobilnog signala](../../../../../translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hr.png)](https://twitter.com/internetofshit/status/1315736960082808832) + +Za MQTT, ureΔ‘aj i kod za server moraju biti odgovorni za osiguranje isporuke poruka ako je to potrebno, na primjer zahtijevanjem da se na sve poslane poruke odgovori dodatnim porukama na povratnoj temi, a ako ne, one se ručno stavljaju u red za ponovno slanje kasnije. + +## Naredbe + +Naredbe su poruke koje Ε‘alje oblak ureΔ‘aju, upuΔ‡ujuΔ‡i ga da neΕ‘to učini. VeΔ‡inu vremena to uključuje davanje nekog izlaza putem aktuatora, ali to moΕΎe biti i instrukcija za sam ureΔ‘aj, poput ponovnog pokretanja ili prikupljanja dodatne telemetrije i vraΔ‡anja kao odgovora na naredbu. + +![Internet povezan termostat prima naredbu za uključivanje grijanja](../../../../../translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hr.png) + +Termostat bi mogao primiti naredbu iz oblaka za uključivanje grijanja. Na temelju telemetrijskih podataka sa svih senzora, ako je oblačna usluga odlučila da grijanje treba biti uključeno, Ε‘alje odgovarajuΔ‡u naredbu. + +### Slanje naredbi MQTT brokeru + +SljedeΔ‡i korak za naΕ‘ Internet kontrolirani noΔ‡ni svjetlosni ureΔ‘aj je da kod za server poΕ‘alje naredbu natrag IoT ureΔ‘aju kako bi kontrolirao svjetlo na temelju razine svjetlosti koju detektira. + +1. Otvorite kod za server u VS Code + +1. Dodajte sljedeΔ‡i redak nakon deklaracije `client_telemetry_topic` kako biste definirali na kojoj temi slati naredbe: + + ```python + server_command_topic = id + '/commands' + ``` + +1. Dodajte sljedeΔ‡i kod na kraj funkcije `handle_telemetry`: + + ```python + command = { 'led_on' : payload['light'] < 300 } + print("Sending message:", command) + + client.publish(server_command_topic, json.dumps(command)) + ``` + + Ovo Ε‘alje JSON poruku na temu naredbi s vrijednoΕ‘Δ‡u `led_on` postavljenom na true ili false ovisno o tome je li svjetlo manje od 300 ili ne. Ako je svjetlo manje od 300, Ε‘alje se true kako bi se ureΔ‘aju naloΕΎilo da uključi LED. + +1. Pokrenite kod kao i prije + +1. Podesite razine svjetlosti koje detektira vaΕ‘ fizički ili virtualni ureΔ‘aj. Poruke koje se primaju i naredbe koje se Ε‘alju bit Δ‡e ispisane na terminalu: + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Sending message: {'led_on': True} + Message received: {'light': 400} + Sending message: {'led_on': False} + ``` + +> πŸ’ Telemetrija i naredbe se Ε‘alju na jednu temu svaka. To znači da Δ‡e telemetrija s viΕ‘e ureΔ‘aja biti prikazana na istoj telemetrijskoj temi, a naredbe za viΕ‘e ureΔ‘aja Δ‡e biti prikazane na istoj temi naredbi. Ako ΕΎelite poslati naredbu odreΔ‘enom ureΔ‘aju, mogli biste koristiti viΕ‘e tema, imenovanih s jedinstvenim ID-om ureΔ‘aja, poput `/commands/device1`, `/commands/device2`. Na taj način ureΔ‘aj moΕΎe sluΕ‘ati poruke namijenjene samo tom jednom ureΔ‘aju. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u [code-commands/server](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/server) direktoriju. + +### Obrada naredbi na IoT ureΔ‘aju + +Sada kada se naredbe Ε‘alju s servera, moΕΎete dodati kod na IoT ureΔ‘aj kako biste ih obradili i kontrolirali LED. + +Slijedite relevantni korak u nastavku kako biste sluΕ‘ali naredbe s MQTT brokera: + +* [Arduino - Wio Terminal](wio-terminal-commands.md) +* [Jednostavno računalo - Raspberry Pi/Virtualni IoT ureΔ‘aj](single-board-computer-commands.md) + +Kada je ovaj kod napisan i pokrenut, eksperimentirajte s promjenom razina svjetlosti. Promatrajte izlaz sa servera i ureΔ‘aja, te promatrajte LED dok mijenjate razine svjetlosti. + +### Gubitak povezivosti + +Ε to bi oblačna usluga trebala učiniti ako treba poslati naredbu IoT ureΔ‘aju koji je offline? Opet, odgovor je - ovisi. + +Ako najnovija naredba poniΕ‘tava raniju, tada se ranije mogu vjerojatno ignorirati. Ako oblačna usluga poΕ‘alje naredbu za uključivanje grijanja, a zatim naredbu za isključivanje, tada se naredba za uključivanje moΕΎe ignorirati i ne ponovno poslati. + +Ako naredbe trebaju biti obraΔ‘ene redoslijedom, poput pomicanja robotske ruke gore, a zatim zatvaranja hvataljke, tada ih treba poslati redoslijedom kada se povezanost obnovi. + +βœ… Kako bi ureΔ‘aj ili kod za server mogli osigurati da se naredbe uvijek Ε‘alju i obraΔ‘uju redoslijedom preko MQTT-a ako je potrebno? + +--- + +## πŸš€ Izazov + +Izazov u posljednje tri lekcije bio je nabrojati Ε‘to viΕ‘e IoT ureΔ‘aja koje moΕΎete pronaΔ‡i u svom domu, Ε‘koli ili radnom mjestu i odlučiti jesu li izgraΔ‘eni oko mikrokontrolera ili jednostavnih računala, ili čak mjeΕ‘avine oboje, te razmisliti o tome koje senzore i aktuatore koriste. +Za ove ureΔ‘aje, razmislite o porukama koje bi mogli slati ili primati. Koju telemetriju Ε‘alju? Koje poruke ili naredbe bi mogli primati? Smatrate li da su sigurni? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8) + +## Pregled i samostalno učenje + +Pročitajte viΕ‘e o MQTT-u na [MQTT Wikipedia stranici](https://wikipedia.org/wiki/MQTT). + +PokuΕ‘ajte sami pokrenuti MQTT posluΕΎitelj koristeΔ‡i [Mosquitto](https://www.mosquitto.org) i poveΕΎite se na njega sa svojim IoT ureΔ‘ajem i serverskim kodom. + +> πŸ’ Savjet - prema zadanim postavkama Mosquitto ne dopuΕ‘ta anonimne veze (odnosno povezivanje bez korisničkog imena i lozinke) i ne dopuΕ‘ta veze izvan računala na kojem se pokreΔ‡e. +> Ovo moΕΎete rijeΕ‘iti pomoΔ‡u [`mosquitto.conf` konfiguracijske datoteke](https://www.mosquitto.org/man/mosquitto-conf-5.html) s ovim sadrΕΎajem: +> +> ```sh +> listener 1883 0.0.0.0 +> allow_anonymous true +> ``` + +## Zadatak + +[Usporedite i kontrastirajte MQTT s drugim komunikacijskim protokolima](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/assignment.md b/translations/hr/1-getting-started/lessons/4-connect-internet/assignment.md new file mode 100644 index 00000000..e67a16cf --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/assignment.md @@ -0,0 +1,28 @@ + +# Usporedba i kontrast MQTT-a s drugim komunikacijskim protokolima + +## Upute + +Ova lekcija obradila je MQTT kao komunikacijski protokol. Postoje i drugi, uključujuΔ‡i AMQP i HTTP/HTTPS. + +IstraΕΎite oba i usporedite/kontrastirajte ih s MQTT-om. Razmislite o potroΕ‘nji energije, sigurnosti i postojanosti poruka u slučaju gubitka veze. + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Usporedba AMQP-a s MQTT-om | U stanju je usporediti i kontrastirati AMQP s MQTT-om te pokriva potroΕ‘nju energije, sigurnost i postojanost poruka. | Djelomično je u stanju usporediti i kontrastirati AMQP s MQTT-om te pokriva dva od sljedeΔ‡ih aspekata: potroΕ‘nja energije, sigurnost i postojanost poruka. | Djelomično je u stanju usporediti i kontrastirati AMQP s MQTT-om te pokriva jedan od sljedeΔ‡ih aspekata: potroΕ‘nja energije, sigurnost i postojanost poruka. | +| Usporedba HTTP/HTTPS-a s MQTT-om | U stanju je usporediti i kontrastirati HTTP/HTTPS s MQTT-om te pokriva potroΕ‘nju energije, sigurnost i postojanost poruka. | Djelomično je u stanju usporediti i kontrastirati HTTP/HTTPS s MQTT-om te pokriva dva od sljedeΔ‡ih aspekata: potroΕ‘nja energije, sigurnost i postojanost poruka. | Djelomično je u stanju usporediti i kontrastirati HTTP/HTTPS s MQTT-om te pokriva jedan od sljedeΔ‡ih aspekata: potroΕ‘nja energije, sigurnost i postojanost poruka. | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md b/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md new file mode 100644 index 00000000..8b84bfd1 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md @@ -0,0 +1,67 @@ + +# Kontrolirajte svoju noΔ‡nu lampu putem Interneta - Virtualni IoT hardver i Raspberry Pi + +U ovom dijelu lekcije pretplatit Δ‡ete se na naredbe poslane s MQTT brokera na vaΕ‘ Raspberry Pi ili virtualni IoT ureΔ‘aj. + +## Pretplata na naredbe + +SljedeΔ‡i korak je pretplata na naredbe poslane s MQTT brokera i odgovaranje na njih. + +### Zadatak + +Pretplatite se na naredbe. + +1. Otvorite projekt noΔ‡ne lampe u VS Code-u. + +1. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li terminal pokrenut u virtualnom okruΕΎenju. Ako koristite Raspberry Pi, neΔ‡ete koristiti virtualno okruΕΎenje. + +1. Dodajte sljedeΔ‡i kod nakon definicija `client_telemetry_topic`: + + ```python + server_command_topic = id + '/commands' + ``` + + `server_command_topic` je MQTT tema na koju Δ‡e se ureΔ‘aj pretplatiti kako bi primao naredbe za LED. + +1. Dodajte sljedeΔ‡i kod neposredno iznad glavne petlje, nakon linije `mqtt_client.loop_start()`: + + ```python + def handle_command(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + if payload['led_on']: + led.on() + else: + led.off() + + mqtt_client.subscribe(server_command_topic) + mqtt_client.on_message = handle_command + ``` + + Ovaj kod definira funkciju `handle_command` koja čita poruku kao JSON dokument i traΕΎi vrijednost svojstva `led_on`. Ako je postavljeno na `True`, LED se uključuje, inače se isključuje. + + MQTT klijent se pretplaΔ‡uje na temu na koju Δ‡e posluΕΎitelj slati poruke i postavlja funkciju `handle_command` da se pozove kada se primi poruka. + + > πŸ’ Obradnik `on_message` poziva se za sve teme na koje ste pretplaΔ‡eni. Ako kasnije napiΕ‘ete kod koji sluΕ‘a viΕ‘e tema, moΕΎete dobiti temu na koju je poruka poslana iz objekta `message` proslijeΔ‘enog funkciji obrade. + +1. Pokrenite kod na isti način kao Ε‘to ste pokrenuli kod iz prethodnog dijela zadatka. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li CounterFit aplikacija pokrenuta i jesu li senzor svjetla i LED stvoreni na ispravnim pinovima. + +1. Prilagodite razine svjetla koje detektira vaΕ‘ fizički ili virtualni ureΔ‘aj. Poruke koje se primaju i naredbe koje se Ε‘alju bit Δ‡e ispisane u terminalu. LED Δ‡e se takoΔ‘er uključivati i isključivati ovisno o razini svjetla. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device) ili mapi [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi). + +πŸ˜€ UspjeΕ‘no ste programirali svoj ureΔ‘aj da odgovara na naredbe s MQTT brokera. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md b/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md new file mode 100644 index 00000000..311abd10 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md @@ -0,0 +1,93 @@ + +# Kontrolirajte svoju noΔ‡nu lampu putem Interneta - Virtualni IoT ureΔ‘aj i Raspberry Pi + +IoT ureΔ‘aj treba biti programiran da komunicira s *test.mosquitto.org* koristeΔ‡i MQTT za slanje telemetrijskih vrijednosti očitanja senzora svjetla i primanje naredbi za upravljanje LED-om. + +U ovom dijelu lekcije povezat Δ‡ete svoj Raspberry Pi ili virtualni IoT ureΔ‘aj s MQTT brokerom. + +## Instalirajte MQTT klijentski paket + +Za komunikaciju s MQTT brokerom potrebno je instalirati MQTT knjiΕΎnicu putem pip paketa, bilo na vaΕ‘em Raspberry Pi-ju ili u virtualnom okruΕΎenju ako koristite virtualni ureΔ‘aj. + +### Zadatak + +Instalirajte pip paket + +1. Otvorite projekt noΔ‡ne lampe u VS Code-u. + +1. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li terminal pokrenut u virtualnom okruΕΎenju. Ako koristite Raspberry Pi, neΔ‡ete koristiti virtualno okruΕΎenje. + +1. Pokrenite sljedeΔ‡u naredbu za instalaciju MQTT pip paketa: + + ```sh + pip3 install paho-mqtt + ``` + +## Programirajte ureΔ‘aj + +UreΔ‘aj je spreman za programiranje. + +### Zadatak + +NapiΕ‘ite kod za ureΔ‘aj. + +1. Dodajte sljedeΔ‡i uvoz na vrh datoteke `app.py`: + + ```python + import paho.mqtt.client as mqtt + ``` + + KnjiΕΎnica `paho.mqtt.client` omoguΔ‡uje vaΕ‘oj aplikaciji komunikaciju putem MQTT-a. + +1. Dodajte sljedeΔ‡i kod nakon definicija senzora svjetla i LED-a: + + ```python + id = '' + + client_name = id + 'nightlight_client' + ``` + + Zamijenite `` jedinstvenim ID-om koji Δ‡e se koristiti kao naziv ovog klijenta ureΔ‘aja, a kasnije i za teme koje ovaj ureΔ‘aj objavljuje i na koje se pretplaΔ‡uje. Broker *test.mosquitto.org* je javni i koristi ga mnogo ljudi, uključujuΔ‡i druge studente koji rade na ovom zadatku. Imati jedinstveno ime MQTT klijenta i nazive tema osigurava da vaΕ‘ kod neΔ‡e doΔ‡i u sukob s kodom drugih korisnika. TakoΔ‘er Δ‡e vam trebati ovaj ID kada budete kreirali kod za server kasnije u ovom zadatku. + + > πŸ’ MoΕΎete koristiti web stranicu poput [GUIDGen](https://www.guidgen.com) za generiranje jedinstvenog ID-a. + + `client_name` je jedinstveno ime za ovog MQTT klijenta na brokeru. + +1. Dodajte sljedeΔ‡i kod ispod ovog novog koda za kreiranje MQTT klijentskog objekta i povezivanje s MQTT brokerom: + + ```python + mqtt_client = mqtt.Client(client_name) + mqtt_client.connect('test.mosquitto.org') + + mqtt_client.loop_start() + + print("MQTT connected!") + ``` + + Ovaj kod kreira klijentski objekt, povezuje se s javnim MQTT brokerom i pokreΔ‡e procesnu petlju koja radi u pozadinskoj niti, sluΕ‘ajuΔ‡i poruke na svim pretplaΔ‡enim temama. + +1. Pokrenite kod na isti način kao Ε‘to ste pokrenuli kod iz prethodnog dijela zadatka. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li aplikacija CounterFit pokrenuta i jesu li senzor svjetla i LED kreirani na odgovarajuΔ‡im pinovima. + + ```output + (.venv) ➜ nightlight python app.py + MQTT connected! + Light level: 0 + Light level: 0 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-mqtt/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/virtual-device) ili mapi [code-mqtt/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/pi). + +πŸ˜€ UspjeΕ‘no ste povezali svoj ureΔ‘aj s MQTT brokerom. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md b/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md new file mode 100644 index 00000000..4cdedbf4 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md @@ -0,0 +1,74 @@ + +# Kontrolirajte svoju noΔ‡nu lampu putem Interneta - Virtualni IoT ureΔ‘aj i Raspberry Pi + +U ovom dijelu lekcije, poslat Δ‡ete telemetriju s razinama svjetlosti s vaΕ‘eg Raspberry Pi ureΔ‘aja ili virtualnog IoT ureΔ‘aja na MQTT broker. + +## Slanje telemetrije + +SljedeΔ‡i korak je kreiranje JSON dokumenta s telemetrijom i njegovo slanje na MQTT broker. + +### Zadatak + +PoΕ‘aljite telemetriju na MQTT broker. + +1. Otvorite projekt noΔ‡ne lampe u VS Code-u. + +1. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li terminal pokrenut u virtualnom okruΕΎenju. Ako koristite Raspberry Pi, neΔ‡ete koristiti virtualno okruΕΎenje. + +1. Dodajte sljedeΔ‡i import na vrh datoteke `app.py`: + + ```python + import json + ``` + + Biblioteka `json` koristi se za kodiranje telemetrije u JSON dokument. + +1. Dodajte sljedeΔ‡e nakon deklaracije `client_name`: + + ```python + client_telemetry_topic = id + '/telemetry' + ``` + + `client_telemetry_topic` je MQTT tema na koju Δ‡e ureΔ‘aj objavljivati razine svjetlosti. + +1. Zamijenite sadrΕΎaj petlje `while True:` na kraju datoteke sa sljedeΔ‡im: + + ```python + while True: + light = light_sensor.light + telemetry = json.dumps({'light' : light}) + + print("Sending telemetry ", telemetry) + + mqtt_client.publish(client_telemetry_topic, telemetry) + + time.sleep(5) + ``` + + Ovaj kod pakira razinu svjetlosti u JSON dokument i objavljuje ga na MQTT broker. Zatim se program pauzira kako bi se smanjila učestalost slanja poruka. + +1. Pokrenite kod na isti način kao Ε‘to ste pokrenuli kod iz prethodnog dijela zadatka. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li aplikacija CounterFit pokrenuta i jesu li senzor svjetlosti i LED kreirani na odgovarajuΔ‡im pinovima. + + ```output + (.venv) ➜ nightlight python app.py + MQTT connected! + Sending telemetry {"light": 0} + Sending telemetry {"light": 0} + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-telemetry/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/virtual-device) ili mapi [code-telemetry/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/pi). + +πŸ˜€ UspjeΕ‘no ste poslali telemetriju s vaΕ‘eg ureΔ‘aja. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md b/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md new file mode 100644 index 00000000..0b7d2b67 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md @@ -0,0 +1,93 @@ + +# Kontrolirajte svoju noΔ‡nu lampu putem Interneta - Wio Terminal + +U ovom dijelu lekcije, pretplatit Δ‡ete se na naredbe poslane s MQTT brokera na vaΕ‘ Wio Terminal. + +## Pretplata na naredbe + +SljedeΔ‡i korak je pretplata na naredbe poslane s MQTT brokera i odgovaranje na njih. + +### Zadatak + +Pretplatite se na naredbe. + +1. Otvorite projekt noΔ‡ne lampe u VS Code-u. + +1. Dodajte sljedeΔ‡i kod na dno datoteke `config.h` kako biste definirali naziv teme za naredbe: + + ```cpp + const string SERVER_COMMAND_TOPIC = ID + "/commands"; + ``` + + `SERVER_COMMAND_TOPIC` je tema na koju Δ‡e se ureΔ‘aj pretplatiti kako bi primio naredbe za LED. + +1. Dodajte sljedeΔ‡i redak na kraj funkcije `reconnectMQTTClient` kako biste se pretplatili na temu naredbi kada se MQTT klijent ponovno poveΕΎe: + + ```cpp + client.subscribe(SERVER_COMMAND_TOPIC.c_str()); + ``` + +1. Dodajte sljedeΔ‡i kod ispod funkcije `reconnectMQTTClient`. + + ```cpp + void clientCallback(char *topic, uint8_t *payload, unsigned int length) + { + char buff[length + 1]; + for (int i = 0; i < length; i++) + { + buff[i] = (char)payload[i]; + } + buff[length] = '\0'; + + Serial.print("Message received:"); + Serial.println(buff); + + DynamicJsonDocument doc(1024); + deserializeJson(doc, buff); + JsonObject obj = doc.as(); + + bool led_on = obj["led_on"]; + + if (led_on) + digitalWrite(D0, HIGH); + else + digitalWrite(D0, LOW); + } + ``` + + Ova funkcija bit Δ‡e povratni poziv koji MQTT klijent poziva kada primi poruku s posluΕΎitelja. + + Poruka se prima kao niz neoznačenih 8-bitnih cijelih brojeva, pa je potrebno pretvoriti je u niz znakova kako bi se tretirala kao tekst. + + Poruka sadrΕΎi JSON dokument, koji se dekodira pomoΔ‡u ArduinoJson biblioteke. Svojstvo `led_on` iz JSON dokumenta se čita, i ovisno o vrijednosti LED se uključuje ili isključuje. + +1. Dodajte sljedeΔ‡i kod u funkciju `createMQTTClient`: + + ```cpp + client.setCallback(clientCallback); + ``` + + Ovaj kod postavlja `clientCallback` kao povratni poziv koji Δ‡e se pozvati kada se primi poruka s MQTT brokera. + + > πŸ’ Povratni poziv `clientCallback` se poziva za sve teme na koje ste pretplaΔ‡eni. Ako kasnije napiΕ‘ete kod koji sluΕ‘a viΕ‘e tema, moΕΎete dobiti temu na koju je poruka poslana iz parametra `topic` koji se prosljeΔ‘uje povratnom pozivu. + +1. Prenesite kod na svoj Wio Terminal i koristite Serial Monitor za pregled razina svjetlosti koje se Ε‘alju MQTT brokeru. + +1. Prilagodite razine svjetlosti koje detektira vaΕ‘ fizički ili virtualni ureΔ‘aj. Vidjet Δ‡ete poruke koje se primaju i naredbe koje se Ε‘alju u terminalu. TakoΔ‘er Δ‡ete vidjeti kako se LED uključuje i isključuje ovisno o razini svjetlosti. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal). + +πŸ˜€ UspjeΕ‘no ste programirali svoj ureΔ‘aj da odgovara na naredbe s MQTT brokera. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva pogreΕ‘na shvaΔ‡anja ili tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md b/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md new file mode 100644 index 00000000..0bf1b1a5 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md @@ -0,0 +1,251 @@ + +# Kontrolirajte svoju noΔ‡nu lampu putem Interneta - Wio Terminal + +IoT ureΔ‘aj treba biti programiran da komunicira s *test.mosquitto.org* koristeΔ‡i MQTT za slanje telemetrijskih vrijednosti očitanja senzora svjetla i primanje naredbi za upravljanje LED-om. + +U ovom dijelu lekcije povezat Δ‡ete svoj Wio Terminal s MQTT brokerom. + +## Instalirajte WiFi i MQTT Arduino biblioteke + +Kako biste komunicirali s MQTT brokerom, potrebno je instalirati neke Arduino biblioteke za koriΕ‘tenje WiFi čipa u Wio Terminalu i komunikaciju putem MQTT-a. Kada razvijate za Arduino ureΔ‘aje, moΕΎete koristiti Ε‘irok raspon biblioteka koje sadrΕΎe otvoreni kod i implementiraju veliki broj funkcionalnosti. Seeed objavljuje biblioteke za Wio Terminal koje omoguΔ‡uju komunikaciju putem WiFi-a. Ostali programeri objavili su biblioteke za komunikaciju s MQTT brokerima, a vi Δ‡ete koristiti te biblioteke sa svojim ureΔ‘ajem. + +Ove biblioteke dostupne su kao izvorni kod koji se moΕΎe automatski uvesti u PlatformIO i kompajlirati za vaΕ‘ ureΔ‘aj. Na taj način Arduino biblioteke Δ‡e raditi na bilo kojem ureΔ‘aju koji podrΕΎava Arduino framework, pod uvjetom da ureΔ‘aj ima specifični hardver potreban za tu biblioteku. Neke biblioteke, poput Seeed WiFi biblioteka, specifične su za odreΔ‘eni hardver. + +Biblioteke se mogu instalirati globalno i kompajlirati po potrebi, ili unutar specifičnog projekta. Za ovaj zadatak, biblioteke Δ‡e biti instalirane unutar projekta. + +βœ… ViΕ‘e o upravljanju bibliotekama i kako pronaΔ‡i i instalirati biblioteke moΕΎete saznati u [PlatformIO dokumentaciji o bibliotekama](https://docs.platformio.org/en/latest/librarymanager/index.html). + +### Zadatak - instalirajte WiFi i MQTT Arduino biblioteke + +Instalirajte Arduino biblioteke. + +1. Otvorite projekt noΔ‡ne lampe u VS Code-u. + +1. Dodajte sljedeΔ‡e na kraj datoteke `platformio.ini`: + + ```ini + lib_deps = + seeed-studio/Seeed Arduino rpcWiFi @ 1.0.5 + seeed-studio/Seeed Arduino FS @ 2.1.1 + seeed-studio/Seeed Arduino SFUD @ 2.0.2 + seeed-studio/Seeed Arduino rpcUnified @ 2.1.3 + seeed-studio/Seeed_Arduino_mbedtls @ 3.0.1 + ``` + + Ovo uvozi Seeed WiFi biblioteke. Sintaksa `@ ` odnosi se na specifičnu verziju biblioteke. + + > πŸ’ MoΕΎete ukloniti `@ ` kako biste uvijek koristili najnoviju verziju biblioteka, ali nema jamstva da Δ‡e novije verzije raditi s kodom u nastavku. Kod ovdje je testiran s ovom verzijom biblioteka. + + Ovo je sve Ε‘to trebate učiniti da biste dodali biblioteke. SljedeΔ‡i put kada PlatformIO kompajlira projekt, preuzet Δ‡e izvorni kod za ove biblioteke i kompajlirati ga u vaΕ‘ projekt. + +1. Dodajte sljedeΔ‡e u `lib_deps`: + + ```ini + knolleary/PubSubClient @ 2.8 + ``` + + Ovo uvozi [PubSubClient](https://github.com/knolleary/pubsubclient), Arduino MQTT klijent. + +## PoveΕΎite se na WiFi + +Wio Terminal sada se moΕΎe povezati na WiFi. + +### Zadatak - poveΕΎite se na WiFi + +PoveΕΎite Wio Terminal na WiFi. + +1. Kreirajte novu datoteku u mapi `src` pod nazivom `config.h`. To moΕΎete učiniti odabirom mape `src` ili datoteke `main.cpp` unutar nje, te odabirom gumba **New file** u exploreru. Ovaj gumb se pojavljuje samo kada je vaΕ‘ kursor iznad explorera. + + ![Gumb za novu datoteku](../../../../../translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hr.png) + +1. Dodajte sljedeΔ‡i kod u ovu datoteku kako biste definirali konstante za vaΕ‘e WiFi vjerodajnice: + + ```cpp + #pragma once + + #include + + using namespace std; + + // WiFi credentials + const char *SSID = ""; + const char *PASSWORD = ""; + ``` + + Zamijenite `` s SSID-om vaΕ‘eg WiFi-a. Zamijenite `` s vaΕ‘om WiFi lozinkom. + +1. Otvorite datoteku `main.cpp`. + +1. Dodajte sljedeΔ‡e `#include` direktive na vrh datoteke: + + ```cpp + #include + #include + #include + + #include "config.h" + ``` + + Ovo uključuje zaglavne datoteke za biblioteke koje ste ranije dodali, kao i zaglavnu datoteku konfiguracije. Ove zaglavne datoteke su potrebne kako bi PlatformIO uključio kod iz biblioteka. Bez eksplicitnog uključivanja ovih zaglavnih datoteka, neki kod neΔ‡e biti kompajliran i dobit Δ‡ete greΕ‘ke pri kompajliranju. + +1. Dodajte sljedeΔ‡i kod iznad funkcije `setup`: + + ```cpp + void connectWiFi() + { + while (WiFi.status() != WL_CONNECTED) + { + Serial.println("Connecting to WiFi.."); + WiFi.begin(SSID, PASSWORD); + delay(500); + } + + Serial.println("Connected!"); + } + ``` + + Ovaj kod se ponavlja dok ureΔ‘aj nije povezan na WiFi i pokuΕ‘ava se povezati koristeΔ‡i SSID i lozinku iz zaglavne datoteke konfiguracije. + +1. Dodajte poziv ovoj funkciji na dnu funkcije `setup`, nakon Ε‘to su pinovi konfigurirani. + + ```cpp + connectWiFi(); + ``` + +1. Prenesite ovaj kod na svoj ureΔ‘aj kako biste provjerili radi li WiFi veza. Trebali biste vidjeti ovo u serijskom monitoru. + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Connecting to WiFi.. + Connected! + ``` + +## PoveΕΎite se na MQTT + +Nakon Ε‘to je Wio Terminal povezan na WiFi, moΕΎe se povezati na MQTT broker. + +### Zadatak - poveΕΎite se na MQTT + +PoveΕΎite se na MQTT broker. + +1. Dodajte sljedeΔ‡i kod na dno datoteke `config.h` kako biste definirali detalje veze za MQTT broker: + + ```cpp + // MQTT settings + const string ID = ""; + + const string BROKER = "test.mosquitto.org"; + const string CLIENT_NAME = ID + "nightlight_client"; + ``` + + Zamijenite `` s jedinstvenim ID-om koji Δ‡e se koristiti kao ime ovog klijenta ureΔ‘aja, a kasnije i za teme koje ovaj ureΔ‘aj objavljuje i na koje se pretplaΔ‡uje. Broker *test.mosquitto.org* je javni i koristi ga mnogo ljudi, uključujuΔ‡i druge studente koji rade na ovom zadatku. Imati jedinstveno ime MQTT klijenta i nazive tema osigurava da vaΕ‘ kod neΔ‡e biti u sukobu s kodom drugih korisnika. TakoΔ‘er Δ‡ete trebati ovaj ID kada kasnije budete kreirali kod za server. + + > πŸ’ MoΕΎete koristiti web stranicu poput [GUIDGen](https://www.guidgen.com) za generiranje jedinstvenog ID-a. + + `BROKER` je URL MQTT brokera. + + `CLIENT_NAME` je jedinstveno ime za ovaj MQTT klijent na brokeru. + +1. Otvorite datoteku `main.cpp` i dodajte sljedeΔ‡i kod ispod funkcije `connectWiFi` i iznad funkcije `setup`: + + ```cpp + WiFiClient wioClient; + PubSubClient client(wioClient); + ``` + + Ovaj kod kreira WiFi klijent koristeΔ‡i Seeed WiFi biblioteke i koristi ga za kreiranje MQTT klijenta. + +1. Ispod ovog koda dodajte sljedeΔ‡e: + + ```cpp + void reconnectMQTTClient() + { + while (!client.connected()) + { + Serial.print("Attempting MQTT connection..."); + + if (client.connect(CLIENT_NAME.c_str())) + { + Serial.println("connected"); + } + else + { + Serial.print("Retying in 5 seconds - failed, rc="); + Serial.println(client.state()); + + delay(5000); + } + } + } + ``` + + Ova funkcija testira vezu s MQTT brokerom i ponovno se povezuje ako nije povezan. Ponavlja se sve dok nije povezan i pokuΕ‘ava se povezati koristeΔ‡i jedinstveno ime klijenta definirano u zaglavnoj datoteci konfiguracije. + + Ako veza ne uspije, ponovno pokuΕ‘ava nakon 5 sekundi. + +1. Dodajte sljedeΔ‡i kod ispod funkcije `reconnectMQTTClient`: + + ```cpp + void createMQTTClient() + { + client.setServer(BROKER.c_str(), 1883); + reconnectMQTTClient(); + } + ``` + + Ovaj kod postavlja MQTT broker za klijenta, kao i postavlja povratni poziv kada se primi poruka. Zatim pokuΕ‘ava povezati se s brokerom. + +1. Pozovite funkciju `createMQTTClient` u funkciji `setup` nakon Ε‘to je WiFi povezan. + +1. Zamijenite cijelu funkciju `loop` sljedeΔ‡im kodom: + + ```cpp + void loop() + { + reconnectMQTTClient(); + client.loop(); + + delay(2000); + } + ``` + + Ovaj kod započinje ponovnim povezivanjem na MQTT broker. Ove veze se lako prekidaju, pa je vrijedno redovito provjeravati i ponovno se povezati ako je potrebno. Zatim poziva metodu `loop` na MQTT klijentu kako bi obradio sve poruke koje dolaze na temu na koju je pretplaΔ‡en. Ova aplikacija je jedno-threaded, pa se poruke ne mogu primati u pozadinskom threadu, stoga je potrebno dodijeliti vrijeme na glavnom threadu za obradu poruka koje čekaju na mreΕΎnoj vezi. + + Na kraju, kaΕ‘njenje od 2 sekunde osigurava da se razine svjetlosti ne Ε‘alju prečesto i smanjuje potroΕ‘nju energije ureΔ‘aja. + +1. Prenesite kod na svoj Wio Terminal i koristite Serijski Monitor kako biste vidjeli ureΔ‘aj kako se povezuje na WiFi i MQTT. + + ```output + > Executing task: platformio device monitor < + + source /Users/jimbennett/GitHub/IoT-For-Beginners/1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal/nightlight/.venv/bin/activate + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-mqtt/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal). + +πŸ˜€ UspjeΕ‘no ste povezali svoj ureΔ‘aj s MQTT brokerom. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden koriΕ‘tenjem AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md b/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md new file mode 100644 index 00000000..b0105fc3 --- /dev/null +++ b/translations/hr/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md @@ -0,0 +1,93 @@ + +# Kontrolirajte svoju noΔ‡nu lampu putem Interneta - Wio Terminal + +U ovom dijelu lekcije, slat Δ‡ete telemetriju s razinama svjetlosti s vaΕ‘eg Wio Terminala na MQTT posrednika. + +## Instalirajte JSON Arduino biblioteke + +Popularan način za slanje poruka putem MQTT-a je koriΕ‘tenje JSON-a. Postoji Arduino biblioteka za JSON koja olakΕ‘ava čitanje i pisanje JSON dokumenata. + +### Zadatak + +Instalirajte Arduino JSON biblioteku. + +1. Otvorite projekt noΔ‡ne lampe u VS Code-u. + +1. Dodajte sljedeΔ‡i redak kao dodatnu stavku u popis `lib_deps` u datoteci `platformio.ini`: + + ```ini + bblanchon/ArduinoJson @ 6.17.3 + ``` + + Ovo uvozi [ArduinoJson](https://arduinojson.org), Arduino biblioteku za JSON. + +## Objavite telemetriju + +SljedeΔ‡i korak je kreiranje JSON dokumenta s telemetrijom i slanje istog na MQTT posrednika. + +### Zadatak - objavite telemetriju + +Objavite telemetriju na MQTT posrednika. + +1. Dodajte sljedeΔ‡i kod na dno datoteke `config.h` kako biste definirali naziv teme za telemetriju za MQTT posrednika: + + ```cpp + const string CLIENT_TELEMETRY_TOPIC = ID + "/telemetry"; + ``` + + `CLIENT_TELEMETRY_TOPIC` je tema na koju Δ‡e ureΔ‘aj objavljivati razine svjetlosti. + +1. Otvorite datoteku `main.cpp`. + +1. Dodajte sljedeΔ‡u `#include` direktivu na vrh datoteke: + + ```cpp + #include + ``` + +1. Dodajte sljedeΔ‡i kod unutar funkcije `loop`, neposredno prije `delay`: + + ```cpp + int light = analogRead(WIO_LIGHT); + + DynamicJsonDocument doc(1024); + doc["light"] = light; + + string telemetry; + serializeJson(doc, telemetry); + + Serial.print("Sending telemetry "); + Serial.println(telemetry.c_str()); + + client.publish(CLIENT_TELEMETRY_TOPIC.c_str(), telemetry.c_str()); + ``` + + Ovaj kod očitava razinu svjetlosti i kreira JSON dokument koristeΔ‡i ArduinoJson koji sadrΕΎi tu razinu. Zatim se taj dokument serijalizira u string i objavljuje na MQTT temi za telemetriju putem MQTT klijenta. + +1. Prenesite kod na svoj Wio Terminal i koristite Serijski Monitor kako biste vidjeli razine svjetlosti koje se Ε‘alju na MQTT posrednika. + + ```output + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + Sending telemetry {"light":652} + Sending telemetry {"light":612} + Sending telemetry {"light":583} + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-telemetry/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/wio-terminal). + +πŸ˜€ UspjeΕ‘no ste poslali telemetriju s vaΕ‘eg ureΔ‘aja. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/README.md b/translations/hr/2-farm/README.md new file mode 100644 index 00000000..8d9115b3 --- /dev/null +++ b/translations/hr/2-farm/README.md @@ -0,0 +1,34 @@ + +# Poljoprivreda uz IoT + +Kako populacija raste, tako raste i potraΕΎnja za poljoprivredom. Količina dostupnog zemljiΕ‘ta se ne mijenja, ali klima da - Ε‘to donosi joΕ‘ viΕ‘e izazova poljoprivrednicima, posebno za 2 milijarde [poljoprivrednika koji se bave samoodrΕΎivom poljoprivredom](https://wikipedia.org/wiki/Subsistence_agriculture) i oslanjaju se na ono Ε‘to uzgajaju kako bi se prehranili i nahranili svoje obitelji. IoT moΕΎe pomoΔ‡i poljoprivrednicima da donose pametnije odluke o tome Ε‘to uzgajati i kada ΕΎeti, poveΔ‡ati prinose, smanjiti količinu ručnog rada te otkriti i rijeΕ‘iti probleme s nametnicima. + +U ovih 6 lekcija naučit Δ‡ete kako primijeniti Internet stvari za poboljΕ‘anje i automatizaciju poljoprivrede. + +> πŸ’ Ove lekcije koristit Δ‡e neke resurse u oblaku. Ako ne zavrΕ‘ite sve lekcije u ovom projektu, pobrinite se da [očistite svoj projekt](../clean-up.md). + +## Teme + +1. [Predvidite rast biljaka uz IoT](lessons/1-predict-plant-growth/README.md) +1. [Otkrivanje vlaΕΎnosti tla](lessons/2-detect-soil-moisture/README.md) +1. [Automatsko zalijevanje biljaka](lessons/3-automated-plant-watering/README.md) +1. [Migrirajte svoju biljku u oblak](lessons/4-migrate-your-plant-to-the-cloud/README.md) +1. [Migrirajte logiku aplikacije u oblak](lessons/5-migrate-application-to-the-cloud/README.md) +1. [OdrΕΎite svoju biljku sigurnom](lessons/6-keep-your-plant-secure/README.md) + +## Zasluge + +Sve lekcije napisane su s β™₯️ od strane [Jim Bennetta](https://GitHub.com/JimBobBennett) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/README.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/README.md new file mode 100644 index 00000000..52d5b745 --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/README.md @@ -0,0 +1,147 @@ + +## Predvidite rast biljaka pomoΔ‡u IoT-a + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hr.jpg) + +> Sketchnote od [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/9) + +## Uvod + +Biljkama su potrebne odreΔ‘ene stvari za rast - voda, ugljikov dioksid, hranjive tvari, svjetlost i toplina. U ovoj lekciji naučit Δ‡ete kako izračunati stope rasta i zrelosti biljaka mjerenjem temperature zraka. + +U ovoj lekciji obradit Δ‡emo: + +* [Digitalna poljoprivreda](../../../../../2-farm/lessons/1-predict-plant-growth) +* [ZaΕ‘to je temperatura vaΕΎna u poljoprivredi?](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Mjerenje temperature okoline](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Dani rasta (GDD)](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Izračunajte GDD koristeΔ‡i podatke senzora temperature](../../../../../2-farm/lessons/1-predict-plant-growth) + +## Digitalna poljoprivreda + +Digitalna poljoprivreda mijenja način na koji obraΔ‘ujemo zemlju, koristeΔ‡i alate za prikupljanje, pohranu i analizu podataka iz poljoprivrede. Trenutno se nalazimo u razdoblju koje Svjetski ekonomski forum opisuje kao 'Četvrtu industrijsku revoluciju', a uspon digitalne poljoprivrede nazvan je 'Četvrtom poljoprivrednom revolucijom' ili 'Poljoprivreda 4.0'. + +> πŸŽ“ Pojam Digitalna poljoprivreda takoΔ‘er uključuje cijeli 'lanac vrijednosti poljoprivrede', odnosno cijeli put od farme do stola. To uključuje praΔ‡enje kvalitete proizvoda dok se hrana transportira i obraΔ‘uje, sustave skladiΕ‘tenja i e-trgovine, pa čak i aplikacije za iznajmljivanje traktora! + +Ove promjene omoguΔ‡uju poljoprivrednicima poveΔ‡anje prinosa, koriΕ‘tenje manje gnojiva i pesticida te učinkovitije koriΕ‘tenje vode. Iako se prvenstveno koristi u bogatijim zemljama, senzori i drugi ureΔ‘aji postupno postaju jeftiniji, čineΔ‡i ih dostupnijima u zemljama u razvoju. + +Neke tehnike omoguΔ‡ene digitalnom poljoprivredom su: + +* Mjerenje temperature - mjerenje temperature omoguΔ‡uje poljoprivrednicima predviΔ‘anje rasta i zrelosti biljaka. +* Automatizirano zalijevanje - mjerenje vlaΕΎnosti tla i uključivanje sustava za navodnjavanje kada je tlo previΕ‘e suho, umjesto zalijevanja u odreΔ‘eno vrijeme. Zalijevanje u odreΔ‘eno vrijeme moΕΎe dovesti do nedovoljnog zalijevanja tijekom vruΔ‡ih, suhih razdoblja ili prekomjernog zalijevanja tijekom kiΕ‘e. Zalijevanjem samo kada je tlu potrebno, poljoprivrednici mogu optimizirati koriΕ‘tenje vode. +* Suzbijanje Ε‘tetočina - poljoprivrednici mogu koristiti kamere na automatiziranim robotima ili dronovima za provjeru Ε‘tetočina, a zatim primijeniti pesticide samo tamo gdje je potrebno, smanjujuΔ‡i količinu koriΕ‘tenih pesticida i smanjujuΔ‡i otjecanje pesticida u lokalne izvore vode. + +βœ… IstraΕΎite. Koje se druge tehnike koriste za poboljΕ‘anje poljoprivrednih prinosa? + +> πŸŽ“ Pojam 'Precizna poljoprivreda' koristi se za definiranje promatranja, mjerenja i reagiranja na usjeve na razini polja ili čak dijelova polja. To uključuje mjerenje razine vode, hranjivih tvari i Ε‘tetočina te precizno reagiranje, poput zalijevanja samo malog dijela polja. + +## ZaΕ‘to je temperatura vaΕΎna u poljoprivredi? + +Kada učimo o biljkama, veΔ‡ina nas uči o vaΕΎnosti vode, svjetlosti, ugljikovog dioksida i hranjivih tvari. Biljkama je takoΔ‘er potrebna toplina za rast - zato biljke cvjetaju u proljeΔ‡e kada temperatura raste, zaΕ‘to visibabe ili narcisi mogu niknuti rano zbog kratkog toplog razdoblja i zaΕ‘to su staklenici i plastenici tako dobri za uzgoj biljaka. + +> πŸŽ“ Plastenici i staklenici obavljaju sličan posao, ali s vaΕΎnom razlikom. Plastenici se umjetno zagrijavaju i omoguΔ‡uju poljoprivrednicima preciznije kontroliranje temperature, dok staklenici ovise o suncu za toplinu, a obično jedina kontrola su prozori ili drugi otvori za ispuΕ‘tanje topline. + +Biljke imaju osnovnu ili minimalnu temperaturu, optimalnu temperaturu i maksimalnu temperaturu, sve temeljene na prosječnim dnevnim temperaturama. + +* Osnovna temperatura - ovo je minimalna prosječna dnevna temperatura potrebna za rast biljke. +* Optimalna temperatura - ovo je najbolja prosječna dnevna temperatura za postizanje najveΔ‡eg rasta. +* Maksimalna temperatura - ovo je maksimalna temperatura koju biljka moΕΎe podnijeti. Iznad ove temperature biljka Δ‡e zaustaviti rast kako bi sačuvala vodu i preΕΎivjela. + +> πŸ’ Ovo su prosječne temperature, izračunate na temelju dnevnih i noΔ‡nih temperatura. Biljkama su takoΔ‘er potrebne različite temperature danju i noΔ‡u kako bi fotosinteza bila učinkovitija i kako bi Ε‘tedjele energiju noΔ‡u. + +Svaka vrsta biljke ima različite vrijednosti za osnovnu, optimalnu i maksimalnu temperaturu. Zato neke biljke uspijevaju u toplim zemljama, a druge u hladnijim. + +βœ… IstraΕΎite. Za bilo koje biljke koje imate u svom vrtu, Ε‘koli ili lokalnom parku, pokuΕ‘ajte pronaΔ‡i osnovnu temperaturu. + +![Grafikon koji prikazuje stopu rasta koja raste s porastom temperature, a zatim opada kada temperatura postane previsoka](../../../../../translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hr.png) + +Gornji grafikon prikazuje primjer stope rasta u odnosu na temperaturu. Do osnovne temperature nema rasta. Stopa rasta poveΔ‡ava se do optimalne temperature, a zatim opada nakon Ε‘to dosegne vrhunac. + +Oblik ovog grafikona varira od vrste biljke do vrste biljke. Neke imaju oΕ‘triji pad iznad optimalne temperature, dok druge imaju sporiji porast od osnovne do optimalne temperature. + +> πŸ’ Da bi poljoprivrednik postigao najbolji rast, mora znati tri temperaturne vrijednosti i razumjeti oblik grafikona za biljke koje uzgaja. + +Ako poljoprivrednik moΕΎe kontrolirati temperaturu, na primjer u komercijalnom plasteniku, tada moΕΎe optimizirati uvjete za svoje biljke. Komercijalni plastenik koji uzgaja rajčice, na primjer, postavit Δ‡e temperaturu na oko 25Β°C tijekom dana i 20Β°C noΔ‡u kako bi postigao najbrΕΎi rast. + +> πŸ… Kombiniranjem ovih temperatura s umjetnim svjetlom, gnojivima i kontroliranim razinama CO +Ovaj kod otvara CSV datoteku, a zatim dodaje novi redak na kraju. Redak sadrΕΎi trenutni datum i vrijeme formatirano u čitljiv oblik, nakon čega slijedi temperatura primljena od IoT ureΔ‘aja. Podaci se pohranjuju u [ISO 8601 formatu](https://wikipedia.org/wiki/ISO_8601) s vremenskom zonom, ali bez mikrosekundi. + +1. Pokrenite ovaj kod na isti način kao i prije, pazeΔ‡i da vaΕ‘ IoT ureΔ‘aj Ε‘alje podatke. CSV datoteka pod nazivom `temperature.csv` bit Δ‡e stvorena u istom direktoriju. Ako je otvorite, vidjet Δ‡ete datume/vremena i mjerenja temperature: + + ```output + date,temperature + 2021-04-19T17:21:36-07:00,25 + 2021-04-19T17:31:36-07:00,24 + 2021-04-19T17:41:36-07:00,25 + ``` + +1. Pokrenite ovaj kod neko vrijeme kako biste prikupili podatke. Idealno bi bilo da ga pokrenete cijeli dan kako biste prikupili dovoljno podataka za izračun GDD-a. + + +> πŸ’ Ako koristite virtualni IoT ureΔ‘aj, označite opciju za nasumične vrijednosti i postavite raspon kako biste izbjegli dobivanje iste temperature svaki put kada se vrati vrijednost temperature. + ![Označite opciju za nasumične vrijednosti i postavite raspon](../../../../../translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hr.png) + + > πŸ’ Ako ΕΎelite pokrenuti ovo cijeli dan, trebate osigurati da računalo na kojem se izvrΕ‘ava vaΕ‘ serverski kod neΔ‡e prijeΔ‡i u stanje mirovanja, bilo promjenom postavki napajanja ili pokretanjem nečega poput [ovog Python skripta za odrΕΎavanje sustava aktivnim](https://github.com/jaqsparow/keep-system-active). + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u direktoriju [code-server/temperature-sensor-server](../../../../../2-farm/lessons/1-predict-plant-growth/code-server/temperature-sensor-server). + +### Zadatak - izračunajte GDD koristeΔ‡i pohranjene podatke + +Kada server prikupi podatke o temperaturi, GDD za biljku moΕΎe se izračunati. + +Koraci za ručni izračun su: + +1. PronaΔ‘ite osnovnu temperaturu za biljku. Na primjer, za jagode osnovna temperatura je 10Β°C. + +1. Iz datoteke `temperature.csv` pronaΔ‘ite najviΕ‘u i najniΕΎu temperaturu za dan. + +1. Koristite ranije navedenu formulu za izračun GDD-a. + +Na primjer, ako je najviΕ‘a temperatura za dan 25Β°C, a najniΕΎa 12Β°C: + +![GDD = 25 + 12 podijeljeno s 2, zatim oduzmite 10 iz rezultata, Ε‘to daje 8.5](../../../../../translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hr.png) + +* 25 + 12 = 37 +* 37 / 2 = 18.5 +* 18.5 - 10 = 8.5 + +Dakle, jagode su primile **8.5** GDD. Jagodama je potrebno oko 250 GDD da bi donijele plod, tako da joΕ‘ ima vremena. + +--- + +## πŸš€ Izazov + +Biljkama je potrebno viΕ‘e od topline za rast. Ε to im joΕ‘ treba? + +Za ove potrebe, istraΕΎite postoje li senzori koji ih mogu mjeriti. Ε to je s aktuatorima za kontrolu tih razina? Kako biste sastavili jedan ili viΕ‘e IoT ureΔ‘aja za optimizaciju rasta biljaka? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/10) + +## Pregled i samostalno učenje + +* Pročitajte viΕ‘e o digitalnoj poljoprivredi na [Wikipedijinoj stranici o digitalnoj poljoprivredi](https://wikipedia.org/wiki/Digital_agriculture). TakoΔ‘er pročitajte viΕ‘e o preciznoj poljoprivredi na [Wikipedijinoj stranici o preciznoj poljoprivredi](https://wikipedia.org/wiki/Precision_agriculture). +* Potpuni izračun stupnjeva rasta (GDD) je sloΕΎeniji od pojednostavljenog prikazanog ovdje. Pročitajte viΕ‘e o sloΕΎenijoj formuli i kako se nositi s temperaturama ispod osnovne na [Wikipedijinoj stranici o stupnjevima rasta](https://wikipedia.org/wiki/Growing_degree-day). +* Hrana bi mogla postati oskudna u buduΔ‡nosti ako nastavimo koristiti iste metode poljoprivrede. Saznajte viΕ‘e o visokotehnoloΕ‘kim tehnikama uzgoja u ovom [YouTube videu o visokotehnoloΕ‘kim farmama buduΔ‡nosti](https://www.youtube.com/watch?v=KIEOuKD9KX8). + +## Zadatak + +[Vizualizirajte GDD podatke koristeΔ‡i Jupyter Notebook](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/assignment.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/assignment.md new file mode 100644 index 00000000..22b3b14e --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/assignment.md @@ -0,0 +1,57 @@ + +# Vizualizacija GDD podataka pomoΔ‡u Jupyter Notebooka + +## Upute + +U ovoj lekciji prikupili ste GDD podatke pomoΔ‡u IoT senzora. Da biste dobili kvalitetne GDD podatke, potrebno je prikupljati podatke tijekom viΕ‘e dana. Za vizualizaciju temperaturnih podataka i izračunavanje GDD-a moΕΎete koristiti alate poput [Jupyter Notebooks](https://jupyter.org) za analizu podataka. + +Započnite prikupljanjem podataka za nekoliko dana. Morate osigurati da vaΕ‘ posluΕΎiteljski kod radi cijelo vrijeme dok vaΕ‘ IoT ureΔ‘aj radi, bilo prilagodbom postavki upravljanja energijom ili pokretanjem nečega poput [ovog Python skripta za odrΕΎavanje sustava aktivnim](https://github.com/jaqsparow/keep-system-active). + +Kada imate temperaturne podatke, moΕΎete koristiti Jupyter Notebook u ovom repozitoriju za njihovu vizualizaciju i izračunavanje GDD-a. Jupyter notebook kombinira kod i upute u blokovima koji se nazivaju *Δ‡elije*, često kod u Pythonu. MoΕΎete čitati upute, a zatim pokretati svaki blok koda, blok po blok. TakoΔ‘er moΕΎete ureΔ‘ivati kod. Na primjer, u ovom notebooku moΕΎete urediti osnovnu temperaturu koja se koristi za izračunavanje GDD-a za vaΕ‘u biljku. + +1. Kreirajte mapu pod nazivom `gdd-calculation` + +1. Preuzmite datoteku [gdd.ipynb](./code-notebook/gdd.ipynb) i kopirajte je u mapu `gdd-calculation`. + +1. Kopirajte datoteku `temperature.csv` koju je kreirao MQTT posluΕΎitelj. + +1. Kreirajte novi Python virtualni okoliΕ‘ u mapi `gdd-calculation`. + +1. Instalirajte nekoliko pip paketa za Jupyter notebooke, zajedno s bibliotekama potrebnim za upravljanje i prikaz podataka: + + ```sh + pip install --upgrade pip + pip install pandas + pip install matplotlib + pip install jupyter + ``` + +1. Pokrenite notebook u Jupyteru: + + ```sh + jupyter notebook gdd.ipynb + ``` + + Jupyter Δ‡e se pokrenuti i otvoriti notebook u vaΕ‘em pregledniku. ProΔ‘ite kroz upute u notebooku kako biste vizualizirali izmjerene temperature i izračunali dane rasta (GDD). + + ![Jupyter notebook](../../../../../translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hr.png) + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | -------- | --------------- | -------------------- | +| Prikupljanje podataka | Prikupljeno najmanje 2 kompletna dana podataka | Prikupljen najmanje 1 kompletan dan podataka | Prikupljeno neΕ‘to podataka | +| Izračunavanje GDD-a | UspjeΕ‘no pokrenut notebook i izračunat GDD | UspjeΕ‘no pokrenut notebook | Nije moguΔ‡e pokrenuti notebook | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb b/translations/hr/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb new file mode 100644 index 00000000..edbbc2e8 --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb @@ -0,0 +1,167 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dani rasta stupnjeva\n", + "\n", + "Ova biljeΕΎnica učitava podatke o temperaturi spremljene u CSV datoteku i analizira ih. Prikazuje grafikon temperatura, najviΕ‘u i najniΕΎu vrijednost za svaki dan te izračunava GDD.\n", + "\n", + "Kako koristiti ovu biljeΕΎnicu:\n", + "\n", + "* Kopirajte datoteku `temperature.csv` u istu mapu kao i ovu biljeΕΎnicu\n", + "* Pokrenite sve Δ‡elije koristeΔ‡i gumb **β–ΆοΈŽ Run** iznad. Ovo Δ‡e pokrenuti odabranu Δ‡eliju, a zatim prijeΔ‡i na sljedeΔ‡u.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "U Δ‡eliji ispod postavite `base_temperature` na osnovnu temperaturu biljke.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "base_temperature = 10" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "CSV datoteku sada treba učitati koristeΔ‡i pandas\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Read the temperature CSV file\n", + "df = pd.read_csv('temperature.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure(figsize=(20, 10))\n", + "plt.plot(df['date'], df['temperature'])\n", + "plt.xticks(rotation='vertical');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nakon Ε‘to su podaci učitani, mogu se grupirati prema stupcu `date`, a minimalne i maksimalne temperature mogu se izdvojiti za svaki datum.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Convert datetimes to pure dates so we can group by the date\n", + "df['date'] = pd.to_datetime(df['date']).dt.date\n", + "\n", + "# Group the data by date so it can be analyzed by date\n", + "data_by_date = df.groupby('date')\n", + "\n", + "# Get the minimum and maximum temperatures for each date\n", + "min_by_date = data_by_date.min()\n", + "max_by_date = data_by_date.max()\n", + "\n", + "# Join the min and max temperatures into one dataframe and flatten it\n", + "min_max_by_date = min_by_date.join(max_by_date, on='date', lsuffix='_min', rsuffix='_max')\n", + "min_max_by_date = min_max_by_date.reset_index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "GDD se moΕΎe izračunati koristeΔ‡i standardnu GDD jednadΕΎbu\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_gdd(row):\n", + " return ((row['temperature_max'] + row['temperature_min']) / 2) - base_temperature\n", + "\n", + "# Calculate the GDD for each row\n", + "min_max_by_date['gdd'] = min_max_by_date.apply (lambda row: calculate_gdd(row), axis=1)\n", + "\n", + "# Print the results\n", + "print(min_max_by_date[['date', 'gdd']].to_string(index=False))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Odricanje od odgovornosti**: \nOvaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "metadata": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + }, + "coopTranslator": { + "original_hash": "8fcf954f6042f0bf3601a2c836a09574", + "translation_date": "2025-08-28T15:26:19+00:00", + "source_file": "2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb", + "language_code": "hr" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/pi-temp.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/pi-temp.md new file mode 100644 index 00000000..61a671ef --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/pi-temp.md @@ -0,0 +1,125 @@ + +# Mjerenje temperature - Raspberry Pi + +U ovom dijelu lekcije, dodat Δ‡ete senzor temperature na svoj Raspberry Pi. + +## Hardver + +Senzor koji Δ‡ete koristiti je [DHT11 senzor za vlagu i temperaturu](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html), koji kombinira dva senzora u jednom paketu. Ovo je prilično popularan senzor, a postoji i niz komercijalno dostupnih senzora koji kombiniraju mjerenje temperature, vlage, a ponekad i atmosferskog tlaka. Komponenta za mjerenje temperature je termistor s negativnim temperaturnim koeficijentom (NTC), Ε‘to znači da se otpor smanjuje kako temperatura raste. + +Ovo je digitalni senzor, Ε‘to znači da ima ugraΔ‘eni ADC (analogno-digitalni pretvarač) koji stvara digitalni signal s podacima o temperaturi i vlazi koje mikrokontroler moΕΎe očitati. + +### Povezivanje senzora temperature + +Grove senzor temperature moΕΎe se povezati s Raspberry Pi-jem. + +#### Zadatak + +PoveΕΎite senzor temperature. + +![Grove senzor temperature](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na senzoru za vlagu i temperaturu. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Raspberry Pi isključen, spojite drugi kraj Grove kabela na digitalnu utičnicu označenu **D5** na Grove Base hat-u koji je povezan s Pi-jem. Ova utičnica je druga s lijeva, u redu utičnica pored GPIO pinova. + +![Grove senzor temperature povezan na utičnicu A0](../../../../../translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hr.png) + +## Programiranje senzora temperature + +Sada moΕΎete programirati ureΔ‘aj za koriΕ‘tenje povezanog senzora temperature. + +### Zadatak + +Programirajte ureΔ‘aj. + +1. Uključite Raspberry Pi i pričekajte da se pokrene. + +1. Pokrenite VS Code, bilo izravno na Pi-ju ili se poveΕΎite putem Remote SSH ekstenzije. + + > ⚠️ MoΕΎete se pozvati na [upute za postavljanje i pokretanje VS Code-a u lekciji 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. Iz terminala, stvorite novu mapu u početnom direktoriju korisnika `pi` pod nazivom `temperature-sensor`. U toj mapi stvorite datoteku pod nazivom `app.py`: + + ```sh + mkdir temperature-sensor + cd temperature-sensor + touch app.py + ``` + +1. Otvorite ovu mapu u VS Code-u. + +1. Za koriΕ‘tenje senzora za vlagu i temperaturu potrebno je instalirati dodatni Pip paket. Iz terminala u VS Code-u pokrenite sljedeΔ‡u naredbu kako biste instalirali ovaj Pip paket na Pi: + + ```sh + pip3 install seeed-python-dht + ``` + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` kako biste uvezli potrebne biblioteke: + + ```python + import time + from seeed_dht import DHT + ``` + + Izjava `from seeed_dht import DHT` uvozi klasu `DHT` za interakciju s Grove senzorom temperature iz modula `seeed_dht`. + +1. Dodajte sljedeΔ‡i kod nakon prethodnog kako biste stvorili instancu klase koja upravlja senzorom temperature: + + ```python + sensor = DHT("11", 5) + ``` + + Ovo deklarira instancu klase `DHT` koja upravlja **D**igitalnim senzorom za **V**lagu i **T**emperaturu. Prvi parametar govori kodu da se koristi senzor *DHT11* - biblioteka koju koristite podrΕΎava i druge varijante ovog senzora. Drugi parametar govori kodu da je senzor povezan na digitalni port `D5` na Grove Base hat-u. + + > βœ… Zapamtite, sve utičnice imaju jedinstvene brojeve pinova. Pinovi 0, 2, 4 i 6 su analogni pinovi, dok su pinovi 5, 16, 18, 22, 24 i 26 digitalni pinovi. + +1. Dodajte beskonačnu petlju nakon prethodnog koda kako biste očitavali vrijednosti senzora temperature i ispisivali ih u konzolu: + + ```python + while True: + _, temp = sensor.read() + print(f'Temperature {temp}Β°C') + ``` + + Poziv `sensor.read()` vraΔ‡a tuple s podacima o vlazi i temperaturi. Potrebna vam je samo vrijednost temperature, pa se vlaga ignorira. Vrijednost temperature zatim se ispisuje u konzolu. + +1. Dodajte kratku pauzu od deset sekundi na kraju `loop`-a jer nije potrebno kontinuirano provjeravati razine temperature. Pauza smanjuje potroΕ‘nju energije ureΔ‘aja. + + ```python + time.sleep(10) + ``` + +1. Iz terminala u VS Code-u pokrenite sljedeΔ‡e kako biste pokrenuli svoj Python program: + + ```sh + python3 app.py + ``` + + Trebali biste vidjeti vrijednosti temperature koje se ispisuju u konzolu. Koristite neΕ‘to za zagrijavanje senzora, poput pritiska palca na njega ili ventilatora, kako biste vidjeli promjene vrijednosti: + + ```output + pi@raspberrypi:~/temperature-sensor $ python3 app.py + Temperature 26Β°C + Temperature 26Β°C + Temperature 28Β°C + Temperature 30Β°C + Temperature 32Β°C + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/pi). + +πŸ˜€ VaΕ‘ program za senzor temperature uspjeΕ‘no je zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md new file mode 100644 index 00000000..de8c036f --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md @@ -0,0 +1,71 @@ + +# Objavljivanje temperature - Virtualni IoT hardver i Raspberry Pi + +U ovom dijelu lekcije objavit Δ‡ete vrijednosti temperature koje detektira Raspberry Pi ili Virtualni IoT ureΔ‘aj putem MQTT-a kako bi se kasnije mogle koristiti za izračun GDD-a. + +## Objavljivanje temperature + +Nakon Ε‘to se temperatura očita, moΕΎe se objaviti putem MQTT-a nekom 'server' kodu koji Δ‡e očitati vrijednosti i pohraniti ih za kasniju upotrebu u izračunu GDD-a. + +### Zadatak - objavite temperaturu + +Programirajte ureΔ‘aj da objavi podatke o temperaturi. + +1. Otvorite projekt aplikacije `temperature-sensor` ako veΔ‡ nije otvoren. + +1. Ponovite korake koje ste radili u lekciji 4 za povezivanje s MQTT-om i slanje telemetrije. Koristit Δ‡ete isti javni Mosquitto broker. + + Koraci za to su: + + - Dodajte MQTT pip paket + - Dodajte kod za povezivanje s MQTT brokerom + - Dodajte kod za objavljivanje telemetrije + + > ⚠️ Pogledajte [upute za povezivanje s MQTT-om](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md) i [upute za slanje telemetrije](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md) iz lekcije 4 ako je potrebno. + +1. Provjerite da `client_name` odraΕΎava naziv ovog projekta: + + ```python + client_name = id + 'temperature_sensor_client' + ``` + +1. Za telemetriju, umjesto slanja vrijednosti svjetla, poΕ‘aljite vrijednost temperature očitanu s DHT senzora u svojstvu JSON dokumenta nazvanom `temperature`: + + ```python + _, temp = sensor.read() + telemetry = json.dumps({'temperature' : temp}) + ``` + +1. Vrijednost temperature ne treba se očitavati često - neΔ‡e se puno mijenjati u kratkom vremenskom razdoblju, pa postavite `time.sleep` na 10 minuta: + + ```cpp + time.sleep(10 * 60); + ``` + + > πŸ’ Funkcija `sleep` uzima vrijeme u sekundama, pa je za lakΕ‘e čitanje vrijednost proslijeΔ‘ena kao rezultat izračuna. 60 sekundi u minuti, dakle 10 x (60 sekundi u minuti) daje kaΕ‘njenje od 10 minuta. + +1. Pokrenite kod na isti način kao Ε‘to ste pokrenuli kod iz prethodnog dijela zadatka. Ako koristite virtualni IoT ureΔ‘aj, provjerite da je CounterFit aplikacija pokrenuta i da su senzori za vlagu i temperaturu kreirani na ispravnim pinovima. + + ```output + pi@raspberrypi:~/temperature-sensor $ python3 app.py + MQTT connected! + Sending telemetry {"temperature": 25} + Sending telemetry {"temperature": 25} + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-publish-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/virtual-device) ili u mapi [code-publish-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/pi). + +πŸ˜€ UspjeΕ‘no ste objavili temperaturu kao telemetriju s vaΕ‘eg ureΔ‘aja. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije proizaΕ‘le iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md new file mode 100644 index 00000000..bd24ebb1 --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md @@ -0,0 +1,154 @@ + +# Mjerenje temperature - Virtualni IoT ureΔ‘aj + +U ovom dijelu lekcije dodati Δ‡ete senzor temperature svom virtualnom IoT ureΔ‘aju. + +## Virtualni hardver + +Virtualni IoT ureΔ‘aj koristit Δ‡e simulirani Grove Digital Humidity and Temperature senzor. Ovo omoguΔ‡uje da laboratorij ostane isti kao koriΕ‘tenje Raspberry Pi ureΔ‘aja s fizičkim Grove DHT11 senzorom. + +Senzor kombinira **senzor temperature** s **senzorom vlage**, ali u ovom laboratoriju zanima vas samo komponenta senzora temperature. Na fizičkom IoT ureΔ‘aju, senzor temperature bio bi [termistor](https://wikipedia.org/wiki/Thermistor) koji mjeri temperaturu osjetivΕ‘i promjenu otpora kako se temperatura mijenja. Senzori temperature obično su digitalni senzori koji interno pretvaraju izmjereni otpor u temperaturu u stupnjevima Celzija (ili Kelvina, ili Fahrenheita). + +### Dodavanje senzora u CounterFit + +Za koriΕ‘tenje virtualnog senzora vlage i temperature, potrebno je dodati dva senzora u CounterFit aplikaciju. + +#### Zadatak - dodavanje senzora u CounterFit + +Dodajte senzore vlage i temperature u CounterFit aplikaciju. + +1. Kreirajte novu Python aplikaciju na svom računalu u mapi nazvanoj `temperature-sensor` s jednim datotekama nazvanim `app.py` i Python virtualnim okruΕΎenjem, te dodajte CounterFit pip pakete. + + > ⚠️ MoΕΎete se referirati na [upute za kreiranje i postavljanje CounterFit Python projekta u lekciji 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. Instalirajte dodatni Pip paket za instalaciju CounterFit shima za DHT11 senzor. Pobrinite se da ovo instalirate iz terminala s aktiviranim virtualnim okruΕΎenjem. + + ```sh + pip install counterfit-shims-seeed-python-dht + ``` + +1. Pobrinite se da je CounterFit web aplikacija pokrenuta. + +1. Kreirajte senzor vlage: + + 1. U okviru *Create sensor* u *Sensors* panelu, otvorite padajuΔ‡i izbornik *Sensor type* i odaberite *Humidity*. + + 1. Ostavite *Units* postavljen na *Percentage*. + + 1. Pobrinite se da je *Pin* postavljen na *5*. + + 1. Odaberite gumb **Add** za kreiranje senzora vlage na pinu 5. + + ![Postavke senzora vlage](../../../../../translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hr.png) + + Senzor vlage Δ‡e biti kreiran i pojavit Δ‡e se na popisu senzora. + + ![Kreirani senzor vlage](../../../../../translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hr.png) + +1. Kreirajte senzor temperature: + + 1. U okviru *Create sensor* u *Sensors* panelu, otvorite padajuΔ‡i izbornik *Sensor type* i odaberite *Temperature*. + + 1. Ostavite *Units* postavljen na *Celsius*. + + 1. Pobrinite se da je *Pin* postavljen na *6*. + + 1. Odaberite gumb **Add** za kreiranje senzora temperature na pinu 6. + + ![Postavke senzora temperature](../../../../../translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hr.png) + + Senzor temperature Δ‡e biti kreiran i pojavit Δ‡e se na popisu senzora. + + ![Kreirani senzor temperature](../../../../../translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hr.png) + +## Programiranje aplikacije za senzor temperature + +Aplikacija za senzor temperature sada se moΕΎe programirati koristeΔ‡i CounterFit senzore. + +### Zadatak - programiranje aplikacije za senzor temperature + +Programirajte aplikaciju za senzor temperature. + +1. Pobrinite se da je aplikacija `temperature-sensor` otvorena u VS Code-u. + +1. Otvorite datoteku `app.py`. + +1. Dodajte sljedeΔ‡i kod na vrh datoteke `app.py` za povezivanje aplikacije s CounterFit-om: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` za uvoz potrebnih biblioteka: + + ```python + import time + from counterfit_shims_seeed_python_dht import DHT + ``` + + Izjava `from seeed_dht import DHT` uvozi klasu `DHT` senzora za interakciju s virtualnim Grove senzorom temperature koristeΔ‡i shim iz modula `counterfit_shims_seeed_python_dht`. + +1. Dodajte sljedeΔ‡i kod nakon prethodnog za kreiranje instance klase koja upravlja virtualnim senzorom vlage i temperature: + + ```python + sensor = DHT("11", 5) + ``` + + Ovo deklarira instancu klase `DHT` koja upravlja virtualnim **D**igitalnim **H**umidity i **T**emperature senzorom. Prvi parametar govori kodu da se koristi virtualni *DHT11* senzor. Drugi parametar govori kodu da je senzor povezan na port `5`. + + > πŸ’ CounterFit simulira ovaj kombinirani senzor vlage i temperature povezivanjem na 2 senzora, senzor vlage na pinu koji je naveden prilikom kreiranja klase `DHT`, i senzor temperature koji radi na sljedeΔ‡em pinu. Ako je senzor vlage na pinu 5, shim očekuje da je senzor temperature na pinu 6. + +1. Dodajte beskonačnu petlju nakon prethodnog koda za očitavanje vrijednosti senzora temperature i ispis na konzolu: + + ```python + while True: + _, temp = sensor.read() + print(f'Temperature {temp}Β°C') + ``` + + Poziv `sensor.read()` vraΔ‡a tuple s vrijednostima vlage i temperature. Potrebna vam je samo vrijednost temperature, pa se vlaga ignorira. Vrijednost temperature se zatim ispisuje na konzolu. + +1. Dodajte kratku pauzu od deset sekundi na kraju petlje jer razine temperature ne trebaju biti kontinuirano provjeravane. Pauza smanjuje potroΕ‘nju energije ureΔ‘aja. + + ```python + time.sleep(10) + ``` + +1. Iz terminala u VS Code-u s aktiviranim virtualnim okruΕΎenjem, pokrenite sljedeΔ‡e za pokretanje vaΕ‘e Python aplikacije: + + ```sh + python app.py + ``` + +1. U CounterFit aplikaciji promijenite vrijednost senzora temperature koju Δ‡e aplikacija očitavati. To moΕΎete učiniti na dva načina: + + * Unesite broj u okvir *Value* za senzor temperature, zatim odaberite gumb **Set**. Broj koji unesete bit Δ‡e vrijednost koju senzor vraΔ‡a. + + * Označite *Random* checkbox i unesite *Min* i *Max* vrijednosti, zatim odaberite gumb **Set**. Svaki put kada senzor očita vrijednost, očitat Δ‡e nasumičan broj izmeΔ‘u *Min* i *Max*. + + Trebali biste vidjeti vrijednosti koje ste postavili kako se pojavljuju na konzoli. Promijenite *Value* ili postavke *Random* da biste vidjeli promjenu vrijednosti. + + ```output + (.venv) ➜ temperature-sensor python app.py + Temperature 28.25Β°C + Temperature 30.71Β°C + Temperature 25.17Β°C + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/virtual-device). + +πŸ˜€ VaΕ‘ program za senzor temperature bio je uspjeΕ‘an! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘ne interpretacije koje mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md new file mode 100644 index 00000000..7738dfe1 --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md @@ -0,0 +1,82 @@ + +# Objavi temperaturu - Wio Terminal + +U ovom dijelu lekcije objavit Δ‡ete vrijednosti temperature koje detektira Wio Terminal putem MQTT-a kako bi se kasnije mogle koristiti za izračun GDD-a. + +## Objavi temperaturu + +Nakon Ε‘to se temperatura očita, moΕΎe se objaviti putem MQTT-a na neki 'server' kod koji Δ‡e očitati vrijednosti i spremiti ih za kasniju upotrebu u izračunu GDD-a. Mikrokontroleri ne očitavaju vrijeme s Interneta niti prate vrijeme pomoΔ‡u realnog vremenskog sata automatski, ureΔ‘aj mora biti programiran za to, pod uvjetom da ima potrebni hardver. + +Kako bismo pojednostavili stvari u ovoj lekciji, vrijeme neΔ‡e biti poslano s podacima senzora, veΔ‡ ga moΕΎe dodati server kod kasnije kada primi poruke. + +### Zadatak + +Programirajte ureΔ‘aj da objavi podatke o temperaturi. + +1. Otvorite projekt `temperature-sensor` za Wio Terminal. + +1. Ponovite korake koje ste radili u lekciji 4 za povezivanje na MQTT i slanje telemetrije. Koristit Δ‡ete isti javni Mosquitto broker. + + Koraci za ovo su: + + - Dodajte Seeed WiFi i MQTT biblioteke u `.ini` datoteku + - Dodajte konfiguracijsku datoteku i kod za povezivanje na WiFi + - Dodajte kod za povezivanje na MQTT broker + - Dodajte kod za objavu telemetrije + + > ⚠️ Pogledajte [upute za povezivanje na MQTT](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md) i [upute za slanje telemetrije](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md) iz lekcije 4 ako je potrebno. + +1. Provjerite da `CLIENT_NAME` u zaglavnoj datoteci `config.h` odraΕΎava ovaj projekt: + + ```cpp + const string CLIENT_NAME = ID + "temperature_sensor_client"; + ``` + +1. Za telemetriju, umjesto slanja vrijednosti svjetla, poΕ‘aljite vrijednost temperature očitanu s DHT senzora u svojstvu JSON dokumenta nazvanom `temperature` tako da promijenite funkciju `loop` u `main.cpp`: + + ```cpp + float temp_hum_val[2] = {0}; + dht.readTempAndHumidity(temp_hum_val); + + DynamicJsonDocument doc(1024); + doc["temperature"] = temp_hum_val[1]; + ``` + +1. Vrijednost temperature ne treba se očitavati često - neΔ‡e se značajno mijenjati u kratkom vremenskom razdoblju, pa postavite `delay` u funkciji `loop` na 10 minuta: + + ```cpp + delay(10 * 60 * 1000); + ``` + + > πŸ’ Funkcija `delay` uzima vrijeme u milisekundama, pa je radi lakΕ‘eg čitanja vrijednost proslijeΔ‘ena kao rezultat izračuna. 1.000ms u sekundi, 60s u minuti, pa 10 x (60s u minuti) x (1000ms u sekundi) daje kaΕ‘njenje od 10 minuta. + +1. Prenesite ovo na svoj Wio Terminal i koristite serijski monitor za pregled temperature koja se Ε‘alje na MQTT broker. + + ```output + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + Sending telemetry {"temperature":25} + Sending telemetry {"temperature":25} + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-publish-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/wio-terminal). + +πŸ˜€ UspjeΕ‘no ste objavili temperaturu kao telemetriju sa svog ureΔ‘aja. + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden koriΕ‘tenjem AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije proizaΕ‘le iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md b/translations/hr/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md new file mode 100644 index 00000000..00887e44 --- /dev/null +++ b/translations/hr/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md @@ -0,0 +1,143 @@ + +# Mjerenje temperature - Wio Terminal + +U ovom dijelu lekcije, dodat Δ‡ete senzor temperature na svoj Wio Terminal i očitavati vrijednosti temperature s njega. + +## Hardver + +Wio Terminal treba senzor temperature. + +Senzor koji Δ‡ete koristiti je [DHT11 senzor za vlagu i temperaturu](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html), koji kombinira 2 senzora u jednom paketu. Ovo je prilično popularan senzor, a postoji mnogo komercijalno dostupnih senzora koji kombiniraju mjerenje temperature, vlage, a ponekad i atmosferskog tlaka. Komponenta za mjerenje temperature je termistor s negativnim temperaturnim koeficijentom (NTC), Ε‘to znači da se otpor smanjuje kako temperatura raste. + +Ovo je digitalni senzor, Ε‘to znači da ima ugraΔ‘eni ADC koji stvara digitalni signal s podacima o temperaturi i vlazi koje mikrokontroler moΕΎe očitati. + +### Povezivanje senzora temperature + +Grove senzor temperature moΕΎe se povezati na digitalni port Wio Terminala. + +#### Zadatak - povezivanje senzora temperature + +PoveΕΎite senzor temperature. + +![Grove senzor temperature](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na senzoru za vlagu i temperaturu. Kabel Δ‡e se moΔ‡i umetnuti samo na jedan način. + +1. Dok je Wio Terminal isključen s vaΕ‘eg računala ili drugog izvora napajanja, spojite drugi kraj Grove kabela na desnu Grove utičnicu na Wio Terminalu, gledajuΔ‡i prema ekranu. To je utičnica koja je najudaljenija od gumba za uključivanje. + +![Grove senzor temperature povezan na desnu utičnicu](../../../../../translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hr.png) + +## Programiranje senzora temperature + +Sada moΕΎete programirati Wio Terminal za koriΕ‘tenje povezanog senzora temperature. + +### Zadatak - programiranje senzora temperature + +Programirajte ureΔ‘aj. + +1. Napravite potpuno novi projekt za Wio Terminal koristeΔ‡i PlatformIO. Nazovite ovaj projekt `temperature-sensor`. Dodajte kod u funkciju `setup` za konfiguraciju serijskog porta. + + > ⚠️ MoΕΎete se pozvati na [upute za stvaranje PlatformIO projekta u projektu 1, lekcija 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project). + +1. Dodajte ovisnost o biblioteci za Seeed Grove senzor vlage i temperature u datoteku `platformio.ini` projekta: + + ```ini + lib_deps = + seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1 + ``` + + > ⚠️ MoΕΎete se pozvati na [upute za dodavanje biblioteka u PlatformIO projekt u projektu 1, lekcija 4 ako je potrebno](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md#install-the-wifi-and-mqtt-arduino-libraries). + +1. Dodajte sljedeΔ‡e `#include` direktive na vrh datoteke, ispod postojeΔ‡eg `#include `: + + ```cpp + #include + #include + ``` + + Ovo uključuje datoteke potrebne za interakciju sa senzorom. Zaglavlje `DHT.h` sadrΕΎi kod za sam senzor, a dodavanje zaglavlja `SPI.h` osigurava da je kod potreban za komunikaciju sa senzorom povezan prilikom kompilacije aplikacije. + +1. Prije funkcije `setup`, deklarirajte DHT senzor: + + ```cpp + DHT dht(D0, DHT11); + ``` + + Ovo deklarira instancu klase `DHT` koja upravlja **D**igitalnim **H**umidity i **T**emperature senzorom. Ovaj je povezan na port `D0`, desnu Grove utičnicu na Wio Terminalu. Drugi parametar govori kodu da se koristi senzor *DHT11* - biblioteka koju koristite podrΕΎava i druge varijante ovog senzora. + +1. U funkciji `setup`, dodajte kod za postavljanje serijske veze: + + ```cpp + void setup() + { + Serial.begin(9600); + + while (!Serial) + ; // Wait for Serial to be ready + + delay(1000); + } + ``` + +1. Na kraju funkcije `setup`, nakon posljednjeg `delay`, dodajte poziv za pokretanje DHT senzora: + + ```cpp + dht.begin(); + ``` + +1. U funkciji `loop`, dodajte kod za pozivanje senzora i ispis temperature na serijski port: + + ```cpp + void loop() + { + float temp_hum_val[2] = {0}; + dht.readTempAndHumidity(temp_hum_val); + Serial.print("Temperature: "); + Serial.print(temp_hum_val[1]); + Serial.println ("Β°C"); + + delay(10000); + } + ``` + + Ovaj kod deklarira prazan niz od 2 broja s pomičnim zarezom (float) i prosljeΔ‘uje ga pozivu `readTempAndHumidity` na instanci `DHT`. Ovaj poziv popunjava niz s 2 vrijednosti - vlaga ide u 0. stavku niza (zapamtite, u C++ nizovima brojanje počinje od 0, tako da je 0. stavka 'prva' stavka u nizu), a temperatura ide u 1. stavku. + + Temperatura se očitava iz 1. stavke niza i ispisuje na serijski port. + + > πŸ‡ΊπŸ‡Έ Temperatura se očitava u Celzijusima. Za Amerikance, da biste je pretvorili u Fahrenheite, podijelite očitanu vrijednost u Celzijusima s 5, zatim pomnoΕΎite s 9 i dodajte 32. Na primjer, očitanje temperature od 20Β°C postaje ((20/5)*9) + 32 = 68Β°F. + +1. Izgradite i učitajte kod na Wio Terminal. + + > ⚠️ MoΕΎete se pozvati na [upute za stvaranje PlatformIO projekta u projektu 1, lekcija 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app). + +1. Nakon učitavanja, moΕΎete pratiti temperaturu pomoΔ‡u serijskog monitora: + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Temperature: 25.00Β°C + Temperature: 25.00Β°C + Temperature: 25.00Β°C + Temperature: 24.00Β°C + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/wio-terminal). + +πŸ˜€ VaΕ‘ program za senzor temperature je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/2-detect-soil-moisture/README.md b/translations/hr/2-farm/lessons/2-detect-soil-moisture/README.md new file mode 100644 index 00000000..3cd0aae6 --- /dev/null +++ b/translations/hr/2-farm/lessons/2-detect-soil-moisture/README.md @@ -0,0 +1,169 @@ + +C, izgovara se *I-kvadrat-C*, je protokol s viΕ‘e kontrolera i viΕ‘e perifernih ureΔ‘aja, pri čemu svaki povezani ureΔ‘aj moΕΎe djelovati kao kontroler ili periferija koja komunicira putem IΒ²C sabirnice (naziv za komunikacijski sustav koji prenosi podatke). Podaci se Ε‘alju u obliku adresiranih paketa, pri čemu svaki paket sadrΕΎi adresu povezanog ureΔ‘aja kojemu su namijenjeni. + +> πŸ’ Ovaj model se nekada nazivao master/slave, ali se ta terminologija napuΕ‘ta zbog povezanosti s ropstvom. [Open Source Hardware Association usvojila je termin kontroler/periferija](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/), ali joΕ‘ uvijek moΕΎete naiΔ‡i na reference na staru terminologiju. + +UreΔ‘aji imaju adresu koja se koristi kada se povezuju na IΒ²C sabirnicu, a obično je unaprijed definirana na ureΔ‘aju. Na primjer, svaka vrsta Grove senzora iz Seeeda ima istu adresu, pa svi senzori svjetlosti imaju istu adresu, svi gumbi imaju istu adresu koja se razlikuje od adrese senzora svjetlosti. Neki ureΔ‘aji omoguΔ‡uju promjenu adrese, mijenjanjem postavki skakača (jumpera) ili lemljenjem pinova. + +IΒ²C ima sabirnicu sastavljenu od 2 glavne ΕΎice, uz 2 ΕΎice za napajanje: + +| Ε½ica | Naziv | Opis | +| ---- | --------- | ----------- | +| SDA | Serijski podaci | Ova ΕΎica sluΕΎi za slanje podataka izmeΔ‘u ureΔ‘aja. | +| SCL | Serijski sat | Ova ΕΎica Ε‘alje signal sata brzinom koju postavlja kontroler. | +| VCC | Zajednički kolektor napona | Napajanje za ureΔ‘aje. Ovo je povezano s SDA i SCL ΕΎicama kako bi im osiguralo napajanje putem pull-up otpornika koji isključuje signal kada nijedan ureΔ‘aj nije kontroler. | +| GND | Zemlja | Ovo osigurava zajedničku zemlju za električni krug. | + +![I2C sabirnica s 3 ureΔ‘aja povezana na SDA i SCL ΕΎice, dijeleΔ‡i zajedničku zemlju](../../../../../translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hr.png) + +Za slanje podataka, jedan ureΔ‘aj Δ‡e izdati početni uvjet kako bi pokazao da je spreman za slanje podataka. Tada postaje kontroler. Kontroler zatim Ε‘alje adresu ureΔ‘aja s kojim ΕΎeli komunicirati, zajedno s informacijom ΕΎeli li čitati ili pisati podatke. Nakon Ε‘to su podaci preneseni, kontroler Ε‘alje zavrΕ‘ni uvjet kako bi naznačio da je zavrΕ‘io. Nakon toga drugi ureΔ‘aj moΕΎe postati kontroler i slati ili primati podatke. + +I2C ima ograničenja brzine, s tri različita načina rada koji rade na fiksnim brzinama. NajbrΕΎi je način rada High Speed s maksimalnom brzinom od 3,4 Mbps (megabita u sekundi), iako vrlo malo ureΔ‘aja podrΕΎava tu brzinu. Na primjer, Raspberry Pi je ograničen na brzi način rada pri 400 Kbps (kilobita u sekundi). Standardni način rada radi pri 100 Kbps. + +> πŸ’ Ako koristite Raspberry Pi s Grove Base hat kao svoj IoT hardver, moΔ‡i Δ‡ete vidjeti nekoliko I2C priključaka na ploči koje moΕΎete koristiti za komunikaciju s I2C senzorima. Analogni Grove senzori takoΔ‘er koriste I2C s ADC-om za slanje analognih vrijednosti kao digitalnih podataka, pa je senzor svjetlosti koji ste koristili simulirao analogni pin, s vrijednoΕ‘Δ‡u poslanom preko I2C jer Raspberry Pi podrΕΎava samo digitalne pinove. + +### Univerzalni asinkroni prijemnik-predajnik (UART) + +UART uključuje fizičke sklopove koji omoguΔ‡uju komunikaciju izmeΔ‘u dva ureΔ‘aja. Svaki ureΔ‘aj ima 2 komunikacijska pina - prijenos (Tx) i prijem (Rx), pri čemu je Tx pin prvog ureΔ‘aja povezan s Rx pinom drugog, a Tx pin drugog ureΔ‘aja povezan s Rx pinom prvog. To omoguΔ‡uje slanje podataka u oba smjera. + +* UreΔ‘aj 1 Ε‘alje podatke sa svog Tx pina, koje prima ureΔ‘aj 2 na svom Rx pin +* UreΔ‘aj 1 prima podatke na svom Rx pin koje Ε‘alje ureΔ‘aj 2 sa svog Tx pin + +![UART s Tx pinom na jednom čipu povezan s Rx pinom na drugom, i obrnuto](../../../../../translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hr.png) + +> πŸŽ“ Podaci se Ε‘alju jedan bit po jedan, Ε‘to se naziva *serijska* komunikacija. VeΔ‡ina operativnih sustava i mikrokontrolera ima *serijske portove*, tj. veze koje mogu slati i primati serijske podatke dostupne vaΕ‘em kodu. + +UART ureΔ‘aji imaju [baud rate](https://wikipedia.org/wiki/Symbol_rate) (poznat i kao simbolička brzina), Ε‘to je brzina kojom Δ‡e podaci biti poslani i primljeni u bitovima po sekundi. Uobičajena baud brzina je 9.600, Ε‘to znači da se 9.600 bitova (0 i 1) podataka Ε‘alje svake sekunde. + +UART koristi početne i zavrΕ‘ne bitove - Ε‘alje početni bit kako bi naznačio da Δ‡e poslati bajt (8 bitova) podataka, a zatim zavrΕ‘ni bit nakon Ε‘to poΕ‘alje 8 bitova. + +Brzina UART-a ovisi o hardveru, ali čak i najbrΕΎe implementacije ne prelaze 6,5 Mbps (megabita u sekundi, ili milijuni bitova, 0 ili 1, poslanih u sekundi). + +MoΕΎete koristiti UART preko GPIO pinova - moΕΎete postaviti jedan pin kao Tx, a drugi kao Rx, a zatim ih povezati s drugim ureΔ‘ajem. + +> πŸ’ Ako koristite Raspberry Pi s Grove Base hat kao svoj IoT hardver, moΔ‡i Δ‡ete vidjeti UART priključak na ploči koji moΕΎete koristiti za komunikaciju sa senzorima koji koriste UART protokol. + +### Serijsko periferno sučelje (SPI) + +SPI je dizajniran za komunikaciju na kratkim udaljenostima, poput komunikacije mikrokontrolera s ureΔ‘ajem za pohranu poput flash memorije. Temelji se na modelu kontroler/periferija s jednim kontrolerom (obično procesor IoT ureΔ‘aja) koji komunicira s viΕ‘e perifernih ureΔ‘aja. Kontroler upravlja svime odabirom periferije i slanjem ili zahtijevanjem podataka. + +> πŸ’ Kao i kod I2C, pojmovi kontroler i periferija su nedavne promjene, pa Δ‡ete moΕΎda vidjeti da se joΕ‘ uvijek koriste stariji pojmovi. + +SPI kontroleri koriste 3 ΕΎice, uz 1 dodatnu ΕΎicu po periferiji. Periferije koriste 4 ΕΎice. Te ΕΎice su: + +| Ε½ica | Naziv | Opis | +| ---- | --------- | ----------- | +| COPI | Izlaz kontrolera, ulaz periferije | Ova ΕΎica sluΕΎi za slanje podataka od kontrolera do periferije. | +| CIPO | Ulaz kontrolera, izlaz periferije | Ova ΕΎica sluΕΎi za slanje podataka od periferije do kontrolera. | +| SCLK | Serijski sat | Ova ΕΎica Ε‘alje signal sata brzinom koju postavlja kontroler. | +| CS | Odabir čipa | Kontroler ima viΕ‘e ΕΎica, jednu po periferiji, i svaka ΕΎica povezuje se s CS ΕΎicom na odgovarajuΔ‡oj periferiji. | + +![SPI s jednim kontrolerom i dvije periferije](../../../../../translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hr.png) + +CS ΕΎica se koristi za aktiviranje jedne periferije u isto vrijeme, komunicirajuΔ‡i preko COPI i CIPO ΕΎica. Kada kontroler treba promijeniti periferiju, deaktivira CS ΕΎicu povezanu s trenutno aktivnom periferijom, a zatim aktivira ΕΎicu povezanu s periferijom s kojom ΕΎeli komunicirati sljedeΔ‡e. + +SPI je *full-duplex*, Ε‘to znači da kontroler moΕΎe istovremeno slati i primati podatke od iste periferije koristeΔ‡i COPI i CIPO ΕΎice. SPI koristi signal sata na SCLK ΕΎici za odrΕΎavanje sinkronizacije ureΔ‘aja, pa za razliku od slanja izravno preko UART-a ne treba početne i zavrΕ‘ne bitove. + +Za SPI ne postoje definirana ograničenja brzine, a implementacije često mogu prenositi viΕ‘e megabajta podataka u sekundi. + +IoT razvojni kompleti često podrΕΎavaju SPI preko nekih GPIO pinova. Na primjer, na Raspberry Pi moΕΎete koristiti GPIO pinove 19, 21, 23, 24 i 26 za SPI. + +### BeΕΎična komunikacija + +Neki senzori mogu komunicirati preko standardnih beΕΎičnih protokola, poput Bluetootha (uglavnom Bluetooth Low Energy, ili BLE), LoRaWAN-a (niskopotroΕ‘ni protokol za **Lo**ng **Ra**nge mreΕΎe), ili WiFi-a. To omoguΔ‡uje udaljenim senzorima koji nisu fizički povezani s IoT ureΔ‘ajem. + +Jedan takav primjer su komercijalni senzori za vlagu tla. Oni mjere vlagu tla na polju, a zatim Ε‘alju podatke preko LoRaWAN-a do srediΕ‘njeg ureΔ‘aja, koji obraΔ‘uje podatke ili ih Ε‘alje preko Interneta. To omoguΔ‡uje senzoru da bude udaljen od IoT ureΔ‘aja koji upravlja podacima, smanjujuΔ‡i potroΕ‘nju energije i potrebu za velikim WiFi mreΕΎama ili dugim kablovima. + +BLE je popularan za napredne senzore poput fitness narukvica koje se nose na zapeΕ‘Δ‡u. Oni kombiniraju viΕ‘e senzora i Ε‘alju podatke senzora na IoT ureΔ‘aj, poput vaΕ‘eg telefona, putem BLE-a. + +βœ… Imate li bluetooth senzore na sebi, u svojoj kuΔ‡i ili Ε‘koli? To mogu uključivati senzore temperature, senzore prisutnosti, ureΔ‘aje za praΔ‡enje i fitness ureΔ‘aje. + +Jedan popularan način povezivanja komercijalnih ureΔ‘aja je Zigbee. Zigbee koristi WiFi za formiranje mreΕΎa izmeΔ‘u ureΔ‘aja, gdje se svaki ureΔ‘aj povezuje s Ε‘to viΕ‘e obliΕΎnjih ureΔ‘aja, formirajuΔ‡i veliki broj veza poput paukove mreΕΎe. Kada jedan ureΔ‘aj ΕΎeli poslati poruku na Internet, moΕΎe je poslati najbliΕΎim ureΔ‘ajima, koji je zatim prosljeΔ‘uju drugim obliΕΎnjim ureΔ‘ajima i tako dalje, dok ne doΔ‘e do koordinatora i moΕΎe se poslati na Internet. + +> 🐝 Naziv Zigbee odnosi se na ples "waggle" medonosnih pčela nakon povratka u koΕ‘nicu. + +## Mjerenje razine vlage u tlu + +MoΕΎete izmjeriti razinu vlage u tlu koristeΔ‡i senzor vlage tla, IoT ureΔ‘aj i kuΔ‡nu biljku ili obliΕΎnji komad tla. + +### Zadatak - mjerenje vlage tla + +ProΔ‘ite kroz odgovarajuΔ‡i vodič za mjerenje vlage tla koristeΔ‡i svoj IoT ureΔ‘aj: + +* [Arduino - Wio Terminal](wio-terminal-soil-moisture.md) +* [Jednopločni računar - Raspberry Pi](pi-soil-moisture.md) +* [Jednopločni računar - Virtualni ureΔ‘aj](virtual-device-soil-moisture.md) + +## Kalibracija senzora + +Senzori se oslanjaju na mjerenje električnih svojstava poput otpora ili kapaciteta. + +> πŸŽ“ Otpor, mjeren u ohmima (Ξ©), pokazuje koliko se električna struja opire prolasku kroz neΕ‘to. Kada se na materijal primijeni napon, količina struje koja prolazi kroz njega ovisi o otporu materijala. ViΕ‘e o tome moΕΎete pročitati na [stranici o električnom otporu na Wikipediji](https://wikipedia.org/wiki/Electrical_resistance_and_conductance). + +> πŸŽ“ Kapacitet, mjeren u faradima (F), pokazuje sposobnost komponente ili kruga da prikuplja i pohranjuje električnu energiju. ViΕ‘e o kapacitetu moΕΎete pročitati na [stranici o kapacitetu na Wikipediji](https://wikipedia.org/wiki/Capacitance). + +Ova mjerenja nisu uvijek korisna - zamislite senzor temperature koji vam daje mjerenje od 22,5 kΞ©! Umjesto toga, izmjerena vrijednost mora se pretvoriti u korisnu jedinicu kalibracijom - tj. povezivanjem izmjerenih vrijednosti s količinom koja se mjeri kako bi se omoguΔ‡ilo pretvaranje novih mjerenja u odgovarajuΔ‡u jedinicu. + +Neki senzori dolaze prethodno kalibrirani. Na primjer, senzor temperature koji ste koristili u proΕ‘loj lekciji veΔ‡ je bio kalibriran tako da moΕΎe vratiti mjerenje temperature u Β°C. U tvornici bi prvi senzor bio izloΕΎen nizu poznatih temperatura, a izmjeren otpor. To bi se zatim koristilo za izradu izračuna koji moΕΎe pretvoriti izmjerenu vrijednost u Ξ© (jedinica otpora) u Β°C. + +> πŸ’ Formula za izračun otpora iz temperature naziva se [Steinhart–Hart jednadΕΎba](https://wikipedia.org/wiki/Steinhart–Hart_equation). + +### Kalibracija senzora vlage tla + +Vlaga tla mjeri se pomoΔ‡u gravimetrijskog ili volumetrijskog sadrΕΎaja vode. + +* Gravimetrijski sadrΕΎaj je teΕΎina vode u jedinici teΕΎine tla, mjerena kao broj kilograma vode po kilogramu suhog tla +* Volumetrijski sadrΕΎaj je volumen vode u jedinici volumena tla, mjerena kao broj kubnih metara vode po kubnim metrima suhog tla + +> πŸ‡ΊπŸ‡Έ Za Amerikance, zbog dosljednosti jedinica, ovo se moΕΎe mjeriti u funtama umjesto kilograma ili kubnim stopama umjesto kubnih metara. + +Senzori vlage tla mjere električni otpor ili kapacitet - to ne varira samo s vlagom tla, veΔ‡ i s vrstom tla jer komponente u tlu mogu promijeniti njegove električne karakteristike. Idealno bi bilo da se senzori kalibriraju - tj. uzimanje očitanja sa senzora i usporeΔ‘ivanje s mjerenjima dobivenim znanstvenijim pristupom. Na primjer, laboratorij moΕΎe izračunati gravimetrijsku vlagu tla koristeΔ‡i uzorke specifičnog polja uzete nekoliko puta godiΕ‘nje, a ti brojevi se koriste za kalibraciju senzora, povezujuΔ‡i očitanje senzora s gravimetrijskom vlagom tla. + +![Graf napona u odnosu na sadrΕΎaj vlage tla](../../../../../translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hr.png) + +Gornji graf pokazuje kako kalibrirati senzor. Napon se biljeΕΎi za uzorak tla koji se zatim mjeri u laboratoriju usporeΔ‘ivanjem teΕΎine vlaΕΎnog tla s teΕΎinom suhog tla (mjerenjem teΕΎine vlaΕΎnog tla, zatim suΕ‘enjem u peΔ‡nici i mjerenjem suhog tla). Nakon Ε‘to se uzme nekoliko očitanja, to se moΕΎe prikazati na grafu i linija se moΕΎe prilagoditi točkama. Ova linija se zatim moΕΎe koristiti za pretvaranje očitanja senzora vlage tla dobivenih IoT ureΔ‘ajem u stvarna mjerenja vlage tla. + +πŸ’ Kod rezistivnih senzora vlage tla, napon raste kako vlaga tla raste. Kod kapacitivnih senzora vlage tla, napon opada kako vlaga tla raste, pa bi grafovi za njih padali, a ne rasli. + +![Vrijednost vlage tla interpolirana iz grafa](../../../../../translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hr.png) + +Gornji graf pokazuje očitanje napona sa senzora vlage tla, a praΔ‡enjem tog očitanja do linije na grafu moΕΎe se izračunati stvarna vlaga tla. + +Ovaj pristup znači da poljoprivrednik treba dobiti samo nekoliko laboratorijskih mjerenja za polje, a zatim moΕΎe koristiti IoT ureΔ‘aje za mjerenje vlage tla - drastično ubrzavajuΔ‡i vrijeme potrebno za mjerenje. + +--- + +## πŸš€ Izazov + +Rezistivni i kapacitivni senzori vlage tla imaju niz razlika. Koje su te razlike i koji tip (ako postoji) je najbolji za poljoprivrednika? Mijenja li se odgovor izmeΔ‘u zemalja u razvoju i razvijenih zemalja? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12) + +## Pregled i samostalno učenje + +Pročitajte o hardveru i protokolima koje koriste senzori i aktuatori: + +* [GPIO Wikipedia stranica](https://wikipedia.org/wiki/General-purpose_input/output) +* [UART Wikipedia stranica](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) +* [SPI Wikipedia stranica](https://wikipedia.org/wiki/Serial_Peripheral_Interface) +* [I2C Wikipedia stranica](https://wikipedia.org/wiki/IΒ²C) +* [Zigbee Wikipedia stranica](https://wikipedia.org/wiki/Zigbee) + +## Zadatak + +[Kalibrirajte svoj senzor](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/2-detect-soil-moisture/assignment.md b/translations/hr/2-farm/lessons/2-detect-soil-moisture/assignment.md new file mode 100644 index 00000000..11607fed --- /dev/null +++ b/translations/hr/2-farm/lessons/2-detect-soil-moisture/assignment.md @@ -0,0 +1,61 @@ + +# Kalibrirajte svoj senzor + +## Upute + +U ovoj lekciji prikupili ste očitanja senzora za vlagu tla, mjerena kao vrijednosti od 0-1023. Da biste ih pretvorili u stvarna očitanja vlage tla, trebate kalibrirati svoj senzor. To moΕΎete učiniti uzimanjem očitanja iz uzoraka tla, a zatim izračunavanjem gravimetrijskog sadrΕΎaja vlage tla iz tih uzoraka. + +Ove korake trebate ponoviti viΕ‘e puta kako biste dobili potrebna očitanja, svaki put s različitom vlaΕΎnoΕ‘Δ‡u tla. + +1. Izmjerite vlagu tla pomoΔ‡u senzora za vlagu tla. ZapiΕ‘ite ovo očitanje. + +1. Uzmite uzorak tla i izvagajte ga. ZapiΕ‘ite ovu teΕΎinu. + +1. OsuΕ‘ite tlo - to moΕΎete učiniti u toploj peΔ‡nici na 110Β°C (230Β°F) nekoliko sati, na suncu ili ga stavite na toplo i suho mjesto dok tlo ne postane potpuno suho. Trebalo bi biti praΕ‘kasto i rastresito. + + > πŸ’ U laboratoriju, za najtočnije rezultate, tlo biste suΕ‘ili u peΔ‡nici 48-72 sata. Ako vaΕ‘a Ε‘kola ima suΕ‘ionike, provjerite moΕΎete li ih koristiti za dulje suΕ‘enje. Ε to dulje suΕ‘ite, uzorak Δ‡e biti suΕ‘i, a rezultati točniji. + +1. Ponovno izvagajte tlo. + + > πŸ”₯ Ako ste ga suΕ‘ili u peΔ‡nici, provjerite je li se prvo ohladilo! + +Gravimetrijska vlaga tla izračunava se kao: + +![postotak vlage tla je teΕΎina mokrog tla minus teΕΎina suhog tla, podijeljeno s teΕΎinom suhog tla, pomnoΕΎeno sa 100](../../../../../translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hr.png) + +* W - teΕΎina mokrog tla +* W - teΕΎina suhog tla + +Na primjer, recimo da imate uzorak tla koji teΕΎi 212g mokar i 197g suh. + +![Primjer izračuna](../../../../../translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hr.png) + +* W = 212g +* W = 197g +* 212 - 197 = 15 +* 15 / 197 = 0.076 +* 0.076 * 100 = 7.6% + +U ovom primjeru, tlo ima gravimetrijsku vlagu od 7.6%. + +Kada prikupite očitanja za barem 3 uzorka, nacrtajte grafikon postotka vlage tla u odnosu na očitanje senzora za vlagu tla i dodajte liniju koja najbolje odgovara točkama. Tada moΕΎete koristiti ovaj grafikon za izračunavanje gravimetrijskog sadrΕΎaja vlage tla za dano očitanje senzora tako da očitate vrijednost s linije. + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | -------- | --------------- | -------------------- | +| Prikupljanje podataka za kalibraciju | Prikupiti najmanje 3 uzorka za kalibraciju | Prikupiti najmanje 2 uzorka za kalibraciju | Prikupiti najmanje 1 uzorak za kalibraciju | +| Izrada kalibriranog očitanja | UspjeΕ‘no nacrtati grafikon za kalibraciju, očitati vrijednost sa senzora i pretvoriti je u gravimetrijski sadrΕΎaj vlage tla | UspjeΕ‘no nacrtati grafikon za kalibraciju | Nije moguΔ‡e nacrtati grafikon | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md b/translations/hr/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md new file mode 100644 index 00000000..f6e92133 --- /dev/null +++ b/translations/hr/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md @@ -0,0 +1,108 @@ + +# Mjerenje vlaΕΎnosti tla - Raspberry Pi + +U ovom dijelu lekcije, dodat Δ‡ete kapacitivni senzor vlaΕΎnosti tla na svoj Raspberry Pi i očitati vrijednosti s njega. + +## Hardver + +Za Raspberry Pi potreban je kapacitivni senzor vlaΕΎnosti tla. + +Senzor koji Δ‡ete koristiti je [Kapacitivni senzor vlaΕΎnosti tla](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), koji mjeri vlaΕΎnost tla detektiranjem kapaciteta tla, svojstva koje se mijenja s promjenom vlaΕΎnosti tla. Kako se vlaΕΎnost tla poveΔ‡ava, napon se smanjuje. + +Ovo je analogni senzor, pa koristi analogni pin i 10-bitni ADC na Grove Base Hat-u na Raspberry Pi-ju za pretvaranje napona u digitalni signal od 1-1.023. Taj signal se zatim Ε‘alje preko I2C putem GPIO pinova na Pi-ju. + +### Spojite senzor vlaΕΎnosti tla + +Grove senzor vlaΕΎnosti tla moΕΎe se spojiti na Raspberry Pi. + +#### Zadatak - spojite senzor vlaΕΎnosti tla + +Spojite senzor vlaΕΎnosti tla. + +![Grove senzor vlaΕΎnosti tla](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na senzoru vlaΕΎnosti tla. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Raspberry Pi isključen, spojite drugi kraj Grove kabela na analogni priključak označen **A0** na Grove Base Hat-u pričvrΕ‘Δ‡enom na Pi. Ovaj priključak je drugi s desne strane, u redu priključaka pored GPIO pinova. + +![Grove senzor vlaΕΎnosti tla spojen na A0 priključak](../../../../../translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hr.png) + +1. Umetnite senzor vlaΕΎnosti tla u tlo. Na senzoru postoji oznaka 'najviΕ‘a pozicija' - bijela linija preko senzora. Umetnite senzor do te linije, ali ne preko nje. + +![Grove senzor vlaΕΎnosti tla u tlu](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hr.png) + +## Programiranje senzora vlaΕΎnosti tla + +Sada moΕΎete programirati Raspberry Pi za koriΕ‘tenje spojenog senzora vlaΕΎnosti tla. + +### Zadatak - programirajte senzor vlaΕΎnosti tla + +Programirajte ureΔ‘aj. + +1. Uključite Pi i pričekajte da se pokrene. + +1. Pokrenite VS Code, bilo izravno na Pi-ju ili se poveΕΎite putem Remote SSH ekstenzije. + + > ⚠️ MoΕΎete se pozvati na [upute za postavljanje i pokretanje VS Code-a u nightlight - lekcija 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. Iz terminala, stvorite novu mapu u početnom direktoriju korisnika `pi` pod nazivom `soil-moisture-sensor`. U toj mapi stvorite datoteku pod nazivom `app.py`. + +1. Otvorite ovu mapu u VS Code-u. + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` za uvoz potrebnih biblioteka: + + ```python + import time + from grove.adc import ADC + ``` + + Izjava `import time` uvozi modul `time` koji Δ‡e se kasnije koristiti u ovom zadatku. + + Izjava `from grove.adc import ADC` uvozi `ADC` iz Grove Python biblioteka. Ova biblioteka sadrΕΎi kod za interakciju s analognim-digitalnim pretvaračem na Pi Base Hat-u i očitavanje napona s analognih senzora. + +1. Dodajte sljedeΔ‡i kod ispod kako biste stvorili instancu klase `ADC`: + + ```python + adc = ADC() + ``` + +1. Dodajte beskonačnu petlju koja očitava vrijednosti s ADC-a na pinu A0 i ispisuje rezultat na konzolu. Ova petlja moΕΎe zatim pauzirati 10 sekundi izmeΔ‘u očitavanja. + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. Pokrenite Python aplikaciju. Vidjet Δ‡ete očitanja vlaΕΎnosti tla ispisana na konzoli. Dodajte malo vode u tlo ili izvadite senzor iz tla i promatrajte kako se vrijednost mijenja. + + ```output + pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py + Soil moisture: 615 + Soil moisture: 612 + Soil moisture: 498 + Soil moisture: 493 + Soil moisture: 490 + Soil Moisture: 388 + ``` + + U primjeru izlaza iznad, moΕΎete vidjeti kako napon pada kada se doda voda. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/pi](../../../../../2-farm/lessons/2-detect-soil-moisture/code/pi). + +πŸ˜€ VaΕ‘ program za senzor vlaΕΎnosti tla uspjeΕ‘no je zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden koriΕ‘tenjem AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md b/translations/hr/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md new file mode 100644 index 00000000..697f5706 --- /dev/null +++ b/translations/hr/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md @@ -0,0 +1,123 @@ + +# Mjerenje vlaΕΎnosti tla - Virtualni IoT hardver + +U ovom dijelu lekcije, dodat Δ‡ete kapacitivni senzor vlaΕΎnosti tla svom virtualnom IoT ureΔ‘aju i očitati vrijednosti s njega. + +## Virtualni hardver + +Virtualni IoT ureΔ‘aj koristit Δ‡e simulirani Grove kapacitivni senzor vlaΕΎnosti tla. Ovo omoguΔ‡uje da laboratorij ostane isti kao koriΕ‘tenje Raspberry Pi ureΔ‘aja s fizičkim Grove kapacitivnim senzorom vlaΕΎnosti tla. + +Na fizičkom IoT ureΔ‘aju, senzor vlaΕΎnosti tla bio bi kapacitivni senzor koji mjeri vlaΕΎnost tla detektiranjem kapaciteta tla, svojstva koje se mijenja ovisno o vlaΕΎnosti tla. Kako se vlaΕΎnost tla poveΔ‡ava, napon se smanjuje. + +Ovo je analogni senzor, pa koristi simulirani 10-bitni ADC za prijavu vrijednosti od 1 do 1.023. + +### Dodavanje senzora vlaΕΎnosti tla u CounterFit + +Za koriΕ‘tenje virtualnog senzora vlaΕΎnosti tla, potrebno ga je dodati u CounterFit aplikaciju. + +#### Zadatak - Dodavanje senzora vlaΕΎnosti tla u CounterFit + +Dodajte senzor vlaΕΎnosti tla u CounterFit aplikaciju. + +1. Kreirajte novu Python aplikaciju na svom računalu u mapi nazvanoj `soil-moisture-sensor` s jednim datotekama nazvanim `app.py` i Python virtualnim okruΕΎenjem, te dodajte CounterFit pip pakete. + + > ⚠️ MoΕΎete se referirati na [upute za kreiranje i postavljanje CounterFit Python projekta u lekciji 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. Provjerite je li CounterFit web aplikacija pokrenuta. + +1. Kreirajte senzor vlaΕΎnosti tla: + + 1. U okviru *Create sensor* u *Sensors* panelu, otvorite padajuΔ‡i izbornik *Sensor type* i odaberite *Soil Moisture*. + + 1. Ostavite *Units* postavljen na *NoUnits*. + + 1. Provjerite je li *Pin* postavljen na *0*. + + 1. Kliknite gumb **Add** za kreiranje senzora *Soil Moisture* na pinu 0. + + ![Postavke senzora vlaΕΎnosti tla](../../../../../translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hr.png) + + Senzor vlaΕΎnosti tla bit Δ‡e kreiran i pojavit Δ‡e se na popisu senzora. + + ![Kreirani senzor vlaΕΎnosti tla](../../../../../translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hr.png) + +## Programiranje aplikacije za senzor vlaΕΎnosti tla + +Aplikacija za senzor vlaΕΎnosti tla sada se moΕΎe programirati koristeΔ‡i CounterFit senzore. + +### Zadatak - Programiranje aplikacije za senzor vlaΕΎnosti tla + +Programirajte aplikaciju za senzor vlaΕΎnosti tla. + +1. Provjerite je li aplikacija `soil-moisture-sensor` otvorena u VS Code. + +1. Otvorite datoteku `app.py`. + +1. Dodajte sljedeΔ‡i kod na vrh datoteke `app.py` za povezivanje aplikacije s CounterFit: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` za uvoz potrebnih biblioteka: + + ```python + import time + from counterfit_shims_grove.adc import ADC + ``` + + Izjava `import time` uvozi modul `time` koji Δ‡e se kasnije koristiti u ovom zadatku. + + Izjava `from counterfit_shims_grove.adc import ADC` uvozi klasu `ADC` za interakciju s virtualnim analogno-digitalnim pretvaračem koji se moΕΎe povezati s CounterFit senzorom. + +1. Dodajte sljedeΔ‡i kod ispod ovoga za kreiranje instance klase `ADC`: + + ```python + adc = ADC() + ``` + +1. Dodajte beskonačnu petlju koja čita vrijednosti s ovog ADC-a na pinu 0 i zapisuje rezultat u konzolu. Ova petlja moΕΎe zatim pauzirati 10 sekundi izmeΔ‘u očitanja. + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. U CounterFit aplikaciji, promijenite vrijednost senzora vlaΕΎnosti tla koju Δ‡e aplikacija očitati. To moΕΎete učiniti na dva načina: + + * Unesite broj u okvir *Value* za senzor vlaΕΎnosti tla, zatim kliknite gumb **Set**. Broj koji unesete bit Δ‡e vrijednost koju senzor vraΔ‡a. + + * Označite kuΔ‡icu *Random* i unesite *Min* i *Max* vrijednosti, zatim kliknite gumb **Set**. Svaki put kada senzor očita vrijednost, očitat Δ‡e nasumični broj izmeΔ‘u *Min* i *Max*. + +1. Pokrenite Python aplikaciju. Vidjet Δ‡ete mjerenja vlaΕΎnosti tla zapisana u konzolu. Promijenite *Value* ili postavke *Random* kako biste vidjeli promjenu vrijednosti. + + ```output + (.venv) ➜ soil-moisture-sensor $ python app.py + Soil moisture: 615 + Soil moisture: 612 + Soil moisture: 498 + Soil moisture: 493 + Soil moisture: 490 + Soil Moisture: 388 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/virtual-device](../../../../../2-farm/lessons/2-detect-soil-moisture/code/virtual-device). + +πŸ˜€ VaΕ‘a aplikacija za senzor vlaΕΎnosti tla bila je uspjeΕ‘na! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md b/translations/hr/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md new file mode 100644 index 00000000..df4dcf30 --- /dev/null +++ b/translations/hr/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md @@ -0,0 +1,117 @@ + +# Mjerenje vlaΕΎnosti tla - Wio Terminal + +U ovom dijelu lekcije, dodat Δ‡ete kapacitivni senzor vlaΕΎnosti tla na svoj Wio Terminal i očitavati vrijednosti s njega. + +## Hardver + +Wio Terminal zahtijeva kapacitivni senzor vlaΕΎnosti tla. + +Senzor koji Δ‡ete koristiti je [Kapacitivni senzor vlaΕΎnosti tla](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), koji mjeri vlaΕΎnost tla detektiranjem kapaciteta tla, svojstva koje se mijenja ovisno o vlaΕΎnosti tla. Kako se vlaΕΎnost tla poveΔ‡ava, napon se smanjuje. + +Ovo je analogni senzor, pa se povezuje na analogne pinove na Wio Terminalu, koristeΔ‡i ugraΔ‘eni ADC za stvaranje vrijednosti od 0-1,023. + +### Povezivanje senzora vlaΕΎnosti tla + +Grove senzor vlaΕΎnosti tla moΕΎe se povezati na Wio Terminalov konfigurabilni analogni/digitalni port. + +#### Zadatak - povezivanje senzora vlaΕΎnosti tla + +PoveΕΎite senzor vlaΕΎnosti tla. + +![Grove senzor vlaΕΎnosti tla](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na senzoru vlaΕΎnosti tla. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Wio Terminal odspojen od vaΕ‘eg računala ili drugog izvora napajanja, poveΕΎite drugi kraj Grove kabela s desnom Grove utičnicom na Wio Terminalu gledajuΔ‡i prema ekranu. To je utičnica najudaljenija od gumba za napajanje. + +![Grove senzor vlaΕΎnosti tla povezan s desnom utičnicom](../../../../../translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hr.png) + +1. Umetnite senzor vlaΕΎnosti tla u tlo. Senzor ima 'liniju najviΕ‘eg poloΕΎaja' - bijelu crtu preko senzora. Umetnite senzor do, ali ne preko ove linije. + +![Grove senzor vlaΕΎnosti tla u tlu](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hr.png) + +1. Sada moΕΎete povezati Wio Terminal s vaΕ‘im računalom. + +## Programiranje senzora vlaΕΎnosti tla + +Wio Terminal sada moΕΎe biti programiran za koriΕ‘tenje povezanog senzora vlaΕΎnosti tla. + +### Zadatak - programiranje senzora vlaΕΎnosti tla + +Programirajte ureΔ‘aj. + +1. Kreirajte potpuno novi projekt za Wio Terminal koristeΔ‡i PlatformIO. Nazovite ovaj projekt `soil-moisture-sensor`. Dodajte kod u funkciju `setup` za konfiguraciju serijskog porta. + + > ⚠️ MoΕΎete se referirati na [upute za kreiranje PlatformIO projekta u projektu 1, lekcija 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project). + +1. Ne postoji biblioteka za ovaj senzor, umjesto toga moΕΎete očitavati s analognog pina koristeΔ‡i ugraΔ‘enu Arduino funkciju [`analogRead`](https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/). Započnite konfiguriranjem analognog pina za ulaz kako bi se vrijednosti mogle očitavati dodavanjem sljedeΔ‡eg u funkciju `setup`. + + ```cpp + pinMode(A0, INPUT); + ``` + + Ovo postavlja pin `A0`, kombinirani analogni/digitalni pin, kao ulazni pin s kojeg se moΕΎe očitavati napon. + +1. Dodajte sljedeΔ‡e u funkciju `loop` za očitavanje napona s ovog pina: + + ```cpp + int soil_moisture = analogRead(A0); + ``` + +1. Ispod ovog koda, dodajte sljedeΔ‡i kod za ispis vrijednosti na serijski port: + + ```cpp + Serial.print("Soil Moisture: "); + Serial.println(soil_moisture); + ``` + +1. Na kraju dodajte pauzu od 10 sekundi: + + ```cpp + delay(10000); + ``` + +1. Izgradite i učitajte kod na Wio Terminal. + + > ⚠️ MoΕΎete se referirati na [upute za kreiranje PlatformIO projekta u projektu 1, lekcija 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app). + +1. Nakon učitavanja, moΕΎete pratiti vlaΕΎnost tla koristeΔ‡i serijski monitor. Dodajte malo vode u tlo ili uklonite senzor iz tla i promatrajte promjenu vrijednosti. + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Soil Moisture: 526 + Soil Moisture: 529 + Soil Moisture: 521 + Soil Moisture: 494 + Soil Moisture: 454 + Soil Moisture: 456 + Soil Moisture: 395 + Soil Moisture: 388 + Soil Moisture: 394 + Soil Moisture: 391 + ``` + + U primjeru izlaza iznad, moΕΎete vidjeti kako napon opada dok se dodaje voda. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/wio-terminal](../../../../../2-farm/lessons/2-detect-soil-moisture/code/wio-terminal). + +πŸ˜€ VaΕ‘ program za senzor vlaΕΎnosti tla bio je uspjeΕ‘an! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden koriΕ‘tenjem AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije proizaΕ‘le iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/3-automated-plant-watering/README.md b/translations/hr/2-farm/lessons/3-automated-plant-watering/README.md new file mode 100644 index 00000000..e4130e43 --- /dev/null +++ b/translations/hr/2-farm/lessons/3-automated-plant-watering/README.md @@ -0,0 +1,314 @@ + +# Automatsko zalijevanje biljaka + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio [IoT za početnike Projekt 2 - Digitalna poljoprivreda serije](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![IoT pogonjeno automatsko zalijevanje biljaka](https://img.youtube.com/vi/g9FfZwv9R58/0.jpg)](https://youtu.be/g9FfZwv9R58) + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13) + +## Uvod + +U prethodnoj lekciji naučili ste kako pratiti vlaΕΎnost tla. U ovoj lekciji naučit Δ‡ete kako izraditi osnovne komponente sustava za automatsko zalijevanje koji reagira na vlaΕΎnost tla. TakoΔ‘er Δ‡ete naučiti o vremenskom aspektu - kako senzorima moΕΎe trebati neko vrijeme da reagiraju na promjene i kako aktuatorima moΕΎe trebati vremena da promijene svojstva koja senzori mjere. + +U ovoj lekciji obradit Δ‡emo: + +* [Upravljanje ureΔ‘ajima visoke snage s IoT ureΔ‘ajem niske snage](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Upravljanje relejem](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Upravljanje biljkom putem MQTT-a](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Vremensko usklaΔ‘ivanje senzora i aktuatora](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Dodavanje vremenskog usklaΔ‘ivanja na vaΕ‘ posluΕΎitelj za upravljanje biljkama](../../../../../2-farm/lessons/3-automated-plant-watering) + +## Upravljanje ureΔ‘ajima visoke snage s IoT ureΔ‘ajem niske snage + +IoT ureΔ‘aji koriste napon niske razine. Iako je to dovoljno za senzore i aktuatora niske snage poput LED-ica, to je premalo za upravljanje veΔ‡im hardverom, poput pumpe za vodu koja se koristi za navodnjavanje. Čak i male pumpe koje biste mogli koristiti za sobne biljke troΕ‘e previΕ‘e struje za IoT razvojni komplet i mogle bi oΕ‘tetiti ploču. + +> πŸŽ“ Struja, mjerena u amperima (A), predstavlja količinu električne energije koja prolazi kroz krug. Napon pruΕΎa potisak, dok struja pokazuje koliko se energije potiskuje. ViΕ‘e o struji moΕΎete pročitati na [stranici o električnoj struji na Wikipediji](https://wikipedia.org/wiki/Electric_current). + +RjeΕ‘enje za ovo je povezivanje pumpe na vanjski izvor napajanja i koriΕ‘tenje aktuatora za uključivanje pumpe, slično kao Ε‘to biste uključili svjetlo. Potrebna je mala količina energije (u obliku energije vaΕ‘eg tijela) da prstom pritisnete prekidač, čime se svjetlo povezuje s mreΕΎnim napajanjem od 110V/240V. + +![Prekidač uključuje napajanje za svjetlo](../../../../../translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hr.png) + +> πŸŽ“ [MreΕΎna struja](https://wikipedia.org/wiki/Mains_electricity) odnosi se na električnu energiju koja se isporučuje kuΔ‡ama i poslovnim prostorima putem nacionalne infrastrukture u mnogim dijelovima svijeta. + +βœ… IoT ureΔ‘aji obično pruΕΎaju 3.3V ili 5V, s manje od 1 ampera (1A) struje. Usporedite to s mreΕΎnom strujom koja je najčeΕ‘Δ‡e na 230V (120V u Sjevernoj Americi i 100V u Japanu) i moΕΎe napajati ureΔ‘aje koji troΕ‘e 30A. + +Postoji niz aktuatora koji to mogu učiniti, uključujuΔ‡i mehaničke ureΔ‘aje koje moΕΎete pričvrstiti na postojeΔ‡e prekidače i koji oponaΕ‘aju prst koji ih uključuje. Najpopularniji je relej. + +### Releji + +Relej je elektromehanički prekidač koji pretvara električni signal u mehanički pokret koji uključuje prekidač. Osnova releja je elektromagnet. + +> πŸŽ“ [Elektromagneti](https://wikipedia.org/wiki/Electromagnet) su magneti koji se stvaraju prolaskom električne struje kroz zavojnicu ΕΎice. Kada je struja uključena, zavojnica postaje magnetizirana. Kada je struja isključena, zavojnica gubi magnetizam. + +![Kada je uključen, elektromagnet stvara magnetsko polje, uključujuΔ‡i prekidač za izlazni krug](../../../../../translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hr.png) + +U releju, kontrolni krug napaja elektromagnet. Kada je elektromagnet uključen, povlači polugu koja pomiče prekidač, zatvarajuΔ‡i par kontakata i dovrΕ‘avajuΔ‡i izlazni krug. + +![Kada je isključen, elektromagnet ne stvara magnetsko polje, isključujuΔ‡i prekidač za izlazni krug](../../../../../translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hr.png) + +Kada je kontrolni krug isključen, elektromagnet se isključuje, oslobaΔ‘ajuΔ‡i polugu i otvarajuΔ‡i kontakte, isključujuΔ‡i izlazni krug. Releji su digitalni aktuatori - visoki signal prema releju ga uključuje, niski signal ga isključuje. + +Izlazni krug moΕΎe se koristiti za napajanje dodatnog hardvera, poput sustava za navodnjavanje. IoT ureΔ‘aj moΕΎe uključiti relej, dovrΕ‘avajuΔ‡i izlazni krug koji napaja sustav za navodnjavanje, i biljke se zalijevaju. IoT ureΔ‘aj zatim moΕΎe isključiti relej, prekidajuΔ‡i napajanje sustava za navodnjavanje, isključujuΔ‡i vodu. + +![Relej se uključuje, uključujuΔ‡i pumpu koja Ε‘alje vodu biljci](../../../../../images/strawberry-pump.gif) + +U videu iznad, relej se uključuje. LED na releju svijetli kako bi pokazao da je uključen (neke ploče releja imaju LED-ice koje pokazuju je li relej uključen ili isključen), a napajanje se Ε‘alje pumpi, uključujuΔ‡i je i pumpajuΔ‡i vodu u biljku. + +> πŸ’ Releji se takoΔ‘er mogu koristiti za prebacivanje izmeΔ‘u dva izlazna kruga umjesto uključivanja i isključivanja jednog. Kako se poluga pomiče, pomiče prekidač s dovrΕ‘avanja jednog izlaznog kruga na dovrΕ‘avanje drugog izlaznog kruga, obično dijeleΔ‡i zajedničku vezu napajanja ili zajedničku uzemljenje. + +βœ… IstraΕΎite: Postoji viΕ‘e vrsta releja, s razlikama poput toga uključuje li kontrolni krug relej kada je napajanje primijenjeno ili ga isključuje, ili s viΕ‘e izlaznih krugova. Saznajte viΕ‘e o tim različitim vrstama. + +Kada se poluga pomiče, obično moΕΎete čuti kako stvara kontakt s elektromagnetom uz jasno definiran zvuk klika. + +> πŸ’ Relej se moΕΎe spojiti tako da stvaranje veze zapravo prekida napajanje releja, isključujuΔ‡i relej, Ε‘to zatim Ε‘alje napajanje natrag na relej ponovno ga uključujuΔ‡i, i tako dalje. To znači da Δ‡e relej klikati nevjerojatno brzo stvarajuΔ‡i zujanje. Ovako su radila neka od prvih zvona na vratima. + +### Snaga releja + +Elektromagnetu nije potrebno puno energije za aktivaciju i povlačenje poluge, moΕΎe se kontrolirati pomoΔ‡u 3.3V ili 5V izlaza s IoT razvojnog kompleta. Izlazni krug moΕΎe nositi puno viΕ‘e energije, ovisno o releju, uključujuΔ‡i mreΕΎni napon ili čak veΔ‡e razine snage za industrijsku upotrebu. Na taj način IoT razvojni komplet moΕΎe kontrolirati sustav za navodnjavanje, od male pumpe za jednu biljku do masivnog industrijskog sustava za cijelu komercijalnu farmu. + +![Grove relej s označenim kontrolnim krugom, izlaznim krugom i relejem](../../../../../translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hr.png) + +Slika iznad prikazuje Grove relej. Kontrolni krug povezuje se s IoT ureΔ‘ajem i uključuje ili isključuje relej koristeΔ‡i 3.3V ili 5V. Izlazni krug ima dva terminala, bilo koji moΕΎe biti napajanje ili uzemljenje. Izlazni krug moΕΎe podnijeti do 250V pri 10A, Ε‘to je dovoljno za niz ureΔ‘aja na mreΕΎno napajanje. MoΕΎete nabaviti releje koji mogu podnijeti joΕ‘ veΔ‡e razine snage. + +![Pumpa spojena preko releja](../../../../../translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hr.png) + +Na slici iznad, napajanje se isporučuje pumpi putem releja. Crvena ΕΎica povezuje +5V terminal USB napajanja s jednim terminalom izlaznog kruga releja, a druga crvena ΕΎica povezuje drugi terminal izlaznog kruga s pumpom. Crna ΕΎica povezuje pumpu s uzemljenjem na USB napajanju. Kada se relej uključi, dovrΕ‘ava krug, Ε‘aljuΔ‡i 5V na pumpu, uključujuΔ‡i pumpu. + +## Upravljanje relejem + +MoΕΎete upravljati relejem s vaΕ‘eg IoT razvojnog kompleta. + +### Zadatak - upravljanje relejem + +ProΔ‘ite kroz odgovarajuΔ‡i vodič za upravljanje relejem pomoΔ‡u vaΕ‘eg IoT ureΔ‘aja: + +* [Arduino - Wio Terminal](wio-terminal-relay.md) +* [Jednopločno računalo - Raspberry Pi](pi-relay.md) +* [Jednopločno računalo - Virtualni ureΔ‘aj](virtual-device-relay.md) + +## Upravljanje biljkom putem MQTT-a + +Do sada je vaΕ‘ relej kontroliran izravno od strane IoT ureΔ‘aja na temelju jednog očitanja vlaΕΎnosti tla. U komercijalnom sustavu za navodnjavanje, logika upravljanja bit Δ‡e centralizirana, omoguΔ‡ujuΔ‡i donoΕ‘enje odluka o zalijevanju koristeΔ‡i podatke s viΕ‘e senzora i omoguΔ‡ujuΔ‡i promjene konfiguracije na jednom mjestu. Kako biste to simulirali, moΕΎete upravljati relejem putem MQTT-a. + +### Zadatak - upravljanje relejem putem MQTT-a + +1. Dodajte odgovarajuΔ‡e MQTT biblioteke/pip pakete i kod u svoj projekt `soil-moisture-sensor` za povezivanje s MQTT-om. Nazovite ID klijenta kao `soilmoisturesensor_client` s prefiksom vaΕ‘eg ID-a. + + > ⚠️ MoΕΎete se referirati na [upute za povezivanje s MQTT-om u projektu 1, lekcija 4 ako je potrebno](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt). + +1. Dodajte odgovarajuΔ‡i kod ureΔ‘aja za slanje telemetrije s postavkama vlaΕΎnosti tla. Za poruku telemetrije, nazovite svojstvo `soil_moisture`. + + > ⚠️ MoΕΎete se referirati na [upute za slanje telemetrije na MQTT u projektu 1, lekcija 4 ako je potrebno](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device). + +1. Kreirajte lokalni posluΕΎiteljski kod za pretplatu na telemetriju i slanje naredbe za upravljanje relejem u mapi nazvanoj `soil-moisture-sensor-server`. Nazovite svojstvo u poruci naredbe `relay_on`, i postavite ID klijenta kao `soilmoisturesensor_server` s prefiksom vaΕ‘eg ID-a. ZadrΕΎite istu strukturu kao kod posluΕΎitelja koji ste napisali za projekt 1, lekcija 4 jer Δ‡ete kasnije dodavati ovaj kod. + + > ⚠️ MoΕΎete se referirati na [upute za slanje telemetrije na MQTT](../../../1-getting-started/lessons/4-connect-internet/README.md#write-the-server-code) i [slanje naredbi putem MQTT-a](../../../1-getting-started/lessons/4-connect-internet/README.md#send-commands-to-the-mqtt-broker) u projektu 1, lekcija 4 ako je potrebno. + +1. Dodajte odgovarajuΔ‡i kod ureΔ‘aja za upravljanje relejem iz primljenih naredbi, koristeΔ‡i svojstvo `relay_on` iz poruke. PoΕ‘aljite true za `relay_on` ako je `soil_moisture` veΔ‡i od 450, inače poΕ‘aljite false, isto kao logika koju ste dodali za IoT ureΔ‘aj ranije. + + > ⚠️ MoΕΎete se referirati na [upute za odgovaranje na naredbe iz MQTT-a u projektu 1, lekcija 4 ako je potrebno](../../../1-getting-started/lessons/4-connect-internet/README.md#handle-commands-on-the-iot-device). + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-mqtt](../../../../../2-farm/lessons/3-automated-plant-watering/code-mqtt). + +Provjerite je li kod pokrenut na vaΕ‘em ureΔ‘aju i lokalnom posluΕΎitelju, i testirajte ga mijenjanjem razine vlaΕΎnosti tla, bilo promjenom vrijednosti koje Ε‘alje virtualni senzor ili promjenom razine vlage tla dodavanjem vode ili uklanjanjem senzora iz tla. + +## Vremensko usklaΔ‘ivanje senzora i aktuatora + +U lekciji 3 izradili ste noΔ‡no svjetlo - LED-icu koja se uključuje čim senzor svjetla detektira nisku razinu svjetlosti. Senzor svjetla detektirao je promjenu razine svjetlosti trenutno, a ureΔ‘aj je mogao brzo reagirati, ograničen samo duljinom kaΕ‘njenja u funkciji `loop` ili `while True:` petlji. Kao IoT programer, ne moΕΎete uvijek računati na tako brz povratni ciklus. + +### Vremensko usklaΔ‘ivanje za vlaΕΎnost tla + +Ako ste radili prethodnu lekciju o vlaΕΎnosti tla koristeΔ‡i fizički senzor, mogli ste primijetiti da je trebalo nekoliko sekundi da očitanje vlaΕΎnosti tla padne nakon Ε‘to ste zalili biljku. Ovo nije zato Ε‘to je senzor spor, veΔ‡ zato Ε‘to vodi treba vremena da se upije kroz tlo. +πŸ’ Ako ste zalijevali preblizu senzoru, moΕΎda ste primijetili da je očitanje brzo palo, a zatim se ponovno poveΔ‡alo - to je uzrokovano time Ε‘to se voda blizu senzora Ε‘iri kroz ostatak tla, smanjujuΔ‡i vlagu tla u blizini senzora. +![Mjerenje vlaΕΎnosti tla od 658 ne mijenja se tijekom zalijevanja, veΔ‡ pada na 320 nakon zalijevanja kada voda prodre kroz tlo](../../../../../translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hr.png) + +Na gornjem dijagramu očitanje vlaΕΎnosti tla pokazuje 658. Biljka se zalijeva, ali ovo očitanje se ne mijenja odmah jer voda joΕ‘ nije stigla do senzora. Zalijevanje moΕΎe zavrΕ‘iti prije nego Ε‘to voda stigne do senzora, a vrijednost se smanji kako bi odraΕΎavala novu razinu vlaΕΎnosti. + +Ako biste pisali kod za upravljanje sustavom navodnjavanja putem releja na temelju razine vlaΕΎnosti tla, trebali biste uzeti u obzir ovo kaΕ‘njenje i implementirati pametnije vremensko upravljanje u svoj IoT ureΔ‘aj. + +βœ… Odvojite trenutak da razmislite kako biste to mogli učiniti. + +### Upravljanje vremenom senzora i aktuatora + +Zamislite da ste dobili zadatak izgraditi sustav navodnjavanja za farmu. Na temelju vrste tla, idealna razina vlaΕΎnosti tla za uzgojene biljke odgovara analognom očitanju napona od 400-450. + +Mogli biste programirati ureΔ‘aj na isti način kao noΔ‡no svjetlo - dok god senzor očitava iznad 450, uključite relej kako biste uključili pumpu. Problem je Ε‘to vodi treba neko vrijeme da stigne od pumpe, kroz tlo, do senzora. Senzor Δ‡e zaustaviti vodu kada otkrije razinu od 450, ali razina vode Δ‡e nastaviti padati dok se pumpana voda upija kroz tlo. Krajnji rezultat je rasipanje vode i rizik od oΕ‘teΔ‡enja korijena. + +βœ… Zapamtite - previΕ‘e vode moΕΎe biti jednako loΕ‘e za biljke kao i premalo, a takoΔ‘er troΕ‘i dragocjeni resurs. + +Bolje rjeΕ‘enje je razumjeti da postoji kaΕ‘njenje izmeΔ‘u uključivanja aktuatora i promjene svojstva koje senzor očitava. To znači da senzor ne samo da treba pričekati neko vrijeme prije nego Ε‘to ponovno izmjeri vrijednost, veΔ‡ aktuator treba biti isključen neko vrijeme prije nego Ε‘to se izvrΕ‘i sljedeΔ‡e mjerenje senzora. + +Koliko dugo relej treba biti uključen svaki put? Bolje je biti oprezan i uključiti relej na kratko vrijeme, zatim pričekati da se voda upije, pa ponovno provjeriti razinu vlaΕΎnosti. Uostalom, uvijek moΕΎete ponovno uključiti pumpu kako biste dodali viΕ‘e vode, ali ne moΕΎete ukloniti vodu iz tla. + +> πŸ’ Ovakva kontrola vremena vrlo je specifična za IoT ureΔ‘aj koji gradite, svojstvo koje mjerite te senzore i aktuatore koji se koriste. + +![Biljka jagode povezana s vodom putem pumpe, pri čemu je pumpa povezana s relejem. Relej i senzor vlaΕΎnosti tla u biljci povezani su s Raspberry Pi-jem](../../../../../translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hr.png) + +Na primjer, imam biljku jagode sa senzorom vlaΕΎnosti tla i pumpom kojom upravlja relej. Primijetio sam da kada dodam vodu, treba oko 20 sekundi da se očitanje vlaΕΎnosti tla stabilizira. To znači da moram isključiti relej i pričekati 20 sekundi prije nego Ε‘to provjerim razinu vlaΕΎnosti. Radije bih imao premalo vode nego previΕ‘e - uvijek mogu ponovno uključiti pumpu, ali ne mogu izvaditi vodu iz biljke. + +![Korak 1, uzmi mjerenje. Korak 2, dodaj vodu. Korak 3, pričekaj da voda prodre kroz tlo. Korak 4, ponovno uzmi mjerenje](../../../../../translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hr.png) + +To znači da bi najbolji proces bio ciklus zalijevanja koji izgleda ovako: + +* Uključite pumpu na 5 sekundi +* Pričekajte 20 sekundi +* Provjerite vlaΕΎnost tla +* Ako je razina joΕ‘ uvijek iznad potrebne, ponovite gore navedene korake + +5 sekundi moglo bi biti predugo za pumpu, pogotovo ako su razine vlaΕΎnosti samo malo iznad potrebne razine. Najbolji način da saznate koje vrijeme koristiti je isprobati, zatim prilagoditi kada imate podatke senzora, uz stalnu povratnu petlju. To čak moΕΎe dovesti do preciznijeg vremenskog upravljanja, poput uključivanja pumpe na 1 sekundu za svakih 100 iznad potrebne vlaΕΎnosti tla, umjesto fiksnih 5 sekundi. + +βœ… IstraΕΎite: Postoje li drugi vremenski čimbenici koje treba uzeti u obzir? MoΕΎe li se biljka zalijevati bilo kada kada je vlaΕΎnost tla preniska, ili postoje odreΔ‘ena doba dana koja su dobra i loΕ‘a za zalijevanje biljaka? + +> πŸ’ Prognoze vremena takoΔ‘er se mogu uzeti u obzir pri upravljanju automatiziranim sustavima zalijevanja za vanjski uzgoj. Ako se očekuje kiΕ‘a, zalijevanje se moΕΎe odgoditi dok kiΕ‘a ne zavrΕ‘i. U tom trenutku tlo moΕΎe biti dovoljno vlaΕΎno da ne treba zalijevanje, Ε‘to je mnogo učinkovitije nego troΕ‘iti vodu zalijevanjem neposredno prije kiΕ‘e. + +## Dodajte vremensko upravljanje svom posluΕΎitelju za kontrolu biljaka + +Kod posluΕΎitelja moΕΎe se modificirati kako bi se dodala kontrola oko vremena ciklusa zalijevanja i čekanja da se razine vlaΕΎnosti tla promijene. Logika posluΕΎitelja za upravljanje vremenom releja je: + +1. Primljena telemetrijska poruka +1. Provjerite razinu vlaΕΎnosti tla +1. Ako je u redu, ne radite niΕ‘ta. Ako je očitanje previsoko (Ε‘to znači da je vlaΕΎnost tla preniska), onda: + 1. PoΕ‘aljite naredbu za uključivanje releja + 1. Pričekajte 5 sekundi + 1. PoΕ‘aljite naredbu za isključivanje releja + 1. Pričekajte 20 sekundi da se razine vlaΕΎnosti tla stabiliziraju + +Ciklus zalijevanja, proces od primanja telemetrijske poruke do spremnosti za obradu razina vlaΕΎnosti tla ponovno, traje oko 25 sekundi. Telemetriju Ε‘aljemo svakih 10 sekundi, pa postoji preklapanje gdje se poruka prima dok posluΕΎitelj čeka da se razine vlaΕΎnosti tla stabiliziraju, Ε‘to bi moglo pokrenuti novi ciklus zalijevanja. + +Postoje dvije opcije za rjeΕ‘avanje ovog problema: + +* Promijenite kod IoT ureΔ‘aja da Ε‘alje telemetriju samo svake minute, na taj način ciklus zalijevanja Δ‡e biti dovrΕ‘en prije nego Ε‘to se poΕ‘alje sljedeΔ‡a poruka +* Odjavite se s telemetrije tijekom ciklusa zalijevanja + +Prva opcija nije uvijek dobro rjeΕ‘enje za velike farme. Poljoprivrednik moΕΎda ΕΎeli zabiljeΕΎiti razine vlaΕΎnosti tla dok se tlo zalijeva za kasniju analizu, na primjer kako bi bio svjestan protoka vode u različitim područjima na farmi i usmjerio ciljano zalijevanje. Druga opcija je bolja - kod jednostavno ignorira telemetriju kada je ne moΕΎe koristiti, ali telemetrija je i dalje dostupna za druge usluge koje se mogu pretplatiti na nju. + +> πŸ’ IoT podaci ne Ε‘alju se samo s jednog ureΔ‘aja na jednu uslugu, veΔ‡ mnogi ureΔ‘aji mogu slati podatke brokeru, a mnoge usluge mogu sluΕ‘ati podatke s brokera. Na primjer, jedna usluga moΕΎe sluΕ‘ati podatke o vlaΕΎnosti tla i pohraniti ih u bazu podataka za kasniju analizu. Druga usluga takoΔ‘er moΕΎe sluΕ‘ati istu telemetriju kako bi upravljala sustavom navodnjavanja. + +### Zadatak - dodajte vremensko upravljanje svom posluΕΎitelju za kontrolu biljaka + +AΕΎurirajte kod posluΕΎitelja kako bi relej radio 5 sekundi, a zatim čekao 20 sekundi. + +1. Otvorite mapu `soil-moisture-sensor-server` u VS Code-u ako veΔ‡ nije otvorena. Provjerite je li virtualno okruΕΎenje aktivirano. + +1. Otvorite datoteku `app.py` + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` ispod postojeΔ‡ih uvoza: + + ```python + import threading + ``` + + Ova naredba uvozi `threading` iz Python biblioteka, Ε‘to omoguΔ‡uje Pythonu da izvrΕ‘ava drugi kod dok čeka. + +1. Dodajte sljedeΔ‡i kod prije funkcije `handle_telemetry` koja obraΔ‘uje telemetrijske poruke primljene od koda posluΕΎitelja: + + ```python + water_time = 5 + wait_time = 20 + ``` + + Ovo definira koliko dugo treba raditi relej (`water_time`) i koliko dugo treba čekati nakon toga da se provjeri vlaΕΎnost tla (`wait_time`). + +1. Ispod ovog koda dodajte sljedeΔ‡e: + + ```python + def send_relay_command(client, state): + command = { 'relay_on' : state } + print("Sending message:", command) + client.publish(server_command_topic, json.dumps(command)) + ``` + + Ovaj kod definira funkciju nazvanu `send_relay_command` koja Ε‘alje naredbu putem MQTT-a za upravljanje relejem. Telemetrija se stvara kao rječnik, a zatim se pretvara u JSON string. Vrijednost proslijeΔ‘ena u `state` odreΔ‘uje treba li relej biti uključen ili isključen. + +1. Nakon funkcije `send_relay_code`, dodajte sljedeΔ‡i kod: + + ```python + def control_relay(client): + print("Unsubscribing from telemetry") + mqtt_client.unsubscribe(client_telemetry_topic) + + send_relay_command(client, True) + time.sleep(water_time) + send_relay_command(client, False) + + time.sleep(wait_time) + + print("Subscribing to telemetry") + mqtt_client.subscribe(client_telemetry_topic) + ``` + + Ovo definira funkciju za upravljanje relejem na temelju potrebnog vremena. Počinje odjavljivanjem s telemetrije kako poruke o vlaΕΎnosti tla ne bi bile obraΔ‘ene dok se zalijevanje odvija. Zatim Ε‘alje naredbu za uključivanje releja. Zatim čeka `water_time` prije nego Ε‘to poΕ‘alje naredbu za isključivanje releja. Na kraju čeka da se razine vlaΕΎnosti tla stabiliziraju tijekom `wait_time` sekundi. Zatim se ponovno prijavljuje na telemetriju. + +1. Promijenite funkciju `handle_telemetry` u sljedeΔ‡e: + + ```python + def handle_telemetry(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + if payload['soil_moisture'] > 450: + threading.Thread(target=control_relay, args=(client,)).start() + ``` + + Ovaj kod provjerava razinu vlaΕΎnosti tla. Ako je veΔ‡a od 450, tlu je potrebno zalijevanje, pa poziva funkciju `control_relay`. Ova funkcija se pokreΔ‡e na zasebnom threadu, koji radi u pozadini. + +1. Provjerite radi li vaΕ‘ IoT ureΔ‘aj, zatim pokrenite ovaj kod. Promijenite razine vlaΕΎnosti tla i promatrajte Ε‘to se dogaΔ‘a s relejem - trebao bi se uključiti na 5 sekundi, a zatim ostati isključen najmanje 20 sekundi, uključujuΔ‡i se samo ako razine vlaΕΎnosti tla nisu dovoljne. + + ```output + (.venv) ➜ soil-moisture-sensor-server βœ— python app.py + Message received: {'soil_moisture': 457} + Unsubscribing from telemetry + Sending message: {'relay_on': True} + Sending message: {'relay_on': False} + Subscribing to telemetry + Message received: {'soil_moisture': 302} + ``` + + Dobar način za testiranje ovoga u simuliranom sustavu navodnjavanja je koriΕ‘tenje suhog tla, zatim ručno ulijevanje vode dok je relej uključen, prestajuΔ‡i ulijevati kada se relej isključi. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-timing](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing). + +> πŸ’ Ako ΕΎelite koristiti pumpu za izgradnju stvarnog sustava navodnjavanja, moΕΎete koristiti [6V vodenu pumpu](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) s [USB terminalnim napajanjem](https://www.adafruit.com/product/3628). Provjerite je li napajanje prema ili od pumpe povezano putem releja. + +--- + +## πŸš€ Izazov + +MoΕΎete li smisliti druge IoT ili električne ureΔ‘aje koji imaju sličan problem gdje treba neko vrijeme da rezultati aktuatora stignu do senzora? Vjerojatno imate nekoliko takvih ureΔ‘aja u svojoj kuΔ‡i ili Ε‘koli. + +* Koja svojstva mjere? +* Koliko dugo traje promjena svojstva nakon Ε‘to se aktuator koristi? +* Je li u redu da svojstvo promijeni vrijednost izvan potrebne? +* Kako se moΕΎe vratiti na potrebnu vrijednost ako je potrebno? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14) + +## Pregled i samostalno učenje + +* Pročitajte viΕ‘e o relejima, uključujuΔ‡i njihovu povijesnu upotrebu u telefonskim centralama, na [Wikipedia stranici o relejima](https://wikipedia.org/wiki/Relay). + +## Zadatak + +[Izgradite učinkovitiji ciklus zalijevanja](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/3-automated-plant-watering/assignment.md b/translations/hr/2-farm/lessons/3-automated-plant-watering/assignment.md new file mode 100644 index 00000000..7cb97751 --- /dev/null +++ b/translations/hr/2-farm/lessons/3-automated-plant-watering/assignment.md @@ -0,0 +1,54 @@ + +# Izgradite učinkovitiji ciklus zalijevanja + +## Upute + +Ova lekcija obuhvatila je kako upravljati relejem putem podataka senzora, a taj relej moΕΎe upravljati pumpom za sustav navodnjavanja. Za odreΔ‘eni volumen tla, rad pumpe tijekom fiksnog vremenskog razdoblja uvijek bi trebao imati isti učinak na vlaΕΎnost tla. To znači da moΕΎete dobiti ideju o tome koliko sekundi navodnjavanja odgovara odreΔ‘enom padu očitanja vlaΕΎnosti tla. KoristeΔ‡i te podatke, moΕΎete izgraditi kontroliraniji sustav navodnjavanja. + +Za ovaj zadatak izračunat Δ‡ete koliko dugo pumpa treba raditi za odreΔ‘eni porast vlaΕΎnosti tla. + +> ⚠️ Ako koristite virtualni IoT hardver, moΕΎete proΔ‡i kroz ovaj proces, ali simulirajte rezultate ručno poveΔ‡avajuΔ‡i očitanje vlaΕΎnosti tla za fiksni iznos po sekundi dok je relej uključen. + +1. Započnite s suhim tlom. Izmjerite vlaΕΎnost tla. + +1. Dodajte fiksnu količinu vode, bilo pokretanjem pumpe na 1 sekundu ili ulijevanjem fiksne količine vode. + + > Pumpa bi uvijek trebala raditi konstantnom brzinom, tako da svaka sekunda rada pumpe isporučuje istu količinu vode. + +1. Pričekajte dok se razina vlaΕΎnosti tla ne stabilizira i zabiljeΕΎite očitanje. + +1. Ponovite ovo viΕ‘e puta i stvorite tablicu rezultata. Primjer takve tablice dan je u nastavku. + + | Ukupno vrijeme rada pumpe | VlaΕΎnost tla | Pad | + | --- | --: | -: | + | Suho | 643 | 0 | + | 1s | 621 | 22 | + | 2s | 601 | 20 | + | 3s | 579 | 22 | + | 4s | 560 | 19 | + | 5s | 539 | 21 | + | 6s | 521 | 18 | + +1. Izračunajte prosječni porast vlaΕΎnosti tla po sekundi dodane vode. U gornjem primjeru, svaka sekunda dodane vode smanjuje očitanje za prosječno 20.3. + +1. Koristite ove podatke za poboljΕ‘anje učinkovitosti koda na serveru, pokreΔ‡uΔ‡i pumpu za potrebno vrijeme kako biste postigli ΕΎeljenu razinu vlaΕΎnosti tla. + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | --------- | -------- | ----------------- | +| Prikupljanje podataka o vlaΕΎnosti tla | Uspijeva prikupiti viΕ‘e očitanja nakon dodavanja fiksnih količina vode | Uspijeva prikupiti neka očitanja s fiksnim količinama vode | MoΕΎe prikupiti samo jedno ili dva očitanja, ili ne uspijeva koristiti fiksne količine vode | +| Kalibracija koda na serveru | Uspijeva izračunati prosječni pad očitanja vlaΕΎnosti tla i aΕΎurirati kod na serveru koristeΔ‡i te podatke | Uspijeva izračunati prosječni pad, ali ne moΕΎe aΕΎurirati kod na serveru, ili ne uspijeva ispravno izračunati prosjek, ali koristi tu vrijednost za ispravno aΕΎuriranje koda na serveru | Ne uspijeva izračunati prosjek ili aΕΎurirati kod na serveru | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/3-automated-plant-watering/pi-relay.md b/translations/hr/2-farm/lessons/3-automated-plant-watering/pi-relay.md new file mode 100644 index 00000000..e22aa2f8 --- /dev/null +++ b/translations/hr/2-farm/lessons/3-automated-plant-watering/pi-relay.md @@ -0,0 +1,123 @@ + +# Upravljanje relejem - Raspberry Pi + +U ovom dijelu lekcije, dodat Δ‡ete relej svom Raspberry Pi-ju uz senzor vlaΕΎnosti tla i upravljati njime na temelju razine vlaΕΎnosti tla. + +## Hardver + +Raspberry Pi treba relej. + +Relej koji Δ‡ete koristiti je [Grove relej](https://www.seeedstudio.com/Grove-Relay.html), relej koji je normalno otvoren (Ε‘to znači da je izlazni krug otvoren ili prekinut kada nema signala poslanog na relej) i moΕΎe podnijeti izlazne krugove do 250V i 10A. + +Ovo je digitalni aktuator, pa se povezuje na digitalni pin na Grove Base Hat-u. + +### Povezivanje releja + +Grove relej moΕΎe se povezati s Raspberry Pi-jem. + +#### Zadatak + +PoveΕΎite relej. + +![Grove relej](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na releju. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Raspberry Pi isključen, spojite drugi kraj Grove kabela na digitalnu utičnicu označenu **D5** na Grove Base Hat-u pričvrΕ‘Δ‡enom na Pi. Ova utičnica je druga s lijeva, u redu utičnica pored GPIO pinova. Ostavite senzor vlaΕΎnosti tla povezan na utičnicu **A0**. + +![Grove relej povezan na utičnicu D5, a senzor vlaΕΎnosti tla povezan na utičnicu A0](../../../../../translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hr.png) + +1. Umetnite senzor vlaΕΎnosti tla u tlo, ako veΔ‡ nije iz prethodne lekcije. + +## Programiranje releja + +Sada se Raspberry Pi moΕΎe programirati za koriΕ‘tenje povezanog releja. + +### Zadatak + +Programirajte ureΔ‘aj. + +1. Uključite Pi i pričekajte da se pokrene. + +1. Otvorite projekt `soil-moisture-sensor` iz prethodne lekcije u VS Code-u ako veΔ‡ nije otvoren. Dodavat Δ‡ete kod ovom projektu. + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` ispod postojeΔ‡ih uvoza: + + ```python + from grove.grove_relay import GroveRelay + ``` + + Ova naredba uvozi `GroveRelay` iz Grove Python knjiΕΎnica za interakciju s Grove relejem. + +1. Dodajte sljedeΔ‡i kod ispod deklaracije klase `ADC` kako biste stvorili instancu `GroveRelay`: + + ```python + relay = GroveRelay(5) + ``` + + Ovo stvara relej koristeΔ‡i pin **D5**, digitalni pin na koji ste spojili relej. + +1. Kako biste testirali radi li relej, dodajte sljedeΔ‡e u petlju `while True:`: + + ```python + relay.on() + time.sleep(.5) + relay.off() + ``` + + Kod uključuje relej, čeka 0,5 sekundi, a zatim ga isključuje. + +1. Pokrenite Python aplikaciju. Relej Δ‡e se uključivati i isključivati svakih 10 sekundi, s pola sekunde kaΕ‘njenja izmeΔ‘u uključivanja i isključivanja. Čut Δ‡ete kako relej klikne pri uključivanju, a zatim pri isključivanju. LED na Grove ploči Δ‡e svijetliti kada je relej uključen, a ugasiti se kada je isključen. + + ![Relej se uključuje i isključuje](../../../../../images/relay-turn-on-off.gif) + +## Upravljanje relejem na temelju vlaΕΎnosti tla + +Sada kada relej radi, moΕΎe se kontrolirati u skladu s očitanjima vlaΕΎnosti tla. + +### Zadatak + +Upravljajte relejem. + +1. IzbriΕ‘ite 3 linije koda koje ste dodali za testiranje releja. Zamijenite ih sljedeΔ‡im kodom: + + ```python + if soil_moisture > 450: + print("Soil Moisture is too low, turning relay on.") + relay.on() + else: + print("Soil Moisture is ok, turning relay off.") + relay.off() + ``` + + Ovaj kod provjerava razinu vlaΕΎnosti tla iz senzora vlaΕΎnosti tla. Ako je iznad 450, uključuje relej, a isključuje ga kada padne ispod 450. + + > πŸ’ Zapamtite, kapacitivni senzor vlaΕΎnosti tla očitava: Ε‘to je niΕΎa razina vlaΕΎnosti tla, to je viΕ‘e vlage u tlu i obrnuto. + +1. Pokrenite Python aplikaciju. Vidjet Δ‡ete kako se relej uključuje ili isključuje ovisno o razini vlaΕΎnosti tla. Isprobajte u suhom tlu, a zatim dodajte vodu. + + ```output + Soil Moisture: 638 + Soil Moisture is too low, turning relay on. + Soil Moisture: 452 + Soil Moisture is too low, turning relay on. + Soil Moisture: 347 + Soil Moisture is ok, turning relay off. + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-relay/pi](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/pi). + +πŸ˜€ VaΕ‘ program za upravljanje relejem pomoΔ‡u senzora vlaΕΎnosti tla bio je uspjeΕ‘an! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md b/translations/hr/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md new file mode 100644 index 00000000..5dae24f5 --- /dev/null +++ b/translations/hr/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md @@ -0,0 +1,127 @@ + +# Upravljanje relejem - Virtualni IoT ureΔ‘aj + +U ovom dijelu lekcije, dodat Δ‡ete relej svom virtualnom IoT ureΔ‘aju uz senzor vlaΕΎnosti tla i upravljati njime na temelju razine vlaΕΎnosti tla. + +## Virtualni hardver + +Virtualni IoT ureΔ‘aj koristit Δ‡e simulirani Grove relej. Ovo omoguΔ‡uje da laboratorij ostane isti kao koriΕ‘tenje Raspberry Pi-ja s fizičkim Grove relejem. + +Na fizičkom IoT ureΔ‘aju, relej bi bio relej koji je normalno otvoren (Ε‘to znači da je izlazni krug otvoren ili odspojen kada relej ne prima signal). Takav relej moΕΎe podnijeti izlazne krugove do 250V i 10A. + +### Dodavanje releja u CounterFit + +Za koriΕ‘tenje virtualnog releja, potrebno ga je dodati u CounterFit aplikaciju. + +#### Zadatak + +Dodajte relej u CounterFit aplikaciju. + +1. Otvorite projekt `soil-moisture-sensor` iz proΕ‘le lekcije u VS Code-u ako veΔ‡ nije otvoren. Dodat Δ‡ete na ovaj projekt. + +1. Provjerite je li CounterFit web aplikacija pokrenuta. + +1. Kreirajte relej: + + 1. U okviru *Create actuator* u panelu *Actuators*, otvorite padajuΔ‡i izbornik *Actuator type* i odaberite *Relay*. + + 1. Postavite *Pin* na *5*. + + 1. Kliknite gumb **Add** za kreiranje releja na pinu 5. + + ![Postavke releja](../../../../../translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hr.png) + + Relej Δ‡e biti kreiran i pojavit Δ‡e se na popisu aktuatora. + + ![Kreirani relej](../../../../../translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hr.png) + +## Programiranje releja + +Aplikacija za senzor vlaΕΎnosti tla sada se moΕΎe programirati za koriΕ‘tenje virtualnog releja. + +### Zadatak + +Programirajte virtualni ureΔ‘aj. + +1. Otvorite projekt `soil-moisture-sensor` iz proΕ‘le lekcije u VS Code-u ako veΔ‡ nije otvoren. Dodat Δ‡ete na ovaj projekt. + +1. Dodajte sljedeΔ‡i kod u datoteku `app.py` ispod postojeΔ‡ih uveza: + + ```python + from counterfit_shims_grove.grove_relay import GroveRelay + ``` + + Ova naredba uvozi `GroveRelay` iz Grove Python shim biblioteka za interakciju s virtualnim Grove relejem. + +1. Dodajte sljedeΔ‡i kod ispod deklaracije klase `ADC` za kreiranje instance `GroveRelay`: + + ```python + relay = GroveRelay(5) + ``` + + Ovo kreira relej koristeΔ‡i pin **5**, pin na koji ste povezali relej. + +1. Za testiranje rada releja, dodajte sljedeΔ‡e u petlju `while True:`: + + ```python + relay.on() + time.sleep(.5) + relay.off() + ``` + + Kod uključuje relej, čeka 0.5 sekundi, zatim isključuje relej. + +1. Pokrenite Python aplikaciju. Relej Δ‡e se uključivati i isključivati svakih 10 sekundi, s pola sekunde kaΕ‘njenja izmeΔ‘u uključivanja i isključivanja. Vidjet Δ‡ete kako se virtualni relej u CounterFit aplikaciji zatvara i otvara dok se relej uključuje i isključuje. + + ![Virtualni relej se uključuje i isključuje](../../../../../images/virtual-relay-turn-on-off.gif) + +## Upravljanje relejem na temelju vlaΕΎnosti tla + +Sada kada relej radi, moΕΎe se kontrolirati na temelju očitanja vlaΕΎnosti tla. + +### Zadatak + +Kontrolirajte relej. + +1. ObriΕ‘ite 3 linije koda koje ste dodali za testiranje releja. Zamijenite ih sljedeΔ‡im kodom na istom mjestu: + + ```python + if soil_moisture > 450: + print("Soil Moisture is too low, turning relay on.") + relay.on() + else: + print("Soil Moisture is ok, turning relay off.") + relay.off() + ``` + + Ovaj kod provjerava razinu vlaΕΎnosti tla iz senzora vlaΕΎnosti tla. Ako je iznad 450, uključuje relej, a isključuje ga ako padne ispod 450. + + > πŸ’ Zapamtite, kapacitivni senzor vlaΕΎnosti tla očitava: Ε‘to je niΕΎa razina vlaΕΎnosti tla, to je viΕ‘e vlage u tlu i obrnuto. + +1. Pokrenite Python aplikaciju. Vidjet Δ‡ete kako se relej uključuje ili isključuje ovisno o razini vlaΕΎnosti tla. Promijenite *Value* ili *Random* postavke za senzor vlaΕΎnosti tla kako biste vidjeli promjenu vrijednosti. + + ```output + Soil Moisture: 638 + Soil Moisture is too low, turning relay on. + Soil Moisture: 452 + Soil Moisture is too low, turning relay on. + Soil Moisture: 347 + Soil Moisture is ok, turning relay off. + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-relay/virtual-device](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device). + +πŸ˜€ VaΕ‘ program za virtualni senzor vlaΕΎnosti tla koji kontrolira relej bio je uspjeΕ‘an! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md b/translations/hr/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md new file mode 100644 index 00000000..62916c5b --- /dev/null +++ b/translations/hr/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md @@ -0,0 +1,121 @@ + +# Kontrola releja - Wio Terminal + +U ovom dijelu lekcije, dodat Δ‡ete relej svom Wio Terminalu uz senzor vlaΕΎnosti tla i kontrolirati ga na temelju razine vlaΕΎnosti tla. + +## Hardver + +Wio Terminalu je potreban relej. + +Relej koji Δ‡ete koristiti je [Grove relej](https://www.seeedstudio.com/Grove-Relay.html), relej koji je obično otvoren (Ε‘to znači da je izlazni krug otvoren ili odspojen kada nema signala poslanog releju) i moΕΎe podnijeti izlazne krugove do 250V i 10A. + +Ovo je digitalni aktuator, pa se povezuje na digitalne pinove na Wio Terminalu. Kombinirani analogni/digitalni port veΔ‡ je u upotrebi sa senzorom vlaΕΎnosti tla, pa se ovaj priključuje na drugi port, koji je kombinirani I2C i digitalni port. + +### PoveΕΎite relej + +Grove relej moΕΎe se povezati na digitalni port Wio Terminala. + +#### Zadatak + +PoveΕΎite relej. + +![Grove relej](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na releju. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Wio Terminal odspojen od vaΕ‘eg računala ili drugog izvora napajanja, poveΕΎite drugi kraj Grove kabela s lijevom Grove utičnicom na Wio Terminalu gledajuΔ‡i ekran. Ostavite senzor vlaΕΎnosti tla povezan s desnom utičnicom. + +![Grove relej povezan s lijevom utičnicom, a senzor vlaΕΎnosti tla povezan s desnom utičnicom](../../../../../translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hr.png) + +1. Umetnite senzor vlaΕΎnosti tla u tlo, ako veΔ‡ nije umetnut iz prethodne lekcije. + +## Programiranje releja + +Wio Terminal sada moΕΎe biti programiran za koriΕ‘tenje povezanog releja. + +### Zadatak + +Programirajte ureΔ‘aj. + +1. Otvorite projekt `soil-moisture-sensor` iz prethodne lekcije u VS Code-u ako veΔ‡ nije otvoren. Dodavat Δ‡ete kod ovom projektu. + +2. Ne postoji biblioteka za ovaj aktuator - to je digitalni aktuator koji se kontrolira visokim ili niskim signalom. Da biste ga uključili, Ε‘aljete visoki signal na pin (3.3V), a da biste ga isključili, Ε‘aljete niski signal (0V). To moΕΎete učiniti pomoΔ‡u ugraΔ‘ene Arduino funkcije [`digitalWrite`](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/). Započnite dodavanjem sljedeΔ‡eg na dno funkcije `setup` kako biste postavili kombinirani I2C/digitalni port kao izlazni pin za slanje napona releju: + + ```cpp + pinMode(PIN_WIRE_SCL, OUTPUT); + ``` + + `PIN_WIRE_SCL` je broj porta za kombinirani I2C/digitalni port. + +1. Da biste testirali radi li relej, dodajte sljedeΔ‡e u funkciju `loop`, ispod zavrΕ‘nog `delay`: + + ```cpp + digitalWrite(PIN_WIRE_SCL, HIGH); + delay(500); + digitalWrite(PIN_WIRE_SCL, LOW); + ``` + + Kod Ε‘alje visoki signal na pin na koji je relej povezan kako bi ga uključio, čeka 500ms (pola sekunde), zatim Ε‘alje niski signal kako bi isključio relej. + +1. Izgradite i učitajte kod na Wio Terminal. + +1. Nakon učitavanja, relej Δ‡e se uključivati i isključivati svakih 10 sekundi, s pola sekunde kaΕ‘njenja izmeΔ‘u uključivanja i isključivanja. Čut Δ‡ete kako relej klikne pri uključivanju, a zatim klikne pri isključivanju. LED na Grove ploči Δ‡e svijetliti kada je relej uključen, a ugasiti se kada je isključen. + + ![Relej se uključuje i isključuje](../../../../../images/relay-turn-on-off.gif) + +## Kontrola releja na temelju vlaΕΎnosti tla + +Sada kada relej radi, moΕΎe se kontrolirati kao odgovor na očitanja vlaΕΎnosti tla. + +### Zadatak + +Kontrolirajte relej. + +1. IzbriΕ‘ite 3 linije koda koje ste dodali za testiranje releja. Zamijenite ih sljedeΔ‡im kodom: + + ```cpp + if (soil_moisture > 450) + { + Serial.println("Soil Moisture is too low, turning relay on."); + digitalWrite(PIN_WIRE_SCL, HIGH); + } + else + { + Serial.println("Soil Moisture is ok, turning relay off."); + digitalWrite(PIN_WIRE_SCL, LOW); + } + ``` + + Ovaj kod provjerava razinu vlaΕΎnosti tla pomoΔ‡u senzora vlaΕΎnosti tla. Ako je iznad 450, uključuje relej, a isključuje ga kada padne ispod 450. + + > πŸ’ Zapamtite, kapacitivni senzor vlaΕΎnosti tla očitava: Ε‘to je niΕΎa razina vlaΕΎnosti tla, to je viΕ‘e vlage u tlu i obrnuto. + +1. Izgradite i učitajte kod na Wio Terminal. + +1. Pratite ureΔ‘aj putem serijskog monitora. Vidjet Δ‡ete kako se relej uključuje ili isključuje ovisno o razini vlaΕΎnosti tla. Isprobajte u suhom tlu, a zatim dodajte vodu. + + ```output + Soil Moisture: 638 + Soil Moisture is too low, turning relay on. + Soil Moisture: 452 + Soil Moisture is too low, turning relay on. + Soil Moisture: 347 + Soil Moisture is ok, turning relay off. + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-relay/wio-terminal](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/wio-terminal). + +πŸ˜€ VaΕ‘ program za kontrolu releja pomoΔ‡u senzora vlaΕΎnosti tla je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md new file mode 100644 index 00000000..00ef7a0c --- /dev/null +++ b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md @@ -0,0 +1,451 @@ + +# Premjestite svoju biljku u oblak + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio [IoT za početnike Projekt 2 - Digitalna poljoprivreda serije](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![PoveΕΎite svoj ureΔ‘aj s oblakom pomoΔ‡u Azure IoT Hub-a](https://img.youtube.com/vi/bNxjopXkhvk/0.jpg)](https://youtu.be/bNxjopXkhvk) + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/15) + +## Uvod + +U prethodnoj lekciji naučili ste kako povezati svoju biljku s MQTT brokerom i upravljati relejem pomoΔ‡u koda na lokalnom serveru. Ovo je osnova za vrstu internetski povezanog automatiziranog sustava za zalijevanje koji se koristi od pojedinačnih biljaka kod kuΔ‡e do komercijalnih farmi. + +IoT ureΔ‘aj je komunicirao s javnim MQTT brokerom kako bi se demonstrirali principi, ali to nije najpouzdaniji ni najsigurniji način. U ovoj lekciji naučit Δ‡ete o oblaku i IoT moguΔ‡nostima koje pruΕΎaju javne usluge u oblaku. TakoΔ‘er Δ‡ete naučiti kako premjestiti svoju biljku na jednu od tih usluga u oblaku s javnog MQTT brokera. + +U ovoj lekciji obradit Δ‡emo: + +* [Ε to je oblak?](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Kreiranje pretplate na oblak](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [IoT usluge u oblaku](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Kreiranje IoT usluge u oblaku](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Komunikacija s IoT Hub-om](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Povezivanje ureΔ‘aja s IoT uslugom](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) + +## Ε to je oblak? + +Prije oblaka, kada je neka tvrtka ΕΎeljela pruΕΎiti usluge svojim zaposlenicima (poput baza podataka ili pohrane datoteka) ili javnosti (poput web stranica), morali su izgraditi i upravljati podatkovnim centrom. To je moglo biti od sobe s nekoliko računala do zgrade s mnogo računala. Tvrtka bi upravljala svime, uključujuΔ‡i: + +* Kupnju računala +* OdrΕΎavanje hardvera +* Napajanje i hlaΔ‘enje +* UmreΕΎavanje +* Sigurnost, uključujuΔ‡i osiguranje zgrade i softvera na računalima +* Instalaciju i aΕΎuriranje softvera + +Ovo je moglo biti vrlo skupo, zahtijevati Ε‘irok spektar stručnih zaposlenika i biti vrlo sporo za promjene kada je to potrebno. Na primjer, ako je internetska trgovina trebala planirati za uΕΎurbanu blagdansku sezonu, morali bi planirati mjesecima unaprijed kako bi kupili viΕ‘e hardvera, konfigurirali ga, instalirali i postavili softver za prodajni proces. Nakon blagdanske sezone, kada bi se prodaja smanjila, ostali bi s računalima koja su plaΔ‡ena, ali neiskoriΕ‘tena do sljedeΔ‡e uΕΎurbane sezone. + +βœ… Mislite li da bi ovo omoguΔ‡ilo tvrtkama da brzo reagiraju? Ako bi internetski trgovac odjeΔ‡om iznenada postao popularan jer je neka slavna osoba viΔ‘ena u njihovoj odjeΔ‡i, bi li mogli dovoljno brzo poveΔ‡ati računalnu snagu kako bi podrΕΎali iznenadni priljev narudΕΎbi? + +### Računalo nekog drugog + +Oblak se često u Ε‘ali naziva "računalom nekog drugog". Početna ideja bila je jednostavna - umjesto kupnje računala, unajmite računalo nekog drugog. Netko drugi, pruΕΎatelj usluga računalstva u oblaku, upravljao bi ogromnim podatkovnim centrima. Oni bi bili odgovorni za kupnju i instalaciju hardvera, upravljanje napajanjem i hlaΔ‘enjem, umreΕΎavanje, sigurnost zgrade, aΕΎuriranja hardvera i softvera, sve. Kao korisnik, unajmljujete računala koja su vam potrebna, unajmljujete viΕ‘e kada potraΕΎnja raste, a smanjujete broj kada potraΕΎnja opada. Ovi podatkovni centri nalaze se diljem svijeta. + +![Microsoftov podatkovni centar u oblaku](../../../../../translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hr.png) +![Planirano proΕ‘irenje Microsoftovog podatkovnog centra u oblaku](../../../../../translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hr.png) + +Ovi podatkovni centri mogu biti veličine nekoliko četvornih kilometara. Gornje slike snimljene su prije nekoliko godina u Microsoftovom podatkovnom centru u oblaku i prikazuju početnu veličinu, zajedno s planiranim proΕ‘irenjem. PovrΕ‘ina očiΕ‘Δ‡ena za proΕ‘irenje veΔ‡a je od 5 četvornih kilometara. + +> πŸ’ Ovi podatkovni centri zahtijevaju toliko velike količine energije da neki imaju vlastite elektrane. Zbog svoje veličine i razine ulaganja pruΕΎatelja usluga u oblaku, obično su vrlo ekoloΕ‘ki prihvatljivi. Učinkovitiji su od velikog broja malih podatkovnih centara, uglavnom koriste obnovljive izvore energije, a pruΕΎatelji usluga u oblaku ulaΕΎu napore u smanjenje otpada, smanjenje potroΕ‘nje vode i ponovno poΕ‘umljavanje područja iskrčenih za izgradnju podatkovnih centara. ViΕ‘e o odrΕΎivosti jednog pruΕΎatelja usluga u oblaku moΕΎete pročitati na [Azure stranici o odrΕΎivosti](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn). + +βœ… IstraΕΎite: Pročitajte o glavnim oblacima poput [Azure od Microsofta](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) ili [GCP od Googlea](https://cloud.google.com). Koliko podatkovnih centara imaju i gdje se nalaze u svijetu? + +KoriΕ‘tenje oblaka smanjuje troΕ‘kove za tvrtke i omoguΔ‡uje im da se usredotoče na ono Ε‘to najbolje rade, ostavljajuΔ‡i stručnost za računalstvo u oblaku pruΕΎatelju usluga. Tvrtke viΕ‘e ne moraju unajmljivati ili kupovati prostor u podatkovnim centrima, plaΔ‡ati različitim pruΕΎateljima za povezivost i energiju ili zapoΕ‘ljavati stručnjake. Umjesto toga, mogu plaΔ‡ati jedan mjesečni račun pruΕΎatelju usluga u oblaku koji se brine o svemu. + +PruΕΎatelj usluga u oblaku tada moΕΎe koristiti ekonomiju razmjera kako bi smanjio troΕ‘kove, kupujuΔ‡i računala na veliko po niΕΎim cijenama, ulaΕΎuΔ‡i u alate za smanjenje radnog optereΔ‡enja odrΕΎavanja, pa čak i dizajnirajuΔ‡i i gradeΔ‡i vlastiti hardver kako bi poboljΕ‘ao svoju ponudu u oblaku. + +### Microsoft Azure + +Azure je oblak za programere iz Microsofta, i to je oblak koji Δ‡ete koristiti u ovim lekcijama. Video ispod daje kratak pregled Azurea: + +[![Pregled Azure videa](../../../../../translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hr.png)](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn) + +## Kreiranje pretplate na oblak + +Kako biste koristili usluge u oblaku, trebate se prijaviti za pretplatu kod pruΕΎatelja usluga u oblaku. Za ovu lekciju prijavit Δ‡ete se za Microsoft Azure pretplatu. Ako veΔ‡ imate Azure pretplatu, moΕΎete preskočiti ovaj zadatak. Detalji pretplate opisani ovdje su točni u trenutku pisanja, ali se mogu promijeniti. + +> πŸ’ Ako pristupate ovim lekcijama putem svoje Ε‘kole, moΕΎda veΔ‡ imate dostupnu Azure pretplatu. Provjerite sa svojim učiteljem. + +Postoje dvije različite vrste besplatnih Azure pretplata na koje se moΕΎete prijaviti: + +* **Azure za studente** - Ovo je pretplata namijenjena studentima starijima od 18 godina. Nije vam potrebna kreditna kartica za prijavu, a koristite svoju Ε‘kolsku e-mail adresu za potvrdu da ste student. Kada se prijavite, dobivate 100 USD za troΕ‘enje na resurse u oblaku, zajedno s besplatnim uslugama, uključujuΔ‡i besplatnu verziju IoT usluge. Ovo traje 12 mjeseci i moΕΎete obnoviti svake godine dok ste student. + +* **Besplatna Azure pretplata** - Ovo je pretplata za sve koji nisu studenti. Trebat Δ‡e vam kreditna kartica za prijavu, ali vaΕ‘a kartica neΔ‡e biti naplaΔ‡ena, veΔ‡ se koristi samo za potvrdu da ste stvarna osoba, a ne bot. Dobivate 200 USD kredita za koriΕ‘tenje u prvih 30 dana na bilo kojoj usluzi, zajedno s besplatnim razinama Azure usluga. Nakon Ε‘to potroΕ‘ite kredit, vaΕ‘a kartica neΔ‡e biti naplaΔ‡ena osim ako ne pretvorite pretplatu u model plaΔ‡anja po koriΕ‘tenju. + +> πŸ’ Microsoft nudi Azure za Students Starter pretplatu za studente mlaΔ‘e od 18 godina, ali u trenutku pisanja ovo ne podrΕΎava IoT usluge. + +### Zadatak - prijavite se za besplatnu pretplatu na oblak + +Ako ste student stariji od 18 godina, moΕΎete se prijaviti za Azure za Studente pretplatu. Trebat Δ‡ete potvrditi Ε‘kolskom e-mail adresom. To moΕΎete učiniti na dva načina: + +* Prijavite se za GitHub studentski razvojni paket na [education.github.com/pack](https://education.github.com/pack). Ovo vam daje pristup nizu alata i ponuda, uključujuΔ‡i GitHub i Microsoft Azure. Nakon Ε‘to se prijavite za razvojni paket, moΕΎete aktivirati Azure za Studente ponudu. + +* Prijavite se izravno za Azure za Studente račun na [azure.microsoft.com/free/students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-17441-jabenn). + +> ⚠️ Ako vaΕ‘a Ε‘kolska e-mail adresa nije prepoznata, otvorite [problem u ovom repozitoriju](https://github.com/Microsoft/IoT-For-Beginners/issues) i provjerit Δ‡emo moΕΎe li se dodati na popis dopuΕ‘tenih za Azure za Studente. + +Ako niste student ili nemate valjanu Ε‘kolsku e-mail adresu, moΕΎete se prijaviti za besplatnu Azure pretplatu. + +* Prijavite se za besplatnu Azure pretplatu na [azure.microsoft.com/free](https://azure.microsoft.com/free/?WT.mc_id=academic-17441-jabenn) + +## IoT usluge u oblaku + +Javni testni MQTT broker koji ste koristili odličan je alat za učenje, ali ima nekoliko nedostataka za koriΕ‘tenje u komercijalnom okruΕΎenju: + +* Pouzdanost - to je besplatna usluga bez jamstava i moΕΎe se isključiti u bilo kojem trenutku +* Sigurnost - javna je, pa svatko moΕΎe sluΕ‘ati vaΕ‘u telemetriju ili slati naredbe za upravljanje vaΕ‘im hardverom +* Performanse - dizajniran je za samo nekoliko testnih poruka, pa ne bi mogao podnijeti veliku količinu poruka +* OtkriΔ‡e - nema načina da se zna koji su ureΔ‘aji povezani + +IoT usluge u oblaku rjeΕ‘avaju ove probleme. Njima upravljaju veliki pruΕΎatelji usluga u oblaku koji ulaΕΎu velika sredstva u pouzdanost i spremni su rijeΕ‘iti sve probleme koji se mogu pojaviti. Imaju ugraΔ‘enu sigurnost kako bi spriječili hakere da čitaju vaΕ‘e podatke ili Ε‘alju laΕΎne naredbe. TakoΔ‘er su visokih performansi, sposobni obraditi milijune poruka svaki dan, koristeΔ‡i prednosti oblaka za skaliranje prema potrebi. + +> πŸ’ Iako za ove prednosti plaΔ‡ate mjesečnu naknadu, veΔ‡ina pruΕΎatelja usluga u oblaku nudi besplatnu verziju svoje IoT usluge s ograničenim brojem poruka dnevno ili ureΔ‘aja koji se mogu povezati. Ova besplatna verzija obično je viΕ‘e nego dovoljna za programere koji ΕΎele učiti o usluzi. U ovoj lekciji koristit Δ‡ete besplatnu verziju. + +IoT ureΔ‘aji povezuju se s uslugom u oblaku ili pomoΔ‡u SDK-a za ureΔ‘aje (biblioteke koja pruΕΎa kod za rad s značajkama usluge) ili izravno putem komunikacijskog protokola poput MQTT-a ili HTTP-a. SDK za ureΔ‘aje obično je najlakΕ‘i put jer automatski upravlja svime, poput znanja o tome koje teme objaviti ili pretplatiti se, te kako upravljati sigurnoΕ‘Δ‡u. + +![UreΔ‘aji se povezuju s uslugom pomoΔ‡u SDK-a za ureΔ‘aje. Serverski kod takoΔ‘er se povezuje s uslugom putem SDK-a](../../../../../translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hr.png) + +VaΕ‘ ureΔ‘aj tada komunicira s drugim dijelovima vaΕ‘e aplikacije putem ove usluge - slično kao Ε‘to ste slali telemetriju i primali naredbe putem MQTT-a. To se obično radi pomoΔ‡u SDK-a za usluge ili slične biblioteke. Poruke dolaze s vaΕ‘eg ureΔ‘aja na uslugu gdje ih drugi dijelovi vaΕ‘e aplikacije mogu pročitati, a poruke se mogu poslati natrag na vaΕ‘ ureΔ‘aj. + +![UreΔ‘aji bez valjanog tajnog ključa ne mogu se povezati s IoT uslugom](../../../../../translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hr.png) + +Ove usluge implementiraju sigurnost tako Ε‘to znaju za sve ureΔ‘aje koji se mogu povezati i slati podatke, bilo da su ureΔ‘aji unaprijed registrirani s uslugom ili im se daju tajni ključevi ili certifikati koje mogu koristiti za registraciju pri prvom povezivanju. Nepoznati ureΔ‘aji ne mogu se povezati; ako pokuΕ‘aju, usluga odbija vezu i ignorira poruke koje Ε‘alju. + +βœ… IstraΕΎite: Koji je nedostatak otvorene IoT usluge gdje se bilo koji ureΔ‘aj ili kod moΕΎe povezati? MoΕΎete li pronaΔ‡i specifične primjere hakera koji su to iskoristili? + +Ostali dijelovi vaΕ‘e aplikacije mogu se povezati s IoT uslugom i saznati sve o ureΔ‘ajima koji su povezani ili registrirani te komunicirati s njima izravno, bilo pojedinačno ili u grupama. +πŸ’ IoT usluge takoΔ‘er implementiraju dodatne moguΔ‡nosti, a pruΕΎatelji usluga u oblaku imaju dodatne usluge i aplikacije koje se mogu povezati s uslugom. Na primjer, ako ΕΎelite pohraniti sve telemetrijske poruke koje Ε‘alju svi ureΔ‘aji u bazu podataka, obično je potrebno samo nekoliko klikova u alatu za konfiguraciju pruΕΎatelja usluga u oblaku kako biste povezali uslugu s bazom podataka i usmjerili podatke. +## Kreiranje IoT usluge u oblaku + +Sada kada imate Azure pretplatu, moΕΎete se prijaviti za IoT uslugu. IoT usluga od Microsofta zove se Azure IoT Hub. + +![Logotip Azure IoT Hub](../../../../../translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hr.png) + +Video ispod daje kratak pregled Azure IoT Hub-a: + +[![Pregled videa Azure IoT Hub](https://img.youtube.com/vi/smuZaZZXKsU/0.jpg)](https://www.youtube.com/watch?v=smuZaZZXKsU) + +> πŸŽ₯ Kliknite na sliku iznad za gledanje videa + +βœ… Odvojite trenutak za istraΕΎivanje i pročitajte pregled IoT Hub-a u [Microsoft IoT Hub dokumentaciji](https://docs.microsoft.com/azure/iot-hub/about-iot-hub?WT.mc_id=academic-17441-jabenn). + +Cloud usluge dostupne u Azure-u mogu se konfigurirati putem web-portala ili putem sučelja naredbenog retka (CLI). Za ovaj zadatak koristit Δ‡ete CLI. + +### Zadatak - instalacija Azure CLI-a + +Da biste koristili Azure CLI, prvo ga morate instalirati na svoje računalo ili Mac. + +1. Slijedite upute u [Azure CLI dokumentaciji](https://docs.microsoft.com/cli/azure/install-azure-cli?WT.mc_id=academic-17441-jabenn) za instalaciju CLI-a. + +1. Azure CLI podrΕΎava niz ekstenzija koje dodaju moguΔ‡nosti za upravljanje Ε‘irokim rasponom Azure usluga. Instalirajte IoT ekstenziju pokretanjem sljedeΔ‡e naredbe iz naredbenog retka ili terminala: + + ```sh + az extension add --name azure-iot + ``` + +1. Iz svog naredbenog retka ili terminala pokrenite sljedeΔ‡u naredbu za prijavu na svoju Azure pretplatu putem Azure CLI-a. + + ```sh + az login + ``` + + Web stranica Δ‡e se otvoriti u vaΕ‘em zadanom pregledniku. Prijavite se koristeΔ‡i račun koji ste koristili za prijavu na svoju Azure pretplatu. Nakon Ε‘to se prijavite, moΕΎete zatvoriti karticu preglednika. + +1. Ako imate viΕ‘e Azure pretplata, poput one koju vam je osigurala Ε‘kola i vlastite Azure for Students pretplate, morat Δ‡ete odabrati onu koju ΕΎelite koristiti. Pokrenite sljedeΔ‡u naredbu za popis svih pretplata kojima imate pristup: + + ```sh + az account list --output table + ``` + + U izlazu Δ‡ete vidjeti naziv svake pretplate zajedno s njenim `SubscriptionId`. + + ```output + ➜ ~ az account list --output table + Name CloudName SubscriptionId State IsDefault + ---------------------- ----------- ------------------------------------ ------- ----------- + School-subscription AzureCloud cb30cde9-814a-42f0-a111-754cb788e4e1 Enabled True + Azure for Students AzureCloud fa51c31b-162c-4599-add6-781def2e1fbf Enabled False + ``` + + Za odabir pretplate koju ΕΎelite koristiti, koristite sljedeΔ‡u naredbu: + + ```sh + az account set --subscription + ``` + + Zamijenite `` s ID-jem pretplate koju ΕΎelite koristiti. Nakon pokretanja ove naredbe, ponovno pokrenite naredbu za popis svojih računa. Vidjet Δ‡ete da je stupac `IsDefault` označen kao `True` za pretplatu koju ste upravo postavili. + +### Zadatak - kreiranje grupe resursa + +Azure usluge, poput IoT Hub instanci, virtualnih strojeva, baza podataka ili AI usluga, nazivaju se **resursima**. Svaki resurs mora biti smjeΕ‘ten unutar **Grupe resursa**, logičke grupe jednog ili viΕ‘e resursa. + +> πŸ’ KoriΕ‘tenje grupa resursa omoguΔ‡uje upravljanje viΕ‘e usluga odjednom. Na primjer, nakon Ε‘to zavrΕ‘ite sve lekcije za ovaj projekt, moΕΎete izbrisati grupu resursa, a svi resursi unutar nje bit Δ‡e automatski izbrisani. + +1. Postoji viΕ‘e Azure podatkovnih centara diljem svijeta, podijeljenih u regije. Kada kreirate Azure resurs ili grupu resursa, morate odrediti gdje ΕΎelite da bude kreirana. Pokrenite sljedeΔ‡u naredbu za dobivanje popisa lokacija: + + ```sh + az account list-locations --output table + ``` + + Vidjet Δ‡ete popis lokacija. Ovaj popis Δ‡e biti dug. + + > πŸ’ U trenutku pisanja, postoji 65 lokacija na koje moΕΎete implementirati resurse. + + ```output + ➜ ~ az account list-locations --output table + DisplayName Name RegionalDisplayName + ------------------------ ------------------- ------------------------------------- + East US eastus (US) East US + East US 2 eastus2 (US) East US 2 + South Central US southcentralus (US) South Central US + ... + ``` + + ZabiljeΕΎite vrijednost iz stupca `Name` regije koja vam je najbliΕΎa. Regije moΕΎete pronaΔ‡i na karti na [Azure geographies stranici](https://azure.microsoft.com/global-infrastructure/geographies/?WT.mc_id=academic-17441-jabenn). + +1. Pokrenite sljedeΔ‡u naredbu za kreiranje grupe resursa nazvane `soil-moisture-sensor`. Nazivi grupa resursa moraju biti jedinstveni unutar vaΕ‘e pretplate. + + ```sh + az group create --name soil-moisture-sensor \ + --location + ``` + + Zamijenite `` s lokacijom koju ste odabrali u prethodnom koraku. + +### Zadatak - kreiranje IoT Hub-a + +Sada moΕΎete kreirati IoT Hub resurs unutar svoje grupe resursa. + +1. Koristite sljedeΔ‡u naredbu za kreiranje IoT Hub resursa: + + ```sh + az iot hub create --resource-group soil-moisture-sensor \ + --sku F1 \ + --partition-count 2 \ + --name + ``` + + Zamijenite `` s nazivom za vaΕ‘ hub. Ovaj naziv mora biti globalno jedinstven - to znači da nijedan drugi IoT Hub kreiran od strane bilo koga ne moΕΎe imati isti naziv. Ovaj naziv se koristi u URL-u koji pokazuje na hub, pa mora biti jedinstven. Koristite neΕ‘to poput `soil-moisture-sensor-` i dodajte jedinstveni identifikator na kraju, poput nasumičnih riječi ili vaΕ‘eg imena. + + Opcija `--sku F1` govori da se koristi besplatni nivo. Besplatni nivo podrΕΎava 8,000 poruka dnevno zajedno s veΔ‡inom značajki punih nivoa. + + > πŸŽ“ Različiti cjenovni nivoi Azure usluga nazivaju se tier-ovima. Svaki tier ima različite troΕ‘kove i pruΕΎa različite značajke ili količine podataka. + + > πŸ’ Ako ΕΎelite saznati viΕ‘e o cijenama, moΕΎete pogledati [Azure IoT Hub vodič za cijene](https://azure.microsoft.com/pricing/details/iot-hub/?WT.mc_id=academic-17441-jabenn). + + Opcija `--partition-count 2` definira koliko tokova podataka IoT Hub podrΕΎava, viΕ‘e particija smanjuje blokiranje podataka kada viΕ‘e stvari čita i piΕ‘e iz IoT Hub-a. Particije su izvan opsega ovih lekcija, ali ova vrijednost mora biti postavljena za kreiranje besplatnog nivoa IoT Hub-a. + + > πŸ’ MoΕΎete imati samo jedan besplatni nivo IoT Hub-a po pretplati. + +IoT Hub Δ‡e biti kreiran. MoΕΎe potrajati minutu ili dvije da se proces zavrΕ‘i. + +## Komunikacija s IoT Hub-om + +U prethodnoj lekciji koristili ste MQTT i slali poruke naprijed-nazad na različitim temama, pri čemu su različite teme imale različite svrhe. Umjesto slanja poruka preko različitih tema, IoT Hub ima nekoliko definiranih načina za komunikaciju ureΔ‘aja s Hub-om ili Hub-a s ureΔ‘ajem. + +> πŸ’ U pozadini, ova komunikacija izmeΔ‘u IoT Hub-a i vaΕ‘eg ureΔ‘aja moΕΎe koristiti MQTT, HTTPS ili AMQP. + +* Poruke od ureΔ‘aja prema oblaku (D2C) - to su poruke koje ureΔ‘aj Ε‘alje IoT Hub-u, poput telemetrije. One se zatim mogu čitati iz IoT Hub-a pomoΔ‡u vaΕ‘eg aplikacijskog koda. + + > πŸŽ“ U pozadini, IoT Hub koristi Azure uslugu zvanu [Event Hubs](https://docs.microsoft.com/azure/event-hubs/?WT.mc_id=academic-17441-jabenn). Kada piΕ‘ete kod za čitanje poruka poslanih na hub, one se često nazivaju dogaΔ‘ajima. + +* Poruke od oblaka prema ureΔ‘aju (C2D) - to su poruke koje aplikacijski kod Ε‘alje putem IoT Hub-a na IoT ureΔ‘aj. + +* Zahtjevi za direktne metode - to su poruke koje aplikacijski kod Ε‘alje putem IoT Hub-a na IoT ureΔ‘aj kako bi zatraΕΎio da ureΔ‘aj neΕ‘to učini, poput upravljanja aktuatorom. Ove poruke zahtijevaju odgovor kako bi vaΕ‘ aplikacijski kod mogao znati je li uspjeΕ‘no obraΔ‘en. + +* Device twins - to su JSON dokumenti koji se sinkroniziraju izmeΔ‘u ureΔ‘aja i IoT Hub-a, a koriste se za pohranu postavki ili drugih svojstava koje ureΔ‘aj prijavljuje ili koje bi trebale biti postavljene na ureΔ‘aju (poznato kao ΕΎeljeno) od strane IoT Hub-a. + +IoT Hub moΕΎe pohraniti poruke i zahtjeve za direktne metode na konfigurabilno razdoblje (zadano je jedan dan), tako da ako ureΔ‘aj ili aplikacijski kod izgubi vezu, moΕΎe ponovno dohvatiti poruke poslane dok je bio offline nakon Ε‘to se ponovno poveΕΎe. Device twins se trajno čuvaju u IoT Hub-u, tako da ureΔ‘aj u bilo kojem trenutku moΕΎe ponovno povezati i dobiti najnoviji device twin. + +βœ… IstraΕΎite: Pročitajte viΕ‘e o ovim vrstama poruka u [Vodiču za komunikaciju od ureΔ‘aja prema oblaku](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-d2c-guidance?WT.mc_id=academic-17441-jabenn) i [Vodiču za komunikaciju od oblaka prema ureΔ‘aju](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-c2d-guidance?WT.mc_id=academic-17441-jabenn) u IoT Hub dokumentaciji. + +## Povezivanje vaΕ‘eg ureΔ‘aja s IoT uslugom + +Nakon Ε‘to je hub kreiran, vaΕ‘ IoT ureΔ‘aj moΕΎe se povezati s njim. Samo registrirani ureΔ‘aji mogu se povezati s uslugom, pa Δ‡ete prvo morati registrirati svoj ureΔ‘aj. Kada se registrirate, moΕΎete dobiti natrag connection string koji ureΔ‘aj moΕΎe koristiti za povezivanje. Ovaj connection string je specifičan za ureΔ‘aj i sadrΕΎi informacije o IoT Hub-u, ureΔ‘aju i tajni ključ koji omoguΔ‡uje ovom ureΔ‘aju povezivanje. + +> πŸŽ“ Connection string je generički izraz za tekst koji sadrΕΎi detalje povezivanja. Koriste se pri povezivanju s IoT Hub-ovima, bazama podataka i mnogim drugim uslugama. Obično se sastoje od identifikatora za uslugu, poput URL-a, i sigurnosnih informacija poput tajnog ključa. ProsljeΔ‘uju se SDK-ovima za povezivanje s uslugom. + +> ⚠️ Connection string-ovi trebaju se čuvati sigurnima! Sigurnost Δ‡e biti detaljnije obraΔ‘ena u buduΔ‡oj lekciji. + +### Zadatak - registracija vaΕ‘eg IoT ureΔ‘aja + +IoT ureΔ‘aj moΕΎe se registrirati s vaΕ‘im IoT Hub-om koristeΔ‡i Azure CLI. + +1. Pokrenite sljedeΔ‡u naredbu za registraciju ureΔ‘aja: + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor \ + --hub-name + ``` + + Zamijenite `` s nazivom koji ste koristili za svoj IoT Hub. + + Ovo Δ‡e kreirati ureΔ‘aj s ID-jem `soil-moisture-sensor`. + +1. Kada se vaΕ‘ IoT ureΔ‘aj povezuje s vaΕ‘im IoT Hub-om koristeΔ‡i SDK, mora koristiti connection string koji daje URL hub-a, zajedno s tajnim ključem. Pokrenite sljedeΔ‡u naredbu za dobivanje connection string-a: + + ```sh + az iot hub device-identity connection-string show --device-id soil-moisture-sensor \ + --output table \ + --hub-name + ``` + + Zamijenite `` s nazivom koji ste koristili za svoj IoT Hub. + +1. Spremite connection string prikazan u izlazu jer Δ‡e vam kasnije trebati. + +### Zadatak - povezivanje vaΕ‘eg IoT ureΔ‘aja s oblakom + +ProΔ‘ite kroz odgovarajuΔ‡i vodič za povezivanje vaΕ‘eg IoT ureΔ‘aja s oblakom: + +* [Arduino - Wio Terminal](wio-terminal-connect-hub.md) +* [Jednoboardno računalo - Raspberry Pi/Virtualni IoT ureΔ‘aj](single-board-computer-connect-hub.md) + +### Zadatak - praΔ‡enje dogaΔ‘aja + +Za sada neΔ‡ete aΕΎurirati svoj server kod. Umjesto toga, moΕΎete koristiti Azure CLI za praΔ‡enje dogaΔ‘aja s vaΕ‘eg IoT ureΔ‘aja. + +1. Provjerite je li vaΕ‘ IoT ureΔ‘aj pokrenut i Ε‘alje telemetrijske vrijednosti vlaΕΎnosti tla. + +1. Pokrenite sljedeΔ‡u naredbu u svom naredbenom retku ili terminalu za praΔ‡enje poruka poslanih na vaΕ‘ IoT Hub: + + ```sh + az iot hub monitor-events --hub-name + ``` + + Zamijenite `` s nazivom koji ste koristili za svoj IoT Hub. + + Vidjet Δ‡ete poruke koje se pojavljuju u izlazu konzole dok ih vaΕ‘ IoT ureΔ‘aj Ε‘alje. + + ```output + Starting event monitor, use ctrl-c to stop... + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "payload": "{\"soil_moisture\": 376}" + } + }, + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "payload": "{\"soil_moisture\": 381}" + } + } + ``` + + SadrΕΎaj `payload` Δ‡e odgovarati poruci koju je poslao vaΕ‘ IoT ureΔ‘aj. + + > U trenutku pisanja, `az iot` ekstenzija ne radi u potpunosti na Apple Silicon-u. Ako koristite Apple Silicon ureΔ‘aj, morat Δ‡ete pratiti poruke na drugačiji način, poput koriΕ‘tenja [Azure IoT Tools za Visual Studio Code](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-vscode-iot-toolkit-cloud-device-messaging). + +1. Ove poruke imaju nekoliko svojstava automatski pridruΕΎenih, poput vremenske oznake kada su poslane. Ova svojstva poznata su kao *annotacije*. Za pregled svih annotacija poruka, koristite sljedeΔ‡u naredbu: + + ```sh + az iot hub monitor-events --properties anno --hub-name + ``` + + Zamijenite `` s nazivom koji ste koristili za svoj IoT Hub. + + Vidjet Δ‡ete poruke koje se pojavljuju u izlazu konzole dok ih vaΕ‘ IoT ureΔ‘aj Ε‘alje. + + ```output + Starting event monitor, use ctrl-c to stop... + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "properties": {}, + "annotations": { + "iothub-connection-device-id": "soil-moisture-sensor", + "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}", + "iothub-connection-auth-generation-id": "637553997165220462", + "iothub-enqueuedtime": 1619976150288, + "iothub-message-source": "Telemetry", + "x-opt-sequence-number": 1379, + "x-opt-offset": "550576", + "x-opt-enqueued-time": 1619976150277 + }, + "payload": "{\"soil_moisture\": 381}" + } + } + ``` + + Vrijednosti vremena u annotacijama su u [UNIX vremenu](https://wikipedia.org/wiki/Unix_time), Ε‘to predstavlja broj sekundi od ponoΔ‡i 1. siječnja 1970. + + IzaΔ‘ite iz monitora dogaΔ‘aja kada zavrΕ‘ite. + +### Zadatak - upravljanje vaΕ‘im IoT ureΔ‘ajem + +TakoΔ‘er moΕΎete koristiti Azure CLI za pozivanje direktnih metoda na vaΕ‘em IoT ureΔ‘aju. + +1. Pokrenite sljedeΔ‡u naredbu u svom naredbenom retku ili terminalu za pozivanje metode `relay_on` na IoT ureΔ‘aju: + + ```sh + az iot hub invoke-device-method --device-id soil-moisture-sensor \ + --method-name relay_on \ + --method-payload '{}' \ + --hub-name + ``` + + Zamijenite ` + +` s imenom koje ste koristili za svoj IoT Hub. + + Ovo Ε‘alje zahtjev za izravnu metodu za metodu specificiranu pomoΔ‡u `method-name`. Izravne metode mogu primiti podatke u obliku JSON-a koji se prosljeΔ‘uju kao `method-payload`. + + Vidjet Δ‡ete kako se relej uključuje i odgovarajuΔ‡i izlaz s vaΕ‘eg IoT ureΔ‘aja: + + ```output + Direct method received - relay_on + ``` + +1. Ponovite gornji korak, ali postavite `--method-name` na `relay_off`. Vidjet Δ‡ete kako se relej isključuje i odgovarajuΔ‡i izlaz s IoT ureΔ‘aja. + +--- + +## πŸš€ Izazov + +Besplatni sloj IoT Huba omoguΔ‡uje 8.000 poruka dnevno. Kod koji ste napisali Ε‘alje telemetrijske poruke svakih 10 sekundi. Koliko je to poruka dnevno ako se Ε‘alje jedna poruka svakih 10 sekundi? + +Razmislite o tome koliko često bi se trebala slati mjerenja vlaΕΎnosti tla? Kako moΕΎete promijeniti svoj kod da ostanete unutar granica besplatnog sloja, a da i dalje provjeravate dovoljno često, ali ne prečesto? Ε to ako ΕΎelite dodati drugi ureΔ‘aj? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/16) + +## Pregled i samostalno učenje + +IoT Hub SDK je otvorenog koda za Arduino i Python. U repozitorijima koda na GitHubu nalazi se niz primjera koji pokazuju kako raditi s različitim značajkama IoT Huba. + +* Ako koristite Wio Terminal, pogledajte [Arduino primjere na GitHubu](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples) +* Ako koristite Raspberry Pi ili virtualni ureΔ‘aj, pogledajte [Python primjere na GitHubu](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples) + +## Zadatak + +[Saznajte viΕ‘e o cloud uslugama](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md new file mode 100644 index 00000000..1e7a9087 --- /dev/null +++ b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md @@ -0,0 +1,33 @@ + +# Saznajte viΕ‘e o uslugama u oblaku + +## Upute + +Oblaci, poput Azurea od Microsofta, nude viΕ‘e od samog najma računalnih resursa. Glavne vrste ponuda u oblaku uključuju: + +* Infrastruktura kao usluga (IaaS) +* Platforma kao usluga (PaaS) +* Serverless +* Softver kao usluga (SaaS) + +Saznajte viΕ‘e o ovim različitim vrstama ponuda i objasnite Ε‘to su i kako se razlikuju. Objasnite koje su ponude relevantne za IoT programere. + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Objasnite različite ponude u oblaku | Jasno su objaΕ‘njene sve 4 vrste ponuda | ObjaΕ‘njene su 3 vrste ponuda | ObjaΕ‘njene su samo 1 ili 2 vrste ponuda | +| Objasnite koja je ponuda relevantna za IoT | PruΕΎeno je objaΕ‘njenje koje ponude su relevantne za IoT programere i zaΕ‘to | PruΕΎeno je objaΕ‘njenje koje ponude su relevantne za IoT programere, ali bez objaΕ‘njenja zaΕ‘to | Nije pruΕΎeno objaΕ‘njenje koje ponude su relevantne za IoT programere | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md new file mode 100644 index 00000000..7a365795 --- /dev/null +++ b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md @@ -0,0 +1,130 @@ + +# PoveΕΎite svoj IoT ureΔ‘aj s oblakom - Virtualni IoT hardver i Raspberry Pi + +U ovom dijelu lekcije, povezat Δ‡ete svoj virtualni IoT ureΔ‘aj ili Raspberry Pi s IoT Hubom kako biste slali telemetriju i primali naredbe. + +## PoveΕΎite svoj ureΔ‘aj s IoT Hubom + +SljedeΔ‡i korak je povezivanje vaΕ‘eg ureΔ‘aja s IoT Hubom. + +### Zadatak - povezivanje s IoT Hubom + +1. Otvorite mapu `soil-moisture-sensor` u VS Codeu. Provjerite je li virtualno okruΕΎenje pokrenuto u terminalu ako koristite virtualni IoT ureΔ‘aj. + +1. Instalirajte dodatne Pip pakete: + + ```sh + pip3 install azure-iot-device + ``` + + `azure-iot-device` je biblioteka za komunikaciju s vaΕ‘im IoT Hubom. + +1. Dodajte sljedeΔ‡e uvoze na vrh datoteke `app.py`, ispod postojeΔ‡ih uvoza: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse + ``` + + Ovaj kod uvozi SDK za komunikaciju s vaΕ‘im IoT Hubom. + +1. Uklonite liniju `import paho.mqtt.client as mqtt` jer ova biblioteka viΕ‘e nije potrebna. Uklonite sav MQTT kod, uključujuΔ‡i nazive tema, sav kod koji koristi `mqtt_client` i `handle_command`. ZadrΕΎite petlju `while True:`, samo izbriΕ‘ite liniju `mqtt_client.publish` iz ove petlje. + +1. Dodajte sljedeΔ‡i kod ispod uvoznih izjava: + + ```python + connection_string = "" + ``` + + Zamijenite `` s nizom za povezivanje koji ste ranije dobili za ureΔ‘aj u ovoj lekciji. + + > πŸ’ Ovo nije najbolja praksa. Nizovi za povezivanje nikada ne bi trebali biti pohranjeni u izvornom kodu, jer se mogu dodati u kontrolu izvornog koda i pronaΔ‡i ih bilo tko. Ovo radimo ovdje radi jednostavnosti. Idealno bi bilo koristiti neΕ‘to poput varijable okruΕΎenja i alat poput [`python-dotenv`](https://pypi.org/project/python-dotenv/). ViΕ‘e o tome naučit Δ‡ete u nadolazeΔ‡oj lekciji. + +1. Ispod ovog koda dodajte sljedeΔ‡e kako biste stvorili objekt klijenta ureΔ‘aja koji moΕΎe komunicirati s IoT Hubom i povezati ga: + + ```python + device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) + + print('Connecting') + device_client.connect() + print('Connected') + ``` + +1. Pokrenite ovaj kod. Vidjet Δ‡ete da se vaΕ‘ ureΔ‘aj povezuje. + + ```output + pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py + Connecting + Connected + Soil moisture: 379 + ``` + +## Slanje telemetrije + +Sada kada je vaΕ‘ ureΔ‘aj povezan, moΕΎete slati telemetriju IoT Hubu umjesto MQTT brokeru. + +### Zadatak - slanje telemetrije + +1. Dodajte sljedeΔ‡i kod unutar petlje `while True`, neposredno prije spavanja: + + ```python + message = Message(json.dumps({ 'soil_moisture': soil_moisture })) + device_client.send_message(message) + ``` + + Ovaj kod stvara IoT Hub `Message` koji sadrΕΎi očitanje vlaΕΎnosti tla kao JSON string, a zatim ga Ε‘alje IoT Hubu kao poruku od ureΔ‘aja prema oblaku. + +## Obrada naredbi + +VaΕ‘ ureΔ‘aj treba obraditi naredbu od posluΕΎiteljskog koda za upravljanje relejem. Ovo se Ε‘alje kao zahtjev za direktnu metodu. + +## Zadatak - obrada zahtjeva za direktnu metodu + +1. Dodajte sljedeΔ‡i kod prije petlje `while True`: + + ```python + def handle_method_request(request): + print("Direct method received - ", request.name) + + if request.name == "relay_on": + relay.on() + elif request.name == "relay_off": + relay.off() + ``` + + Ovo definira metodu `handle_method_request` koja Δ‡e se pozvati kada IoT Hub pozove direktnu metodu. Svaka direktna metoda ima ime, a ovaj kod očekuje metodu nazvanu `relay_on` za uključivanje releja i `relay_off` za isključivanje releja. + + > πŸ’ Ovo bi se takoΔ‘er moglo implementirati u jednoj direktnoj metodi, prosljeΔ‘ujuΔ‡i ΕΎeljeno stanje releja u payload koji se moΕΎe proslijediti sa zahtjevom metode i biti dostupan iz objekta `request`. + +1. Direktne metode zahtijevaju odgovor kako bi obavijestile pozivajuΔ‡i kod da su obraΔ‘ene. Dodajte sljedeΔ‡i kod na kraj funkcije `handle_method_request` kako biste stvorili odgovor na zahtjev: + + ```python + method_response = MethodResponse.create_from_method_request(request, 200) + device_client.send_method_response(method_response) + ``` + + Ovaj kod Ε‘alje odgovor na zahtjev za direktnu metodu s HTTP statusnim kodom 200 i Ε‘alje ga natrag IoT Hubu. + +1. Dodajte sljedeΔ‡i kod ispod definicije ove funkcije: + + ```python + device_client.on_method_request_received = handle_method_request + ``` + + Ovaj kod govori IoT Hub klijentu da pozove funkciju `handle_method_request` kada se pozove direktna metoda. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi) ili [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device). + +πŸ˜€ VaΕ‘ program senzora vlaΕΎnosti tla povezan je s vaΕ‘im IoT Hubom! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md new file mode 100644 index 00000000..2c01897a --- /dev/null +++ b/translations/hr/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md @@ -0,0 +1,306 @@ + +# PoveΕΎite svoj IoT ureΔ‘aj s oblakom - Wio Terminal + +U ovom dijelu lekcije povezat Δ‡ete svoj Wio Terminal s IoT Hubom kako biste slali telemetriju i primali naredbe. + +## PoveΕΎite svoj ureΔ‘aj s IoT Hubom + +SljedeΔ‡i korak je povezivanje vaΕ‘eg ureΔ‘aja s IoT Hubom. + +### Zadatak - povezivanje s IoT Hubom + +1. Otvorite projekt `soil-moisture-sensor` u VS Codeu. + +1. Otvorite datoteku `platformio.ini`. Uklonite ovisnost o biblioteci `knolleary/PubSubClient`. Ova biblioteka je koriΕ‘tena za povezivanje s javnim MQTT brokerom i nije potrebna za povezivanje s IoT Hubom. + +1. Dodajte sljedeΔ‡e ovisnosti o bibliotekama: + + ```ini + seeed-studio/Seeed Arduino RTC @ 2.0.0 + arduino-libraries/AzureIoTHub @ 1.6.0 + azure/AzureIoTUtility @ 1.6.1 + azure/AzureIoTProtocol_MQTT @ 1.6.0 + azure/AzureIoTProtocol_HTTP @ 1.6.0 + azure/AzureIoTSocket_WiFi @ 1.0.2 + ``` + + Biblioteka `Seeed Arduino RTC` omoguΔ‡uje interakciju s real-time satom u Wio Terminalu, koji se koristi za praΔ‡enje vremena. Preostale biblioteke omoguΔ‡uju vaΕ‘em IoT ureΔ‘aju povezivanje s IoT Hubom. + +1. Dodajte sljedeΔ‡e na dno datoteke `platformio.ini`: + + ```ini + build_flags = + -DDONT_USE_UPLOADTOBLOB + ``` + + Ovo postavlja zastavicu kompajlera koja je potrebna prilikom kompajliranja Arduino IoT Hub koda. + +1. Otvorite zaglavlje `config.h`. Uklonite sve MQTT postavke i dodajte sljedeΔ‡u konstantu za connection string ureΔ‘aja: + + ```cpp + // IoT Hub settings + const char *CONNECTION_STRING = ""; + ``` + + Zamijenite `` s connection stringom vaΕ‘eg ureΔ‘aja koji ste ranije kopirali. + +1. Povezivanje s IoT Hubom koristi token temeljen na vremenu. To znači da IoT ureΔ‘aj mora znati trenutno vrijeme. Za razliku od operativnih sustava poput Windowsa, macOS-a ili Linuxa, mikrokontroleri ne sinkroniziraju automatski trenutno vrijeme putem Interneta. To znači da Δ‡ete morati dodati kod za dobivanje trenutnog vremena s [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) servera. Kada se vrijeme preuzme, moΕΎe se pohraniti u real-time sat u Wio Terminalu, omoguΔ‡ujuΔ‡i kasnije dohvaΔ‡anje točnog vremena, pod uvjetom da ureΔ‘aj ne izgubi napajanje. Dodajte novu datoteku pod nazivom `ntp.h` sa sljedeΔ‡im kodom: + + ```cpp + #pragma once + + #include "DateTime.h" + #include + #include "samd/NTPClientAz.h" + #include + + static void initTime() + { + WiFiUDP _udp; + time_t epochTime = (time_t)-1; + NTPClientAz ntpClient; + + ntpClient.begin(); + + while (true) + { + epochTime = ntpClient.getEpochTime("0.pool.ntp.org"); + + if (epochTime == (time_t)-1) + { + Serial.println("Fetching NTP epoch time failed! Waiting 2 seconds to retry."); + delay(2000); + } + else + { + Serial.print("Fetched NTP epoch time is: "); + + char buff[32]; + sprintf(buff, "%.f", difftime(epochTime, (time_t)0)); + Serial.println(buff); + break; + } + } + + ntpClient.end(); + + struct timeval tv; + tv.tv_sec = epochTime; + tv.tv_usec = 0; + + settimeofday(&tv, NULL); + } + ``` + + Detalji ovog koda nisu obuhvaΔ‡eni ovom lekcijom. Definira funkciju `initTime` koja dohvaΔ‡a trenutno vrijeme s NTP servera i koristi ga za postavljanje sata na Wio Terminalu. + +1. Otvorite datoteku `main.cpp` i uklonite sav MQTT kod, uključujuΔ‡i zaglavlje `PubSubClient.h`, deklaraciju varijable `PubSubClient`, metode `reconnectMQTTClient` i `createMQTTClient`, te sve pozive tim varijablama i metodama. Ova datoteka treba sadrΕΎavati samo kod za povezivanje s WiFi-jem, dobivanje vlaΕΎnosti tla i stvaranje JSON dokumenta s tim podacima. + +1. Dodajte sljedeΔ‡e `#include` direktive na vrh datoteke `main.cpp` kako biste uključili zaglavlja za IoT Hub biblioteke i za postavljanje vremena: + + ```cpp + #include + #include + #include + #include "ntp.h" + ``` + +1. Dodajte sljedeΔ‡i poziv na kraj funkcije `setup` za postavljanje trenutnog vremena: + + ```cpp + initTime(); + ``` + +1. Dodajte sljedeΔ‡u deklaraciju varijable na vrh datoteke, odmah ispod direktiva za uključivanje: + + ```cpp + IOTHUB_DEVICE_CLIENT_LL_HANDLE _device_ll_handle; + ``` + + Ovo deklarira `IOTHUB_DEVICE_CLIENT_LL_HANDLE`, ručku za povezivanje s IoT Hubom. + +1. Ispod toga dodajte sljedeΔ‡i kod: + + ```cpp + static void connectionStatusCallback(IOTHUB_CLIENT_CONNECTION_STATUS result, IOTHUB_CLIENT_CONNECTION_STATUS_REASON reason, void *user_context) + { + if (result == IOTHUB_CLIENT_CONNECTION_AUTHENTICATED) + { + Serial.println("The device client is connected to iothub"); + } + else + { + Serial.println("The device client has been disconnected"); + } + } + ``` + + Ovo deklarira callback funkciju koja Δ‡e se pozvati kada se status veze s IoT Hubom promijeni, poput povezivanja ili prekida veze. Status se Ε‘alje na serijski port. + +1. Ispod toga dodajte funkciju za povezivanje s IoT Hubom: + + ```cpp + void connectIoTHub() + { + IoTHub_Init(); + + _device_ll_handle = IoTHubDeviceClient_LL_CreateFromConnectionString(CONNECTION_STRING, MQTT_Protocol); + + if (_device_ll_handle == NULL) + { + Serial.println("Failure creating Iothub device. Hint: Check your connection string."); + return; + } + + IoTHubDeviceClient_LL_SetConnectionStatusCallback(_device_ll_handle, connectionStatusCallback, NULL); + } + ``` + + Ovaj kod inicijalizira IoT Hub bibliotečki kod, zatim stvara vezu koristeΔ‡i connection string u zaglavlju `config.h`. Ova veza temelji se na MQTT-u. Ako veza ne uspije, to se Ε‘alje na serijski port - ako to vidite u izlazu, provjerite connection string. Na kraju se postavlja callback za status veze. + +1. Pozovite ovu funkciju u funkciji `setup` ispod poziva `initTime`: + + ```cpp + connectIoTHub(); + ``` + +1. Kao i kod MQTT klijenta, ovaj kod radi na jednom threadu pa treba vremena za obradu poruka koje hub Ε‘alje i prima. Dodajte sljedeΔ‡e na vrh funkcije `loop` kako biste to omoguΔ‡ili: + + ```cpp + IoTHubDeviceClient_LL_DoWork(_device_ll_handle); + ``` + +1. Izgradite i učitajte ovaj kod. Vidjet Δ‡ete vezu u serijskom monitoru: + + ```output + Connecting to WiFi.. + Connected! + Fetched NTP epoch time is: 1619983687 + Sending telemetry {"soil_moisture":391} + The device client is connected to iothub + ``` + + U izlazu moΕΎete vidjeti kako se dohvaΔ‡a NTP vrijeme, nakon čega se ureΔ‘aj povezuje s IoT Hubom. MoΕΎe proΔ‡i nekoliko sekundi da se poveΕΎe, pa Δ‡ete moΕΎda vidjeti vlaΕΎnost tla u izlazu dok se ureΔ‘aj povezuje. + + > πŸ’ UNIX vrijeme iz NTP-a moΕΎete pretvoriti u čitljiviji format koristeΔ‡i web stranicu poput [unixtimestamp.com](https://www.unixtimestamp.com) + +## Slanje telemetrije + +Sada kada je vaΕ‘ ureΔ‘aj povezan, moΕΎete slati telemetriju na IoT Hub umjesto na MQTT broker. + +### Zadatak - slanje telemetrije + +1. Dodajte sljedeΔ‡u funkciju iznad funkcije `setup`: + + ```cpp + void sendTelemetry(const char *telemetry) + { + IOTHUB_MESSAGE_HANDLE message_handle = IoTHubMessage_CreateFromString(telemetry); + IoTHubDeviceClient_LL_SendEventAsync(_device_ll_handle, message_handle, NULL, NULL); + IoTHubMessage_Destroy(message_handle); + } + ``` + + Ovaj kod stvara IoT Hub poruku iz stringa proslijeΔ‘enog kao parametar, Ε‘alje je na hub, a zatim čisti objekt poruke. + +1. Pozovite ovaj kod u funkciji `loop`, odmah nakon linije gdje se telemetrija Ε‘alje na serijski port: + + ```cpp + sendTelemetry(telemetry.c_str()); + ``` + +## Obrada naredbi + +VaΕ‘ ureΔ‘aj treba obraditi naredbu s posluΕΎiteljskog koda za upravljanje relejem. Ovo se Ε‘alje kao zahtjev za izravnu metodu. + +## Zadatak - obrada zahtjeva za izravnu metodu + +1. Dodajte sljedeΔ‡i kod prije funkcije `connectIoTHub`: + + ```cpp + int directMethodCallback(const char *method_name, const unsigned char *payload, size_t size, unsigned char **response, size_t *response_size, void *userContextCallback) + { + Serial.printf("Direct method received %s\r\n", method_name); + + if (strcmp(method_name, "relay_on") == 0) + { + digitalWrite(PIN_WIRE_SCL, HIGH); + } + else if (strcmp(method_name, "relay_off") == 0) + { + digitalWrite(PIN_WIRE_SCL, LOW); + } + } + ``` + + Ovaj kod definira callback metodu koju IoT Hub biblioteka moΕΎe pozvati kada primi zahtjev za izravnu metodu. Metoda koja se traΕΎi Ε‘alje se u parametru `method_name`. Ova funkcija ispisuje pozvanu metodu na serijski port, a zatim uključuje ili isključuje relej ovisno o nazivu metode. + + > πŸ’ Ovo bi se takoΔ‘er moglo implementirati u jednoj izravnoj metodi, prosljeΔ‘ujuΔ‡i ΕΎeljeno stanje releja u payloadu koji se moΕΎe proslijediti sa zahtjevom metode i koji je dostupan iz parametra `payload`. + +1. Dodajte sljedeΔ‡i kod na kraj funkcije `directMethodCallback`: + + ```cpp + char resultBuff[16]; + sprintf(resultBuff, "{\"Result\":\"\"}"); + *response_size = strlen(resultBuff); + *response = (unsigned char *)malloc(*response_size); + memcpy(*response, resultBuff, *response_size); + + return IOTHUB_CLIENT_OK; + ``` + + Zahtjevi za izravne metode trebaju odgovor, a odgovor se sastoji od dva dijela - odgovora kao teksta i povratnog koda. Ovaj kod stvara rezultat kao sljedeΔ‡i JSON dokument: + + ```JSON + { + "Result": "" + } + ``` + + Ovo se zatim kopira u parametar `response`, a veličina ovog odgovora postavlja se u parametar `response_size`. Ovaj kod zatim vraΔ‡a `IOTHUB_CLIENT_OK` kako bi pokazao da je metoda ispravno obraΔ‘ena. + +1. PoveΕΎite callback dodavanjem sljedeΔ‡eg na kraj funkcije `connectIoTHub`: + + ```cpp + IoTHubClient_LL_SetDeviceMethodCallback(_device_ll_handle, directMethodCallback, NULL); + ``` + +1. Funkcija `loop` Δ‡e pozvati funkciju `IoTHubDeviceClient_LL_DoWork` za obradu dogaΔ‘aja koje Ε‘alje IoT Hub. Ovo se poziva samo svakih 10 sekundi zbog `delay`, Ε‘to znači da se izravne metode obraΔ‘uju samo svakih 10 sekundi. Kako bi ovo bilo učinkovitije, 10-sekundno kaΕ‘njenje moΕΎe se implementirati kao mnogo kraΔ‡ih kaΕ‘njenja, pozivajuΔ‡i `IoTHubDeviceClient_LL_DoWork` svaki put. Da biste to učinili, dodajte sljedeΔ‡i kod iznad funkcije `loop`: + + ```cpp + void work_delay(int delay_time) + { + int current = 0; + do + { + IoTHubDeviceClient_LL_DoWork(_device_ll_handle); + delay(100); + current += 100; + } while (current < delay_time); + } + ``` + + Ovaj kod Δ‡e se ponavljati, pozivajuΔ‡i `IoTHubDeviceClient_LL_DoWork` i odgaΔ‘ajuΔ‡i za 100 ms svaki put. To Δ‡e činiti onoliko puta koliko je potrebno da se odgodi za vrijeme dano u parametru `delay_time`. To znači da ureΔ‘aj čeka najviΕ‘e 100 ms za obradu zahtjeva za izravne metode. + +1. U funkciji `loop`, uklonite poziv `IoTHubDeviceClient_LL_DoWork` i zamijenite poziv `delay(10000)` sljedeΔ‡im kako biste pozvali ovu novu funkciju: + + ```cpp + work_delay(10000); + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/wio-terminal](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/wio-terminal). + +πŸ˜€ VaΕ‘ program za senzor vlaΕΎnosti tla povezan je s vaΕ‘im IoT Hubom! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/5-migrate-application-to-the-cloud/README.md b/translations/hr/2-farm/lessons/5-migrate-application-to-the-cloud/README.md new file mode 100644 index 00000000..2601b0b6 --- /dev/null +++ b/translations/hr/2-farm/lessons/5-migrate-application-to-the-cloud/README.md @@ -0,0 +1,656 @@ + +# Premjestite logiku svoje aplikacije u oblak + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +Ova lekcija je dio serije [IoT za početnike Projekt 2 - Digitalna poljoprivreda](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) iz [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![Upravljajte svojim IoT ureΔ‘ajem pomoΔ‡u serverless koda](https://img.youtube.com/vi/VVZDcs5u1_I/0.jpg)](https://youtu.be/VVZDcs5u1_I) + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/17) + +## Uvod + +U prethodnoj lekciji naučili ste kako povezati praΔ‡enje vlaΕΎnosti tla i upravljanje relejem s IoT uslugom u oblaku. SljedeΔ‡i korak je premjeΕ‘tanje serverskog koda koji kontrolira vrijeme releja u oblak. U ovoj lekciji naučit Δ‡ete kako to učiniti koristeΔ‡i serverless funkcije. + +U ovoj lekciji obradit Δ‡emo: + +* [Ε to je serverless?](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Kreiranje serverless aplikacije](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Kreiranje okidača za IoT Hub](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Slanje zahtjeva za direktne metode iz serverless koda](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Implementacija vaΕ‘eg serverless koda u oblak](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) + +## Ε to je serverless? + +Serverless, ili serverless računarstvo, uključuje kreiranje malih blokova koda koji se izvrΕ‘avaju u oblaku kao odgovor na različite vrste dogaΔ‘aja. Kada se dogodi dogaΔ‘aj, vaΕ‘ kod se pokreΔ‡e i dobiva podatke o tom dogaΔ‘aju. Ti dogaΔ‘aji mogu dolaziti iz različitih izvora, uključujuΔ‡i web zahtjeve, poruke stavljene u red, promjene podataka u bazi podataka ili poruke koje IoT ureΔ‘aji Ε‘alju IoT usluzi. + +![DogaΔ‘aji koji se Ε‘alju iz IoT usluge u serverless uslugu, svi se obraΔ‘uju istovremeno pomoΔ‡u viΕ‘e funkcija koje se pokreΔ‡u](../../../../../translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hr.png) + +> πŸ’ Ako ste prije koristili okidače u bazama podataka, ovo moΕΎete zamisliti kao sličan koncept - kod koji se pokreΔ‡e dogaΔ‘ajem, poput umetanja retka. + +![Kada se viΕ‘e dogaΔ‘aja poΕ‘alje istovremeno, serverless usluga se skalira kako bi ih sve obradila u isto vrijeme](../../../../../translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hr.png) + +VaΕ‘ kod se pokreΔ‡e samo kada se dogodi dogaΔ‘aj, a u drugim trenucima nije aktivan. DogaΔ‘aj se dogodi, vaΕ‘ kod se učita i izvrΕ‘i. Ovo čini serverless vrlo skalabilnim - ako se mnogo dogaΔ‘aja dogodi istovremeno, pruΕΎatelj oblaka moΕΎe pokrenuti vaΕ‘u funkciju onoliko puta koliko je potrebno, koristeΔ‡i dostupne resurse. Nedostatak ovog pristupa je Ε‘to, ako trebate dijeliti informacije izmeΔ‘u dogaΔ‘aja, morate ih pohraniti negdje, poput baze podataka, umjesto da ih drΕΎite u memoriji. + +VaΕ‘ kod je napisan kao funkcija koja prima detalje o dogaΔ‘aju kao parametar. MoΕΎete koristiti Ε‘irok raspon programskih jezika za pisanje ovih serverless funkcija. + +> πŸŽ“ Serverless se takoΔ‘er naziva Functions as a Service (FaaS), jer se svaki okidač dogaΔ‘aja implementira kao funkcija u kodu. + +Unatoč nazivu, serverless zapravo koristi servere. Naziv dolazi od toga Ε‘to se kao programer ne morate brinuti o serverima potrebnima za pokretanje vaΕ‘eg koda, veΔ‡ samo o tome da se vaΕ‘ kod izvrΕ‘ava kao odgovor na dogaΔ‘aj. PruΕΎatelj oblaka ima serverless *runtime* koji upravlja dodjelom servera, mreΕΎom, pohranom, CPU-om, memorijom i svim ostalim potrebnim za pokretanje vaΕ‘eg koda. Ovaj model znači da ne plaΔ‡ate po serveru, veΔ‡ za vrijeme kada vaΕ‘ kod radi i količinu koriΕ‘tene memorije. + +> πŸ’° Serverless je jedan od najjeftinijih načina za pokretanje koda u oblaku. Na primjer, u trenutku pisanja, jedan pruΕΎatelj oblaka omoguΔ‡uje svim vaΕ‘im serverless funkcijama da se izvrΕ‘e ukupno 1.000.000 puta mjesečno prije nego Ε‘to počnu naplaΔ‡ivati, a nakon toga naplaΔ‡uju 0,20 USD za svakih 1.000.000 izvrΕ‘enja. Kada vaΕ‘ kod ne radi, ne plaΔ‡ate. + +Kao IoT programer, serverless model je idealan. MoΕΎete napisati funkciju koja se poziva kao odgovor na poruke poslane s bilo kojeg IoT ureΔ‘aja povezanog s vaΕ‘om IoT uslugom u oblaku. VaΕ‘ kod Δ‡e obraditi sve poslane poruke, ali Δ‡e raditi samo kada je to potrebno. + +βœ… Pogledajte kod koji ste napisali kao serverski kod za sluΕ‘anje poruka putem MQTT-a. Kako bi se ovo moglo pokrenuti u oblaku koristeΔ‡i serverless? Kako mislite da bi se kod mogao promijeniti kako bi podrΕΎao serverless računarstvo? + +> πŸ’ Serverless model se Ε‘iri i na druge usluge u oblaku, osim pokretanja koda. Na primjer, serverless baze podataka dostupne su u oblaku koristeΔ‡i serverless model naplate, gdje plaΔ‡ate po zahtjevu prema bazi podataka, poput upita ili umetanja, obično na temelju količine posla potrebnog za obradu zahtjeva. Na primjer, jednostavan odabir jednog retka prema primarnom ključu koΕ‘tat Δ‡e manje od sloΕΎene operacije koja spaja viΕ‘e tablica i vraΔ‡a tisuΔ‡e redaka. + +## Kreiranje serverless aplikacije + +Microsoftova usluga za serverless računarstvo zove se Azure Functions. + +![Logo Azure Functions](../../../../../translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hr.png) + +Kratki video ispod daje pregled Azure Functions. + +[![Pregled Azure Functions](https://img.youtube.com/vi/8-jz5f_JyEQ/0.jpg)](https://www.youtube.com/watch?v=8-jz5f_JyEQ) + +> πŸŽ₯ Kliknite na sliku iznad za gledanje videa. + +βœ… Odvojite trenutak za istraΕΎivanje i pročitajte pregled Azure Functions u [Microsoft Azure Functions dokumentaciji](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn). + +Za pisanje Azure Functions, započinjete s aplikacijom Azure Functions na jeziku po vaΕ‘em izboru. Azure Functions podrΕΎava Python, JavaScript, TypeScript, C#, F#, Java i Powershell. U ovoj lekciji naučit Δ‡ete kako napisati Azure Functions aplikaciju u Pythonu. + +> πŸ’ Azure Functions takoΔ‘er podrΕΎava prilagoΔ‘ene rukovatelje, tako da moΕΎete pisati funkcije na bilo kojem jeziku koji podrΕΎava HTTP zahtjeve, uključujuΔ‡i starije jezike poput COBOL-a. + +Aplikacije funkcija sastoje se od jednog ili viΕ‘e *okidača* - funkcija koje reagiraju na dogaΔ‘aje. MoΕΎete imati viΕ‘e okidača unutar jedne aplikacije funkcija, koje dijele zajedničku konfiguraciju. Na primjer, u konfiguracijskoj datoteci za vaΕ‘u aplikaciju funkcija moΕΎete imati detalje o povezivanju s vaΕ‘im IoT Hubom, a sve funkcije u aplikaciji mogu koristiti te postavke za povezivanje i sluΕ‘anje dogaΔ‘aja. + +### Zadatak - instalacija alata za Azure Functions + +> U trenutku pisanja, alati za Azure Functions nisu u potpunosti funkcionalni na Apple Silicon računalima za Python projekte. Trebat Δ‡ete koristiti Mac s Intel procesorom, Windows PC ili Linux PC. + +Jedna od sjajnih značajki Azure Functions je moguΔ‡nost lokalnog pokretanja. Isti runtime koji se koristi u oblaku moΕΎe se pokrenuti na vaΕ‘em računalu, omoguΔ‡ujuΔ‡i vam pisanje koda koji reagira na IoT poruke i njegovo lokalno testiranje. MoΕΎete čak i otklanjati pogreΕ‘ke dok se dogaΔ‘aji obraΔ‘uju. Kada ste zadovoljni svojim kodom, moΕΎete ga implementirati u oblak. + +Alati za Azure Functions dostupni su kao CLI, poznat kao Azure Functions Core Tools. + +1. Instalirajte Azure Functions Core Tools slijedeΔ‡i upute u [Azure Functions Core Tools dokumentaciji](https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=academic-17441-jabenn). + +1. Instalirajte Azure Functions ekstenziju za VS Code. Ova ekstenzija pruΕΎa podrΕ‘ku za kreiranje, otklanjanje pogreΕ‘aka i implementaciju Azure funkcija. Pogledajte [dokumentaciju za Azure Functions ekstenziju](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-azuretools.vscode-azurefunctions) za upute o instalaciji ove ekstenzije u VS Code. + +Kada implementirate svoju Azure Functions aplikaciju u oblak, ona treba koristiti malu količinu pohrane u oblaku za spremanje aplikacijskih datoteka i logova. Kada pokreΔ‡ete aplikaciju lokalno, i dalje trebate povezivanje s pohranom u oblaku, ali umjesto stvarne pohrane u oblaku, moΕΎete koristiti emulator pohrane nazvan [Azurite](https://github.com/Azure/Azurite). Ovo radi lokalno, ali se ponaΕ‘a kao pohrana u oblaku. + +> πŸŽ“ U Azureu, pohrana koju Azure Functions koristi je Azure Storage Account. Ovi računi mogu pohranjivati datoteke, blobove, podatke u tablicama ili podatke u redovima. Jedan račun za pohranu moΕΎete dijeliti izmeΔ‘u viΕ‘e aplikacija, poput aplikacije funkcija i web aplikacije. + +1. Azurite je Node.js aplikacija, pa Δ‡ete trebati instalirati Node.js. MoΕΎete pronaΔ‡i upute za preuzimanje i instalaciju na [Node.js web stranici](https://nodejs.org/). Ako koristite Mac, moΕΎete ga instalirati i putem [Homebrew](https://formulae.brew.sh/formula/node). + +1. Instalirajte Azurite koristeΔ‡i sljedeΔ‡u naredbu (`npm` je alat koji se instalira zajedno s Node.js): + + ```sh + npm install -g azurite + ``` + +1. Kreirajte mapu nazvanu `azurite` za Azurite kako bi koristio za pohranu podataka: + + ```sh + mkdir azurite + ``` + +1. Pokrenite Azurite, prosljeΔ‘ujuΔ‡i mu ovu novu mapu: + + ```sh + azurite --location azurite + ``` + + Emulator pohrane Azurite Δ‡e se pokrenuti i biti spreman za povezivanje s lokalnim runtimeom funkcija. + + ```output + ➜ ~ azurite --location azurite + Azurite Blob service is starting at http://127.0.0.1:10000 + Azurite Blob service is successfully listening at http://127.0.0.1:10000 + Azurite Queue service is starting at http://127.0.0.1:10001 + Azurite Queue service is successfully listening at http://127.0.0.1:10001 + Azurite Table service is starting at http://127.0.0.1:10002 + Azurite Table service is successfully listening at http://127.0.0.1:10002 + ``` + +### Zadatak - kreiranje Azure Functions projekta + +CLI za Azure Functions moΕΎe se koristiti za kreiranje nove aplikacije funkcija. + +1. Kreirajte mapu za svoju aplikaciju funkcija i navigirajte u nju. Nazovite je `soil-moisture-trigger`. + + ```sh + mkdir soil-moisture-trigger + cd soil-moisture-trigger + ``` + +1. Kreirajte Python virtualno okruΕΎenje unutar ove mape: + + ```sh + python3 -m venv .venv + ``` + +1. Aktivirajte virtualno okruΕΎenje: + + * Na Windowsu: + * Ako koristite Command Prompt ili Command Prompt kroz Windows Terminal, pokrenite: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * Ako koristite PowerShell, pokrenite: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + * Na macOS-u ili Linuxu, pokrenite: + + ```cmd + source ./.venv/bin/activate + ``` + + > πŸ’ Ove naredbe trebaju se pokrenuti iz iste lokacije gdje ste kreirali virtualno okruΕΎenje. Nikada ne trebate navigirati u `.venv` mapu, uvijek biste trebali pokretati naredbu za aktivaciju i bilo koje naredbe za instalaciju paketa ili pokretanje koda iz mape u kojoj ste kreirali virtualno okruΕΎenje. + +1. Pokrenite sljedeΔ‡u naredbu za kreiranje aplikacije funkcija u ovoj mapi: + + ```sh + func init --worker-runtime python soil-moisture-trigger + ``` + + Ovo Δ‡e kreirati tri datoteke unutar trenutne mape: + + * `host.json` - ovaj JSON dokument sadrΕΎi postavke za vaΕ‘u aplikaciju funkcija. NeΔ‡ete trebati mijenjati ove postavke. + * `local.settings.json` - ovaj JSON dokument sadrΕΎi postavke koje vaΕ‘a aplikacija koristi prilikom lokalnog pokretanja, poput stringova za povezivanje s vaΕ‘im IoT Hubom. Ove postavke su samo lokalne i ne bi trebale biti dodane u kontrolu izvornog koda. Kada implementirate aplikaciju u oblak, ove postavke se ne implementiraju, veΔ‡ se učitavaju iz postavki aplikacije. Ovo Δ‡e biti objaΕ‘njeno kasnije u lekciji. + * `requirements.txt` - ovo je [Pip datoteka zahtjeva](https://pip.pypa.io/en/stable/user_guide/#requirements-files) koja sadrΕΎi Pip pakete potrebne za pokretanje vaΕ‘e aplikacije funkcija. + +1. Datoteka `local.settings.json` ima postavku za račun pohrane koji aplikacija funkcija koristi. Ovo je zadano prazno, pa treba postaviti. Za povezivanje s lokalnim emulatorom pohrane Azurite, postavite ovu vrijednost na sljedeΔ‡e: + + ```json + "AzureWebJobsStorage": "UseDevelopmentStorage=true", + ``` + +1. Instalirajte potrebne Pip pakete koristeΔ‡i datoteku zahtjeva: + + ```sh + pip install -r requirements.txt + ``` + + > πŸ’ Potrebni Pip paketi moraju biti u ovoj datoteci, kako bi runtime mogao osigurati instalaciju ispravnih paketa prilikom implementacije aplikacije funkcija u oblak. + +1. Da biste testirali radi li sve ispravno, moΕΎete pokrenuti runtime funkcija. Pokrenite sljedeΔ‡u naredbu za to: + + ```sh + func start + ``` + + Vidjet Δ‡ete kako se runtime pokreΔ‡e i izvjeΕ‘tava da nije pronaΕ‘ao nijednu funkciju zadatka (okidač). + + ```output + (.venv) ➜ soil-moisture-trigger func start + Found Python version 3.9.1 (python3). + + Azure Functions Core Tools + Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + Function Runtime Version: 3.0.15417.0 + + [2021-05-05T01:24:46.795Z] No job functions found. + ``` +> ⚠️ Ako primite obavijest o vatrozidu, odobrite pristup jer aplikacija `func` mora imati moguΔ‡nost čitanja i pisanja na vaΕ‘u mreΕΎu. +> ⚠️ Ako koristite macOS, moguΔ‡e je da Δ‡e se pojaviti upozorenja u izlazu: +> +> ```output + > (.venv) ➜ soil-moisture-trigger func start + > Found Python version 3.9.1 (python3). + > + > Azure Functions Core Tools + > Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + > Function Runtime Version: 3.0.15417.0 + > + > [2021-06-16T08:18:28.315Z] Cannot create directory for shared memory usage: /dev/shm/AzureFunctions + > [2021-06-16T08:18:28.316Z] System.IO.FileSystem: Access to the path '/dev/shm/AzureFunctions' is denied. Operation not permitted. + > [2021-06-16T08:18:30.361Z] No job functions found. + > ``` +> +> MoΕΎete ih zanemariti sve dok se aplikacija Functions ispravno pokreΔ‡e i prikazuje pokrenute funkcije. Kao Ε‘to je navedeno u [ovom pitanju na Microsoft Docs Q&A](https://docs.microsoft.com/answers/questions/396617/azure-functions-core-tools-error-osx-devshmazurefu.html?WT.mc_id=academic-17441-jabenn), ovo upozorenje se moΕΎe ignorirati. + +1. Zaustavite aplikaciju Functions pritiskom na `ctrl+c`. + +1. Otvorite trenutnu mapu u VS Code-u, bilo otvaranjem VS Code-a pa zatim otvaranjem ove mape, ili pokretanjem sljedeΔ‡e naredbe: + + ```sh + code . + ``` + + VS Code Δ‡e prepoznati vaΕ‘ Functions projekt i prikazati obavijest koja kaΕΎe: + + ```output + Detected an Azure Functions Project in folder "soil-moisture-trigger" that may have been created outside of + VS Code. Initialize for optimal use with VS Code? + ``` + + ![Obavijest](../../../../../translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hr.png) + + Odaberite **Yes** u ovoj obavijesti. + +1. Provjerite je li Python virtualno okruΕΎenje pokrenuto u terminalu VS Code-a. Ako nije, zaustavite ga i ponovno pokrenite. + +## Kreiranje okidača za dogaΔ‘aje IoT Hub-a + +Aplikacija Functions je okvir za vaΕ‘ serverless kod. Da biste reagirali na dogaΔ‘aje IoT Hub-a, moΕΎete dodati okidač za IoT Hub u ovu aplikaciju. Ovaj okidač treba se povezati s tokom poruka koje se Ε‘alju u IoT Hub i reagirati na njih. Da biste dobili ovaj tok poruka, vaΕ‘ okidač mora se povezati s *endpoint-om kompatibilnim s Event Hub-om* IoT Hub-a. + +IoT Hub se temelji na drugoj Azure usluzi nazvanoj Azure Event Hubs. Event Hubs je usluga koja omoguΔ‡uje slanje i primanje poruka, dok IoT Hub proΕ‘iruje ovu funkcionalnost dodavanjem značajki za IoT ureΔ‘aje. Način na koji se povezujete za čitanje poruka iz IoT Hub-a isti je kao i za Event Hubs. + +βœ… IstraΕΎite: Pročitajte pregled Event Hubs-a u [Azure Event Hubs dokumentaciji](https://docs.microsoft.com/azure/event-hubs/event-hubs-about?WT.mc_id=academic-17441-jabenn). Kako se osnovne značajke usporeΔ‘uju s IoT Hub-om? + +Da bi se IoT ureΔ‘aj povezao s IoT Hub-om, mora koristiti tajni ključ koji osigurava da se samo dopuΕ‘teni ureΔ‘aji mogu povezati. Isto vrijedi i za povezivanje radi čitanja poruka – vaΕ‘ kod Δ‡e trebati vezu koja sadrΕΎi tajni ključ, zajedno s detaljima o IoT Hub-u. + +> πŸ’ Zadani niz za povezivanje koji dobijete ima **iothubowner** dozvole, Ε‘to omoguΔ‡uje bilo kojem kodu koji ga koristi potpune dozvole na IoT Hub-u. Idealno bi bilo da se poveΕΎete s najniΕΎom razinom potrebnih dozvola. Ovo Δ‡e biti obraΔ‘eno u sljedeΔ‡oj lekciji. + +Kada se vaΕ‘ okidač poveΕΎe, kod unutar funkcije Δ‡e se pozivati za svaku poruku poslanu u IoT Hub, bez obzira na to koji ureΔ‘aj ju je poslao. Poruka Δ‡e se proslijediti okidaču kao parametar. + +### Zadatak - dobivanje niza za povezivanje s endpoint-om kompatibilnim s Event Hub-om + +1. Iz terminala VS Code-a pokrenite sljedeΔ‡u naredbu za dobivanje niza za povezivanje s endpoint-om kompatibilnim s Event Hub-om IoT Hub-a: + + ```sh + az iot hub connection-string show --default-eventhub \ + --output table \ + --hub-name + ``` + + Zamijenite `` imenom koje ste koristili za svoj IoT Hub. + +1. U VS Code-u otvorite datoteku `local.settings.json`. Dodajte sljedeΔ‡u vrijednost unutar odjeljka `Values`: + + ```json + "IOT_HUB_CONNECTION_STRING": "" + ``` + + Zamijenite `` vrijednoΕ‘Δ‡u iz prethodnog koraka. Trebat Δ‡ete dodati zarez nakon prethodnog retka kako bi ovo bio valjan JSON. + +### Zadatak - kreiranje okidača za dogaΔ‘aje + +Sada ste spremni za kreiranje okidača za dogaΔ‘aje. + +1. Iz terminala VS Code-a pokrenite sljedeΔ‡u naredbu iz mape `soil-moisture-trigger`: + + ```sh + func new --name iot-hub-trigger --template "Azure Event Hub trigger" + ``` + + Ovo kreira novu funkciju nazvanu `iot-hub-trigger`. Okidač Δ‡e se povezati s endpoint-om kompatibilnim s Event Hub-om na IoT Hub-u, tako da moΕΎete koristiti okidač za Event Hub. Ne postoji specifičan okidač za IoT Hub. + +Ovo Δ‡e kreirati mapu unutar mape `soil-moisture-trigger` nazvanu `iot-hub-trigger` koja sadrΕΎi ovu funkciju. Ova mapa Δ‡e sadrΕΎavati sljedeΔ‡e datoteke: + +* `__init__.py` - ovo je Python datoteka koja sadrΕΎi okidač, koristeΔ‡i standardnu Python konvenciju imenovanja datoteka kako bi se ova mapa pretvorila u Python modul. + + Ova datoteka Δ‡e sadrΕΎavati sljedeΔ‡i kod: + + ```python + import logging + + import azure.functions as func + + + def main(event: func.EventHubEvent): + logging.info('Python EventHub trigger processed an event: %s', + event.get_body().decode('utf-8')) + ``` + + Jezgra okidača je funkcija `main`. Ova funkcija se poziva s dogaΔ‘ajima iz IoT Hub-a. Funkcija ima parametar nazvan `event` koji sadrΕΎi `EventHubEvent`. Svaki put kada se poruka poΕ‘alje u IoT Hub, ova funkcija se poziva prosljeΔ‘ujuΔ‡i tu poruku kao `event`, zajedno s atributima koji su isti kao i anotacije koje ste vidjeli u prethodnoj lekciji. + + Jezgra ove funkcije biljeΕΎi dogaΔ‘aj. + +* `function.json` - ovo sadrΕΎi konfiguraciju za okidač. Glavna konfiguracija je u odjeljku nazvanom `bindings`. Binding je termin za vezu izmeΔ‘u Azure Functions i drugih Azure usluga. Ova funkcija ima ulazni binding za Event Hub - povezuje se s Event Hub-om i prima podatke. + + > πŸ’ TakoΔ‘er moΕΎete imati izlazne bindinge tako da se izlaz funkcije Ε‘alje drugoj usluzi. Na primjer, mogli biste dodati izlazni binding za bazu podataka i vratiti dogaΔ‘aj IoT Hub-a iz funkcije, a on Δ‡e automatski biti umetnut u bazu podataka. + + βœ… IstraΕΎite: Pročitajte o bindingima u [Azure Functions triggers and bindings concepts dokumentaciji](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python). + + Odjeljak `bindings` uključuje konfiguraciju za binding. Vrijednosti od interesa su: + + * `"type": "eventHubTrigger"` - ovo govori funkciji da treba sluΕ‘ati dogaΔ‘aje iz Event Hub-a + * `"name": "events"` - ovo je naziv parametra za dogaΔ‘aje Event Hub-a. Ovo odgovara nazivu parametra u funkciji `main` u Python kodu. + * `"direction": "in"` - ovo je ulazni binding, podaci iz Event Hub-a dolaze u funkciju + * `"connection": ""` - ovo definira naziv postavke iz koje se čita niz za povezivanje. Kada se pokreΔ‡e lokalno, ovo Δ‡e čitati ovu postavku iz datoteke `local.settings.json`. + + > πŸ’ Niz za povezivanje ne moΕΎe se pohraniti u datoteku `function.json`, mora se čitati iz postavki. Ovo je kako biste spriječili slučajno izlaganje vaΕ‘eg niza za povezivanje. + +1. Zbog [greΕ‘ke u Azure Functions predloΕ‘ku](https://github.com/Azure/azure-functions-templates/issues/1250), `function.json` ima netočnu vrijednost za polje `cardinality`. AΕΎurirajte ovo polje s `many` na `one`: + + ```json + "cardinality": "one", + ``` + +1. AΕΎurirajte vrijednost `"connection"` u datoteci `function.json` tako da pokazuje na novu vrijednost koju ste dodali u datoteku `local.settings.json`: + + ```json + "connection": "IOT_HUB_CONNECTION_STRING", + ``` + + > πŸ’ Zapamtite - ovo treba pokazivati na postavku, a ne sadrΕΎavati stvarni niz za povezivanje. + +1. Niz za povezivanje sadrΕΎi vrijednost `eventHubName`, pa vrijednost za ovo u datoteci `function.json` treba biti prazna. AΕΎurirajte ovu vrijednost na prazan string: + + ```json + "eventHubName": "", + ``` + +### Zadatak - pokretanje okidača za dogaΔ‘aje + +1. Provjerite da ne pokreΔ‡ete monitor dogaΔ‘aja IoT Hub-a. Ako je ovo pokrenuto istovremeno s aplikacijom Functions, aplikacija Functions neΔ‡e moΔ‡i povezati i konzumirati dogaΔ‘aje. + + > πŸ’ ViΕ‘e aplikacija moΕΎe se povezati s endpoint-ima IoT Hub-a koristeΔ‡i različite *consumer groups*. Ovo Δ‡e biti obraΔ‘eno u kasnijoj lekciji. + +1. Za pokretanje aplikacije Functions, pokrenite sljedeΔ‡u naredbu iz terminala VS Code-a: + + ```sh + func start + ``` + + Aplikacija Functions Δ‡e se pokrenuti i otkriti funkciju `iot-hub-trigger`. Zatim Δ‡e obraditi sve dogaΔ‘aje koji su veΔ‡ poslani u IoT Hub u posljednjih dan. + + ```output + (.venv) ➜ soil-moisture-trigger func start + Found Python version 3.9.1 (python3). + + Azure Functions Core Tools + Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + Function Runtime Version: 3.0.15417.0 + + Functions: + + iot-hub-trigger: eventHubTrigger + + For detailed output, run func with --verbose flag. + [2021-05-05T02:44:07.517Z] Worker process started and initialized. + [2021-05-05T02:44:09.202Z] Executing 'Functions.iot-hub-trigger' (Reason='(null)', Id=802803a5-eae9-4401-a1f4-176631456ce4) + [2021-05-05T02:44:09.205Z] Trigger Details: PartitionId: 0, Offset: 1011240-1011632, EnqueueTimeUtc: 2021-05-04T19:04:04.2030000Z-2021-05-04T19:04:04.3900000Z, SequenceNumber: 2546-2547, Count: 2 + [2021-05-05T02:44:09.352Z] Python EventHub trigger processed an event: {"soil_moisture":628} + [2021-05-05T02:44:09.354Z] Python EventHub trigger processed an event: {"soil_moisture":624} + [2021-05-05T02:44:09.395Z] Executed 'Functions.iot-hub-trigger' (Succeeded, Id=802803a5-eae9-4401-a1f4-176631456ce4, Duration=245ms) + ``` + + Svaki poziv funkciji bit Δ‡e okruΕΎen blokovima `Executing 'Functions.iot-hub-trigger'`/`Executed 'Functions.iot-hub-trigger'` u izlazu, tako da moΕΎete vidjeti koliko je poruka obraΔ‘eno u svakom pozivu funkcije. + +1. Provjerite radi li vaΕ‘ IoT ureΔ‘aj. Vidjet Δ‡ete nove poruke o vlaΕΎnosti tla koje se pojavljuju u aplikaciji Functions. + +1. Zaustavite i ponovno pokrenite aplikaciju Functions. Vidjet Δ‡ete da neΔ‡e ponovno obraΔ‘ivati prethodne poruke, veΔ‡ samo nove poruke. + +> πŸ’ VS Code takoΔ‘er podrΕΎava otklanjanje pogreΕ‘aka vaΕ‘ih funkcija. MoΕΎete postaviti točke prekida klikom na rub pored početka svakog retka koda, ili postavljanjem kursora na redak koda i odabirom *Run -> Toggle breakpoint*, ili pritiskom na `F9`. MoΕΎete pokrenuti debugger odabirom *Run -> Start debugging*, pritiskom na `F5`, ili odabirom *Run and debug* okna i odabirom gumba **Start debugging**. Na taj način moΕΎete vidjeti detalje dogaΔ‘aja koji se obraΔ‘uju. + +#### RjeΕ‘avanje problema + +* Ako dobijete sljedeΔ‡u greΕ‘ku: + + ```output + The listener for function 'Functions.iot-hub-trigger' was unable to start. Microsoft.WindowsAzure.Storage: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused. + ``` + + Provjerite radi li Azurite i jeste li postavili `AzureWebJobsStorage` u datoteci `local.settings.json` na `UseDevelopmentStorage=true`. + +* Ako dobijete sljedeΔ‡u greΕ‘ku: + + ```output + System.Private.CoreLib: Exception while executing function: Functions.iot-hub-trigger. System.Private.CoreLib: Result: Failure Exception: AttributeError: 'list' object has no attribute 'get_body' + ``` + + Provjerite jeste li postavili `cardinality` u datoteci `function.json` na `one`. + +* Ako dobijete sljedeΔ‡u greΕ‘ku: + + ```output + Azure.Messaging.EventHubs: The path to an Event Hub may be specified as part of the connection string or as a separate value, but not both. Please verify that your connection string does not have the `EntityPath` token if you are passing an explicit Event Hub name. (Parameter 'connectionString'). + ``` + + Provjerite jeste li postavili `eventHubName` u datoteci `function.json` na prazan string. + +## Slanje zahtjeva za direktne metode iz serverless koda + +Do sada vaΕ‘a aplikacija Functions sluΕ‘a poruke iz IoT Hub-a koristeΔ‡i endpoint kompatibilan s Event Hub-om. Sada trebate poslati naredbe IoT ureΔ‘aju. Ovo se radi koriΕ‘tenjem drugačije veze s IoT Hub-om putem *Registry Manager-a*. Registry Manager je alat koji vam omoguΔ‡uje pregled registriranih ureΔ‘aja na IoT Hub-u i komunikaciju s tim ureΔ‘ajima slanjem poruka iz oblaka ureΔ‘aju, zahtjeva za direktne metode ili aΕΎuriranjem device twin-a. TakoΔ‘er ga moΕΎete koristiti za registraciju, aΕΎuriranje ili brisanje IoT ureΔ‘aja s IoT Hub-a. + +Za povezivanje s Registry Manager-om, potreban vam je niz za povezivanje. + +### Zadatak - dobivanje niza za povezivanje s Registry Manager-om + +1. Za dobivanje niza za povezivanje, pokrenite sljedeΔ‡u naredbu: + + ```sh + az iot hub connection-string show --policy-name service \ + --output table \ + --hub-name + ``` + + Zamijenite `` imenom koje ste koristili za svoj IoT Hub. + + Niz za povezivanje se traΕΎi za *ServiceConnect* politiku koristeΔ‡i parametar `--policy-name service`. Kada traΕΎite niz za povezivanje, moΕΎete specificirati koje dozvole taj niz omoguΔ‡uje. ServiceConnect politika omoguΔ‡uje vaΕ‘em kodu povezivanje i slanje poruka IoT ureΔ‘ajima. + + βœ… IstraΕΎite: Pročitajte o različitim politikama u [IoT Hub permissions dokumentaciji](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn) + +1. U VS Code-u otvorite datoteku `local.settings.json`. Dodajte sljedeΔ‡u vrijednost unutar odjeljka `Values`: + + ```json + "REGISTRY_MANAGER_CONNECTION_STRING": "" + ``` + + Zamijenite `` vrijednoΕ‘Δ‡u iz prethodnog koraka. Trebat Δ‡ete dodati zarez nakon prethodnog retka kako bi ovo bio valjan JSON. + +### Zadatak - slanje zahtjeva za direktnu metodu ureΔ‘aju + +1. SDK za Registry Manager dostupan je putem Pip paketa. Dodajte sljedeΔ‡i redak u datoteku `requirements.txt` kako biste dodali ovisnost o ovom paketu: + + ```sh + azure-iot-hub + ``` + +1. Provjerite je li terminal VS Code-a aktivirao virtualno okruΕΎenje i pokrenite sljedeΔ‡u naredbu za instalaciju Pip paketa: + + ```sh + pip install -r requirements.txt + ``` + +1. Dodajte sljedeΔ‡e uvoze u datoteku `__init__.py`: + + ```python + import json + import os + from azure.iot.hub import IoTHubRegistryManager + from azure.iot.hub.models import CloudToDeviceMethod + ``` + + Ovo uvozi neke sistemske biblioteke, kao i biblioteke za interakciju s Registry Manager-om i slanje zahtjeva za direktne metode. + +1. Uklonite kod iz funkcije `main`, ali zadrΕΎite samu funkciju. + +1. U funkciji `main`, dodajte sljedeΔ‡i kod: + + ```python + body = json.loads(event.get_body().decode('utf-8')) + device_id = event.iothub_metadata['connection-device-id'] + + logging.info(f'Received message: {body} from {device_id}') + ``` + + Ovaj kod izdvaja tijelo dogaΔ‘aja koje sadrΕΎi JSON poruku poslanu od IoT ureΔ‘aja. + + Zatim dobiva ID ureΔ‘aja iz anotacija proslijeΔ‘enih s porukom. Tijelo dogaΔ‘aja sadrΕΎi poruku poslanu kao telemetriju, dok `iothub_metadata` rječnik sadrΕΎi svojstva postavljena od strane IoT Hub-a, poput ID-a ureΔ‘aja poΕ‘iljatelja i vremena slanja poruke. + + Ove informacije se zatim biljeΕΎe. Vidjet Δ‡ete ovo biljeΕΎenje u terminalu kada pokrenete aplikaciju Functions lokalno. + +1. Ispod ovoga, dodajte sljedeΔ‡i kod: + + ```python + soil_moisture = body['soil_moisture'] + + if soil_moisture > 450: + direct_method = CloudToDeviceMethod(method_name='relay_on', payload='{}') + else: + direct_method = CloudToDeviceMethod(method_name='relay_off', payload='{}') + ``` + + Ovaj kod dobiva vrijednost vlaΕΎnosti tla iz poruke. Zatim provjerava vlaΕΎnost tla i, ovisno o vrijednosti, kreira pomoΔ‡nu klasu za zahtjev za direktnu metodu `relay_on` ili `relay_off`. Zahtjev za metodu ne treba payload, pa se Ε‘alje prazan JSON dokument. + +1. Ispod ovoga dodajte sljedeΔ‡i kod: + + ```python + logging.info(f'Sending direct method request for {direct_method.method_name} for device {device_id}') + + registry_manager_connection_string = os.environ['REGISTRY_MANAGER_CONNECTION_STRING'] + registry_manager = IoTHubRegistryManager(registry_manager_connection_string) + ``` +Ovaj kod učitava `REGISTRY_MANAGER_CONNECTION_STRING` iz datoteke `local.settings.json`. Vrijednosti u ovoj datoteci dostupne su kao varijable okruΕΎenja, a mogu se čitati pomoΔ‡u funkcije `os.environ`, koja vraΔ‡a rječnik svih varijabli okruΕΎenja. + +> πŸ’ Kada se ovaj kod implementira u oblak, vrijednosti iz datoteke `local.settings.json` bit Δ‡e postavljene kao *Postavke aplikacije*, i mogu se čitati iz varijabli okruΕΎenja. + +Kod zatim kreira instancu pomoΔ‡ne klase Registry Manager koristeΔ‡i string za povezivanje. + +1. Ispod ovoga dodajte sljedeΔ‡i kod: + + ```python + registry_manager.invoke_device_method(device_id, direct_method) + + logging.info('Direct method request sent!') + ``` + + Ovaj kod govori Registry Manageru da poΕ‘alje zahtjev za direktnu metodu ureΔ‘aju koji je poslao telemetriju. + + > πŸ’ U verzijama aplikacije koje ste kreirali u ranijim lekcijama koristeΔ‡i MQTT, naredbe za upravljanje relejem slale su se svim ureΔ‘ajima. Kod je pretpostavljao da imate samo jedan ureΔ‘aj. Ova verzija koda Ε‘alje zahtjev za metodu jednom ureΔ‘aju, pa bi radila i ako imate viΕ‘e postavki senzora vlage i releja, Ε‘aljuΔ‡i odgovarajuΔ‡i zahtjev za direktnu metodu pravom ureΔ‘aju. + +1. Pokrenite aplikaciju Functions i provjerite Ε‘alje li vaΕ‘ IoT ureΔ‘aj podatke. Vidjet Δ‡ete kako se poruke obraΔ‘uju i zahtjevi za direktne metode Ε‘alju. Pomaknite senzor vlage tla unutar i izvan tla kako biste vidjeli promjene vrijednosti i uključivanje/isključivanje releja. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions). + +## Implementirajte svoj serverless kod u oblak + +VaΕ‘ kod sada radi lokalno, pa je sljedeΔ‡i korak implementacija aplikacije Functions u oblak. + +### Zadatak - kreirajte resurse u oblaku + +VaΕ‘a aplikacija Functions mora biti implementirana u resurs Functions App u Azureu, koji se nalazi unutar Resource Group koju ste kreirali za svoj IoT Hub. TakoΔ‘er Δ‡ete trebati kreirati Storage Account u Azureu kako biste zamijenili emulirani koji trenutno koristite lokalno. + +1. Pokrenite sljedeΔ‡u naredbu za kreiranje Storage Account-a: + + ```sh + az storage account create --resource-group soil-moisture-sensor \ + --sku Standard_LRS \ + --name + ``` + + Zamijenite `` nazivom za vaΕ‘ Storage Account. Ovaj naziv mora biti globalno jedinstven jer čini dio URL-a koji se koristi za pristup Storage Account-u. MoΕΎete koristiti samo mala slova i brojeve za ovaj naziv, bez drugih znakova, a ograničen je na 24 znaka. Koristite neΕ‘to poput `sms` i dodajte jedinstveni identifikator na kraju, poput nasumičnih riječi ili vaΕ‘eg imena. + + Opcija `--sku Standard_LRS` odabire razinu cijene, birajuΔ‡i najjeftiniji opΔ‡i račun. Ne postoji besplatna razina za pohranu, a plaΔ‡ate za ono Ε‘to koristite. TroΕ‘kovi su relativno niski, s najskupljom pohranom koja koΕ‘ta manje od 0,05 USD mjesečno po gigabajtu pohranjenom. + + βœ… Pročitajte viΕ‘e o cijenama na [stranici s cijenama za Azure Storage Account](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn). + +1. Pokrenite sljedeΔ‡u naredbu za kreiranje aplikacije Functions: + + ```sh + az functionapp create --resource-group soil-moisture-sensor \ + --runtime python \ + --functions-version 3 \ + --os-type Linux \ + --consumption-plan-location \ + --storage-account \ + --name + ``` + + Zamijenite `` lokacijom koju ste koristili prilikom kreiranja Resource Group u prethodnoj lekciji. + + Zamijenite `` nazivom Storage Account-a koji ste kreirali u prethodnom koraku. + + Zamijenite `` jedinstvenim nazivom za vaΕ‘u aplikaciju Functions. Ovaj naziv mora biti globalno jedinstven jer čini dio URL-a koji se koristi za pristup aplikaciji Functions. Koristite neΕ‘to poput `soil-moisture-sensor-` i dodajte jedinstveni identifikator na kraju, poput nasumičnih riječi ili vaΕ‘eg imena. + + Opcija `--functions-version 3` postavlja verziju Azure Functions koja Δ‡e se koristiti. Verzija 3 je najnovija verzija. + + Opcija `--os-type Linux` govori runtime-u Functions da koristi Linux kao OS za hostiranje ovih funkcija. Functions se mogu hostirati na Linuxu ili Windowsu, ovisno o programskom jeziku koji se koristi. Python aplikacije podrΕΎane su samo na Linuxu. + +### Zadatak - učitajte postavke aplikacije + +Kada ste razvijali svoju aplikaciju Functions, pohranili ste neke postavke u datoteku `local.settings.json` za stringove za povezivanje s vaΕ‘im IoT Hub-om. Ove postavke trebaju biti zapisane u Application Settings u vaΕ‘oj aplikaciji Functions u Azureu kako bi ih vaΕ‘ kod mogao koristiti. + +> πŸŽ“ Datoteka `local.settings.json` namijenjena je samo za lokalne postavke razvoja i ne bi trebala biti uključena u kontrolu izvornog koda, poput GitHuba. Kada se implementira u oblak, koriste se Application Settings. Application Settings su parovi ključ/vrijednost hostirani u oblaku i čitaju se iz varijabli okruΕΎenja, bilo u vaΕ‘em kodu ili od strane runtime-a kada povezuje vaΕ‘ kod s IoT Hub-om. + +1. Pokrenite sljedeΔ‡u naredbu za postavljanje postavke `IOT_HUB_CONNECTION_STRING` u Application Settings aplikacije Functions: + + ```sh + az functionapp config appsettings set --resource-group soil-moisture-sensor \ + --name \ + --settings "IOT_HUB_CONNECTION_STRING=" + ``` + + Zamijenite `` nazivom koji ste koristili za vaΕ‘u aplikaciju Functions. + + Zamijenite `` vrijednoΕ‘Δ‡u `IOT_HUB_CONNECTION_STRING` iz vaΕ‘e datoteke `local.settings.json`. + +1. Ponovite gornji korak, ali postavite vrijednost `REGISTRY_MANAGER_CONNECTION_STRING` na odgovarajuΔ‡u vrijednost iz vaΕ‘e datoteke `local.settings.json`. + +Kada pokrenete ove naredbe, one Δ‡e takoΔ‘er ispisati popis svih Application Settings za aplikaciju Functions. MoΕΎete koristiti ovo za provjeru jesu li vaΕ‘e vrijednosti ispravno postavljene. + +> πŸ’ Vidjet Δ‡ete vrijednost koja je veΔ‡ postavljena za `AzureWebJobsStorage`. U vaΕ‘oj datoteci `local.settings.json`, ovo je bilo postavljeno na vrijednost za koriΕ‘tenje lokalnog emulatora pohrane. Kada ste kreirali aplikaciju Functions, proslijedili ste Storage Account kao parametar, i ovo se automatski postavlja u ovu postavku. + +### Zadatak - implementirajte svoju aplikaciju Functions u oblak + +Sada kada je aplikacija Functions spremna, vaΕ‘ kod moΕΎe biti implementiran. + +1. Pokrenite sljedeΔ‡u naredbu iz terminala u VS Code-u za objavljivanje vaΕ‘e aplikacije Functions: + + ```sh + func azure functionapp publish + ``` + + Zamijenite `` nazivom koji ste koristili za vaΕ‘u aplikaciju Functions. + +Kod Δ‡e biti pakiran i poslan aplikaciji Functions, gdje Δ‡e biti implementiran i pokrenut. Bit Δ‡e puno izlaznih podataka u konzoli, zavrΕ‘avajuΔ‡i potvrdom implementacije i popisom implementiranih funkcija. U ovom slučaju popis Δ‡e sadrΕΎavati samo okidač. + +```output +Deployment successful. +Remote build succeeded! +Syncing triggers... +Functions in soil-moisture-sensor: + iot-hub-trigger - [eventHubTrigger] +``` + +Provjerite radi li vaΕ‘ IoT ureΔ‘aj. Promijenite razine vlage prilagoΔ‘avanjem vlage tla ili pomicanjem senzora unutar i izvan tla. Vidjet Δ‡ete kako se relej uključuje i isključuje dok se vlaga tla mijenja. + +--- + +## πŸš€ Izazov + +U prethodnoj lekciji upravljali ste vremenom za relej tako Ε‘to ste se odjavili s MQTT poruka dok je relej bio uključen, i kratko vrijeme nakon Ε‘to je bio isključen. Ovu metodu ne moΕΎete koristiti ovdje - ne moΕΎete odjaviti svoj IoT Hub okidač. + +Razmislite o različitim načinima na koje biste mogli upravljati ovim u svojoj aplikaciji Functions. + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18) + +## Pregled i samostalno učenje + +* Pročitajte o serverless računarstvu na [stranici o serverless računarstvu na Wikipediji](https://wikipedia.org/wiki/Serverless_computing) +* Pročitajte o koriΕ‘tenju serverless u Azureu, uključujuΔ‡i joΕ‘ primjera, na [blog postu Azure Go serverless for your IoT needs](https://azure.microsoft.com/blog/go-serverless-for-your-iot-needs/?WT.mc_id=academic-17441-jabenn) +* Saznajte viΕ‘e o Azure Functions na [YouTube kanalu Azure Functions](https://www.youtube.com/c/AzureFunctions) + +## Zadatak + +[Dodajte ručnu kontrolu releja](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md b/translations/hr/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md new file mode 100644 index 00000000..fdb591d3 --- /dev/null +++ b/translations/hr/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md @@ -0,0 +1,70 @@ + +# Dodavanje ručne kontrole releja + +## Upute + +Serverless kod moΕΎe se pokrenuti na različite načine, uključujuΔ‡i HTTP zahtjeve. MoΕΎete koristiti HTTP okidače kako biste dodali ručno upravljanje relejem, omoguΔ‡ujuΔ‡i nekome da uključi ili isključi relej putem web zahtjeva. + +Za ovaj zadatak trebate dodati dva HTTP okidača u svoju Functions App aplikaciju kako biste uključili i isključili relej, koristeΔ‡i ono Ε‘to ste naučili u ovoj lekciji za slanje naredbi ureΔ‘aju. + +Neki savjeti: + +* MoΕΎete dodati HTTP okidač u svoju postojeΔ‡u Functions App aplikaciju pomoΔ‡u sljedeΔ‡e naredbe: + + ```sh + func new --name --template "HTTP trigger" + ``` + + Zamijenite `` imenom za vaΕ‘ HTTP okidač. Koristite neΕ‘to poput `relay_on` i `relay_off`. + +* HTTP okidači mogu imati kontrolu pristupa. Prema zadanim postavkama, zahtijevaju API ključ specifičan za funkciju koji se mora proslijediti s URL-om kako bi se pokrenuli. Za ovaj zadatak moΕΎete ukloniti ovo ograničenje kako bi svatko mogao pokrenuti funkciju. Da biste to učinili, aΕΎurirajte postavku `authLevel` u datoteci `function.json` za HTTP okidače na sljedeΔ‡e: + + ```json + "authLevel": "anonymous" + ``` + + > πŸ’ ViΕ‘e o ovoj kontroli pristupa moΕΎete pročitati u [dokumentaciji o pristupnim ključevima funkcija](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn#authorization-keys). + +* HTTP okidači prema zadanim postavkama podrΕΎavaju GET i POST zahtjeve. To znači da ih moΕΎete pozvati pomoΔ‡u svog web preglednika - web preglednici Ε‘alju GET zahtjeve. + + Kada pokrenete svoju Functions App aplikaciju lokalno, vidjet Δ‡ete URL okidača: + + ```output + Functions: + + relay_off: [GET,POST] http://localhost:7071/api/relay_off + + relay_on: [GET,POST] http://localhost:7071/api/relay_on + + iot-hub-trigger: eventHubTrigger + ``` + + Zalijepite URL u svoj preglednik i pritisnite `return`, ili `Ctrl+kliknite` (`Cmd+kliknite` na macOS-u) na poveznicu u terminalskom prozoru u VS Code-u kako biste je otvorili u svom zadanom pregledniku. Ovo Δ‡e pokrenuti okidač. + + > πŸ’ Primijetite da URL sadrΕΎi `/api` - HTTP okidači su prema zadanim postavkama u `api` poddomeni. + +* Kada implementirate Functions App aplikaciju, URL HTTP okidača bit Δ‡e: + + `https://.azurewebsites.net/api/` + + Gdje je `` naziv vaΕ‘e Functions App aplikacije, a `` naziv vaΕ‘eg okidača. + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | -------- | --------------- | -------------------- | +| Kreiranje HTTP okidača | Kreirana su 2 okidača za uključivanje i isključivanje releja s odgovarajuΔ‡im imenima | Kreiran je jedan okidač s odgovarajuΔ‡im imenom | Nije bilo moguΔ‡e kreirati nijedan okidač | +| Upravljanje relejem putem HTTP okidača | UspjeΕ‘no povezani oba okidača s IoT Hub-om i pravilno upravljanje relejem | UspjeΕ‘no povezan jedan okidač s IoT Hub-om i pravilno upravljanje relejem | Nije bilo moguΔ‡e povezati okidače s IoT Hub-om | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/6-keep-your-plant-secure/README.md b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/README.md new file mode 100644 index 00000000..f02133e5 --- /dev/null +++ b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/README.md @@ -0,0 +1,245 @@ + +# Osigurajte svoju biljku + +![Pregled lekcije u obliku sketchnotea](../../../../../translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hr.jpg) + +> Sketchnote autor [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/19) + +## Uvod + +U posljednjih nekoliko lekcija kreirali ste IoT ureΔ‘aj za praΔ‡enje tla i povezali ga s oblakom. No, Ε‘to ako hakeri koji rade za konkurentskog poljoprivrednika preuzmu kontrolu nad vaΕ‘im IoT ureΔ‘ajima? Ε to ako poΕ‘alju visoke očitanja vlaΕΎnosti tla kako vaΕ‘e biljke nikada ne bi bile zalijevane, ili uključe sustav za zalijevanje da radi neprekidno, ubijajuΔ‡i vaΕ‘e biljke prekomjernim zalijevanjem i uzrokujuΔ‡i vam velike troΕ‘kove za vodu? + +U ovoj lekciji naučit Δ‡ete kako osigurati IoT ureΔ‘aje. BuduΔ‡i da je ovo posljednja lekcija za ovaj projekt, takoΔ‘er Δ‡ete naučiti kako očistiti svoje resurse u oblaku, smanjujuΔ‡i potencijalne troΕ‘kove. + +U ovoj lekciji obradit Δ‡emo: + +* [ZaΕ‘to trebate osigurati IoT ureΔ‘aje?](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [Kriptografija](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [Osigurajte svoje IoT ureΔ‘aje](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [Generirajte i koristite X.509 certifikat](../../../../../2-farm/lessons/6-keep-your-plant-secure) + +> πŸ—‘ Ovo je posljednja lekcija u ovom projektu, pa nakon Ε‘to zavrΕ‘ite ovu lekciju i zadatak, ne zaboravite očistiti svoje usluge u oblaku. Trebat Δ‡e vam usluge za dovrΕ‘avanje zadatka, pa se pobrinite da prvo to zavrΕ‘ite. +> +> Ako je potrebno, pogledajte [vodič za čiΕ‘Δ‡enje projekta](../../../clean-up.md) za upute kako to učiniti. + +## ZaΕ‘to trebate osigurati IoT ureΔ‘aje? + +Sigurnost IoT-a uključuje osiguranje da samo očekivani ureΔ‘aji mogu povezati se s vaΕ‘om IoT uslugom u oblaku i slati telemetriju, te da samo vaΕ‘a usluga u oblaku moΕΎe slati naredbe vaΕ‘im ureΔ‘ajima. IoT podaci takoΔ‘er mogu biti osobni, uključujuΔ‡i medicinske ili intimne podatke, pa cijela vaΕ‘a aplikacija mora uzeti u obzir sigurnost kako bi spriječila curenje tih podataka. + +Ako vaΕ‘a IoT aplikacija nije sigurna, postoji niz rizika: + +* LaΕΎni ureΔ‘aj mogao bi poslati netočne podatke, uzrokujuΔ‡i da vaΕ‘a aplikacija reagira pogreΕ‘no. Na primjer, mogli bi poslati stalno visoke očitanja vlaΕΎnosti tla, Ε‘to znači da se vaΕ‘ sustav za navodnjavanje nikada ne uključuje i vaΕ‘e biljke umiru od nedostatka vode. +* NeovlaΕ‘teni korisnici mogli bi čitati podatke s IoT ureΔ‘aja, uključujuΔ‡i osobne ili poslovno kritične podatke. +* Hakeri bi mogli slati naredbe za kontrolu ureΔ‘aja na način koji bi mogao uzrokovati Ε‘tetu ureΔ‘aju ili povezanom hardveru. +* Povezivanjem na IoT ureΔ‘aj, hakeri mogu koristiti to za pristup dodatnim mreΕΎama i dobiti pristup privatnim sustavima. +* Zlonamjerni korisnici mogli bi pristupiti osobnim podacima i koristiti ih za ucjenu. + +Ovo su scenariji iz stvarnog svijeta i dogaΔ‘aju se stalno. Neki primjeri su navedeni u ranijim lekcijama, ali evo joΕ‘ nekoliko: + +* Godine 2018., hakeri su koristili otvorenu WiFi pristupnu točku na termostatu akvarija kako bi dobili pristup mreΕΎi kasina i ukrali podatke. [The Hacker News - Casino Gets Hacked Through Its Internet-Connected Fish Tank Thermometer](https://thehackernews.com/2018/04/iot-hacking-thermometer.html) +* Godine 2016., Mirai Botnet pokrenuo je napad uskraΔ‡ivanja usluge protiv Dyn-a, pruΕΎatelja internetskih usluga, čime je sruΕ‘io velike dijelove interneta. Ovaj botnet koristio je zlonamjerni softver za povezivanje s IoT ureΔ‘ajima poput DVR-ova i kamera koje su koristile zadane korisničke imena i lozinke, i odatle pokrenuo napad. [The Guardian - DDoS attack that disrupted internet was largest of its kind in history, experts say](https://www.theguardian.com/technology/2016/oct/26/ddos-attack-dyn-mirai-botnet) +* Spiral Toys imao je bazu podataka korisnika svojih povezanih igračaka CloudPets javno dostupnu na internetu. [Troy Hunt - Data from connected CloudPets teddy bears leaked and ransomed, exposing kids' voice messages](https://www.troyhunt.com/data-from-connected-cloudpets-teddy-bears-leaked-and-ransomed-exposing-kids-voice-messages/). +* Strava je označavala trkače koje ste proΕ‘li i prikazivala njihove rute, omoguΔ‡ujuΔ‡i strancima da praktički vide gdje ΕΎivite. [Kim Komndo - Fitness app could lead a stranger right to your home β€” change this setting](https://www.komando.com/security-privacy/strava-fitness-app-privacy/755349/). + +βœ… IstraΕΎite: PotraΕΎite viΕ‘e primjera hakiranja IoT-a i proboja IoT podataka, posebno s osobnim predmetima poput internetski povezanih četkica za zube ili vaga. Razmislite o utjecaju koji bi ti napadi mogli imati na ΕΎrtve ili kupce. + +> πŸ’ Sigurnost je ogromna tema, a ova lekcija Δ‡e se dotaknuti samo nekih osnovnih stvari vezanih uz povezivanje vaΕ‘eg ureΔ‘aja s oblakom. Ostale teme koje neΔ‡e biti pokrivene uključuju praΔ‡enje promjena podataka u prijenosu, hakiranje ureΔ‘aja izravno ili promjene konfiguracija ureΔ‘aja. Hakiranje IoT-a je toliko velika prijetnja da su razvijeni alati poput [Azure Defender for IoT](https://azure.microsoft.com/services/azure-defender-for-iot/?WT.mc_id=academic-17441-jabenn). Ovi alati su slični antivirusnim i sigurnosnim alatima koje moΕΎda imate na svom računalu, samo dizajnirani za male, niskoenergetske IoT ureΔ‘aje. + +## Kriptografija + +Kada se ureΔ‘aj povezuje s IoT uslugom, koristi ID za identifikaciju. Problem je Ε‘to se taj ID moΕΎe klonirati - haker bi mogao postaviti zlonamjerni ureΔ‘aj koji koristi isti ID kao pravi ureΔ‘aj, ali Ε‘alje laΕΎne podatke. + +![I pravi i zlonamjerni ureΔ‘aji mogli bi koristiti isti ID za slanje telemetrije](../../../../../translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hr.png) + +RjeΕ‘enje za ovo je pretvaranje podataka koji se Ε‘alju u Ε‘ifrirani format, koristeΔ‡i neku vrijednost poznatu samo ureΔ‘aju i oblaku. Ovaj proces se naziva *Ε‘ifriranje*, a vrijednost koja se koristi za Ε‘ifriranje podataka naziva se *ključ za Ε‘ifriranje*. + +![Ako se koristi Ε‘ifriranje, tada Δ‡e biti prihvaΔ‡ene samo Ε‘ifrirane poruke, ostale Δ‡e biti odbijene](../../../../../translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hr.png) + +Usluga u oblaku tada moΕΎe pretvoriti podatke natrag u čitljiv format, koristeΔ‡i proces nazvan *deΕ‘ifriranje*, koristeΔ‡i ili isti ključ za Ε‘ifriranje ili *ključ za deΕ‘ifriranje*. Ako se Ε‘ifrirana poruka ne moΕΎe deΕ‘ifrirati pomoΔ‡u ključa, ureΔ‘aj je hakiran i poruka se odbija. + +Tehnika za Ε‘ifriranje i deΕ‘ifriranje naziva se *kriptografija*. + +### Rani oblici kriptografije + +Najraniji oblici kriptografije bili su zamjenske Ε‘ifre, koje datiraju unatrag 3.500 godina. Zamjenske Ε‘ifre uključuju zamjenu jednog slova drugim. Na primjer, [Cezarova Ε‘ifra](https://wikipedia.org/wiki/Caesar_cipher) uključuje pomicanje abecede za odreΔ‘eni broj mjesta, pri čemu samo poΕ‘iljatelj Ε‘ifrirane poruke i namijenjeni primatelj znaju za koliko mjesta pomaknuti. + +[VigenΓ¨reova Ε‘ifra](https://wikipedia.org/wiki/VigenΓ¨re_cipher) je otiΕ‘la korak dalje koristeΔ‡i riječi za Ε‘ifriranje teksta, tako da je svako slovo u originalnom tekstu pomaknuto za različit broj mjesta, umjesto da se uvijek pomiče za isti broj slova. + +Kriptografija se koristila za Ε‘irok raspon svrha, poput zaΕ‘tite recepta za glazuru lončara u drevnoj Mezopotamiji, pisanja tajnih ljubavnih poruka u Indiji ili čuvanja drevnih egipatskih magijskih čarolija u tajnosti. + +### Moderna kriptografija + +Moderna kriptografija je mnogo naprednija, Ε‘to je čini teΕΎom za razbijanje od ranijih metoda. Moderna kriptografija koristi sloΕΎenu matematiku za Ε‘ifriranje podataka s previΕ‘e moguΔ‡ih ključeva da bi napadi grube sile bili moguΔ‡i. + +Kriptografija se koristi na mnogo različitih načina za sigurne komunikacije. Ako čitate ovu stranicu na GitHubu, moΕΎda Δ‡ete primijetiti da web adresa počinje s *HTTPS*, Ε‘to znači da je komunikacija izmeΔ‘u vaΕ‘eg preglednika i web posluΕΎitelja GitHuba Ε‘ifrirana. Ako bi netko mogao čitati internetski promet koji teče izmeΔ‘u vaΕ‘eg preglednika i GitHuba, ne bi mogao pročitati podatke jer su Ε‘ifrirani. VaΕ‘e računalo čak moΕΎe Ε‘ifrirati sve podatke na vaΕ‘em tvrdom disku, tako da ako ga netko ukrade, neΔ‡e moΔ‡i pročitati vaΕ‘e podatke bez vaΕ‘e lozinke. + +> πŸŽ“ HTTPS označava HyperText Transfer Protocol **Secure** + +NaΕΎalost, nije sve sigurno. Neki ureΔ‘aji nemaju nikakvu sigurnost, drugi su osigurani lako razbijivim ključevima, ili čak svi ureΔ‘aji iste vrste koriste isti ključ. Postoje izvjeΕ‘taji o vrlo osobnim IoT ureΔ‘ajima koji svi imaju istu lozinku za povezivanje putem WiFi-a ili Bluetootha. Ako se moΕΎete povezati sa svojim ureΔ‘ajem, moΕΎete se povezati i s tuΔ‘im. Jednom povezani, mogli biste pristupiti vrlo privatnim podacima ili imati kontrolu nad njihovim ureΔ‘ajem. + +> πŸ’ Unatoč sloΕΎenosti moderne kriptografije i tvrdnjama da razbijanje Ε‘ifriranja moΕΎe trajati milijardama godina, uspon kvantnog računalstva doveo je do moguΔ‡nosti razbijanja svih poznatih Ε‘ifriranja u vrlo kratkom vremenu! + +### Simetrični i asimetrični ključevi + +Ε ifriranje dolazi u dva oblika - simetrično i asimetrično. + +**Simetrično** Ε‘ifriranje koristi isti ključ za Ε‘ifriranje i deΕ‘ifriranje podataka. I poΕ‘iljatelj i primatelj moraju znati isti ključ. Ovo je najmanje siguran tip, jer se ključ mora nekako podijeliti. Da bi poΕ‘iljatelj poslao Ε‘ifriranu poruku primatelju, poΕ‘iljatelj prvo mora poslati primatelju ključ. + +![Simetrično Ε‘ifriranje koristi isti ključ za Ε‘ifriranje i deΕ‘ifriranje poruke](../../../../../translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hr.png) + +Ako se ključ ukrade tijekom prijenosa, ili ako poΕ‘iljatelj ili primatelj budu hakirani i ključ se pronaΔ‘e, Ε‘ifriranje se moΕΎe razbiti. + +![Simetrično Ε‘ifriranje je sigurno samo ako haker ne dobije ključ - ako ga dobije, moΕΎe presresti i deΕ‘ifrirati poruku](../../../../../translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hr.png) + +**Asimetrično** Ε‘ifriranje koristi 2 ključa - ključ za Ε‘ifriranje i ključ za deΕ‘ifriranje, poznate kao javno/privatni par ključeva. Javni ključ se koristi za Ε‘ifriranje poruke, ali se ne moΕΎe koristiti za deΕ‘ifriranje, dok se privatni ključ koristi za deΕ‘ifriranje poruke, ali se ne moΕΎe koristiti za Ε‘ifriranje. + +![Asimetrično Ε‘ifriranje koristi različite ključeve za Ε‘ifriranje i deΕ‘ifriranje. Ključ za Ε‘ifriranje se Ε‘alje poΕ‘iljateljima poruka kako bi mogli Ε‘ifrirati poruku prije slanja primatelju koji posjeduje ključeve](../../../../../translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hr.png) + +Primatelj dijeli svoj javni ključ, a poΕ‘iljatelj koristi ovaj ključ za Ε‘ifriranje poruke. Nakon Ε‘to je poruka poslana, primatelj je deΕ‘ifrira svojim privatnim ključem. Asimetrično Ε‘ifriranje je sigurnije jer se privatni ključ čuva privatnim od strane primatelja i nikada se ne dijeli. Javni ključ moΕΎe imati bilo tko jer se moΕΎe koristiti samo za Ε‘ifriranje poruka. + +Simetrično Ε‘ifriranje je brΕΎe od asimetričnog, dok je asimetrično sigurnije. Neki sustavi koriste oba - koristeΔ‡i asimetrično Ε‘ifriranje za Ε‘ifriranje i dijeljenje simetričnog ključa, a zatim koristeΔ‡i simetrični ključ za Ε‘ifriranje svih podataka. Ovo čini dijeljenje simetričnog ključa izmeΔ‘u poΕ‘iljatelja i primatelja sigurnijim, i brΕΎim kada se Ε‘ifriraju i deΕ‘ifriraju podaci. + +## Osigurajte svoje IoT ureΔ‘aje + +IoT ureΔ‘aji mogu se osigurati koriΕ‘tenjem simetričnog ili asimetričnog Ε‘ifriranja. Simetrično je jednostavnije, ali manje sigurno. + +### Simetrični ključevi + +Kada ste postavili svoj IoT ureΔ‘aj za interakciju s IoT Hubom, koristili ste niz za povezivanje. Primjer niza za povezivanje je: + +```output +HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0= +``` + +Ovaj niz za povezivanje sastoji se od tri dijela odvojenih točkama-zarezima, pri čemu je svaki dio ključ i vrijednost: + +| Ključ | Vrijednost | Opis | +| --- | ----- | ----------- | +| HostName | `soil-moisture-sensor.azure-devices.net` | URL IoT Huba | +| DeviceId | `soil-moisture-sensor` | Jedinstveni ID ureΔ‘aja | +| SharedAccessKey | `Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=` | Simetrični ključ poznat ureΔ‘aju i IoT Hubu | + +Posljednji dio ovog niza za povezivanje, `SharedAccessKey`, je simetrični ključ poznat i ureΔ‘aju i IoT Hubu. Ovaj ključ nikada se ne Ε‘alje s ureΔ‘aja na oblak, niti s oblaka na ureΔ‘aj. Umjesto toga, koristi se za Ε‘ifriranje podataka koji se Ε‘alju ili primaju. + +βœ… Napravite eksperiment. Ε to mislite da Δ‡e se dogoditi ako promijenite dio `SharedAccessKey` u nizu za povezivanje prilikom povezivanja vaΕ‘eg IoT ureΔ‘aja? Isprobajte. + +Kada se ureΔ‘aj prvi put pokuΕ‘ava povezati, Ε‘alje token zajedničkog pristupa (SAS) koji se sastoji od URL-a IoT Huba, vremenske oznake kada Δ‡e token isteΔ‡i (obično 1 dan od trenutnog vremena) i potpisa. Ovaj potpis se sastoji od URL-a i vremena isteka Ε‘ifriranih zajedničkim ključem za pristup iz niza za povezivanje. + +IoT Hub deΕ‘ifrira ovaj potpis zajedničkim ključem za pristup, i ako deΕ‘ifrirana vrijednost odgovara URL-u i vremenu isteka, ureΔ‘aju je dopuΕ‘teno povezivanje. TakoΔ‘er provjerava da je trenutno vrijeme prije isteka, kako bi spriječio zlonamjerni ureΔ‘aj da uhvati SAS token pravog ureΔ‘aja i koristi ga. + +Ovo je elegantan način za provjeru da je poΕ‘iljatelj ispravan ureΔ‘aj. Slanjem nekih poznatih podataka u Ε‘ifriranom i neΕ‘ifriranom obliku, posluΕΎitelj moΕΎe provjeriti ureΔ‘aj osiguravajuΔ‡i da kada deΕ‘ifrira Ε‘ifrirane podatke, rezultat odgovara neΕ‘ifriranoj verziji koja je poslana. Ako se podaci podudaraju, tada i poΕ‘iljatelj i primatelj imaju isti simetrični ključ za Ε‘ifriranje. +πŸ’ Zbog vremena isteka, vaΕ‘ IoT ureΔ‘aj mora znati točno vrijeme, koje se obično očitava s [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) posluΕΎitelja. Ako vrijeme nije točno, veza Δ‡e propasti. +Nakon povezivanja, svi podaci poslani na IoT Hub s ureΔ‘aja ili s IoT Huba na ureΔ‘aj bit Δ‡e Ε‘ifrirani pomoΔ‡u zajedničkog pristupnog ključa. + +βœ… Ε to mislite, Ε‘to Δ‡e se dogoditi ako viΕ‘e ureΔ‘aja dijeli isti niz za povezivanje? + +> πŸ’ LoΕ‘a je sigurnosna praksa pohranjivati ovaj ključ u kodu. Ako haker doΔ‘e do vaΕ‘eg izvornog koda, moΕΎe doΔ‡i i do vaΕ‘eg ključa. TakoΔ‘er, kompliciranije je prilikom objavljivanja koda jer biste morali ponovno kompajlirati s aΕΎuriranim ključem za svaki ureΔ‘aj. Bolje je učitati ovaj ključ iz hardverskog sigurnosnog modula - čipa na IoT ureΔ‘aju koji pohranjuje Ε‘ifrirane vrijednosti koje vaΕ‘ kod moΕΎe čitati. +> +> Kada učite o IoT-u, često je lakΕ‘e staviti ključ u kod, kao Ε‘to ste to učinili u ranijoj lekciji, ali morate osigurati da taj ključ nije javno dostupan u sustavu za kontrolu izvornog koda. + +UreΔ‘aji imaju 2 ključa i 2 odgovarajuΔ‡a niza za povezivanje. To omoguΔ‡uje rotaciju ključeva - prelazak s jednog ključa na drugi ako je prvi kompromitiran, te ponovno generiranje prvog ključa. + +### X.509 certifikati + +Kada koristite asimetrično Ε‘ifriranje s parom javnog/privatnog ključa, trebate pruΕΎiti svoj javni ključ svima koji vam ΕΎele poslati podatke. Problem je, kako primatelj vaΕ‘eg ključa moΕΎe biti siguran da je to zaista vaΕ‘ javni ključ, a ne nečiji drugi tko se pretvara da ste vi? Umjesto pruΕΎanja ključa, moΕΎete pruΕΎiti svoj javni ključ unutar certifikata koji je verificiran od strane pouzdane treΔ‡e strane, nazvane X.509 certifikat. + +X.509 certifikati su digitalni dokumenti koji sadrΕΎe javni dio para javnog/privatnog ključa. Obično ih izdaju organizacije koje se nazivaju [Certifikacijske vlasti](https://wikipedia.org/wiki/Certificate_authority) (CAs), i digitalno ih potpisuju kako bi naznačili da je ključ valjan i da dolazi od vas. Vjerujete certifikatu i da je javni ključ od onoga tko certifikat tvrdi da je, jer vjerujete CA-u, slično kao Ε‘to biste vjerovali putovnici ili vozačkoj dozvoli jer vjerujete zemlji koja ih izdaje. Certifikati koΕ‘taju, pa moΕΎete i sami potpisati certifikat, tj. stvoriti certifikat koji sami potpisujete, za potrebe testiranja. + +> πŸ’ Nikada ne biste trebali koristiti samopotpisani certifikat za produkcijsko izdanje. + +Ovi certifikati sadrΕΎe niz polja, uključujuΔ‡i od koga je javni ključ, detalje o CA-u koji ga je izdao, koliko dugo vrijedi i sam javni ključ. Prije koriΕ‘tenja certifikata, dobra je praksa provjeriti ga kako biste osigurali da ga je potpisao izvorni CA. + +βœ… MoΕΎete pročitati potpuni popis polja u certifikatu u [Microsoftovom vodiču za razumijevanje X.509 certifikata javnog ključa](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-certificates?WT.mc_id=academic-17441-jabenn#certificate-fields) + +Kada koristite X.509 certifikate, i poΕ‘iljatelj i primatelj imaju svoje javne i privatne ključeve, kao i X.509 certifikate koji sadrΕΎe javni ključ. Zatim razmjenjuju X.509 certifikate na neki način, koristeΔ‡i javne ključeve jedni drugih za Ε‘ifriranje podataka koje Ε‘alju, i svoje privatne ključeve za deΕ‘ifriranje podataka koje primaju. + +![Umjesto dijeljenja javnog ključa, moΕΎete podijeliti certifikat. Korisnik certifikata moΕΎe provjeriti dolazi li od vas provjerom kod certifikacijske vlasti koja ga je potpisala.](../../../../../translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hr.png) + +Jedna velika prednost koriΕ‘tenja X.509 certifikata je Ε‘to se mogu dijeliti izmeΔ‘u ureΔ‘aja. MoΕΎete stvoriti jedan certifikat, učitati ga na IoT Hub i koristiti ga za sve svoje ureΔ‘aje. Svaki ureΔ‘aj tada samo treba znati privatni ključ kako bi deΕ‘ifrirao poruke koje prima od IoT Huba. + +Certifikat koji vaΕ‘ ureΔ‘aj koristi za Ε‘ifriranje poruka koje Ε‘alje na IoT Hub objavljuje Microsoft. To je isti certifikat koji koristi mnogo Azure usluga i ponekad je ugraΔ‘en u SDK-ove. + +> πŸ’ Zapamtite, javni ključ je upravo to - javan. Azure javni ključ moΕΎe se koristiti samo za Ε‘ifriranje podataka poslanih Azureu, ne i za njihovo deΕ‘ifriranje, tako da se moΕΎe dijeliti svugdje, uključujuΔ‡i u izvornom kodu. Na primjer, moΕΎete ga vidjeti u [Azure IoT C SDK izvornom kodu](https://github.com/Azure/azure-iot-sdk-c/blob/master/certs/certs.c). + +βœ… Postoji mnogo stručnih izraza vezanih uz X.509 certifikate. MoΕΎete pročitati definicije nekih pojmova na koje moΕΎete naiΔ‡i u [Vodiču za laike o X.509 certifikatima](https://techcommunity.microsoft.com/t5/internet-of-things/the-layman-s-guide-to-x-509-certificate-jargon/ba-p/2203540?WT.mc_id=academic-17441-jabenn) + +## Generiranje i koriΕ‘tenje X.509 certifikata + +Koraci za generiranje X.509 certifikata su: + +1. Stvorite par javnog/privatnog ključa. Jedan od najčeΕ‘Δ‡e koriΕ‘tenih algoritama za generiranje para javnog/privatnog ključa zove se [Rivest–Shamir–Adleman](https://wikipedia.org/wiki/RSA_(cryptosystem))(RSA). + +1. PoΕ‘aljite javni ključ s pripadajuΔ‡im podacima na potpisivanje, bilo CA-u ili samopotpisivanjem. + +Azure CLI ima naredbe za stvaranje novog identiteta ureΔ‘aja u IoT Hubu i automatsko generiranje para javnog/privatnog ključa te stvaranje samopotpisanog certifikata. + +> πŸ’ Ako ΕΎelite vidjeti korake detaljno, umjesto koriΕ‘tenja Azure CLI-a, moΕΎete ih pronaΔ‡i u [Vodiču za koriΕ‘tenje OpenSSL-a za stvaranje samopotpisanih certifikata u Microsoftovoj IoT Hub dokumentaciji](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-self-sign?WT.mc_id=academic-17441-jabenn) + +### Zadatak - stvaranje identiteta ureΔ‘aja pomoΔ‡u X.509 certifikata + +1. Pokrenite sljedeΔ‡u naredbu za registraciju novog identiteta ureΔ‘aja, automatski generirajuΔ‡i ključeve i certifikate: + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor-x509 \ + --am x509_thumbprint \ + --output-dir . \ + --hub-name + ``` + + Zamijenite `` imenom koje ste koristili za svoj IoT Hub. + + Ovo Δ‡e stvoriti ureΔ‘aj s ID-om `soil-moisture-sensor-x509` kako bi se razlikovao od identiteta ureΔ‘aja koji ste stvorili u proΕ‘loj lekciji. Ova naredba takoΔ‘er Δ‡e stvoriti 2 datoteke u trenutnom direktoriju: + + * `soil-moisture-sensor-x509-key.pem` - ova datoteka sadrΕΎi privatni ključ za ureΔ‘aj. + * `soil-moisture-sensor-x509-cert.pem` - ovo je X.509 certifikat za ureΔ‘aj. + + Čuvajte ove datoteke na sigurnom! Datoteka s privatnim ključem ne bi smjela biti javno dostupna u sustavu za kontrolu izvornog koda. + +### Zadatak - koriΕ‘tenje X.509 certifikata u kodu vaΕ‘eg ureΔ‘aja + +ProΔ‘ite kroz odgovarajuΔ‡i vodič za povezivanje vaΕ‘eg IoT ureΔ‘aja s oblakom koristeΔ‡i X.509 certifikat: + +* [Arduino - Wio Terminal](wio-terminal-x509.md) +* [Jednobordno računalo - Raspberry Pi/Virtualni IoT ureΔ‘aj](single-board-computer-x509.md) + +--- + +## πŸš€ Izazov + +Postoji viΕ‘e načina za stvaranje, upravljanje i brisanje Azure usluga poput Resource Groupa i IoT Hubova. Jedan od načina je [Azure Portal](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) - web sučelje koje vam pruΕΎa GUI za upravljanje vaΕ‘im Azure uslugama. + +Posjetite [portal.azure.com](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) i istraΕΎite portal. PokuΕ‘ajte stvoriti IoT Hub koristeΔ‡i portal, a zatim ga obriΕ‘ite. + +**Savjet** - prilikom stvaranja usluga putem portala, ne morate unaprijed stvoriti Resource Group, jedna se moΕΎe stvoriti tijekom stvaranja usluge. Obavezno je obriΕ‘ite kada zavrΕ‘ite! + +MoΕΎete pronaΔ‡i obilje dokumentacije, vodiča i uputa o Azure Portalu u [Azure portal dokumentaciji](https://docs.microsoft.com/azure/azure-portal/?WT.mc_id=academic-17441-jabenn). + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/20) + +## Pregled i samostalno učenje + +* Pročitajte o povijesti kriptografije na [stranici Povijest kriptografije na Wikipediji](https://wikipedia.org/wiki/History_of_cryptography). +* Pročitajte o X.509 certifikatima na [stranici X.509 na Wikipediji](https://wikipedia.org/wiki/X.509). + +## Zadatak + +[Izgradite novi IoT ureΔ‘aj](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/6-keep-your-plant-secure/assignment.md b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/assignment.md new file mode 100644 index 00000000..e4cad969 --- /dev/null +++ b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/assignment.md @@ -0,0 +1,29 @@ + +# Izgradite novi IoT ureΔ‘aj + +## Upute + +Tijekom posljednjih 6 lekcija naučili ste o digitalnoj poljoprivredi i kako koristiti IoT ureΔ‘aje za prikupljanje podataka kako biste predvidjeli rast biljaka i automatizirali zalijevanje na temelju očitanja vlaΕΎnosti tla. + +Iskoristite ono Ε‘to ste naučili kako biste izgradili novi IoT ureΔ‘aj koristeΔ‡i senzor i aktuator po vaΕ‘em izboru. PoΕ‘aljite telemetriju u IoT Hub i koristite je za upravljanje aktuatorom putem serverless koda. MoΕΎete koristiti senzor i aktuator koje ste veΔ‡ koristili u ovom ili prethodnom projektu, ili ako imate drugu opremu, isprobajte neΕ‘to novo. + +## Rubrika + +| Kriterij | Primjeran | ZadovoljavajuΔ‡i | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Programiranje IoT ureΔ‘aja za koriΕ‘tenje senzora i aktuatora | Programiran IoT ureΔ‘aj koji radi sa senzorom i aktuatorom | Programiran IoT ureΔ‘aj koji radi sa senzorom ili aktuatorom | Nije uspio programirati IoT ureΔ‘aj za koriΕ‘tenje senzora ili aktuatora | +| Povezivanje IoT ureΔ‘aja s IoT Hubom | UspjeΕ‘no postavljen IoT Hub, slanje telemetrije i primanje naredbi | UspjeΕ‘no postavljen IoT Hub i slanje telemetrije ili primanje naredbi | Nije uspio postaviti IoT Hub i komunicirati s njim putem IoT ureΔ‘aja | +| Upravljanje aktuatorom pomoΔ‡u serverless koda | UspjeΕ‘no postavljena Azure Function za upravljanje ureΔ‘ajem pokrenuta telemetrijskim dogaΔ‘ajima | UspjeΕ‘no postavljena Azure Function pokrenuta telemetrijskim dogaΔ‘ajima, ali nije uspjelo upravljanje aktuatorom | Nije uspio postaviti Azure Function | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md new file mode 100644 index 00000000..4155c70d --- /dev/null +++ b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md @@ -0,0 +1,71 @@ + +# Koristite X.509 certifikat u kodu vaΕ‘eg ureΔ‘aja - Virtualni IoT hardver i Raspberry Pi + +U ovom dijelu lekcije, povezat Δ‡ete svoj virtualni IoT ureΔ‘aj ili Raspberry Pi s IoT Hubom koristeΔ‡i X.509 certifikat. + +## PoveΕΎite svoj ureΔ‘aj s IoT Hubom + +SljedeΔ‡i korak je povezivanje vaΕ‘eg ureΔ‘aja s IoT Hubom koristeΔ‡i X.509 certifikate. + +### Zadatak - povezivanje s IoT Hubom + +1. Kopirajte datoteke ključa i certifikata u mapu koja sadrΕΎi kod vaΕ‘eg IoT ureΔ‘aja. Ako koristite Raspberry Pi putem VS Code Remote SSH i kreirali ste ključeve na svom PC-u ili Macu, moΕΎete povuΔ‡i i ispustiti datoteke u explorer u VS Code-u kako biste ih kopirali. + +1. Otvorite datoteku `app.py` + +1. Za povezivanje koristeΔ‡i X.509 certifikat, trebat Δ‡e vam naziv hosta IoT Huba i X.509 certifikat. Započnite stvaranjem varijable koja sadrΕΎi naziv hosta dodavanjem sljedeΔ‡eg koda prije nego Ε‘to se kreira klijent ureΔ‘aja: + + ```python + host_name = "" + ``` + + Zamijenite `` nazivom hosta vaΕ‘eg IoT Huba. MoΕΎete ga pronaΔ‡i u odjeljku `HostName` unutar `connection_string`. To Δ‡e biti naziv vaΕ‘eg IoT Huba, koji zavrΕ‘ava s `.azure-devices.net`. + +1. Ispod toga, deklarirajte varijablu s ID-om ureΔ‘aja: + + ```python + device_id = "soil-moisture-sensor-x509" + ``` + +1. Trebat Δ‡e vam instanca klase `X509` koja sadrΕΎi X.509 datoteke. Dodajte `X509` na popis klasa uvezenih iz modula `azure.iot.device`: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse, X509 + ``` + +1. Kreirajte instancu klase `X509` koristeΔ‡i vaΕ‘e certifikate i datoteke ključeva dodavanjem ovog koda ispod deklaracije `host_name`: + + ```python + x509 = X509("./soil-moisture-sensor-x509-cert.pem", "./soil-moisture-sensor-x509-key.pem") + ``` + + Ovo Δ‡e kreirati klasu `X509` koristeΔ‡i datoteke `soil-moisture-sensor-x509-cert.pem` i `soil-moisture-sensor-x509-key.pem` koje ste ranije kreirali. + +1. Zamijenite liniju koda koja kreira `device_client` iz connection stringa sljedeΔ‡im: + + ```python + device_client = IoTHubDeviceClient.create_from_x509_certificate(x509, host_name, device_id) + ``` + + Ovo Δ‡e se povezati koristeΔ‡i X.509 certifikat umjesto connection stringa. + +1. ObriΕ‘ite liniju s varijablom `connection_string`. + +1. Pokrenite svoj kod. Pratite poruke koje se Ε‘alju IoT Hubu i Ε‘aljite zahtjeve za direktne metode kao i prije. Vidjet Δ‡ete kako se ureΔ‘aj povezuje i Ε‘alje očitanja vlaΕΎnosti tla, kao i prima zahtjeve za direktne metode. + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/pi](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/pi) ili [code/virtual-device](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/virtual-device). + +πŸ˜€ VaΕ‘ program senzora vlaΕΎnosti tla povezan je s vaΕ‘im IoT Hubom koristeΔ‡i X.509 certifikat! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md new file mode 100644 index 00000000..e8138c09 --- /dev/null +++ b/translations/hr/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md @@ -0,0 +1,17 @@ + +# Koristite X.509 certifikat u kodu vaΕ‘eg ureΔ‘aja - Wio Terminal + +U trenutku pisanja, Azure Arduino SDK ne podrΕΎava X.509 certifikate. Ako ΕΎelite eksperimentirati s X.509 certifikatima, moΕΎete se referirati na [upute za virtualni IoT ureΔ‘aj koristeΔ‡i Python SDK](single-board-computer-x509.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/README.md b/translations/hr/3-transport/README.md new file mode 100644 index 00000000..552fdf28 --- /dev/null +++ b/translations/hr/3-transport/README.md @@ -0,0 +1,38 @@ + +# Transport s farme do tvornice - koriΕ‘tenje IoT-a za praΔ‡enje dostave hrane + +Mnogi poljoprivrednici uzgajaju hranu za prodaju - bilo da su komercijalni poljoprivrednici koji prodaju sve Ε‘to uzgoje ili su poljoprivrednici koji uzgajaju za vlastite potrebe i prodaju viΕ‘ak kako bi kupili osnovne potrepΕ‘tine. Nekako hrana mora stiΔ‡i s farme do potroΕ‘ača, a to obično uključuje prijevoz u velikim količinama s farmi do srediΕ‘njih čvoriΕ‘ta ili preraΔ‘ivačkih postrojenja, a zatim do trgovina. Na primjer, poljoprivrednik koji uzgaja rajčice Δ‡e ih ubrati, spakirati u kutije, utovariti kutije u kamion i dostaviti ih u preraΔ‘ivačko postrojenje. Tamo Δ‡e se rajčice sortirati, a zatim dostaviti potroΕ‘ačima u obliku preraΔ‘ene hrane, za maloprodaju ili za konzumaciju u restoranima. + +IoT moΕΎe pomoΔ‡i u ovom opskrbnom lancu praΔ‡enjem hrane tijekom transporta - osiguravajuΔ‡i da vozači idu kamo bi trebali, prateΔ‡i lokacije vozila i Ε‘aljuΔ‡i obavijesti kada vozila stignu kako bi se hrana mogla istovariti i Ε‘to prije pripremiti za preradu. + +> πŸŽ“ *Opskrbni lanac* je niz aktivnosti potrebnih za proizvodnju i isporuku nečega. Na primjer, u uzgoju rajčica to uključuje nabavu sjemena, tla, gnojiva i vode, uzgoj rajčica, dostavu rajčica u srediΕ‘nje čvoriΕ‘te, transport do lokalnog čvoriΕ‘ta supermarketa, dostavu u pojedinačne supermarkete, izlaganje na policama, prodaju potroΕ‘aču i noΕ‘enje kuΔ‡i za konzumaciju. Svaki korak je poput karike u lancu. + +> πŸŽ“ Dio opskrbnog lanca koji se odnosi na prijevoz poznat je kao *logistika*. + +U ovih 4 lekcije naučit Δ‡ete kako primijeniti Internet stvari za poboljΕ‘anje opskrbnog lanca praΔ‡enjem hrane dok se utovaruje na (virtualni) kamion, koji se prati dok se kreΔ‡e prema odrediΕ‘tu. Naučit Δ‡ete o GPS praΔ‡enju, kako pohraniti i vizualizirati GPS podatke te kako primati obavijesti kada kamion stigne na odrediΕ‘te. + +> πŸ’ Ove lekcije koriste neke resurse u oblaku. Ako ne zavrΕ‘ite sve lekcije u ovom projektu, obavezno [očistite svoj projekt](../clean-up.md). + +## Teme + +1. [PraΔ‡enje lokacije](lessons/1-location-tracking/README.md) +1. [Pohrana podataka o lokaciji](lessons/2-store-location-data/README.md) +1. [Vizualizacija podataka o lokaciji](lessons/3-visualize-location-data/README.md) +1. [Geoograde](lessons/4-geofences/README.md) + +## Zasluge + +Sve lekcije napisane su s β™₯️ od strane [Jen Looper](https://github.com/jlooper) i [Jim Bennett](https://GitHub.com/JimBobBennett) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije proizaΕ‘le iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/README.md b/translations/hr/3-transport/lessons/1-location-tracking/README.md new file mode 100644 index 00000000..78566877 --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/README.md @@ -0,0 +1,216 @@ + +# PraΔ‡enje lokacije + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hr.jpg) + +> Sketchnote autorice [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/21) + +## Uvod + +Glavni proces dostave hrane od poljoprivrednika do potroΕ‘ača uključuje utovar kutija s proizvodima na kamione, brodove, avione ili druga komercijalna prijevozna sredstva te dostavu hrane na neko odrediΕ‘te – bilo izravno kupcu ili u centralno skladiΕ‘te za daljnju obradu. Cijeli proces od farme do potroΕ‘ača dio je procesa koji se naziva *lanac opskrbe*. Videozapis u nastavku, koji dolazi sa SveučiliΕ‘ta Arizona State, W. P. Carey School of Business, detaljnije objaΕ‘njava koncept lanca opskrbe i kako se njime upravlja. + +[![Ε to je upravljanje lancem opskrbe? Video sa SveučiliΕ‘ta Arizona State, W. P. Carey School of Business](https://img.youtube.com/vi/Mi1QBxVjZAw/0.jpg)](https://www.youtube.com/watch?v=Mi1QBxVjZAw) + +> πŸŽ₯ Kliknite na sliku iznad za gledanje videa + +Dodavanje IoT ureΔ‘aja moΕΎe značajno unaprijediti vaΕ‘ lanac opskrbe, omoguΔ‡ujuΔ‡i vam bolje upravljanje lokacijom predmeta, planiranje prijevoza i rukovanja robom te brΕΎe reagiranje na probleme. + +Kada upravljate flotom vozila poput kamiona, korisno je znati gdje se svako vozilo nalazi u odreΔ‘enom trenutku. Vozila se mogu opremiti GPS senzorima koji Ε‘alju svoju lokaciju IoT sustavima, omoguΔ‡ujuΔ‡i vlasnicima da precizno odrede njihovu lokaciju, vide rutu kojom su se kretali i znaju kada Δ‡e stiΔ‡i na odrediΕ‘te. VeΔ‡ina vozila radi izvan WiFi pokrivenosti, pa koriste mobilne mreΕΎe za slanje ovakvih podataka. Ponekad je GPS senzor ugraΔ‘en u sloΕΎenije IoT ureΔ‘aje poput elektroničkih dnevnika voΕΎnje. Ovi ureΔ‘aji prate koliko dugo je kamion bio u tranzitu kako bi se osiguralo da vozači poΕ‘tuju lokalne zakone o radnim satima. + +U ovoj lekciji naučit Δ‡ete kako pratiti lokaciju vozila koristeΔ‡i senzor Globalnog pozicijskog sustava (GPS). + +U ovoj lekciji obradit Δ‡emo: + +* [Povezana vozila](../../../../../3-transport/lessons/1-location-tracking) +* [Geoprostorne koordinate](../../../../../3-transport/lessons/1-location-tracking) +* [Globalni pozicijski sustavi (GPS)](../../../../../3-transport/lessons/1-location-tracking) +* [Čitanje podataka GPS senzora](../../../../../3-transport/lessons/1-location-tracking) +* [NMEA GPS podaci](../../../../../3-transport/lessons/1-location-tracking) +* [Dekodiranje podataka GPS senzora](../../../../../3-transport/lessons/1-location-tracking) + +## Povezana vozila + +IoT mijenja način na koji se roba prevozi stvaranjem flota *povezanih vozila*. Ova vozila su povezana s centralnim IT sustavima i Ε‘alju informacije o svojoj lokaciji te drugim podacima senzora. Imati flotu povezanih vozila donosi brojne prednosti: + +* PraΔ‡enje lokacije - moΕΎete precizno odrediti gdje se vozilo nalazi u bilo kojem trenutku, Ε‘to omoguΔ‡uje: + + * Primanje obavijesti kada je vozilo blizu odrediΕ‘ta kako biste pripremili ekipu za istovar + * PronalaΕΎenje ukradenih vozila + * Kombiniranje podataka o lokaciji i ruti s prometnim problemima kako biste preusmjerili vozila tijekom putovanja + * PoΕ‘tivanje poreznih propisa. Neke zemlje naplaΔ‡uju vozilima porez na temelju prijeΔ‘ene kilometraΕΎe na javnim cestama (kao Ε‘to je [novozelandski RUC](https://www.nzta.govt.nz/vehicles/licensing-rego/road-user-charges/)), pa poznavanje trenutka kada je vozilo na javnim cestama u odnosu na privatne olakΕ‘ava izračunavanje poreza. + * Znanje gdje poslati ekipe za odrΕΎavanje u slučaju kvara + +* Telemetrija vozača - osiguravanje da vozači poΕ‘tuju ograničenja brzine, voze sigurno i učinkovito koče. Povezana vozila takoΔ‘er mogu imati kamere za snimanje incidenata. Ovo se moΕΎe povezati s osiguranjem, omoguΔ‡ujuΔ‡i niΕΎe premije za dobre vozače. + +* PoΕ‘tivanje radnih sati vozača - osiguravanje da vozači voze samo unutar zakonski dopuΕ‘tenih sati na temelju vremena kada pale i gase motor. + +Ove se prednosti mogu kombinirati - na primjer, kombiniranje poΕ‘tivanja radnih sati vozača s praΔ‡enjem lokacije kako bi se vozači preusmjerili ako ne mogu stiΔ‡i na odrediΕ‘te unutar dopuΕ‘tenih sati voΕΎnje. TakoΔ‘er se mogu kombinirati s drugim telemetrijskim podacima specifičnim za vozilo, poput podataka o temperaturi iz kamiona s kontroliranom temperaturom, omoguΔ‡ujuΔ‡i preusmjeravanje vozila ako trenutna ruta znači da roba neΔ‡e biti odrΕΎavana na odgovarajuΔ‡oj temperaturi. + +> πŸŽ“ Logistika je proces transporta robe s jednog mjesta na drugo, poput transporta s farme u supermarket preko jednog ili viΕ‘e skladiΕ‘ta. Poljoprivrednik pakira kutije s rajčicama koje se utovaruju na kamion, dostavljaju u centralno skladiΕ‘te i prebacuju na drugi kamion koji moΕΎe sadrΕΎavati mjeΕ‘avinu različitih vrsta proizvoda, a zatim se dostavljaju u supermarket. + +Ključna komponenta praΔ‡enja vozila je GPS - senzori koji mogu odrediti svoju lokaciju bilo gdje na Zemlji. U ovoj lekciji naučit Δ‡ete kako koristiti GPS senzor, počevΕ‘i s učenjem o tome kako definirati lokaciju na Zemlji. + +## Geoprostorne koordinate + +Geoprostorne koordinate koriste se za definiranje točaka na Zemljinoj povrΕ‘ini, slično kao Ε‘to se koordinate koriste za crtanje piksela na ekranu računala ili pozicioniranje Ε‘avova u vezu. Za jednu točku imate par koordinata. Na primjer, Microsoftov kampus u Redmondu, Washington, SAD nalazi se na 47.6423109, -122.1390293. + +### Geografska Ε‘irina i duΕΎina + +Zemlja je sfera - trodimenzionalni krug. Zbog toga se točke definiraju dijeljenjem na 360 stupnjeva, isto kao i geometrija krugova. Geografska Ε‘irina mjeri broj stupnjeva od sjevera prema jugu, a geografska duΕΎina mjeri broj stupnjeva od istoka prema zapadu. + +> πŸ’ Nitko zapravo ne zna izvorni razlog zaΕ‘to su krugovi podijeljeni na 360 stupnjeva. [Stranica o stupnjevima (kut) na Wikipediji](https://wikipedia.org/wiki/Degree_(angle)) pokriva neke od moguΔ‡ih razloga. + +![Linije geografske Ε‘irine od 90Β° na Sjevernom polu, 45Β° na pola puta izmeΔ‘u Sjevernog pola i ekvatora, 0Β° na ekvatoru, -45Β° na pola puta izmeΔ‘u ekvatora i JuΕΎnog pola, i -90Β° na JuΕΎnom polu](../../../../../translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hr.png) + +Geografska Ε‘irina mjeri se pomoΔ‡u linija koje kruΕΎe Zemljom i paralelne su s ekvatorom, dijeleΔ‡i sjevernu i juΕΎnu hemisferu na po 90Β°. Ekvator je na 0Β°, Sjeverni pol na 90Β°, takoΔ‘er poznat kao 90Β° sjeverno, a JuΕΎni pol na -90Β°, ili 90Β° juΕΎno. + +Geografska duΕΎina mjeri se kao broj stupnjeva prema istoku i zapadu. Početna točka od 0Β° geografske duΕΎine naziva se *Glavni meridijan* i definirana je 1884. godine kao linija od Sjevernog do JuΕΎnog pola koja prolazi kroz [Kraljevski opservatorij u Greenwichu, Engleska](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich). + +![Linije geografske duΕΎine koje idu od -180Β° zapadno od Glavnog meridijana, do 0Β° na Glavnom meridijanu, do 180Β° istočno od Glavnog meridijana](../../../../../translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hr.png) + +> πŸŽ“ Meridijan je zamiΕ‘ljena ravna linija koja ide od Sjevernog do JuΕΎnog pola, tvoreΔ‡i polukrug. + +Za mjerenje geografske duΕΎine točke, mjeri se broj stupnjeva oko ekvatora od Glavnog meridijana do meridijana koji prolazi kroz tu točku. Geografska duΕΎina ide od -180Β°, ili 180Β° zapadno, preko 0Β° na Glavnom meridijanu, do 180Β°, ili 180Β° istočno. 180Β° i -180Β° odnose se na istu točku, antimeridijan ili 180. meridijan. Ovo je meridijan na suprotnoj strani Zemlje od Glavnog meridijana. + +> πŸ’ Antimeridijan se ne smije mijeΕ‘ati s MeΔ‘unarodnom datumska linijom, koja je otprilike na istom poloΕΎaju, ali nije ravna linija i varira kako bi se prilagodila geopolitičkim granicama. + +βœ… IstraΕΎite: PokuΕ‘ajte pronaΔ‡i geografsku Ε‘irinu i duΕΎinu svoje trenutne lokacije. + +### Stupnjevi, minute i sekunde naspram decimalnih stupnjeva + +Tradicionalno, mjerenja stupnjeva geografske Ε‘irine i duΕΎine vrΕ‘ila su se koristeΔ‡i Ε‘ezdesetinski sustav, ili bazu-60, sustav numeriranja koji su koristili drevni Babilonci koji su prvi mjerili i biljeΕΎili vrijeme i udaljenost. Ε ezdesetinski sustav koristite svakodnevno, vjerojatno i ne shvaΔ‡ajuΔ‡i to - dijeljenjem sati na 60 minuta i minuta na 60 sekundi. + +Geografska duΕΎina i Ε‘irina mjere se u stupnjevima, minutama i sekundama, pri čemu jedna minuta iznosi 1/60 stupnja, a 1 sekunda 1/60 minute. + +Na primjer, na ekvatoru: + +* 1Β° geografske Ε‘irine iznosi **111,3 kilometara** +* 1 minuta geografske Ε‘irine iznosi 111,3/60 = **1,855 kilometara** +* 1 sekunda geografske Ε‘irine iznosi 1,855/60 = **0,031 kilometara** + +Simbol za minutu je jednostruki navodnik, za sekundu dvostruki navodnik. Na primjer, 2 stupnja, 17 minuta i 43 sekunde zapisuje se kao 2Β°17'43". Dijelovi sekundi daju se kao decimale, na primjer pola sekunde je 0Β°0'0.5". + +Računala ne rade u bazi-60, pa se ove koordinate daju kao decimalni stupnjevi kada se koriste GPS podaci u veΔ‡ini računalnih sustava. Na primjer, 2Β°17'43" je 2.295277. Simbol stupnja obično se izostavlja. + +Koordinate za točku uvijek se daju kao `geografska Ε‘irina, geografska duΕΎina`, pa primjer ranije za Microsoftov kampus na 47.6423109,-122.117198 ima: + +* Geografsku Ε‘irinu od 47.6423109 (47.6423109 stupnjeva sjeverno od ekvatora) +* Geografsku duΕΎinu od -122.1390293 (122.1390293 stupnjeva zapadno od Glavnog meridijana). + +![Microsoftov kampus na 47.6423109,-122.117198](../../../../../translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hr.png) + +## Globalni pozicijski sustavi (GPS) + +GPS sustavi koriste viΕ‘e satelita koji kruΕΎe oko Zemlje kako bi odredili vaΕ‘u lokaciju. Vjerojatno ste koristili GPS sustave, a da toga niste ni svjesni - za pronalaΕΎenje svoje lokacije u aplikaciji za karte na svom telefonu poput Apple Maps ili Google Maps, za praΔ‡enje gdje se nalazi vaΕ‘e vozilo u aplikaciji za naručivanje prijevoza poput Ubera ili Lyfta, ili kada koristite satelitsku navigaciju (sat-nav) u svom automobilu. + +> πŸŽ“ Sateliti u 'satelitskoj navigaciji' su GPS sateliti! + +GPS sustavi rade tako Ε‘to imaju niz satelita koji Ε‘alju signal s trenutnom pozicijom svakog satelita i točnim vremenskim zapisom. Ovi signali se Ε‘alju putem radio valova i detektiraju antenom u GPS senzoru. GPS senzor detektira ove signale i, koristeΔ‡i trenutno vrijeme, mjeri koliko je vremena trebalo da signal stigne od satelita do senzora. BuduΔ‡i da je brzina radio valova konstantna, GPS senzor moΕΎe koristiti poslani vremenski zapis kako bi izračunao koliko je senzor udaljen od satelita. Kombiniranjem podataka s najmanje 3 satelita i njihovih pozicija, GPS senzor moΕΎe precizno odrediti svoju lokaciju na Zemlji. + +> πŸ’ GPS senzori trebaju antene za detekciju radio valova. Antene ugraΔ‘ene u kamione i automobile s ugraΔ‘enim GPS-om postavljene su tako da imaju dobar signal, obično na vjetrobranskom staklu ili krovu. Ako koristite zaseban GPS sustav, poput pametnog telefona ili IoT ureΔ‘aja, trebate osigurati da antena ugraΔ‘ena u GPS sustav ili telefon ima jasan pogled na nebo, poput postavljanja na vjetrobransko staklo. + +![Pozicija se moΕΎe izračunati znajuΔ‡i udaljenost od senzora do viΕ‘e satelita](../../../../../translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hr.png) + +GPS sateliti kruΕΎe oko Zemlje, nisu na fiksnoj točki iznad senzora, pa podaci o lokaciji uključuju nadmorsku visinu iznad razine mora, kao i geografsku Ε‘irinu i duΕΎinu. + +GPS je nekada imao ograničenja točnosti koja je nametnula američka vojska, ograničavajuΔ‡i točnost na oko 5 metara. Ovo ograničenje uklonjeno je 2000. godine, omoguΔ‡ujuΔ‡i točnost od 30 centimetara. Postizanje ove točnosti nije uvijek moguΔ‡e zbog smetnji u signalima. + +βœ… Ako imate pametni telefon, pokrenite aplikaciju za karte i provjerite koliko je točna vaΕ‘a lokacija. MoΕΎda Δ‡e trebati kratko vrijeme da vaΕ‘ telefon detektira viΕ‘e satelita kako bi dobio točniju lokaciju. +πŸ’ Sateliti sadrΕΎe atomske satove koji su izuzetno precizni, ali odstupaju za 38 mikrosekundi (0,0000038 sekundi) dnevno u usporedbi s atomskim satovima na Zemlji, zbog usporavanja vremena kako se brzina poveΔ‡ava, Ε‘to je predvidio Einstein u teorijama posebne i opΔ‡e relativnosti - sateliti se kreΔ‡u brΕΎe od rotacije Zemlje. Ovo odstupanje koriΕ‘teno je za dokazivanje predviΔ‘anja posebne i opΔ‡e relativnosti te se mora uzeti u obzir pri dizajnu GPS sustava. Doslovno, vrijeme sporije teče na GPS satelitu. +GPS sustavi razvijeni su i implementirani od strane nekoliko zemalja i političkih unija, uključujuΔ‡i SAD, Rusiju, Japan, Indiju, EU i Kinu. Moderni GPS senzori mogu se povezati s veΔ‡inom ovih sustava kako bi dobili brΕΎe i preciznije podatke. + +> πŸŽ“ Skupine satelita u svakom sustavu nazivaju se konstelacijama. + +## Čitanje podataka s GPS senzora + +VeΔ‡ina GPS senzora Ε‘alje GPS podatke putem UART-a. + +> ⚠️ UART je obraΔ‘en u [projektu 2, lekcija 2](../../../2-farm/lessons/2-detect-soil-moisture/README.md#universal-asynchronous-receiver-transmitter-uart). Vratite se na tu lekciju ako je potrebno. + +MoΕΎete koristiti GPS senzor na svom IoT ureΔ‘aju za dobivanje GPS podataka. + +### Zadatak - povezivanje GPS senzora i čitanje GPS podataka + +ProΔ‘ite kroz odgovarajuΔ‡i vodič za čitanje GPS podataka pomoΔ‡u vaΕ‘eg IoT ureΔ‘aja: + +* [Arduino - Wio Terminal](wio-terminal-gps-sensor.md) +* [Jednoplatično računalo - Raspberry Pi](pi-gps-sensor.md) +* [Jednoplatično računalo - Virtualni ureΔ‘aj](virtual-device-gps-sensor.md) + +## NMEA GPS podaci + +Kada pokrenete svoj kod, mogli biste vidjeti ono Ε‘to na prvi pogled izgleda kao besmisleni tekst u izlazu. To su zapravo standardni GPS podaci, i svaki dio ima svoje značenje. + +GPS senzori Ε‘alju podatke koristeΔ‡i NMEA poruke, prema NMEA 0183 standardu. NMEA je akronim za [National Marine Electronics Association](https://www.nmea.org), američku trgovačku organizaciju koja postavlja standarde za komunikaciju izmeΔ‘u morske elektronike. + +> πŸ’ Ovaj standard je vlasnički i prodaje se za najmanje 2.000 USD, ali dovoljno informacija o njemu dostupno je u javnoj domeni da je veΔ‡ina standarda reverzno inΕΎenjerirana i moΕΎe se koristiti u otvorenom kodu i drugim nekomercijalnim aplikacijama. + +Ove poruke su tekstualne. Svaka poruka sastoji se od *rečenice* koja počinje znakom `$`, nakon čega slijede 2 znaka koji označavaju izvor poruke (npr. GP za američki GPS sustav, GN za GLONASS, ruski GPS sustav), te 3 znaka koji označavaju tip poruke. Ostatak poruke su polja odvojena zarezima, zavrΕ‘avajuΔ‡i znakom za novi redak. + +Neki od tipova poruka koje se mogu primiti su: + +| Tip | Opis | +| ---- | ----------- | +| GGA | Podaci o GPS lokaciji, uključujuΔ‡i geografsku Ε‘irinu, duΕΎinu i nadmorsku visinu GPS senzora, zajedno s brojem satelita u vidokrugu za izračunavanje lokacije. | +| ZDA | Trenutni datum i vrijeme, uključujuΔ‡i lokalnu vremensku zonu | +| GSV | Detalji o satelitima u vidokrugu - definirano kao sateliti od kojih GPS senzor moΕΎe primiti signale | + +> πŸ’ GPS podaci uključuju vremenske oznake, tako da vaΕ‘ IoT ureΔ‘aj moΕΎe dobiti vrijeme ako je potrebno od GPS senzora, umjesto da se oslanja na NTP server ili unutarnji real-time sat. + +Poruka GGA uključuje trenutnu lokaciju koristeΔ‡i format `(dd)dmm.mmmm`, zajedno s jednim znakom koji označava smjer. `d` u formatu označava stupnjeve, `m` minute, dok su sekunde prikazane kao decimali minuta. Na primjer, 2Β°17'43" bi bilo 217.716666667 - 2 stupnja, 17.716666667 minuta. + +Znak za smjer moΕΎe biti `N` ili `S` za geografsku Ε‘irinu, Ε‘to označava sjever ili jug, te `E` ili `W` za geografsku duΕΎinu, Ε‘to označava istok ili zapad. Na primjer, geografska Ε‘irina od 2Β°17'43" imala bi znak za smjer `N`, dok bi -2Β°17'43" imala znak `S`. + +Primjer - NMEA rečenica `$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67` + +* Dio za geografsku Ε‘irinu je `4738.538654,N`, Ε‘to se pretvara u 47.6423109 u decimalnim stupnjevima. `4738.538654` je 47.6423109, a smjer je `N` (sjever), pa je to pozitivna geografska Ε‘irina. + +* Dio za geografsku duΕΎinu je `12208.341758,W`, Ε‘to se pretvara u -122.1390293 u decimalnim stupnjevima. `12208.341758` je 122.1390293Β°, a smjer je `W` (zapad), pa je to negativna geografska duΕΎina. + +## Dekodiranje GPS podataka + +Umjesto koriΕ‘tenja sirovih NMEA podataka, bolje je dekodirati ih u korisniji format. Postoji mnogo open-source biblioteka koje moΕΎete koristiti za izdvajanje korisnih podataka iz sirovih NMEA poruka. + +### Zadatak - dekodiranje GPS podataka + +ProΔ‘ite kroz odgovarajuΔ‡i vodič za dekodiranje GPS podataka pomoΔ‡u vaΕ‘eg IoT ureΔ‘aja: + +* [Arduino - Wio Terminal](wio-terminal-gps-decode.md) +* [Jednoplatično računalo - Raspberry Pi/Virtualni IoT ureΔ‘aj](single-board-computer-gps-decode.md) + +--- + +## πŸš€ Izazov + +NapiΕ‘ite vlastiti NMEA dekoder! Umjesto oslanjanja na biblioteke treΔ‡ih strana za dekodiranje NMEA rečenica, moΕΎete li napisati vlastiti dekoder za izdvajanje geografske Ε‘irine i duΕΎine iz NMEA rečenica? + +## Kviz nakon predavanja + +[Kviz nakon predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/22) + +## Pregled i samostalno učenje + +* Pročitajte viΕ‘e o geospacijalnim koordinatama na [stranici o geografskom koordinatnom sustavu na Wikipediji](https://wikipedia.org/wiki/Geographic_coordinate_system). +* Informirajte se o početnim meridijanima na drugim nebeskim tijelima osim Zemlje na [stranici o početnom meridijanu na Wikipediji](https://wikipedia.org/wiki/Prime_meridian#Prime_meridian_on_other_planetary_bodies). +* IstraΕΎite različite GPS sustave različitih svjetskih vlada i političkih unija poput EU, Japana, Rusije, Indije i SAD-a. + +## Zadatak + +[IstraΕΎite druge GPS podatke](assignment.md) + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/assignment.md b/translations/hr/3-transport/lessons/1-location-tracking/assignment.md new file mode 100644 index 00000000..56876a19 --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/assignment.md @@ -0,0 +1,29 @@ + +# IstraΕΎite druge GPS podatke + +## Upute + +NMEA rečenice koje dolaze s vaΕ‘eg GPS senzora sadrΕΎe i druge podatke osim lokacije. IstraΕΎite dodatne podatke i iskoristite ih u svom IoT ureΔ‘aju. + +Na primjer - moΕΎete li dobiti trenutni datum i vrijeme? Ako koristite mikrokontroler, moΕΎete li postaviti sat koristeΔ‡i GPS podatke na isti način kao Ε‘to ste ga postavili koristeΔ‡i NTP signale u prethodnom projektu? MoΕΎete li dobiti nadmorsku visinu (vaΕ‘u visinu iznad razine mora) ili trenutnu brzinu? + +Ako koristite virtualni IoT ureΔ‘aj, neke od ovih podataka moΕΎete dobiti slanjem NMEA rečenica generiranih pomoΔ‡u alata [nmeagen.org](https://www.nmeagen.org). + +## Rubrika + +| Kriterij | Izvrsno | ZadovoljavajuΔ‡e | Potrebno poboljΕ‘anje | +| -------- | --------- | --------------- | -------------------- | +| Dobivanje viΕ‘e GPS podataka | Uspijeva dobiti i koristiti viΕ‘e GPS podataka, bilo kao telemetriju ili za postavljanje IoT ureΔ‘aja | Uspijeva dobiti viΕ‘e GPS podataka, ali ih ne moΕΎe koristiti | Ne uspijeva dobiti viΕ‘e GPS podataka | + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogreΕ‘ne interpretacije koje proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/pi-gps-sensor.md b/translations/hr/3-transport/lessons/1-location-tracking/pi-gps-sensor.md new file mode 100644 index 00000000..dcfc93ac --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/pi-gps-sensor.md @@ -0,0 +1,193 @@ + +# Čitanje GPS podataka - Raspberry Pi + +U ovom dijelu lekcije, dodati Δ‡ete GPS senzor na svoj Raspberry Pi i očitati vrijednosti s njega. + +## Hardver + +Raspberry Pi treba GPS senzor. + +Senzor koji Δ‡ete koristiti je [Grove GPS Air530 senzor](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html). Ovaj senzor moΕΎe se povezati s viΕ‘e GPS sustava za brzo i precizno odreΔ‘ivanje lokacije. Senzor se sastoji od 2 dijela - osnovne elektronike senzora i vanjske antene povezane tankim kabelom za primanje radio valova sa satelita. + +Ovo je UART senzor, Ε‘to znači da Ε‘alje GPS podatke putem UART-a. + +## Povezivanje GPS senzora + +Grove GPS senzor moΕΎe se povezati s Raspberry Pi-jem. + +### Zadatak - povezivanje GPS senzora + +PoveΕΎite GPS senzor. + +![Grove GPS senzor](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na GPS senzoru. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Raspberry Pi isključen, poveΕΎite drugi kraj Grove kabela s UART utičnicom označenom **UART** na Grove Base hatu pričvrΕ‘Δ‡enom na Pi. Ova utičnica nalazi se u srednjem redu, na strani najbliΕΎoj utoru za SD karticu, na suprotnoj strani od USB portova i ethernet utičnice. + + ![Grove GPS senzor povezan s UART utičnicom](../../../../../translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hr.png) + +1. Postavite GPS senzor tako da povezana antena ima vidljivost prema nebu - idealno pored otvorenog prozora ili vani. LakΕ‘e je dobiti jasniji signal bez prepreka izmeΔ‘u antene i neba. + +## Programiranje GPS senzora + +Raspberry Pi sada se moΕΎe programirati za koriΕ‘tenje povezanog GPS senzora. + +### Zadatak - programiranje GPS senzora + +Programirajte ureΔ‘aj. + +1. Uključite Pi i pričekajte da se pokrene. + +1. GPS senzor ima 2 LED diode - plavu LED diodu koja treperi kada se podaci prenose i zelenu LED diodu koja treperi svake sekunde kada prima podatke sa satelita. Provjerite treperi li plava LED dioda kada uključite Pi. Nakon nekoliko minuta, zelena LED dioda Δ‡e početi treperiti - ako ne, moΕΎda Δ‡ete morati premjestiti antenu. + +1. Pokrenite VS Code, bilo direktno na Pi-ju ili se poveΕΎite putem Remote SSH ekstenzije. + + > ⚠️ MoΕΎete se referirati na [upute za postavljanje i pokretanje VS Code-a u lekciji 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. Kod novijih verzija Raspberry Pi-ja koje podrΕΎavaju Bluetooth, postoji konflikt izmeΔ‘u serijskog porta koji koristi Bluetooth i onog koji koristi Grove UART port. Da biste to rijeΕ‘ili, učinite sljedeΔ‡e: + + 1. Iz terminala u VS Code-u, uredite datoteku `/boot/config.txt` koristeΔ‡i `nano`, ugraΔ‘eni terminalski tekst editor, s naredbom: + + ```sh + sudo nano /boot/config.txt + ``` + + > Ovu datoteku ne moΕΎete ureΔ‘ivati putem VS Code-a jer je potrebno koristiti `sudo` dozvole, odnosno poviΕ‘ene dozvole. VS Code ne radi s tim dozvolama. + + 1. Koristite tipke sa strelicama za navigaciju do kraja datoteke, zatim kopirajte kod ispod i zalijepite ga na kraj datoteke: + + ```ini + dtoverlay=pi3-miniuart-bt + dtoverlay=pi3-disable-bt + enable_uart=1 + ``` + + MoΕΎete zalijepiti koristeΔ‡i uobičajene prečace na tipkovnici za vaΕ‘ ureΔ‘aj (`Ctrl+v` na Windows, Linux ili Raspberry Pi OS, `Cmd+v` na macOS). + + 1. Spremite ovu datoteku i izaΔ‘ite iz nano-a pritiskom na `Ctrl+x`. Pritisnite `y` kada vas pita ΕΎelite li spremiti izmijenjeni buffer, zatim pritisnite `enter` za potvrdu da ΕΎelite prebrisati `/boot/config.txt`. + + > Ako napravite greΕ‘ku, moΕΎete izaΔ‡i bez spremanja, zatim ponoviti ove korake. + + 1. Uredite datoteku `/boot/cmdline.txt` u nano-u s naredbom: + + ```sh + sudo nano /boot/cmdline.txt + ``` + + 1. Ova datoteka ima niz parova ključ/vrijednost odvojenih razmacima. Uklonite sve parove ključ/vrijednost za ključ `console`. Oni Δ‡e vjerojatno izgledati ovako: + + ```output + console=serial0,115200 console=tty1 + ``` + + MoΕΎete navigirati do ovih unosa koristeΔ‡i tipke sa strelicama, zatim ih obrisati koristeΔ‡i uobičajene tipke `del` ili `backspace`. + + Na primjer, ako vaΕ‘a originalna datoteka izgleda ovako: + + ```output + console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait + ``` + + Nova verzija Δ‡e izgledati ovako: + + ```output + root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait + ``` + + 1. Slijedite gore navedene korake za spremanje ove datoteke i izlazak iz nano-a. + + 1. Ponovno pokrenite svoj Pi, zatim se ponovno poveΕΎite u VS Code nakon Ε‘to se Pi ponovno pokrene. + +1. Iz terminala, kreirajte novu mapu u home direktoriju korisnika `pi` nazvanu `gps-sensor`. Kreirajte datoteku u ovoj mapi nazvanu `app.py`. + +1. Otvorite ovu mapu u VS Code-u. + +1. GPS modul Ε‘alje UART podatke preko serijskog porta. Instalirajte `pyserial` Pip paket za komunikaciju sa serijskim portom iz vaΕ‘eg Python koda: + + ```sh + pip3 install pyserial + ``` + +1. Dodajte sljedeΔ‡i kod u svoju datoteku `app.py`: + + ```python + import time + import serial + + serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) + serial.reset_input_buffer() + serial.flush() + + def print_gps_data(line): + print(line.rstrip()) + + while True: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data(line) + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + + Ovaj kod uvozi modul `serial` iz `pyserial` Pip paketa. Zatim se povezuje na serijski port `/dev/ttyAMA0` - ovo je adresa serijskog porta koji Grove Pi Base Hat koristi za svoj UART port. Zatim briΕ‘e sve postojeΔ‡e podatke s ove serijske veze. + + Zatim se definira funkcija `print_gps_data` koja ispisuje liniju proslijeΔ‘enu njoj na konzolu. + + Nakon toga, kod se beskonačno ponavlja, čitajuΔ‡i Ε‘to viΕ‘e linija teksta moΕΎe sa serijskog porta u svakom ciklusu. Poziva funkciju `print_gps_data` za svaku liniju. + + Nakon Ε‘to su svi podaci pročitani, petlja spava 1 sekundu, zatim pokuΕ‘ava ponovno. + +1. Pokrenite ovaj kod. Vidjet Δ‡ete sirovi izlaz s GPS senzora, neΕ‘to poput sljedeΔ‡eg: + + ```output + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + $GPGSA,A,1,,,,,,,,,,,,,,,*1E + $BDGSA,A,1,,,,,,,,,,,,,,,*0F + $GPGSV,1,1,00*79 + $BDGSV,1,1,00*68 + ``` + + > Ako dobijete jednu od sljedeΔ‡ih greΕ‘aka prilikom zaustavljanja i ponovnog pokretanja koda, dodajte `try - except` blok u svoju while petlju. + + ```output + UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte + UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte + ``` + + ```python + while True: + try: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data() + line = serial.readline().decode('utf-8') + + # There's a random chance the first byte being read is part way through a character. + # Read another full line and continue. + + except UnicodeDecodeError: + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-gps/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps/pi). + +πŸ˜€ VaΕ‘ program za GPS senzor je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md b/translations/hr/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md new file mode 100644 index 00000000..a1e7c0e0 --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md @@ -0,0 +1,75 @@ + +# Dekodiranje GPS podataka - Virtualni IoT hardver i Raspberry Pi + +U ovom dijelu lekcije dekodirat Δ‡ete NMEA poruke koje čita GPS senzor putem Raspberry Pi ureΔ‘aja ili Virtualnog IoT ureΔ‘aja te izvuΔ‡i geografske Ε‘irine i duΕΎine. + +## Dekodiranje GPS podataka + +Nakon Ε‘to se sirovi NMEA podaci pročitaju s serijskog porta, mogu se dekodirati pomoΔ‡u otvorene NMEA biblioteke. + +### Zadatak - dekodiranje GPS podataka + +Programirajte ureΔ‘aj za dekodiranje GPS podataka. + +1. Otvorite projekt aplikacije `gps-sensor` ako veΔ‡ nije otvoren. + +1. Instalirajte Pip paket `pynmea2`. Ovaj paket sadrΕΎi kod za dekodiranje NMEA poruka. + + ```sh + pip3 install pynmea2 + ``` + +1. Dodajte sljedeΔ‡i kod u uvoze u datoteci `app.py` kako biste uvezli modul `pynmea2`: + + ```python + import pynmea2 + ``` + +1. Zamijenite sadrΕΎaj funkcije `print_gps_data` sljedeΔ‡im: + + ```python + msg = pynmea2.parse(line) + if msg.sentence_type == 'GGA': + lat = pynmea2.dm_to_sd(msg.lat) + lon = pynmea2.dm_to_sd(msg.lon) + + if msg.lat_dir == 'S': + lat = lat * -1 + + if msg.lon_dir == 'W': + lon = lon * -1 + + print(f'{lat},{lon} - from {msg.num_sats} satellites') + ``` + + Ovaj kod koristi biblioteku `pynmea2` za parsiranje linije pročitane s UART serijskog porta. + + Ako je tip rečenice poruke `GGA`, tada je to poruka o poziciji i obraΔ‘uje se. Vrijednosti geografske Ε‘irine i duΕΎine čitaju se iz poruke i pretvaraju u decimalne stupnjeve iz NMEA formata `(d)ddmm.mmmm`. Funkcija `dm_to_sd` obavlja ovu konverziju. + + Zatim se provjerava smjer geografske Ε‘irine, i ako je Ε‘irina juΕΎna, vrijednost se pretvara u negativan broj. Isto vrijedi i za geografsku duΕΎinu, ako je zapadna, pretvara se u negativan broj. + + Na kraju se koordinate ispisuju na konzolu, zajedno s brojem satelita koriΕ‘tenih za odreΔ‘ivanje lokacije. + +1. Pokrenite kod. Ako koristite virtualni IoT ureΔ‘aj, provjerite je li aplikacija CounterFit pokrenuta i Ε‘alje li GPS podatke. + + ```output + pi@raspberrypi:~/gps-sensor $ python3 app.py + 47.6423109,-122.1390293 - from 3 satellites + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-gps-decode/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/virtual-device) ili u mapi [code-gps-decode/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/pi). + +πŸ˜€ VaΕ‘ program za GPS senzor s dekodiranjem podataka bio je uspjeΕ‘an! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogreΕ‘na tumačenja koja mogu proizaΔ‡i iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md b/translations/hr/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md new file mode 100644 index 00000000..1eb4fa6c --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md @@ -0,0 +1,144 @@ + +# Čitanje GPS podataka - Virtualni IoT ureΔ‘aj + +U ovom dijelu lekcije, dodati Δ‡ete GPS senzor svom virtualnom IoT ureΔ‘aju i čitati vrijednosti s njega. + +## Virtualni hardver + +Virtualni IoT ureΔ‘aj koristi simulirani GPS senzor koji je dostupan putem UART-a preko serijskog porta. + +Fizički GPS senzor ima antenu za primanje radio valova s GPS satelita i pretvaranje GPS signala u GPS podatke. Virtualna verzija simulira ovo omoguΔ‡ujuΔ‡i vam da postavite geografsku Ε‘irinu i duΕΎinu, poΕ‘aljete sirove NMEA rečenice ili učitate GPX datoteku s viΕ‘e lokacija koje se mogu uzastopno vraΔ‡ati. + +> πŸŽ“ NMEA rečenice Δ‡e biti objaΕ‘njene kasnije u ovoj lekciji + +### Dodavanje senzora u CounterFit + +Za koriΕ‘tenje virtualnog GPS senzora, potrebno je dodati jedan u CounterFit aplikaciju. + +#### Zadatak - dodavanje senzora u CounterFit + +Dodajte GPS senzor u CounterFit aplikaciju. + +1. Kreirajte novu Python aplikaciju na svom računalu u mapi nazvanoj `gps-sensor` s jednim datotekama nazvanim `app.py` i Python virtualnim okruΕΎenjem, te dodajte CounterFit pip pakete. + + > ⚠️ MoΕΎete se referirati na [upute za kreiranje i postavljanje CounterFit Python projekta u lekciji 1 ako je potrebno](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. Instalirajte dodatni Pip paket za instalaciju CounterFit shima koji moΕΎe komunicirati sa senzorima temeljenim na UART-u preko serijske veze. Provjerite da instalaciju radite iz terminala s aktiviranim virtualnim okruΕΎenjem. + + ```sh + pip install counterfit-shims-serial + ``` + +1. Provjerite da je CounterFit web aplikacija pokrenuta. + +1. Kreirajte GPS senzor: + + 1. U okviru *Create sensor* u *Sensors* panelu, otvorite padajuΔ‡i izbornik *Sensor type* i odaberite *UART GPS*. + + 1. Ostavite *Port* postavljen na */dev/ttyAMA0* + + 1. Odaberite gumb **Add** za kreiranje GPS senzora na portu `/dev/ttyAMA0`. + + ![Postavke GPS senzora](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hr.png) + + GPS senzor Δ‡e biti kreiran i pojavit Δ‡e se na popisu senzora. + + ![Kreirani GPS senzor](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hr.png) + +## Programiranje GPS senzora + +Virtualni IoT ureΔ‘aj sada moΕΎe biti programiran za koriΕ‘tenje virtualnog GPS senzora. + +### Zadatak - programiranje GPS senzora + +Programirajte aplikaciju za GPS senzor. + +1. Provjerite da je aplikacija `gps-sensor` otvorena u VS Code-u. + +1. Otvorite datoteku `app.py`. + +1. Dodajte sljedeΔ‡i kod na vrh `app.py` za povezivanje aplikacije s CounterFit-om: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. Dodajte sljedeΔ‡i kod ispod ovog za uvoz potrebnih biblioteka, uključujuΔ‡i biblioteku za CounterFit serijski port: + + ```python + import time + import counterfit_shims_serial + + serial = counterfit_shims_serial.Serial('/dev/ttyAMA0') + ``` + + Ovaj kod uvozi modul `serial` iz Pip paketa `counterfit_shims_serial`. Zatim se povezuje na serijski port `/dev/ttyAMA0` - ovo je adresa serijskog porta koji virtualni GPS senzor koristi za svoj UART port. + +1. Dodajte sljedeΔ‡i kod ispod ovog za čitanje sa serijskog porta i ispis vrijednosti na konzolu: + + ```python + def print_gps_data(line): + print(line.rstrip()) + + while True: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data(line) + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + + Definirana je funkcija `print_gps_data` koja ispisuje liniju proslijeΔ‘enu njoj na konzolu. + + Zatim kod ulazi u beskonačnu petlju, čitajuΔ‡i Ε‘to viΕ‘e linija teksta moΕΎe sa serijskog porta u svakom ciklusu. Poziva funkciju `print_gps_data` za svaku liniju. + + Nakon Ε‘to su svi podaci pročitani, petlja spava 1 sekundu, zatim pokuΕ‘ava ponovno. + +1. Pokrenite ovaj kod, osiguravajuΔ‡i da koristite drugi terminal od onog na kojem CounterFit aplikacija radi, kako bi CounterFit aplikacija ostala pokrenuta. + +1. Iz CounterFit aplikacije, promijenite vrijednost GPS senzora. To moΕΎete učiniti na jedan od sljedeΔ‡ih načina: + + * Postavite **Source** na `Lat/Lon`, i postavite eksplicitnu geografsku Ε‘irinu, duΕΎinu i broj satelita koriΕ‘tenih za GPS fiks. Ova vrijednost Δ‡e biti poslana samo jednom, pa označite **Repeat** okvir kako bi se podaci ponavljali svake sekunde. + + ![GPS senzor s odabranim lat lon](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hr.png) + + * Postavite **Source** na `NMEA` i dodajte neke NMEA rečenice u tekstualni okvir. Sve ove vrijednosti Δ‡e biti poslane, s odgodom od 1 sekunde prije svake nove GGA (pozicijski fiks) rečenice koja se moΕΎe pročitati. + + ![GPS senzor s postavljenim NMEA rečenicama](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hr.png) + + MoΕΎete koristiti alat poput [nmeagen.org](https://www.nmeagen.org) za generiranje ovih rečenica crtanjem na karti. Ove vrijednosti Δ‡e biti poslane samo jednom, pa označite **Repeat** okvir kako bi se podaci ponavljali jednu sekundu nakon Ε‘to su svi poslani. + + * Postavite **Source** na GPX datoteku i učitajte GPX datoteku s lokacijama staza. GPX datoteke moΕΎete preuzeti s brojnih popularnih stranica za kartografiju i planinarenje, poput [AllTrails](https://www.alltrails.com/). Ove datoteke sadrΕΎe viΕ‘e GPS lokacija kao stazu, a GPS senzor Δ‡e vraΔ‡ati svaku novu lokaciju u intervalima od 1 sekunde. + + ![GPS senzor s postavljenom GPX datotekom](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hr.png) + + Ove vrijednosti Δ‡e biti poslane samo jednom, pa označite **Repeat** okvir kako bi se podaci ponavljali jednu sekundu nakon Ε‘to su svi poslani. + + Nakon Ε‘to ste konfigurirali GPS postavke, odaberite gumb **Set** za potvrdu ovih vrijednosti senzoru. + +1. Vidjet Δ‡ete sirovi izlaz GPS senzora, neΕ‘to poput sljedeΔ‡eg: + + ```output + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device). + +πŸ˜€ VaΕ‘ program za GPS senzor je uspjeΕ‘no zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md b/translations/hr/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md new file mode 100644 index 00000000..b843e73c --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md @@ -0,0 +1,83 @@ + +# Dekodiranje GPS podataka - Wio Terminal + +U ovom dijelu lekcije dekodirat Δ‡ete NMEA poruke koje čita GPS senzor na Wio Terminalu i izvuΔ‡i geografske Ε‘irine i duΕΎine. + +## Dekodiranje GPS podataka + +Nakon Ε‘to se sirovi NMEA podaci pročitaju s serijskog porta, mogu se dekodirati pomoΔ‡u otvorene NMEA biblioteke. + +### Zadatak - dekodiranje GPS podataka + +Programirajte ureΔ‘aj za dekodiranje GPS podataka. + +1. Otvorite projekt aplikacije `gps-sensor` ako veΔ‡ nije otvoren. + +1. Dodajte ovisnost o biblioteci [TinyGPSPlus](https://github.com/mikalhart/TinyGPSPlus) u datoteku `platformio.ini` projekta. Ova biblioteka sadrΕΎi kod za dekodiranje NMEA podataka. + + ```ini + lib_deps = + mikalhart/TinyGPSPlus @ 1.0.2 + ``` + +1. U datoteci `main.cpp` dodajte direktivu za uključivanje biblioteke TinyGPSPlus: + + ```cpp + #include + ``` + +1. Ispod deklaracije `Serial3`, deklarirajte objekt TinyGPSPlus za obradu NMEA rečenica: + + ```cpp + TinyGPSPlus gps; + ``` + +1. Promijenite sadrΕΎaj funkcije `printGPSData` na sljedeΔ‡e: + + ```cpp + if (gps.encode(Serial3.read())) + { + if (gps.location.isValid()) + { + Serial.print(gps.location.lat(), 6); + Serial.print(F(",")); + Serial.print(gps.location.lng(), 6); + Serial.print(" - from "); + Serial.print(gps.satellites.value()); + Serial.println(" satellites"); + } + } + ``` + + Ovaj kod čita sljedeΔ‡i znak s UART serijskog porta u NMEA dekoder `gps`. Nakon svakog znaka provjerava je li dekoder pročitao valjanu rečenicu, a zatim provjerava je li pročitao valjanu lokaciju. Ako je lokacija valjana, Ε‘alje je na serijski monitor, zajedno s brojem satelita koji su doprinijeli ovom odreΔ‘ivanju. + +1. Izgradite i učitajte kod na Wio Terminal. + +1. Nakon učitavanja, moΕΎete pratiti podatke o GPS lokaciji pomoΔ‡u serijskog monitora. + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + 47.6423109,-122.1390293 - from 3 satellites + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-gps-decode/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/wio-terminal). + +πŸ˜€ VaΕ‘ program za GPS senzor s dekodiranjem podataka bio je uspjeΕ‘an! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md b/translations/hr/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md new file mode 100644 index 00000000..f3791792 --- /dev/null +++ b/translations/hr/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md @@ -0,0 +1,154 @@ + +# Čitanje GPS podataka - Wio Terminal + +U ovom dijelu lekcije, dodat Δ‡ete GPS senzor na svoj Wio Terminal i očitati vrijednosti s njega. + +## Hardver + +Wio Terminal zahtijeva GPS senzor. + +Senzor koji Δ‡ete koristiti je [Grove GPS Air530 senzor](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html). Ovaj senzor moΕΎe se povezati s viΕ‘e GPS sustava za brzo i precizno odreΔ‘ivanje lokacije. Senzor se sastoji od dva dijela - osnovne elektronike senzora i vanjske antene spojene tankim kabelom za primanje radio valova sa satelita. + +Ovo je UART senzor, Ε‘to znači da Ε‘alje GPS podatke putem UART-a. + +### Povezivanje GPS senzora + +Grove GPS senzor moΕΎe se povezati s Wio Terminalom. + +#### Zadatak - povezivanje GPS senzora + +PoveΕΎite GPS senzor. + +![Grove GPS senzor](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hr.png) + +1. Umetnite jedan kraj Grove kabela u utičnicu na GPS senzoru. Kabel Δ‡e uΔ‡i samo na jedan način. + +1. Dok je Wio Terminal isključen s vaΕ‘eg računala ili drugog izvora napajanja, spojite drugi kraj Grove kabela na lijevu Grove utičnicu na Wio Terminalu, gledajuΔ‡i prema zaslonu. To je utičnica najbliΕΎa gumbu za uključivanje. + + ![Grove GPS senzor povezan s lijevom utičnicom](../../../../../translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hr.png) + +1. Postavite GPS senzor tako da priloΕΎena antena ima vidljivost prema nebu - idealno pored otvorenog prozora ili vani. Signal Δ‡e biti jasniji ako niΕ‘ta ne ometa antenu. + +1. Sada moΕΎete spojiti Wio Terminal na svoje računalo. + +1. GPS senzor ima dvije LED diode - plavu LED diodu koja treperi kada se podaci prenose i zelenu LED diodu koja treperi svake sekunde kada prima podatke sa satelita. Provjerite treperi li plava LED dioda kada uključite Wio Terminal. Nakon nekoliko minuta, zelena LED dioda Δ‡e početi treperiti - ako ne, moΕΎda Δ‡ete trebati premjestiti antenu. + +## Programiranje GPS senzora + +Wio Terminal sada se moΕΎe programirati za koriΕ‘tenje priloΕΎenog GPS senzora. + +### Zadatak - programiranje GPS senzora + +Programirajte ureΔ‘aj. + +1. Napravite potpuno novi Wio Terminal projekt koristeΔ‡i PlatformIO. Nazovite ovaj projekt `gps-sensor`. Dodajte kod u funkciju `setup` za konfiguraciju serijskog porta. + +1. Dodajte sljedeΔ‡u direktivu za uključivanje na vrh datoteke `main.cpp`. Ovo uključuje zaglavlje s funkcijama za konfiguraciju lijevog Grove porta za UART. + + ```cpp + #include + ``` + +1. Ispod toga, dodajte sljedeΔ‡i redak koda za deklaraciju serijske veze s UART portom: + + ```cpp + static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0); + ``` + +1. Potrebno je dodati kod za preusmjeravanje nekih internih signalnih rukovatelja na ovaj serijski port. Dodajte sljedeΔ‡i kod ispod deklaracije `Serial3`: + + ```cpp + void SERCOM3_0_Handler() + { + Serial3.IrqHandler(); + } + + void SERCOM3_1_Handler() + { + Serial3.IrqHandler(); + } + + void SERCOM3_2_Handler() + { + Serial3.IrqHandler(); + } + + void SERCOM3_3_Handler() + { + Serial3.IrqHandler(); + } + ``` + +1. U funkciji `setup`, ispod konfiguracije `Serial` porta, konfigurirajte UART serijski port sljedeΔ‡im kodom: + + ```cpp + Serial3.begin(9600); + + while (!Serial3) + ; // Wait for Serial3 to be ready + + delay(1000); + ``` + +1. Ispod ovog koda u funkciji `setup`, dodajte sljedeΔ‡i kod za povezivanje Grove pina sa serijskim portom: + + ```cpp + pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT); + ``` + +1. Dodajte sljedeΔ‡u funkciju prije funkcije `loop` za slanje GPS podataka na serijski monitor: + + ```cpp + void printGPSData() + { + Serial.println(Serial3.readStringUntil('\n')); + } + ``` + +1. U funkciji `loop`, dodajte sljedeΔ‡i kod za čitanje s UART serijskog porta i ispis rezultata na serijski monitor: + + ```cpp + while (Serial3.available() > 0) + { + printGPSData(); + } + + delay(1000); + ``` + + Ovaj kod čita s UART serijskog porta. Funkcija `readStringUntil` čita do znaka terminatora, u ovom slučaju novog reda. Ovo Δ‡e pročitati cijelu NMEA rečenicu (NMEA rečenice zavrΕ‘avaju znakom novog reda). Dok god se podaci mogu čitati s UART serijskog porta, oni se čitaju i Ε‘alju na serijski monitor putem funkcije `printGPSData`. Kada viΕ‘e nema podataka za čitanje, `loop` odgaΔ‘a za 1 sekundu (1.000 ms). + +1. Izgradite i učitajte kod na Wio Terminal. + +1. Nakon učitavanja, moΕΎete pratiti GPS podatke koristeΔ‡i serijski monitor. + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + $GPGSA,A,1,,,,,,,,,,,,,,,*1E + $BDGSA,A,1,,,,,,,,,,,,,,,*0F + $GPGSV,1,1,00*79 + $BDGSV,1,1,00*68 + ``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code-gps/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps/wio-terminal). + +πŸ˜€ VaΕ‘ program za GPS senzor uspjeΕ‘no je zavrΕ‘en! + +--- + +**Odricanje od odgovornosti**: +Ovaj dokument je preveden pomoΔ‡u AI usluge za prevoΔ‘enje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadrΕΎavati pogreΕ‘ke ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogreΕ‘na tumačenja koja proizlaze iz koriΕ‘tenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hr/3-transport/lessons/2-store-location-data/README.md b/translations/hr/3-transport/lessons/2-store-location-data/README.md new file mode 100644 index 00000000..0a29bd4b --- /dev/null +++ b/translations/hr/3-transport/lessons/2-store-location-data/README.md @@ -0,0 +1,477 @@ + +# Podaci o lokaciji trgovine + +![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hr.jpg) + +> Sketchnote od [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veΔ‡u verziju. + +## Kviz prije predavanja + +[Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) + +## Uvod + +U prethodnoj lekciji naučili ste kako koristiti GPS senzor za prikupljanje podataka o lokaciji. Da biste te podatke koristili za vizualizaciju lokacije kamiona s hranom i njegovog putovanja, potrebno ih je poslati IoT usluzi u oblaku, a zatim negdje pohraniti. + +U ovoj lekciji naučit Δ‡ete o različitim načinima pohrane IoT podataka i kako pohraniti podatke iz vaΕ‘e IoT usluge koristeΔ‡i serverless kod. + +U ovoj lekciji obradit Δ‡emo: + +* [Strukturirani i nestrukturirani podaci](../../../../../3-transport/lessons/2-store-location-data) +* [Slanje GPS podataka u IoT Hub](../../../../../3-transport/lessons/2-store-location-data) +* [VruΔ‡i, topli i hladni putevi](../../../../../3-transport/lessons/2-store-location-data) +* [Obrada GPS dogaΔ‘aja pomoΔ‡u serverless koda](../../../../../3-transport/lessons/2-store-location-data) +* [Azure Storage računi](../../../../../3-transport/lessons/2-store-location-data) +* [Povezivanje serverless koda s pohranom](../../../../../3-transport/lessons/2-store-location-data) + +## Strukturirani i nestrukturirani podaci + +Računalni sustavi rade s podacima, a ti podaci dolaze u različitim oblicima i veličinama. Mogu varirati od pojedinačnih brojeva, do velikih količina teksta, do videozapisa i slika, pa sve do IoT podataka. Podaci se obično dijele u dvije kategorije - *strukturirani* podaci i *nestrukturirani* podaci. + +* **Strukturirani podaci** su podaci s dobro definiranim, krutim strukturama koje se ne mijenjaju i obično se mapiraju na tablice podataka s odnosima. Jedan primjer su detalji osobe, uključujuΔ‡i ime, datum roΔ‘enja i adresu. + +* **Nestrukturirani podaci** su podaci bez dobro definirane, krute strukture, uključujuΔ‡i podatke koji često mijenjaju strukturu. Jedan primjer su dokumenti poput pisanih dokumenata ili proračunskih tablica. + +βœ… IstraΕΎite: MoΕΎete li smisliti neke druge primjere strukturiranih i nestrukturiranih podataka? + +> πŸ’ Postoje i polustrukturirani podaci koji su strukturirani, ali ne odgovaraju fiksnim tablicama podataka. + +IoT podaci obično se smatraju nestrukturiranim podacima. + +Zamislite da dodajete IoT ureΔ‘aje voznom parku vozila za veliku komercijalnu farmu. MoΕΎda biste ΕΎeljeli koristiti različite ureΔ‘aje za različite vrste vozila. Na primjer: + +* Za poljoprivredna vozila poput traktora ΕΎelite GPS podatke kako biste osigurali da rade na ispravnim poljima. +* Za dostavne kamione koji prevoze hranu u skladiΕ‘ta ΕΎelite GPS podatke, kao i podatke o brzini i ubrzanju kako biste osigurali sigurnu voΕΎnju, te identitet vozača i podatke o početku/zavrΕ‘etku voΕΎnje kako biste osigurali usklaΔ‘enost vozača s lokalnim zakonima o radnom vremenu. +* Za kamione s hladnjačama takoΔ‘er ΕΎelite podatke o temperaturi kako biste osigurali da hrana ne postane previΕ‘e topla ili hladna i pokvari se tijekom transporta. + +Ovi podaci mogu se stalno mijenjati. Na primjer, ako je IoT ureΔ‘aj u kabini kamiona, podaci koje Ε‘alje mogu se mijenjati kako se mijenja prikolica, na primjer, slanjem podataka o temperaturi samo kada se koristi prikolica s hladnjačom. + +βœ… Koje druge IoT podatke biste mogli prikupljati? Razmislite o vrstama tereta koje kamioni mogu prevoziti, kao i o podacima o odrΕΎavanju. + +Ovi podaci variraju od vozila do vozila, ali svi se Ε‘alju istoj IoT usluzi na obradu. IoT usluga mora biti sposobna obraditi ove nestrukturirane podatke, pohranjujuΔ‡i ih na način koji omoguΔ‡uje pretraΕΎivanje ili analizu, ali funkcionira s različitim strukturama tih podataka. + +### SQL vs NoSQL pohrana + +Baze podataka su usluge koje omoguΔ‡uju pohranu i upite podataka. Baze podataka dolaze u dva tipa - SQL i NoSQL. + +#### SQL baze podataka + +Prve baze podataka bile su sustavi za upravljanje relacijskim bazama podataka (RDBMS), ili relacijske baze podataka. TakoΔ‘er su poznate kao SQL baze podataka prema jeziku Structured Query Language (SQL) koji se koristi za interakciju s njima radi dodavanja, uklanjanja, aΕΎuriranja ili upita podataka. Ove baze podataka sastoje se od sheme - dobro definiranog skupa tablica podataka, sličnog proračunskoj tablici. Svaka tablica ima viΕ‘e imenovanih stupaca. Kada unosite podatke, dodajete redak u tablicu, stavljajuΔ‡i vrijednosti u svaki od stupaca. To odrΕΎava podatke u vrlo krutoj strukturi - iako moΕΎete ostaviti stupce prazne, ako ΕΎelite dodati novi stupac, morate to učiniti na bazi podataka, popunjavajuΔ‡i vrijednosti za postojeΔ‡e retke. Ove baze podataka su relacijske - u smislu da jedna tablica moΕΎe imati odnos prema drugoj. + +![Relacijska baza podataka s ID-om tablice korisnika koji se odnosi na stupac ID korisnika tablice kupovina, i ID-om tablice proizvoda koji se odnosi na ID proizvoda tablice kupovina](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hr.png) + +Na primjer, ako pohranjujete osobne podatke korisnika u tablicu, imali biste neku vrstu internog jedinstvenog ID-a po korisniku koji se koristi u retku u tablici koja sadrΕΎi ime i adresu korisnika. Ako zatim ΕΎelite pohraniti druge detalje o tom korisniku, poput njegovih kupovina, u drugu tablicu, imali biste jedan stupac u novoj tablici za ID tog korisnika. Kada traΕΎite korisnika, moΕΎete koristiti njegov ID za dobivanje osobnih podataka iz jedne tablice i njegovih kupovina iz druge. + +SQL baze podataka idealne su za pohranu strukturiranih podataka i za osiguranje da podaci odgovaraju vaΕ‘oj shemi. + +βœ… Ako niste koristili SQL prije, odvojite trenutak da pročitate o njemu na [SQL stranici na Wikipediji](https://wikipedia.org/wiki/SQL). + +Neke poznate SQL baze podataka su Microsoft SQL Server, MySQL i PostgreSQL. + +βœ… IstraΕΎite: Pročitajte o nekim od ovih SQL baza podataka i njihovim moguΔ‡nostima. + +#### NoSQL baze podataka + +NoSQL baze podataka nazivaju se NoSQL jer nemaju istu krutu strukturu kao SQL baze podataka. TakoΔ‘er su poznate kao dokumentne baze podataka jer mogu pohranjivati nestrukturirane podatke poput dokumenata. + +> πŸ’ Unatoč njihovom nazivu, neke NoSQL baze podataka omoguΔ‡uju koriΕ‘tenje SQL-a za upite podataka. + +![Dokumenti u mapama u NoSQL bazi podataka](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hr.png) + +NoSQL baze podataka nemaju unaprijed definiranu shemu koja ograničava način pohrane podataka, umjesto toga moΕΎete umetnuti bilo koje nestrukturirane podatke, obično koristeΔ‡i JSON dokumente. Ovi dokumenti mogu se organizirati u mape, slično datotekama na vaΕ‘em računalu. Svaki dokument moΕΎe imati različita polja od drugih dokumenata - na primjer, ako pohranjujete IoT podatke s vaΕ‘ih poljoprivrednih vozila, neki mogu imati polja za podatke akcelerometra i brzine, drugi mogu imati polja za temperaturu u prikolici. Ako biste dodali novu vrstu kamiona, poput onog s ugraΔ‘enim vagama za praΔ‡enje teΕΎine prevezenih proizvoda, vaΕ‘ IoT ureΔ‘aj mogao bi dodati ovo novo polje i ono bi se moglo pohraniti bez ikakvih promjena u bazi podataka. + +Neke poznate NoSQL baze podataka uključuju Azure CosmosDB, MongoDB i CouchDB. + +βœ… IstraΕΎite: Pročitajte o nekim od ovih NoSQL baza podataka i njihovim moguΔ‡nostima. + +U ovoj lekciji koristit Δ‡ete NoSQL pohranu za pohranu IoT podataka. + +## Slanje GPS podataka u IoT Hub + +U prethodnoj lekciji ste prikupili GPS podatke s GPS senzora povezanog s vaΕ‘im IoT ureΔ‘ajem. Da biste pohranili ove IoT podatke u oblaku, morate ih poslati IoT usluzi. Ponovno Δ‡ete koristiti Azure IoT Hub, istu IoT uslugu u oblaku koju ste koristili u prethodnom projektu. + +![Slanje GPS telemetrije s IoT ureΔ‘aja u IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hr.png) + +### Zadatak - slanje GPS podataka u IoT Hub + +1. Kreirajte novi IoT Hub koristeΔ‡i besplatni sloj. + + > ⚠️ MoΕΎete se referirati na [upute za kreiranje IoT Hub-a iz projekta 2, lekcija 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud) ako je potrebno. + + Zapamtite da kreirate novu Resource Group. Nazovite novu Resource Group `gps-sensor`, a novi IoT Hub jedinstvenim imenom temeljenim na `gps-sensor`, poput `gps-sensor-`. + + > πŸ’ Ako joΕ‘ uvijek imate svoj IoT Hub iz prethodnog projekta, moΕΎete ga ponovno koristiti. Zapamtite koristiti ime ovog IoT Hub-a i Resource Group u kojoj se nalazi prilikom kreiranja drugih usluga. + +1. Dodajte novi ureΔ‘aj u IoT Hub. Nazovite ovaj ureΔ‘aj `gps-sensor`. ZabiljeΕΎite vezni niz za ureΔ‘aj. + +1. AΕΎurirajte kod vaΕ‘eg ureΔ‘aja kako biste poslali GPS podatke u novi IoT Hub koristeΔ‡i vezni niz ureΔ‘aja iz prethodnog koraka. + + > ⚠️ MoΕΎete se referirati na [upute za povezivanje vaΕ‘eg ureΔ‘aja s IoT-om iz projekta 2, lekcija 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service) ako je potrebno. + +1. Kada Ε‘aljete GPS podatke, učinite to kao JSON u sljedeΔ‡em formatu: + + ```json + { + "gps" : + { + "lat" : , + "lon" : + } + } + ``` + +1. Ε aljite GPS podatke svake minute kako ne biste potroΕ‘ili dnevnu kvotu poruka. + +Ako koristite Wio Terminal, zapamtite dodati sve potrebne biblioteke i postaviti vrijeme koristeΔ‡i NTP server. VaΕ‘ kod takoΔ‘er mora osigurati da je pročitao sve podatke s serijskog porta prije slanja GPS lokacije, koristeΔ‡i postojeΔ‡i kod iz prethodne lekcije. Koristite sljedeΔ‡i kod za konstrukciju JSON dokumenta: + +```cpp +DynamicJsonDocument doc(1024); +doc["gps"]["lat"] = gps.location.lat(); +doc["gps"]["lon"] = gps.location.lng(); +``` + +Ako koristite virtualni IoT ureΔ‘aj, zapamtite instalirati sve potrebne biblioteke koristeΔ‡i virtualno okruΕΎenje. + +Za Raspberry Pi i virtualni IoT ureΔ‘aj, koristite postojeΔ‡i kod iz prethodne lekcije za dobivanje vrijednosti latitude i longitude, zatim ih poΕ‘aljite u ispravnom JSON formatu koristeΔ‡i sljedeΔ‡i kod: + +```python +message_json = { "gps" : { "lat":lat, "lon":lon } } +print("Sending telemetry", message_json) +message = Message(json.dumps(message_json)) +``` + +> πŸ’ Ovaj kod moΕΎete pronaΔ‡i u mapi [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) ili [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). + +Pokrenite kod vaΕ‘eg ureΔ‘aja i osigurajte da poruke teku u IoT Hub koristeΔ‡i CLI naredbu `az iot hub monitor-events`. + +## VruΔ‡i, topli i hladni putevi + +Podaci koji teku s IoT ureΔ‘aja u oblak ne obraΔ‘uju se uvijek u stvarnom vremenu. Neki podaci zahtijevaju obradu u stvarnom vremenu, drugi se mogu obraditi malo kasnije, a neki se mogu obraditi mnogo kasnije. Tok podataka prema različitim uslugama koje obraΔ‘uju podatke u različitim vremenskim okvirima naziva se vruΔ‡i, topli i hladni putevi. + +### VruΔ‡i put + +VruΔ‡i put odnosi se na podatke koji se moraju obraditi u stvarnom vremenu ili gotovo stvarnom vremenu. Koristili biste podatke vruΔ‡eg puta za upozorenja, poput dobivanja upozorenja da se vozilo pribliΕΎava skladiΕ‘tu ili da je temperatura u kamionu s hladnjačom previsoka. + +Za koriΕ‘tenje podataka vruΔ‡eg puta, vaΕ‘ kod bi reagirao na dogaΔ‘aje čim ih primi vaΕ‘e usluge u oblaku. + +### Topli put + +Topli put odnosi se na podatke koji se mogu obraditi malo nakon Ε‘to su primljeni, na primjer za izvjeΕ‘tavanje ili kratkoročnu analitiku. Koristili biste podatke toplog puta za dnevna izvjeΕ‘Δ‡a o kilometraΕΎi vozila, koristeΔ‡i podatke prikupljene prethodnog dana. + +Podaci toplog puta pohranjuju se čim ih primi usluga u oblaku unutar neke vrste pohrane koja se moΕΎe brzo pristupiti. + +### Hladni put + +Hladni put odnosi se na povijesne podatke, pohranjivanje podataka za dugoročno koriΕ‘tenje i obradu kad god je potrebno. Na primjer, mogli biste koristiti hladni put za dobivanje godiΕ‘njih izvjeΕ‘Δ‡a o kilometraΕΎi vozila ili za analizu ruta kako biste pronaΕ‘li najoptimalniju rutu za smanjenje troΕ‘kova goriva. + +Podaci hladnog puta pohranjuju se u skladiΕ‘tima podataka - bazama podataka dizajniranim za pohranu velikih količina podataka koji se nikada neΔ‡e mijenjati i mogu se brzo i jednostavno upititi. Obično biste imali redoviti zadatak u vaΕ‘oj aplikaciji u oblaku koji bi se pokretao u redovitim intervalima svaki dan, tjedan ili mjesec za premjeΕ‘tanje podataka iz pohrane toplog puta u skladiΕ‘te podataka. + +βœ… Razmislite o podacima koje ste dosad prikupili u ovim lekcijama. Jesu li to podaci vruΔ‡eg, toplog ili hladnog puta? + +## Obrada GPS dogaΔ‘aja pomoΔ‡u serverless koda + +Kada podaci teku u vaΕ‘ IoT Hub, moΕΎete napisati serverless kod za sluΕ‘anje dogaΔ‘aja objavljenih na Event-Hub kompatibilnom endpointu. Ovo je topli put - ovi podaci Δ‡e se pohraniti i koristiti u sljedeΔ‡oj lekciji za izvjeΕ‘tavanje o putovanju. + +![Slanje GPS telemetrije s IoT ureΔ‘aja u IoT Hub, zatim u Azure Functions putem okidača event hub-a](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hr.png) + +### Zadatak - obrada GPS dogaΔ‘aja pomoΔ‡u serverless koda + +1. Kreirajte Azure Functions aplikaciju koristeΔ‡i Azure Functions CLI. Koristite Python runtime i kreirajte je u mapi nazvanoj `gps-trigger`, koristeΔ‡i isto ime za naziv projekta Functions App. Obavezno kreirajte virtualno okruΕΎenje za koriΕ‘tenje. +> ⚠️ MoΕΎete se referirati na [upute za kreiranje Azure Functions projekta iz projekta 2, lekcije 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) ako je potrebno. +1. Dodajte IoT Hub dogaΔ‘ajni okidač koji koristi kompatibilnu krajnju točku Event Hub-a IoT Hub-a. + + > ⚠️ MoΕΎete se pozvati na [upute za stvaranje IoT Hub dogaΔ‘ajnog okidača iz projekta 2, lekcija 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) ako je potrebno. + +1. Postavite niz za povezivanje kompatibilne krajnje točke Event Hub-a u datoteku `local.settings.json` i koristite ključ za taj unos u datoteci `function.json`. + +1. Koristite aplikaciju Azurite kao lokalni emulator za pohranu. + +1. Pokrenite svoju funkcijsku aplikaciju kako biste osigurali da prima dogaΔ‘aje s vaΕ‘eg GPS ureΔ‘aja. Provjerite je li vaΕ‘ IoT ureΔ‘aj takoΔ‘er pokrenut i Ε‘alje GPS podatke. + + ```output + Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} + ``` + +## Azure Storage računi + +![Logo Azure Storage-a](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hr.png) + +Azure Storage računi su univerzalna usluga za pohranu koja moΕΎe pohranjivati podatke na različite načine. MoΕΎete pohranjivati podatke kao blobove, u redovima, u tablicama ili kao datoteke, i sve to istovremeno. + +### Blob pohrana + +Riječ *Blob* označava binarne velike objekte, ali se koristi za bilo koje nestrukturirane podatke. U blob pohranu moΕΎete pohranjivati bilo koje podatke, od JSON dokumenata koji sadrΕΎe IoT podatke, do slika i video datoteka. Blob pohrana ima koncept *kontejnera*, nazvanih spremnika u koje moΕΎete pohranjivati podatke, slično tablicama u relacijskim bazama podataka. Ti kontejneri mogu imati jednu ili viΕ‘e mapa za pohranu blobova, a svaka mapa moΕΎe sadrΕΎavati druge mape, slično načinu na koji su datoteke pohranjene na tvrdom disku vaΕ‘eg računala. + +U ovoj lekciji koristit Δ‡ete blob pohranu za pohranu IoT podataka. + +βœ… IstraΕΎite: Pročitajte viΕ‘e o [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) + +### Pohrana u tablicama + +Pohrana u tablicama omoguΔ‡uje pohranu polustrukturiranih podataka. Pohrana u tablicama zapravo je NoSQL baza podataka, pa ne zahtijeva unaprijed definirani skup tablica, ali je dizajnirana za pohranu podataka u jednoj ili viΕ‘e tablica, s jedinstvenim ključevima za definiranje svakog retka. + +βœ… IstraΕΎite: Pročitajte viΕ‘e o [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) + +### Pohrana u redovima + +Pohrana u redovima omoguΔ‡uje pohranu poruka veličine do 64KB u red. MoΕΎete dodavati poruke na kraj reda i čitati ih s početka. Redovi pohranjuju poruke neograničeno dugo dok god ima prostora za pohranu, Ε‘to omoguΔ‡uje dugoročno pohranjivanje poruka koje se mogu čitati kada je potrebno. Na primjer, ako ΕΎelite pokrenuti mjesečni zadatak za obradu GPS podataka, moΕΎete ih dodavati u red svaki dan tijekom mjeseca, a zatim na kraju mjeseca obraditi sve poruke iz reda. + +βœ… IstraΕΎite: Pročitajte viΕ‘e o [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) + +### Pohrana datoteka + +Pohrana datoteka omoguΔ‡uje pohranu datoteka u oblaku, a aplikacije ili ureΔ‘aji mogu se povezati koristeΔ‡i standardne industrijske protokole. MoΕΎete zapisivati datoteke u pohranu datoteka, a zatim ih montirati kao disk na vaΕ‘em PC-u ili Mac-u. + +βœ… IstraΕΎite: Pročitajte viΕ‘e o [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) + +## PoveΕΎite svoj serverless kod s pohranom + +VaΕ‘a funkcijska aplikacija sada treba povezati blob pohranu kako bi pohranjivala poruke iz IoT Hub-a. Postoje dva načina za to: + +* Unutar koda funkcije, poveΕΎite se s blob pohranom koristeΔ‡i Python SDK za blob pohranu i zapisujte podatke kao blobove. +* Koristite izlaznu funkcijsku vezu za povezivanje povratne vrijednosti funkcije s blob pohranom i automatski spremite blob. + +U ovoj lekciji koristit Δ‡ete Python SDK kako biste vidjeli kako raditi s blob pohranom. + +![Slanje GPS telemetrije s IoT ureΔ‘aja na IoT Hub, zatim na Azure Functions putem okidača Event Hub-a, pa spremanje u blob pohranu](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hr.png) + +Podaci Δ‡e biti pohranjeni kao JSON blob u sljedeΔ‡em formatu: + +```json +{ + "device_id": , + "timestamp" :