diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.bg.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.bg.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.bg.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ro.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ro.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ro.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sk.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sk.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.sk.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.bg.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.bg.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.bg.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ro.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ro.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ro.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sk.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sk.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.sk.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.bg.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.bg.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.bg.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ro.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ro.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ro.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sk.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sk.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.sk.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.bg.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.bg.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.bg.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ro.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ro.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ro.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sk.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sk.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.sk.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.bg.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.bg.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.bg.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ro.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ro.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ro.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sk.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sk.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.sk.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.bg.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.bg.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.bg.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ro.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ro.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ro.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sk.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sk.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.sk.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.bg.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.bg.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.bg.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ro.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ro.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ro.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sk.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sk.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.sk.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.bg.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.bg.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.bg.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ro.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ro.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ro.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sk.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sk.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.sk.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.bg.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.bg.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.bg.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ro.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ro.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ro.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sk.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sk.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.sk.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.bg.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.bg.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.bg.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ro.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ro.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ro.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sk.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sk.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.sk.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.bg.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.bg.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.bg.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ro.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ro.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ro.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sk.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sk.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.sk.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.bg.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.bg.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.bg.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ro.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ro.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ro.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sk.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sk.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.sk.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.bg.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.bg.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.bg.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ro.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ro.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ro.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sk.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sk.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.sk.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.bg.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.bg.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.bg.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ro.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ro.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ro.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sk.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sk.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.sk.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.bg.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.bg.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.bg.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ro.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ro.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ro.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sk.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sk.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.sk.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.bg.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.bg.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.bg.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ro.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ro.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ro.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sk.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sk.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.sk.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.bg.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.bg.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.bg.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ro.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ro.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ro.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sk.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sk.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.sk.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.bg.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.bg.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.bg.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ro.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ro.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ro.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sk.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sk.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.sk.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.bg.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.bg.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.bg.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ro.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ro.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ro.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sk.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sk.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.sk.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.bg.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.bg.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.bg.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ro.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ro.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ro.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sk.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sk.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.sk.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.bg.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.bg.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.bg.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ro.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ro.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ro.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sk.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sk.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.sk.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.bg.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.bg.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.bg.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ro.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ro.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ro.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sk.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sk.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.sk.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.bg.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.bg.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.bg.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ro.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ro.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ro.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sk.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sk.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.sk.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.bg.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.bg.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.bg.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ro.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ro.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ro.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sk.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sk.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.sk.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.bg.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.bg.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.bg.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ro.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ro.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ro.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sk.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sk.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.sk.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.bg.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.bg.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.bg.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ro.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ro.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ro.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sk.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sk.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.sk.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.bg.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.bg.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.bg.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ro.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ro.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ro.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sk.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sk.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.sk.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.bg.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.bg.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.bg.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ro.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ro.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ro.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sk.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sk.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.sk.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.bg.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.bg.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.bg.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ro.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ro.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ro.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sk.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sk.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.sk.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.bg.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.bg.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.bg.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ro.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ro.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ro.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sk.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sk.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.sk.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.bg.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.bg.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.bg.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ro.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ro.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ro.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sk.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sk.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.sk.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.bg.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.bg.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.bg.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ro.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ro.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ro.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sk.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sk.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.sk.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.bg.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.bg.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.bg.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ro.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ro.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ro.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sk.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sk.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.sk.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.bg.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.bg.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.bg.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ro.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ro.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ro.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sk.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sk.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.sk.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.bg.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.bg.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.bg.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ro.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ro.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ro.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sk.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sk.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.sk.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.bg.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.bg.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.bg.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ro.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ro.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ro.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sk.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sk.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.sk.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.bg.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.bg.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.bg.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ro.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ro.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ro.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sk.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sk.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.sk.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.bg.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.bg.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.bg.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ro.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ro.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ro.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sk.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sk.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.sk.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.bg.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.bg.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.bg.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ro.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ro.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ro.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sk.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sk.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.sk.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.bg.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.bg.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.bg.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ro.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ro.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ro.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sk.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sk.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.sk.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.bg.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.bg.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.bg.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ro.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ro.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ro.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sk.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sk.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.sk.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.bg.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.bg.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.bg.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ro.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ro.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ro.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sk.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sk.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.sk.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.bg.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.bg.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.bg.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ro.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ro.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ro.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sk.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sk.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.sk.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.bg.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.bg.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.bg.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ro.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ro.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ro.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sk.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sk.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.sk.png differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.bg.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.bg.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.bg.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ro.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ro.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ro.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sk.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sk.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.sk.jpg differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.bg.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.bg.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.bg.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ro.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ro.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ro.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sk.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sk.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.sk.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.bg.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.bg.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.bg.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ro.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ro.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ro.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sk.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sk.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.sk.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.bg.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.bg.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.bg.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ro.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ro.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ro.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sk.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sk.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.sk.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.bg.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.bg.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.bg.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ro.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ro.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ro.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sk.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sk.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.sk.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.bg.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.bg.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.bg.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ro.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ro.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ro.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sk.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sk.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.sk.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.bg.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.bg.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.bg.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ro.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ro.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ro.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sk.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sk.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.sk.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.bg.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.bg.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.bg.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ro.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ro.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ro.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sk.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sk.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.sk.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.bg.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.bg.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.bg.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ro.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ro.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ro.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sk.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sk.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.sk.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.bg.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.bg.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.bg.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ro.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ro.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ro.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sk.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sk.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.sk.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.bg.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.bg.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.bg.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ro.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ro.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ro.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sk.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sk.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.sk.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.bg.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.bg.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.bg.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ro.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ro.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ro.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sk.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sk.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.sk.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.bg.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.bg.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.bg.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ro.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ro.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ro.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sk.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sk.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.sk.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.bg.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.bg.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.bg.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ro.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ro.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ro.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sk.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sk.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.sk.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.bg.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.bg.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.bg.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ro.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ro.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ro.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sk.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sk.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.sk.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.bg.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.bg.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.bg.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ro.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ro.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ro.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sk.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sk.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.sk.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.bg.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.bg.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.bg.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ro.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ro.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ro.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sk.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sk.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sk.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.bg.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.bg.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.bg.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ro.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ro.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ro.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sk.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sk.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.sk.png differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.bg.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.bg.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.bg.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ro.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ro.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ro.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sk.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sk.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.sk.jpg differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.bg.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.bg.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.bg.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ro.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ro.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ro.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sk.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sk.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.sk.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.bg.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.bg.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.bg.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ro.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ro.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ro.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sk.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sk.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.sk.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.bg.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.bg.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.bg.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ro.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ro.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ro.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sk.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sk.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.sk.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.bg.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.bg.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.bg.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ro.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ro.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ro.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sk.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sk.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.sk.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.bg.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.bg.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.bg.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ro.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ro.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ro.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sk.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sk.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.sk.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.bg.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.bg.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.bg.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ro.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ro.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ro.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sk.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sk.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.sk.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.bg.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.bg.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.bg.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ro.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ro.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ro.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sk.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sk.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.sk.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.bg.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.bg.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.bg.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ro.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ro.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ro.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sk.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sk.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.sk.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.bg.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.bg.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.bg.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ro.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ro.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ro.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sk.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sk.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.sk.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.bg.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.bg.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.bg.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ro.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ro.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ro.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sk.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sk.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.sk.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.bg.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.bg.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.bg.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ro.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ro.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ro.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sk.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sk.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.sk.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.bg.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.bg.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.bg.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ro.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ro.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ro.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sk.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sk.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.sk.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.bg.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.bg.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.bg.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ro.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ro.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ro.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sk.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sk.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.sk.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.bg.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.bg.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.bg.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ro.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ro.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ro.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sk.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sk.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.sk.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.bg.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.bg.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.bg.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ro.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ro.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ro.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sk.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sk.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.sk.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.bg.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.bg.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.bg.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ro.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ro.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ro.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sk.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sk.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.sk.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.bg.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.bg.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.bg.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ro.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ro.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ro.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sk.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sk.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.sk.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.bg.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.bg.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.bg.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ro.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ro.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ro.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sk.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sk.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.sk.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.bg.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.bg.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.bg.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ro.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ro.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ro.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sk.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sk.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.sk.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.bg.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.bg.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.bg.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ro.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ro.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ro.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sk.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sk.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.sk.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.bg.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.bg.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.bg.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ro.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ro.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ro.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sk.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sk.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.sk.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.bg.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.bg.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.bg.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ro.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ro.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ro.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sk.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sk.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.sk.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.bg.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.bg.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.bg.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ro.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ro.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ro.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sk.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sk.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.sk.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.bg.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.bg.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.bg.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ro.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ro.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ro.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sk.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sk.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.sk.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.bg.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.bg.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.bg.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ro.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ro.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ro.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sk.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sk.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.sk.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.bg.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.bg.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.bg.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ro.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ro.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ro.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sk.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sk.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.sk.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.bg.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.bg.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.bg.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ro.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ro.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ro.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sk.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sk.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.sk.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.bg.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.bg.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.bg.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ro.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ro.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ro.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sk.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sk.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.sk.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.bg.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.bg.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.bg.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ro.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ro.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ro.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sk.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sk.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.sk.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.bg.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.bg.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.bg.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ro.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ro.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ro.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sk.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sk.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.sk.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.bg.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.bg.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.bg.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ro.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ro.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ro.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sk.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sk.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.sk.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.bg.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.bg.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.bg.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ro.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ro.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ro.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sk.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sk.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.sk.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.bg.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.bg.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.bg.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ro.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ro.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ro.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sk.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sk.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.sk.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.bg.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.bg.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.bg.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ro.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ro.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ro.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sk.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sk.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.sk.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.bg.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.bg.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.bg.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ro.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ro.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ro.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sk.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sk.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.sk.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.bg.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.bg.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.bg.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ro.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ro.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ro.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sk.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sk.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.sk.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.bg.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.bg.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.bg.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ro.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ro.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ro.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sk.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sk.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.sk.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.bg.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.bg.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.bg.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ro.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ro.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ro.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sk.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sk.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.sk.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.bg.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.bg.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.bg.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ro.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ro.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ro.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sk.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sk.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.sk.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.bg.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.bg.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.bg.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ro.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ro.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ro.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sk.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sk.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.sk.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.bg.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.bg.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.bg.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ro.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ro.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ro.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sk.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sk.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.sk.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.bg.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.bg.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.bg.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ro.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ro.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ro.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sk.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sk.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.sk.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.bg.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.bg.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.bg.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ro.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ro.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ro.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sk.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sk.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.sk.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.bg.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.bg.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.bg.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ro.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ro.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ro.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sk.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sk.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.sk.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.bg.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.bg.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.bg.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ro.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ro.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ro.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sk.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sk.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.sk.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.bg.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.bg.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.bg.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ro.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ro.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ro.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sk.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sk.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.sk.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.bg.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.bg.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.bg.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ro.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ro.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ro.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sk.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sk.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.sk.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.bg.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.bg.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.bg.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ro.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ro.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ro.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sk.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sk.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.sk.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.bg.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.bg.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.bg.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ro.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ro.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ro.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sk.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sk.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.sk.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.bg.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.bg.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.bg.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ro.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ro.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ro.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sk.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sk.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.sk.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.bg.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.bg.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.bg.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ro.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ro.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ro.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sk.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sk.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.sk.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.bg.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.bg.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.bg.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ro.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ro.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ro.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sk.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sk.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.sk.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.bg.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.bg.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.bg.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ro.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ro.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ro.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sk.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sk.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.sk.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.bg.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.bg.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.bg.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ro.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ro.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ro.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sk.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sk.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.sk.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.bg.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.bg.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.bg.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ro.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ro.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ro.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sk.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sk.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.sk.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.bg.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.bg.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.bg.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ro.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ro.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ro.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sk.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sk.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.sk.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.bg.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.bg.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.bg.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ro.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ro.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ro.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sk.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sk.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.sk.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.bg.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.bg.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.bg.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ro.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ro.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ro.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sk.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sk.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.sk.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.bg.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.bg.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.bg.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ro.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ro.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ro.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sk.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sk.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.sk.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.bg.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.bg.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.bg.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ro.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ro.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ro.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sk.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sk.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.sk.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.bg.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.bg.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.bg.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ro.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ro.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ro.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sk.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sk.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.sk.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.bg.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.bg.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.bg.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ro.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ro.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ro.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sk.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sk.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.sk.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.bg.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.bg.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.bg.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ro.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ro.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ro.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sk.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sk.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.sk.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.bg.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.bg.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.bg.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ro.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ro.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ro.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sk.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sk.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.sk.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.bg.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.bg.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.bg.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ro.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ro.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ro.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sk.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sk.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.sk.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.bg.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.bg.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.bg.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ro.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ro.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ro.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sk.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sk.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.sk.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.bg.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.bg.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.bg.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ro.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ro.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ro.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sk.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sk.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.sk.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.bg.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.bg.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.bg.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ro.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ro.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ro.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sk.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sk.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.sk.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.bg.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.bg.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.bg.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ro.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ro.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ro.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sk.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sk.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.sk.png differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.bg.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.bg.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.bg.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ro.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ro.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ro.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sk.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sk.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.sk.jpg differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.bg.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.bg.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.bg.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ro.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ro.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ro.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sk.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sk.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.sk.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.bg.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.bg.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.bg.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ro.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ro.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ro.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sk.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sk.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.sk.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.bg.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.bg.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.bg.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ro.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ro.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ro.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sk.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sk.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.sk.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.bg.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.bg.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.bg.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ro.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ro.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ro.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sk.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sk.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.sk.png differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.bg.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.bg.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.bg.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ro.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ro.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ro.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sk.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sk.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.sk.jpg differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.bg.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.bg.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.bg.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ro.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ro.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ro.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sk.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sk.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.sk.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.bg.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.bg.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.bg.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ro.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ro.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ro.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sk.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sk.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.sk.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.bg.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.bg.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.bg.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ro.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ro.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ro.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sk.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sk.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.sk.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.bg.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.bg.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.bg.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ro.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ro.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ro.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sk.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sk.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.sk.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.bg.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.bg.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.bg.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ro.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ro.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ro.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sk.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sk.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sk.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.bg.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.bg.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.bg.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ro.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ro.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ro.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sk.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sk.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sk.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.bg.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.bg.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.bg.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ro.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ro.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ro.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sk.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sk.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.sk.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.bg.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.bg.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.bg.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ro.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ro.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ro.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sk.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sk.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.sk.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.bg.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.bg.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.bg.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ro.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ro.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ro.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sk.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sk.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.sk.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.bg.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.bg.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.bg.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ro.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ro.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ro.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sk.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sk.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.sk.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.bg.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.bg.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.bg.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ro.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ro.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ro.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sk.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sk.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.sk.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.bg.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.bg.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.bg.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ro.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ro.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ro.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sk.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sk.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.sk.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.bg.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.bg.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.bg.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ro.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ro.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ro.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sk.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sk.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.sk.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.bg.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.bg.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.bg.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ro.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ro.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ro.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sk.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sk.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.sk.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.bg.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.bg.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.bg.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ro.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ro.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ro.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sk.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sk.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.sk.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.bg.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.bg.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.bg.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ro.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ro.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ro.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sk.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sk.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.sk.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.bg.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.bg.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.bg.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ro.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ro.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ro.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sk.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sk.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sk.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.bg.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.bg.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.bg.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ro.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ro.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ro.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sk.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sk.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.sk.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.bg.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.bg.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.bg.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ro.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ro.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ro.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sk.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sk.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.sk.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.bg.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.bg.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.bg.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ro.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ro.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ro.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sk.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sk.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.sk.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.bg.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.bg.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.bg.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ro.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ro.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ro.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sk.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sk.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.sk.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.bg.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.bg.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.bg.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ro.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ro.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ro.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sk.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sk.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.sk.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.bg.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.bg.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.bg.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ro.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ro.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ro.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sk.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sk.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.sk.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.bg.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.bg.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.bg.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ro.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ro.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ro.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sk.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sk.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.sk.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.bg.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.bg.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.bg.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ro.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ro.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ro.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sk.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sk.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.sk.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.bg.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.bg.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.bg.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ro.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ro.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ro.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sk.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sk.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.sk.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.bg.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.bg.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.bg.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ro.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ro.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ro.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sk.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sk.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.sk.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.bg.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.bg.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.bg.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ro.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ro.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ro.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sk.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sk.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.sk.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.bg.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.bg.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.bg.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ro.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ro.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ro.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sk.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sk.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.sk.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.bg.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.bg.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.bg.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ro.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ro.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ro.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sk.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sk.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.sk.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.bg.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.bg.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.bg.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ro.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ro.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ro.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sk.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sk.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.sk.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.bg.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.bg.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.bg.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ro.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ro.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ro.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sk.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sk.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.sk.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.bg.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.bg.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.bg.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ro.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ro.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ro.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sk.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sk.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.sk.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.bg.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.bg.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.bg.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ro.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ro.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ro.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sk.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sk.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.sk.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.bg.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.bg.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.bg.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ro.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ro.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ro.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sk.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sk.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.sk.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.bg.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.bg.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.bg.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ro.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ro.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ro.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sk.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sk.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.sk.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.bg.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.bg.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.bg.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ro.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ro.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ro.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sk.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sk.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.sk.png differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.bg.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.bg.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.bg.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ro.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ro.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ro.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sk.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sk.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.sk.jpg differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.bg.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.bg.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.bg.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ro.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ro.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ro.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sk.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sk.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.sk.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.bg.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.bg.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.bg.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ro.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ro.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ro.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sk.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sk.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.sk.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.bg.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.bg.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.bg.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ro.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ro.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ro.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sk.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sk.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.sk.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.bg.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.bg.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.bg.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ro.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ro.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ro.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sk.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sk.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.sk.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.bg.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.bg.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.bg.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ro.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ro.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ro.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sk.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sk.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.sk.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.bg.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.bg.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.bg.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ro.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ro.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ro.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sk.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sk.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.sk.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.bg.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.bg.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.bg.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ro.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ro.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ro.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sk.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sk.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.sk.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.bg.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.bg.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.bg.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ro.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ro.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ro.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sk.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sk.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.sk.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.bg.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.bg.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.bg.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ro.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ro.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ro.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sk.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sk.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.sk.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.bg.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.bg.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.bg.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ro.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ro.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ro.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sk.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sk.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.sk.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.bg.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.bg.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.bg.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ro.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ro.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ro.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sk.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sk.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.sk.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.bg.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.bg.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.bg.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ro.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ro.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ro.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sk.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sk.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sk.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.bg.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.bg.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.bg.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ro.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ro.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ro.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sk.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sk.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sk.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.bg.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.bg.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.bg.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ro.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ro.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ro.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sk.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sk.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.sk.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.bg.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.bg.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.bg.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ro.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ro.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ro.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sk.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sk.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.sk.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.bg.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.bg.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.bg.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ro.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ro.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ro.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sk.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sk.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.sk.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.bg.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.bg.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.bg.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ro.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ro.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ro.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sk.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sk.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.sk.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.bg.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.bg.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.bg.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ro.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ro.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ro.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sk.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sk.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.sk.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.bg.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.bg.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.bg.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ro.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ro.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ro.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sk.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sk.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.sk.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.bg.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.bg.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.bg.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ro.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ro.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ro.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sk.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sk.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.sk.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.bg.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.bg.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.bg.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ro.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ro.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ro.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sk.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sk.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.sk.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.bg.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.bg.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.bg.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ro.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ro.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ro.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sk.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sk.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.sk.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.bg.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.bg.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.bg.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ro.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ro.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ro.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sk.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sk.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.sk.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.bg.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.bg.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.bg.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ro.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ro.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ro.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sk.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sk.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.sk.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.bg.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.bg.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.bg.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ro.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ro.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ro.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sk.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sk.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.sk.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.bg.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.bg.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.bg.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ro.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ro.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ro.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sk.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sk.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.sk.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.bg.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.bg.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.bg.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ro.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ro.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ro.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sk.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sk.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.sk.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.bg.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.bg.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.bg.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ro.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ro.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ro.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sk.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sk.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.sk.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.bg.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.bg.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.bg.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ro.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ro.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ro.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sk.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sk.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.sk.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.bg.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.bg.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.bg.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ro.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ro.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ro.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sk.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sk.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.sk.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.bg.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.bg.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.bg.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ro.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ro.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ro.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sk.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sk.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.sk.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.bg.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.bg.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.bg.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ro.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ro.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ro.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sk.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sk.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.sk.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.bg.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.bg.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.bg.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ro.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ro.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ro.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sk.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sk.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.sk.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.bg.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.bg.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.bg.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ro.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ro.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ro.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sk.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sk.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.sk.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.bg.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.bg.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.bg.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ro.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ro.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ro.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sk.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sk.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.sk.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.bg.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.bg.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.bg.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ro.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ro.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ro.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sk.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sk.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.sk.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.bg.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.bg.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.bg.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ro.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ro.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ro.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sk.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sk.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.sk.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.bg.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.bg.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.bg.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ro.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ro.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ro.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sk.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sk.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.sk.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.bg.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.bg.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.bg.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ro.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ro.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ro.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sk.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sk.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.sk.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.bg.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.bg.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.bg.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ro.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ro.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ro.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sk.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sk.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.sk.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.bg.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.bg.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.bg.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ro.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ro.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ro.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sk.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sk.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.sk.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.bg.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.bg.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.bg.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ro.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ro.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ro.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sk.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sk.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.sk.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.bg.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.bg.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.bg.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ro.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ro.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ro.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sk.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sk.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.sk.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.bg.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.bg.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.bg.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ro.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ro.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ro.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sk.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sk.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.sk.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.bg.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.bg.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.bg.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ro.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ro.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ro.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sk.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sk.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.sk.png differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.bg.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.bg.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.bg.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ro.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ro.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ro.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sk.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sk.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.sk.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.bg.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.bg.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.bg.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ro.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ro.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ro.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sk.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sk.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.sk.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.bg.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.bg.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.bg.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ro.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ro.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ro.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sk.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sk.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.sk.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.bg.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.bg.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.bg.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ro.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ro.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ro.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sk.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sk.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sk.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.bg.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.bg.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.bg.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ro.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ro.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ro.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sk.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sk.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.sk.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.bg.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.bg.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.bg.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ro.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ro.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ro.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sk.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sk.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.sk.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.bg.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.bg.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.bg.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ro.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ro.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ro.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sk.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sk.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.sk.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.bg.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.bg.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.bg.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ro.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ro.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ro.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sk.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sk.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.sk.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.bg.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.bg.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.bg.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ro.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ro.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ro.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sk.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sk.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.sk.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.bg.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.bg.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.bg.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ro.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ro.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ro.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sk.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sk.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.sk.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.bg.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.bg.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.bg.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ro.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ro.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ro.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sk.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sk.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.sk.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.bg.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.bg.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.bg.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ro.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ro.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ro.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sk.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sk.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.sk.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.bg.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.bg.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.bg.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ro.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ro.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ro.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sk.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sk.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.sk.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.bg.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.bg.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.bg.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ro.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ro.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ro.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sk.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sk.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.sk.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.bg.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.bg.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.bg.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ro.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ro.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ro.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sk.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sk.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.sk.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.bg.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.bg.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.bg.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ro.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ro.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ro.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sk.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sk.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.sk.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.bg.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.bg.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.bg.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ro.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ro.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ro.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sk.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sk.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.sk.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.bg.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.bg.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.bg.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ro.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ro.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ro.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sk.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sk.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.sk.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.bg.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.bg.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.bg.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ro.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ro.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ro.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sk.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sk.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.sk.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.bg.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.bg.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.bg.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ro.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ro.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ro.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sk.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sk.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.sk.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.bg.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.bg.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.bg.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ro.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ro.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ro.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sk.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sk.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.sk.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.bg.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.bg.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.bg.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ro.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ro.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ro.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sk.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sk.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.sk.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.bg.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.bg.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.bg.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ro.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ro.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ro.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sk.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sk.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.sk.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.bg.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.bg.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.bg.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ro.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ro.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ro.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sk.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sk.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.sk.jpg differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.bg.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.bg.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.bg.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ro.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ro.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ro.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sk.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sk.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.sk.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.bg.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.bg.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.bg.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ro.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ro.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ro.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sk.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sk.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.sk.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.bg.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.bg.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.bg.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ro.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ro.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ro.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sk.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sk.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.sk.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.bg.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.bg.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.bg.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ro.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ro.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ro.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sk.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sk.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.sk.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.bg.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.bg.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.bg.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ro.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ro.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ro.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sk.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sk.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.sk.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.bg.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.bg.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.bg.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ro.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ro.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ro.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sk.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sk.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.sk.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.bg.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.bg.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.bg.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ro.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ro.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ro.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sk.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sk.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.sk.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.bg.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.bg.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.bg.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ro.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ro.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ro.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sk.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sk.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.sk.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.bg.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.bg.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.bg.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ro.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ro.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ro.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sk.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sk.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.sk.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.bg.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.bg.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.bg.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ro.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ro.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ro.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sk.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sk.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.sk.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.bg.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.bg.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.bg.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ro.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ro.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ro.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sk.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sk.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.sk.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.bg.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.bg.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.bg.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ro.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ro.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ro.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sk.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sk.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.sk.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.bg.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.bg.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.bg.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ro.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ro.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ro.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sk.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sk.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.sk.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.bg.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.bg.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.bg.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ro.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ro.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ro.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sk.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sk.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sk.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.bg.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.bg.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.bg.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ro.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ro.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ro.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sk.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sk.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.sk.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.bg.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.bg.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.bg.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ro.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ro.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ro.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sk.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sk.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.sk.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.bg.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.bg.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.bg.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ro.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ro.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ro.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sk.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sk.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.sk.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.bg.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.bg.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.bg.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ro.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ro.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ro.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sk.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sk.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.sk.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.bg.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.bg.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.bg.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ro.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ro.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ro.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sk.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sk.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.sk.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.bg.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.bg.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.bg.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ro.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ro.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ro.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sk.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sk.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.sk.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.bg.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.bg.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.bg.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ro.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ro.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ro.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sk.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sk.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sk.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.bg.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.bg.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.bg.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ro.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ro.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ro.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sk.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sk.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sk.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.bg.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.bg.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.bg.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ro.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ro.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ro.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sk.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sk.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sk.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.bg.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.bg.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.bg.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ro.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ro.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ro.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sk.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sk.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sk.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.bg.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.bg.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.bg.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ro.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ro.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ro.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sk.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sk.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.sk.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.bg.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.bg.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.bg.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ro.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ro.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ro.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sk.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sk.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.sk.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.bg.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.bg.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.bg.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ro.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ro.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ro.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sk.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sk.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.sk.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.bg.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.bg.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.bg.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ro.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ro.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ro.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sk.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sk.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.sk.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.bg.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.bg.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.bg.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ro.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ro.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ro.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sk.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sk.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.sk.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.bg.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.bg.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.bg.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ro.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ro.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ro.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sk.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sk.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.sk.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.bg.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.bg.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.bg.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ro.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ro.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ro.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sk.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sk.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.sk.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.bg.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.bg.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.bg.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ro.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ro.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ro.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sk.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sk.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.sk.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.bg.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.bg.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.bg.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ro.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ro.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ro.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sk.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sk.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.sk.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.bg.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.bg.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.bg.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ro.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ro.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ro.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sk.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sk.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.sk.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.bg.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.bg.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.bg.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ro.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ro.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ro.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sk.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sk.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.sk.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.bg.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.bg.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.bg.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ro.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ro.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ro.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sk.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sk.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.sk.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.bg.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.bg.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.bg.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ro.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ro.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ro.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sk.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sk.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.sk.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.bg.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.bg.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.bg.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ro.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ro.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ro.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sk.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sk.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.sk.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.bg.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.bg.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.bg.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ro.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ro.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ro.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sk.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sk.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.sk.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.bg.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.bg.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.bg.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ro.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ro.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ro.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sk.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sk.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.sk.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.bg.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.bg.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.bg.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ro.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ro.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ro.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sk.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sk.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.sk.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.bg.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.bg.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.bg.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ro.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ro.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ro.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sk.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sk.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.sk.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.bg.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.bg.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.bg.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ro.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ro.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ro.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sk.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sk.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.sk.png differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ro.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ro.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ro.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sk.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sk.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.sk.jpg differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.bg.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.bg.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.bg.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ro.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ro.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ro.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sk.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sk.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.sk.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.bg.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.bg.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.bg.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ro.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ro.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ro.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sk.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sk.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.sk.png differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.bg.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.bg.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.bg.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ro.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ro.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ro.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sk.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sk.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.sk.jpg differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.bg.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.bg.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.bg.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ro.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ro.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ro.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sk.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sk.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.sk.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.bg.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.bg.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.bg.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ro.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ro.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ro.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sk.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sk.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.sk.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.bg.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.bg.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.bg.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ro.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ro.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ro.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sk.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sk.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.sk.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.bg.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.bg.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.bg.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ro.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ro.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ro.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sk.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sk.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.sk.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.bg.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.bg.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.bg.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ro.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ro.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ro.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sk.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sk.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.sk.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.bg.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.bg.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.bg.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ro.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ro.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ro.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sk.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sk.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.sk.png differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.bg.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.bg.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.bg.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ro.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ro.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ro.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sk.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sk.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.sk.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.bg.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.bg.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.bg.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ro.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ro.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ro.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sk.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sk.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.sk.jpg differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.bg.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.bg.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.bg.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ro.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ro.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ro.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sk.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sk.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.sk.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.bg.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.bg.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.bg.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ro.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ro.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ro.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sk.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sk.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.sk.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.bg.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.bg.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.bg.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ro.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ro.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ro.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sk.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sk.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sk.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.bg.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.bg.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.bg.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ro.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ro.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ro.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sk.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sk.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.sk.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.bg.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.bg.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.bg.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ro.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ro.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ro.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sk.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sk.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.sk.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.bg.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.bg.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.bg.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ro.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ro.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.ro.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sk.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.sk.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.sk.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.bg.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.bg.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.bg.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ro.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ro.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ro.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sk.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sk.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.sk.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.bg.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.bg.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.bg.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ro.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ro.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ro.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sk.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sk.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.sk.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.bg.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.bg.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.bg.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ro.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ro.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ro.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sk.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sk.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.sk.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.bg.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.bg.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.bg.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ro.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ro.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ro.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sk.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sk.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.sk.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.bg.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.bg.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.bg.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ro.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ro.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ro.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sk.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sk.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.sk.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.bg.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.bg.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.bg.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ro.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ro.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ro.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sk.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sk.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.sk.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.bg.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.bg.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.bg.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ro.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ro.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ro.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sk.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sk.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.sk.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.bg.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.bg.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.bg.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ro.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ro.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ro.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sk.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sk.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.sk.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.bg.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.bg.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.bg.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ro.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ro.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ro.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sk.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sk.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.sk.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.bg.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.bg.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.bg.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ro.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ro.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ro.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sk.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sk.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.sk.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.bg.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.bg.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.bg.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ro.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ro.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ro.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sk.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sk.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.sk.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.bg.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.bg.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.bg.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ro.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ro.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ro.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sk.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sk.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.sk.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.bg.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.bg.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.bg.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ro.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ro.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ro.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sk.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sk.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.sk.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.bg.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.bg.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.bg.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ro.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ro.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ro.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sk.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sk.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.sk.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.bg.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.bg.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.bg.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ro.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ro.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ro.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sk.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sk.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sk.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.bg.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.bg.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.bg.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ro.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ro.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ro.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sk.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sk.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.sk.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.bg.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.bg.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.bg.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ro.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ro.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ro.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sk.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sk.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.sk.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.bg.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.bg.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.bg.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ro.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ro.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ro.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sk.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sk.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.sk.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.bg.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.bg.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.bg.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ro.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ro.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ro.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sk.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sk.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.sk.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.bg.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.bg.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.bg.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ro.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ro.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ro.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sk.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sk.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.sk.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.bg.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.bg.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.bg.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ro.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ro.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ro.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sk.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sk.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.sk.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.bg.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.bg.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.bg.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ro.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ro.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ro.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sk.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sk.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.sk.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.bg.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.bg.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.bg.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ro.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ro.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ro.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sk.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sk.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.sk.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.bg.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.bg.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.bg.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ro.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ro.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ro.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sk.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sk.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.sk.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.bg.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.bg.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.bg.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ro.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ro.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ro.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sk.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sk.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.sk.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.bg.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.bg.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.bg.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ro.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ro.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ro.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sk.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sk.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.sk.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.bg.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.bg.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.bg.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ro.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ro.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ro.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sk.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sk.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.sk.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.bg.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.bg.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.bg.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ro.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ro.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ro.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sk.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sk.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sk.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.bg.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.bg.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.bg.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ro.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ro.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ro.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sk.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sk.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.sk.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.bg.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.bg.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.bg.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ro.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ro.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ro.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sk.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sk.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sk.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.bg.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.bg.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.bg.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ro.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ro.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ro.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sk.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sk.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.sk.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.bg.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.bg.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.bg.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ro.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ro.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ro.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sk.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sk.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.sk.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.bg.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.bg.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.bg.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ro.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ro.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ro.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sk.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sk.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.sk.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.bg.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.bg.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.bg.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ro.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ro.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ro.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sk.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sk.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.sk.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.bg.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.bg.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.bg.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ro.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ro.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ro.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sk.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sk.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.sk.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.bg.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.bg.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.bg.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ro.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ro.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ro.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sk.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sk.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.sk.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.bg.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.bg.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.bg.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ro.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ro.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ro.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sk.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sk.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.sk.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.bg.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.bg.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.bg.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ro.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ro.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ro.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sk.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sk.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.sk.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.bg.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.bg.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.bg.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ro.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ro.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ro.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sk.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sk.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sk.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.bg.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.bg.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.bg.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ro.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ro.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ro.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sk.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sk.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.sk.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.bg.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.bg.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.bg.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ro.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ro.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ro.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sk.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sk.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.sk.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.bg.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.bg.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.bg.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ro.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ro.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ro.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sk.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sk.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.sk.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.bg.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.bg.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.bg.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ro.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ro.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ro.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sk.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sk.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.sk.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.bg.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.bg.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.bg.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ro.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ro.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ro.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sk.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sk.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.sk.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.bg.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.bg.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.bg.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ro.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ro.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ro.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sk.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sk.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.sk.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.bg.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.bg.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.bg.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ro.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ro.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ro.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sk.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sk.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.sk.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.bg.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.bg.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.bg.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ro.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ro.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ro.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sk.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sk.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.sk.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.bg.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.bg.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.bg.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ro.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ro.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ro.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sk.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sk.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.sk.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.bg.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.bg.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.bg.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ro.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ro.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ro.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sk.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sk.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.sk.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.bg.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.bg.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.bg.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ro.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ro.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ro.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sk.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sk.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.sk.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.bg.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.bg.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.bg.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ro.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ro.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ro.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sk.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sk.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.sk.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.bg.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.bg.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.bg.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ro.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ro.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ro.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sk.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sk.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.sk.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.bg.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.bg.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.bg.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ro.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ro.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ro.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sk.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sk.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.sk.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.bg.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.bg.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.bg.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ro.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ro.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ro.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sk.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sk.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.sk.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.bg.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.bg.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.bg.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ro.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ro.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ro.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sk.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sk.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.sk.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.bg.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.bg.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.bg.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ro.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ro.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ro.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sk.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sk.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.sk.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.bg.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.bg.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.bg.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ro.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ro.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ro.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sk.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sk.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.sk.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.bg.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.bg.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.bg.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ro.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ro.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ro.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sk.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sk.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.sk.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.bg.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.bg.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.bg.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ro.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ro.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ro.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sk.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sk.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.sk.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.bg.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.bg.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.bg.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ro.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ro.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ro.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sk.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sk.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.sk.png differ diff --git a/translations/bg/1-getting-started/README.md b/translations/bg/1-getting-started/README.md new file mode 100644 index 00000000..40104621 --- /dev/null +++ b/translations/bg/1-getting-started/README.md @@ -0,0 +1,30 @@ + +# Започване с IoT + +В тази част от учебната програма ще се запознаете с Интернет на нещата (IoT) и ще научите основните концепции, включително как да създадете първия си IoT проект "Hello World", свързан с облака. Този проект представлява нощна лампа, която светва, когато нивата на светлина, измерени от сензор, намалеят. + +![LED, свързан към WIO, който се включва и изключва в зависимост от промените в нивото на светлината](../../../images/wio-running-assignment-1-1.gif) + +## Теми + +1. [Въведение в IoT](lessons/1-introduction-to-iot/README.md) +1. [По-задълбочен поглед върху IoT](lessons/2-deeper-dive/README.md) +1. [Взаимодействие с физическия свят чрез сензори и изпълнителни механизми](lessons/3-sensors-and-actuators/README.md) +1. [Свързване на вашето устройство с Интернет](lessons/4-connect-internet/README.md) + +## Благодарности + +Всички уроци са написани с ♥️ от [Jim Bennett](https://GitHub.com/JimBobBennett) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/1-introduction-to-iot/README.md b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/README.md new file mode 100644 index 00000000..5f5bdeef --- /dev/null +++ b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/README.md @@ -0,0 +1,242 @@ + +# Въведение в IoT + +![Скица на урока](../../../../../translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок е част от [Hello IoT серията](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) на [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Урокът е представен в два видеоклипа - един час лекция и един час офис часове, в които се разглеждат по-задълбочено части от урока и се отговаря на въпроси. + +[![Урок 1: Въведение в IoT](https://img.youtube.com/vi/bVFfcYh6UBw/0.jpg)](https://youtu.be/bVFfcYh6UBw) + +[![Урок 1: Въведение в IoT - Офис часове](https://img.youtube.com/vi/YI772q5v3yI/0.jpg)](https://youtu.be/YI772q5v3yI) + +> 🎥 Кликнете върху изображенията по-горе, за да гледате видеоклиповете + +## Предварителен тест + +[Предварителен тест](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/1) + +## Въведение + +Този урок обхваща някои от основните теми, свързани с Интернет на нещата (IoT), и ви подготвя за настройка на вашия хардуер. + +В този урок ще разгледаме: + +* [Какво е "Интернет на нещата"?](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [IoT устройства](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [Настройка на вашето устройство](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [Приложения на IoT](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [Примери за IoT устройства около вас](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +## Какво е "Интернет на нещата"? + +Терминът "Интернет на нещата" е въведен от [Кевин Аштън](https://wikipedia.org/wiki/Kevin_Ashton) през 1999 г., за да опише свързването на Интернет с физическия свят чрез сензори. Оттогава терминът се използва за описание на всяко устройство, което взаимодейства с физическия свят около него, било чрез събиране на данни от сензори, или чрез предоставяне на реални взаимодействия чрез актуатори (устройства, които извършват действия като включване на превключвател или осветяване на LED), обикновено свързани с други устройства или Интернет. + +> **Сензори** събират информация от света, като измерват скорост, температура или местоположение. +> +> **Актуатори** преобразуват електрически сигнали в реални взаимодействия, като задействане на превключвател, включване на светлини, издаване на звуци или изпращане на контролни сигнали към друг хардуер, например за включване на електрически контакт. + +IoT като технологична област включва не само устройства, но и облачни услуги, които могат да обработват данните от сензорите или да изпращат заявки към актуатори, свързани с IoT устройства. Включва и устройства, които нямат или не се нуждаят от Интернет връзка, често наричани edge устройства. Това са устройства, които могат сами да обработват и реагират на данни от сензори, обикновено използвайки AI модели, обучени в облака. + +IoT е бързо развиваща се технологична област. Прогнозите сочат, че до края на 2020 г. са били внедрени и свързани към Интернет 30 милиарда IoT устройства. В бъдеще се очаква до 2025 г. IoT устройствата да събират почти 80 зетабайта данни или 80 трилиона гигабайта. Това е огромно количество данни! + +![Графика, показваща активни IoT устройства във времето, с възходяща тенденция от под 5 милиарда през 2015 г. до над 30 милиарда през 2025 г.](../../../../../images/connected-iot-devices.svg) + +✅ Направете малко проучване: Колко от данните, генерирани от IoT устройства, всъщност се използват и колко се губят? Защо толкова много данни се игнорират? + +Тези данни са ключът към успеха на IoT. За да бъдете успешен IoT разработчик, трябва да разбирате какви данни трябва да събирате, как да ги събирате, как да вземате решения въз основа на тях и как да използвате тези решения за взаимодействие с физическия свят, ако е необходимо. + +## IoT устройства + +**Т** в IoT означава **Неща** - устройства, които взаимодействат с физическия свят около тях, било чрез събиране на данни от сензори, или чрез предоставяне на реални взаимодействия чрез актуатори. + +Устройства за производствени или търговски цели, като потребителски фитнес тракери или индустриални контролери на машини, обикновено са специално създадени. Те използват персонализирани платки, а понякога дори и персонализирани процесори, проектирани да отговарят на нуждите на конкретна задача, било то да са достатъчно малки, за да се поберат на китката, или достатъчно здрави, за да работят в среда с висока температура, стрес или вибрации. + +Като разработчик, който учи за IoT или създава прототип на устройство, ще трябва да започнете с комплект за разработка. Това са универсални IoT устройства, предназначени за разработчици, често с функции, които не бихте намерили на производствено устройство, като набор от външни пинове за свързване на сензори или актуатори, хардуер за поддръжка на дебъгинг или допълнителни ресурси, които биха добавили ненужни разходи при голямо производство. + +Тези комплекти за разработка обикновено попадат в две категории - микроконтролери и едноплаткови компютри. Те ще бъдат представени тук, а в следващия урок ще разгледаме по-подробно. + +> 💁 Вашият телефон също може да се счита за универсално IoT устройство, с вградени сензори и актуатори, като различни приложения използват тези сензори и актуатори по различни начини с различни облачни услуги. Можете дори да намерите някои IoT уроци, които използват приложение за телефон като IoT устройство. + +### Микроконтролери + +Микроконтролерът (наричан още MCU, съкращение от microcontroller unit) е малък компютър, състоящ се от: + +🧠 Един или повече централни процесорни единици (CPU) - "мозъкът" на микроконтролера, който изпълнява вашата програма + +💾 Памет (RAM и програмна памет) - където се съхраняват вашата програма, данни и променливи + +🔌 Програмируеми входно/изходни (I/O) връзки - за комуникация с външни периферни устройства (свързани устройства) като сензори и актуатори + +Микроконтролерите обикновено са евтини изчислителни устройства, като средните цени за тези, използвани в персонализиран хардуер, падат до около 0,50 щатски долара, а някои устройства са толкова евтини, колкото 0,03 щатски долара. Комплектите за разработка могат да започнат от 4 щатски долара, като разходите се увеличават с добавянето на повече функции. [Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html), комплект за разработка на микроконтролери от [Seeed studios](https://www.seeedstudio.com), който има сензори, актуатори, WiFi и екран, струва около 30 щатски долара. + +![Wio Terminal](../../../../../translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.bg.png) + +> 💁 Когато търсите микроконтролери в Интернет, бъдете внимателни при търсене на термина **MCU**, тъй като това ще върне много резултати за Marvel Cinematic Universe, а не за микроконтролери. + +Микроконтролерите са проектирани да бъдат програмирани за изпълнение на ограничен брой много специфични задачи, а не да бъдат универсални компютри като PC или Mac. Освен в много специфични случаи, не можете да свържете монитор, клавиатура и мишка и да ги използвате за общи задачи. + +Комплектите за разработка на микроконтролери обикновено идват с допълнителни вградени сензори и актуатори. Повечето платки ще имат един или повече програмируеми LED светлини, както и други устройства като стандартни конектори за добавяне на повече сензори или актуатори чрез различни екосистеми на производители или вградени сензори (обикновено най-популярните, като температурни сензори). Някои микроконтролери имат вградена безжична свързаност като Bluetooth или WiFi или имат допълнителни микроконтролери на платката за добавяне на тази свързаност. + +> 💁 Микроконтролерите обикновено се програмират на C/C++. + +### Едноплаткови компютри + +Едноплатковият компютър е малко изчислително устройство, което съдържа всички елементи на пълноценен компютър на една малка платка. Това са устройства със спецификации, близки до настолен или лаптоп компютър, които работят с пълна операционна система, но са малки, използват по-малко енергия и са значително по-евтини. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg) + +Raspberry Pi е един от най-популярните едноплаткови компютри. + +Подобно на микроконтролера, едноплатковите компютри имат CPU, памет и входно/изходни пинове, но имат допълнителни функции като графичен чип за свързване на монитори, аудио изходи и USB портове за свързване на клавиатури, мишки и други стандартни USB устройства като уеб камери или външна памет. Програмите се съхраняват на SD карти или твърди дискове заедно с операционната система, вместо на паметен чип, вграден в платката. + +> 🎓 Можете да мислите за едноплатков компютър като за по-малка, по-евтина версия на PC или Mac, който използвате в момента, с добавени GPIO (универсални входно/изходни) пинове за взаимодействие със сензори и актуатори. + +Едноплатковите компютри са напълно функционални компютри, така че могат да бъдат програмирани на всеки език. IoT устройствата обикновено се програмират на Python. + +### Хардуерни избори за останалите уроци + +Всички следващи уроци включват задачи, използващи IoT устройство за взаимодействие с физическия свят и комуникация с облака. Всеки урок поддържа 3 варианта за устройства - Arduino (с използване на Seeed Studios Wio Terminal) или едноплатков компютър, физически (Raspberry Pi 4) или виртуален, работещ на вашия PC или Mac. + +Можете да прочетете за необходимия хардуер за изпълнение на всички задачи в [хардуерния наръчник](../../../hardware.md). + +> 💁 Не е необходимо да закупувате IoT хардуер, за да изпълните задачите, можете да направите всичко с виртуален едноплатков компютър. + +Кой хардуер ще изберете зависи от това, какво имате на разположение у дома или в училище, и какъв програмен език знаете или планирате да научите. И двата варианта за хардуер използват една и съща екосистема от сензори, така че ако започнете с един, можете да преминете към друг, без да се налага да заменяте по-голямата част от комплекта. Виртуалният едноплатков компютър ще бъде еквивалент на обучение с Raspberry Pi, като по-голямата част от кода може да бъде прехвърлена към Pi, ако в крайна сметка получите устройство и сензори. + +### Arduino комплект за разработка + +Ако се интересувате от изучаване на разработка на микроконтролери, можете да изпълните задачите, използвайки устройство Arduino. Ще ви е необходимо основно разбиране на програмирането на C/C++, тъй като уроците ще учат само код, който е свързан с рамката на Arduino, използваните сензори и актуатори, и библиотеките, които взаимодействат с облака. + +Задачите ще използват [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn) с [PlatformIO разширението за разработка на микроконтролери](https://platformio.org). Можете също да използвате Arduino IDE, ако сте опитни с този инструмент, тъй като инструкции няма да бъдат предоставени. + +### Комплект за разработка с едноплатков компютър + +Ако се интересувате от изучаване на IoT разработка с едноплаткови компютри, можете да изпълните задачите, използвайки Raspberry Pi или виртуално устройство, работещо на вашия PC или Mac. + +Ще ви е необходимо основно разбиране на програмирането на Python, тъй като уроците ще учат само код, който е свързан с използваните сензори и актуатори, и библиотеките, които взаимодействат с облака. + +> 💁 Ако искате да научите програмиране на Python, разгледайте следните две видео серии: +> +> * [Python за начинаещи](https://channel9.msdn.com/Series/Intro-to-Python-Development?WT.mc_id=academic-17441-jabenn) +> * [Още Python за начинаещи](https://channel9.msdn.com/Series/More-Python-for-Beginners?WT.mc_id=academic-7372-jabenn) + +Задачите ще използват [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn). + +Ако използвате Raspberry Pi, можете да го стартирате с пълната десктоп версия на Raspberry Pi OS и да правите цялото програмиране директно на Pi, използвайки [версията на VS Code за Raspberry Pi OS](https://code.visualstudio.com/docs/setup/raspberry-pi?WT.mc_id=academic-17441-jabenn), или да стартирате Pi като устройство без монитор и да програмирате от вашия PC или Mac, използвайки VS Code с [Remote SSH разширението](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn), което ви позволява да се свържете с Pi и да редактирате, дебъгвате и изпълнявате код, сякаш програмирате директно на него. + +Ако използвате опцията за виртуално устройство, ще програмирате директно на вашия компютър. Вместо да използвате сензори и актуатори, ще използвате инструмент за симулиране на този хардуер, предоставящ стойности на сензори, които можете да зададете, и показващ резултатите от актуаторите на екрана. + +## Настройка на вашето устройство + +Преди да започнете с програмирането на вашето IoT устройство, ще трябва да направите малко настройка. Следвайте съответните инструкции по-долу в зависимост от устройството, което ще използвате. +💁 Ако все още нямате устройство, вижте [ръководството за хардуер](../../../hardware.md), за да решите кое устройство ще използвате и какъв допълнителен хардуер трябва да закупите. Не е необходимо да купувате хардуер, тъй като всички проекти могат да се изпълняват на виртуален хардуер. +Тези инструкции включват връзки към уебсайтове на трети страни, създадени от производителите на хардуера или инструментите, които ще използвате. Това е с цел да се гарантира, че винаги използвате най-актуалните инструкции за различните инструменти и хардуер. + +Следвайте съответното ръководство, за да настроите устройството си и да завършите проект "Hello World". Това ще бъде първата стъпка в създаването на IoT нощна лампа в рамките на 4 урока в тази начална част. + +* [Arduino - Wio Terminal](wio-terminal.md) +* [Едноплатков компютър - Raspberry Pi](pi.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device.md) + +✅ Ще използвате VS Code както за Arduino, така и за едноплаткови компютри. Ако не сте го използвали досега, прочетете повече за него на [сайта на VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn). + +## Приложения на IoT + +IoT обхваща огромен набор от случаи на употреба, разделени в няколко основни групи: + +* Потребителски IoT +* Търговски IoT +* Индустриален IoT +* Инфраструктурен IoT + +✅ Направете малко проучване: За всяка от описаните по-долу области намерете един конкретен пример, който не е даден в текста. + +### Потребителски IoT + +Потребителски IoT се отнася до IoT устройства, които потребителите купуват и използват в дома си. Някои от тези устройства са изключително полезни, като например умни високоговорители, умни отоплителни системи и роботизирани прахосмукачки. Други са спорни по отношение на тяхната полезност, като например кранове с гласово управление, които след това не можете да изключите, защото гласовото управление не може да ви чуе над шума от течащата вода. + +Потребителските IoT устройства дават възможност на хората да постигат повече в своето обкръжение, особено на 1 милиард души с увреждания. Роботизираните прахосмукачки могат да осигурят чисти подове на хора с проблеми в мобилността, които не могат сами да чистят, фурни с гласово управление позволяват на хора с ограничено зрение или моторен контрол да загреят фурната си само с гласа си, а здравни монитори позволяват на пациентите да следят хронични състояния с по-редовни и подробни актуализации за тяхното здраве. Тези устройства стават толкова разпространени, че дори малки деца ги използват като част от ежедневието си, например ученици, които учат виртуално по време на пандемията COVID, настройват таймери на умни домашни устройства, за да следят училищната си работа или аларми, които да им напомнят за предстоящи срещи в клас. + +✅ Какви потребителски IoT устройства имате в дома си или на себе си? + +### Търговски IoT + +Търговски IoT обхваща използването на IoT в работната среда. В офис може да има сензори за заетост и детектори за движение, които управляват осветлението и отоплението, така че да се включват само когато са необходими, намалявайки разходите и въглеродните емисии. Във фабрика IoT устройствата могат да следят за опасности за безопасността, като например работници, които не носят каски, или шум, който е достигнал опасни нива. В търговията IoT устройствата могат да измерват температурата на хладилни помещения, предупреждавайки собственика на магазина, ако хладилник или фризер е извън необходимия температурен диапазон, или могат да следят наличността на рафтовете, за да насочат служителите към попълване на продадени продукти. Транспортната индустрия все повече разчита на IoT за наблюдение на местоположението на превозни средства, проследяване на пробега за таксуване на пътни потребители, следене на часовете на шофьорите и спазването на почивките, или уведомяване на персонала, когато превозно средство се приближава към депо за подготовка за товарене или разтоварване. + +✅ Какви търговски IoT устройства имате във вашето училище или работно място? + +### Индустриален IoT (IIoT) + +Индустриален IoT, или IIoT, е използването на IoT устройства за управление и контрол на машини в голям мащаб. Това обхваща широк спектър от случаи на употреба, от фабрики до дигитално земеделие. + +Фабриките използват IoT устройства по много различни начини. Машините могат да бъдат наблюдавани с множество сензори, които следят неща като температура, вибрации и скорост на въртене. Тези данни могат да бъдат наблюдавани, за да се позволи спиране на машината, ако тя излезе извън определени толеранси - например, ако стане твърде гореща, тя се изключва. Тези данни могат също да бъдат събирани и анализирани с течение на времето за предиктивна поддръжка, при която AI модели анализират данните, водещи до повреда, и използват това, за да предвидят други повреди преди да се случат. + +Дигиталното земеделие е важно, ако планетата трябва да изхрани нарастващото население, особено за 2 милиарда души в 500 милиона домакинства, които се издържат от [прехранващо земеделие](https://wikipedia.org/wiki/Subsistence_agriculture). Дигиталното земеделие може да варира от няколко сензора на стойност няколко долара до огромни търговски инсталации. Фермерът може да започне с наблюдение на температурите и използване на [дни на растеж](https://wikipedia.org/wiki/Growing_degree-day), за да предвиди кога реколтата ще бъде готова за прибиране. Те могат да свържат мониторинг на влажността на почвата с автоматизирани напоителни системи, за да дадат на растенията си толкова вода, колкото е необходима, но не повече, за да гарантират, че реколтата им няма да изсъхне, без да се хаби вода. Фермерите дори стигат по-далеч, използвайки дронове, сателитни данни и AI за наблюдение на растежа на културите, болестите и качеството на почвата върху огромни площи земеделска земя. + +✅ Какви други IoT устройства биха могли да помогнат на фермерите? + +### Инфраструктурен IoT + +Инфраструктурен IoT е наблюдение и управление на местната и глобалната инфраструктура, която хората използват всеки ден. + +[Умни градове](https://wikipedia.org/wiki/Smart_city) са градски райони, които използват IoT устройства за събиране на данни за града и използването им за подобряване на начина, по който градът функционира. Тези градове обикновено се управляват чрез сътрудничество между местни власти, академични среди и местни бизнеси, като се следят и управляват неща като транспорт, паркиране и замърсяване. Например, в Копенхаген, Дания, замърсяването на въздуха е важно за местните жители, затова то се измерва и данните се използват за предоставяне на информация за най-чистите маршрути за колоездене и джогинг. + +[Умни електрически мрежи](https://wikipedia.org/wiki/Smart_grid) позволяват по-добра аналитика на търсенето на електроенергия чрез събиране на данни за потреблението на ниво отделни домове. Тези данни могат да насочват решения на национално ниво, включително къде да се изграждат нови електроцентрали, и на лично ниво, като предоставят на потребителите информация за това колко електроенергия използват, кога я използват и дори предложения за намаляване на разходите, като например зареждане на електрически автомобили през нощта. + +✅ Ако можехте да добавите IoT устройства за измерване на нещо във вашия район, какво би било то? + +## Примери за IoT устройства около вас + +Ще се изненадате колко много IoT устройства имате около себе си. Пиша това от вкъщи и имам следните устройства, свързани с интернет с умни функции като управление чрез приложение, гласово управление или способност за изпращане на данни към телефона ми: + +* Множество умни високоговорители +* Хладилник, съдомиялна, фурна и микровълнова +* Монитор за електричество за соларни панели +* Умни контакти +* Видео звънец и камери за сигурност +* Умен термостат с множество умни сензори за стаи +* Отварачка за гаражна врата +* Домашни развлекателни системи и телевизори с гласово управление +* Осветление +* Тракери за фитнес и здраве + +Всички тези видове устройства имат сензори и/или актуатори и комуникират с интернет. Мога да проверя от телефона си дали гаражната ми врата е отворена и да помоля умния си високоговорител да я затвори. Мога дори да я настроя на таймер, така че ако е все още отворена през нощта, тя да се затвори автоматично. Когато звънецът ми звъни, мога да видя от телефона си кой е там, където и да съм по света, и да говоря с него чрез високоговорител и микрофон, вградени в звънеца. Мога да следя кръвната си захар, сърдечния ритъм и моделите на съня си, търсейки модели в данните, за да подобря здравето си. Мога да управлявам осветлението си чрез облака и да седя на тъмно, когато интернет връзката ми прекъсне. + +--- + +## 🚀 Предизвикателство + +Избройте колкото се може повече IoT устройства, които имате в дома си, училището или работното място - може да са повече, отколкото си мислите! + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/2) + +## Преглед и самостоятелно обучение + +Прочетете за ползите и неуспехите на потребителските IoT проекти. Проверете новинарски сайтове за статии за случаи, когато те са се провалили, като например проблеми с поверителността, хардуерни проблеми или проблеми, причинени от липса на свързаност. + +Някои примери: + +* Разгледайте Twitter акаунта **[Internet of Sh*t](https://twitter.com/internetofshit)** *(предупреждение за нецензурен език)* за добри примери за неуспехи с потребителски IoT. +* [c|net - Моят Apple Watch спаси живота ми: 5 души споделят своите истории](https://www.cnet.com/news/apple-watch-lifesaving-health-features-read-5-peoples-stories/) +* [c|net - Техник на ADT признава вина за шпиониране на клиентски камери години наред](https://www.cnet.com/news/adt-home-security-technician-pleads-guilty-to-spying-on-customer-camera-feeds-for-years/) *(предупреждение за съдържание - неконсенсуално воайорство)* + +## Задание + +[Разследвайте IoT проект](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/1-introduction-to-iot/assignment.md b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/assignment.md new file mode 100644 index 00000000..d5d99b56 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/assignment.md @@ -0,0 +1,27 @@ + +# Разгледайте IoT проект + +## Инструкции + +По света се реализират множество големи и малки IoT проекти, от интелигентни ферми до интелигентни градове, в мониторинг на здравеопазването, транспорта и за използване в обществени пространства. + +Потърсете в интернет подробности за проект, който ви интересува, за предпочитане близо до мястото, където живеете. Обяснете предимствата и недостатъците на проекта, като например каква полза носи, какви проблеми създава и как се взема предвид защитата на личните данни. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Обяснение на предимствата и недостатъците | Даде ясно обяснение на предимствата и недостатъците на проекта | Даде кратко обяснение на предимствата и недостатъците | Не обясни предимствата или недостатъците | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/1-introduction-to-iot/pi.md b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/pi.md new file mode 100644 index 00000000..31d6e311 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/pi.md @@ -0,0 +1,286 @@ + +# Raspberry Pi + +[Raspberry Pi](https://raspberrypi.org) е едноплатков компютър. Можете да добавяте сензори и изпълнителни устройства, използвайки широка гама от устройства и екосистеми. За тези уроци ще използваме хардуерна екосистема, наречена [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html). Ще програмирате вашия Pi и ще имате достъп до сензорите на Grove с помощта на Python. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg) + +## Настройка + +Ако използвате Raspberry Pi като хардуер за IoT, имате два избора - можете да преминете през всички тези уроци и да програмирате директно на Pi, или да се свържете дистанционно към "безглава" версия на Pi и да програмирате от вашия компютър. + +Преди да започнете, трябва също да свържете Grove Base Hat към вашия Pi. + +### Задача - настройка + +Инсталирайте Grove Base Hat на вашия Pi и конфигурирайте устройството. + +1. Свържете Grove Base Hat към вашия Pi. Конекторът на шапката пасва върху всички GPIO пинове на Pi, като се плъзга надолу по пиновете, докато не застане стабилно на основата. Тя покрива Pi. + + ![Поставяне на Grove Hat](../../../../../images/pi-grove-hat-fitting.gif) + +1. Решете как искате да програмирате вашия Pi и преминете към съответния раздел по-долу: + + * [Работа директно на вашия Pi](../../../../../1-getting-started/lessons/1-introduction-to-iot) + * [Дистанционен достъп за програмиране на Pi](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +### Работа директно на вашия Pi + +Ако искате да работите директно на вашия Pi, можете да използвате десктоп версията на Raspberry Pi OS и да инсталирате всички необходими инструменти. + +#### Задача - работа директно на вашия Pi + +Настройте вашия Pi за разработка. + +1. Следвайте инструкциите в [ръководството за настройка на Raspberry Pi](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up), за да настроите вашия Pi, да го свържете към клавиатура/мишка/монитор, да го свържете към вашата WiFi или Ethernet мрежа и да актуализирате софтуера. + +За да програмирате Pi с помощта на сензорите и изпълнителните устройства на Grove, ще трябва да инсталирате редактор, който да ви позволи да пишете код за устройството, както и различни библиотеки и инструменти за взаимодействие с хардуера на Grove. + +1. След като вашият Pi се рестартира, стартирайте Терминала, като кликнете върху иконата **Terminal** в горното меню или изберете *Menu -> Accessories -> Terminal*. + +1. Изпълнете следната команда, за да се уверите, че операционната система и инсталираният софтуер са актуални: + + ```sh + sudo apt update && sudo apt full-upgrade --yes + ``` + +1. Изпълнете следните команди, за да инсталирате всички необходими библиотеки за хардуера на Grove: + + ```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 + ``` + + Това започва с инсталирането на Git, както и Pip за инсталиране на Python пакети. + + Една от мощните функции на Python е възможността за инсталиране на [Pip пакети](https://pypi.org) - това са пакети с код, написан от други хора и публикуван в интернет. Можете да инсталирате Pip пакет на вашия компютър с една команда и след това да използвате този пакет във вашия код. + + Python пакетите на Seeed Grove трябва да бъдат инсталирани от изходния код. Тези команди ще клонират репозитория, съдържащ изходния код за този пакет, и след това ще го инсталират локално. + + > 💁 По подразбиране, когато инсталирате пакет, той е достъпен навсякъде на вашия компютър, което може да доведе до проблеми с версиите на пакетите - например, едно приложение зависи от една версия на пакет, която се чупи, когато инсталирате нова версия за друго приложение. За да избегнете този проблем, можете да използвате [Python виртуална среда](https://docs.python.org/3/library/venv.html), която представлява копие на Python в специална папка, и когато инсталирате Pip пакети, те се инсталират само в тази папка. Вие няма да използвате виртуални среди, когато работите с вашия Pi. Скриптът за инсталиране на Grove инсталира Python пакетите на Grove глобално, така че за да използвате виртуална среда, ще трябва да я настроите и след това ръчно да преинсталирате пакетите на Grove в нея. По-лесно е просто да използвате глобални пакети, особено тъй като много разработчици на Pi ще презапишат чиста SD карта за всеки проект. + + Накрая, това активира интерфейса I2C. + +1. Рестартирайте Pi, като използвате менюто или изпълните следната команда в Терминала: + + ```sh + sudo reboot + ``` + +1. След като Pi се рестартира, стартирайте отново Терминала и изпълнете следната команда, за да инсталирате [Visual Studio Code (VS Code)](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) - това е редакторът, който ще използвате за писане на код за устройството на Python. + + ```sh + sudo apt install code + ``` + + След като това бъде инсталирано, VS Code ще бъде достъпен от горното меню. + + > 💁 Можете да използвате всеки Python IDE или редактор за тези уроци, ако имате предпочитан инструмент, но инструкциите в уроците ще бъдат базирани на използването на VS Code. + +1. Инсталирайте Pylance. Това е разширение за VS Code, което предоставя поддръжка за Python езика. Вижте [документацията за разширението Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) за инструкции относно инсталирането на това разширение във VS Code. + +### Дистанционен достъп за програмиране на Pi + +Вместо да програмирате директно на Pi, той може да работи в "безглава" конфигурация, тоест без да е свързан към клавиатура/мишка/монитор, и да го конфигурирате и програмирате от вашия компютър, използвайки Visual Studio Code. + +#### Настройка на Pi OS + +За дистанционно програмиране, Pi OS трябва да бъде инсталирана на SD карта. + +##### Задача - настройка на Pi OS + +Настройте "безглава" версия на Pi OS. + +1. Изтеглете **Raspberry Pi Imager** от [страницата със софтуер за Raspberry Pi OS](https://www.raspberrypi.org/software/) и го инсталирайте. + +1. Поставете SD карта във вашия компютър, като използвате адаптер, ако е необходимо. + +1. Стартирайте Raspberry Pi Imager. + +1. В Raspberry Pi Imager изберете бутона **CHOOSE OS**, след това изберете *Raspberry Pi OS (Other)*, последвано от *Raspberry Pi OS Lite (32-bit)*. + + ![Raspberry Pi Imager с избран Raspberry Pi OS Lite](../../../../../translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.bg.png) + + > 💁 Raspberry Pi OS Lite е версия на Raspberry Pi OS, която няма десктоп интерфейс или инструменти, базирани на интерфейс. Те не са необходими за "безглава" версия на Pi и правят инсталацията по-малка и времето за стартиране по-бързо. + +1. Изберете бутона **CHOOSE STORAGE**, след това изберете вашата SD карта. + +1. Стартирайте **Advanced Options**, като натиснете `Ctrl+Shift+X`. Тези опции позволяват предварителна конфигурация на Raspberry Pi OS, преди да бъде записана на SD картата. + + 1. Отметнете полето **Enable SSH** и задайте парола за потребителя `pi`. Това е паролата, която ще използвате, за да влезете в Pi по-късно. + + 1. Ако планирате да се свържете към Pi чрез WiFi, отметнете полето **Configure WiFi** и въведете вашия WiFi SSID и парола, както и изберете вашата WiFi държава. Не е необходимо да правите това, ако ще използвате Ethernet кабел. Уверете се, че мрежата, към която се свързвате, е същата, на която е вашият компютър. + + 1. Отметнете полето **Set locale settings** и задайте вашата държава и часови пояс. + + 1. Изберете бутона **SAVE**. + +1. Изберете бутона **WRITE**, за да запишете операционната система на SD картата. Ако използвате macOS, ще бъдете помолени да въведете вашата парола, тъй като инструментът, който записва дискови изображения, изисква привилегирован достъп. + +Операционната система ще бъде записана на SD картата, и след като процесът приключи, картата ще бъде извадена от операционната система, и ще бъдете уведомени. Извадете SD картата от вашия компютър, поставете я в Pi, включете Pi и изчакайте около 2 минути, за да се стартира правилно. + +#### Свързване към Pi + +Следващата стъпка е дистанционен достъп до Pi. Това може да се направи с помощта на `ssh`, който е наличен на macOS, Linux и по-нови версии на Windows. + +##### Задача - свързване към Pi + +Дистанционен достъп до Pi. + +1. Стартирайте Терминал или Command Prompt и въведете следната команда, за да се свържете към Pi: + + ```sh + ssh pi@raspberrypi.local + ``` + + Ако използвате Windows с по-стара версия, която няма инсталиран `ssh`, можете да използвате OpenSSH. Инструкциите за инсталиране можете да намерите в [документацията за инсталиране на OpenSSH](https://docs.microsoft.com//windows-server/administration/openssh/openssh_install_firstuse?WT.mc_id=academic-17441-jabenn). + +1. Това трябва да се свърже към вашия Pi и да поиска паролата. + + Възможността за намиране на компютри в мрежата, използвайки `.local`, е сравнително нова функция за Linux и Windows. Ако използвате Linux или Windows и получите грешки относно невъзможност за намиране на хост името, ще трябва да инсталирате допълнителен софтуер, за да активирате ZeroConf мрежа (също наричана от Apple Bonjour): + + 1. Ако използвате Linux, инсталирайте Avahi, като изпълните следната команда: + + ```sh + sudo apt-get install avahi-daemon + ``` + + 1. Ако използвате Windows, най-лесният начин да активирате ZeroConf е да инсталирате [Bonjour Print Services for Windows](http://support.apple.com/kb/DL999). Можете също така да инсталирате [iTunes for Windows](https://www.apple.com/itunes/download/), за да получите по-нова версия на инструмента (която не е налична самостоятелно). + + > 💁 Ако не можете да се свържете, използвайки `raspberrypi.local`, можете да използвате IP адреса на вашия Pi. Вижте [документацията за IP адрес на Raspberry Pi](https://www.raspberrypi.org/documentation/remote-access/ip-address.md) за инструкции относно различни начини за получаване на IP адреса. + +1. Въведете паролата, която сте задали в Advanced Options на Raspberry Pi Imager. + +#### Конфигуриране на софтуера на Pi + +След като се свържете към Pi, трябва да се уверите, че операционната система е актуална, и да инсталирате различни библиотеки и инструменти за взаимодействие с хардуера на Grove. + +##### Задача - конфигуриране на софтуера на Pi + +Конфигурирайте инсталирания софтуер на Pi и инсталирайте библиотеките на Grove. + +1. От вашата `ssh` сесия изпълнете следната команда, за да актуализирате и след това рестартирате Pi: + + ```sh + sudo apt update && sudo apt full-upgrade --yes && sudo reboot + ``` + + Pi ще бъде актуализиран и рестартиран. `ssh` сесията ще приключи, когато Pi се рестартира, така че изчакайте около 30 секунди и след това се свържете отново. + +1. Отново от свързаната `ssh` сесия изпълнете следните команди, за да инсталирате всички необходими библиотеки за хардуера на Grove: + + ```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 + ``` + + Това започва с инсталирането на Git, както и Pip за инсталиране на Python пакети. + + Една от мощните функции на Python е възможността за инсталиране на [Pip пакети](https://pypi.org) - това са пакети с код, написан от други хора и публикуван в интернет. Можете да инсталирате Pip пакет на вашия компютър с една команда и след това да използвате този пакет във вашия код. + + Python пакетите на Seeed Grove трябва да бъдат инсталирани от изходния код. Тези команди ще клонират репозитория, съдържащ изходния код за този пакет, и след това ще го инсталират локално. + + > 💁 По подразбиране, когато инсталирате пакет, той е достъпен навсякъде на вашия компютър, което може да доведе до проблеми с версиите на пакетите - например, едно приложение зависи от една версия на пакет, която се чупи, когато инсталирате нова версия за друго приложение. За да избегнете този проблем, можете да използвате [Python виртуална среда](https://docs.python.org/3/library/venv.html), която представлява копие на Python в специална папка, и когато инсталирате Pip пакети, те се инсталират само в тази папка. Вие няма да използвате виртуални среди, когато работите с вашия Pi. Скриптът за инсталиране на Grove инсталира Python пакетите на Grove глобално, така че за да използвате виртуална среда, ще трябва да я настроите и след това ръчно да преинсталирате пакетите на Grove в нея. По-лесно е просто да използвате глобални пакети, особено тъй като много разработчици на Pi ще презапишат чиста SD карта за всеки проект. + + Накрая, това активира интерфейса I2C. + +1. Рестартирайте Pi, като изпълните следната команда: + + ```sh + sudo reboot + ``` + + `ssh` сесията ще приключи, когато Pi се рестартира. Няма нужда да се свързвате отново. + +#### Конфигуриране на VS Code за дистанционен достъп + +След като Pi е конфигуриран, можете да се свържете към него, използвайки Visual Studio Code (VS Code) от вашия компютър - това е безплатен текстов редактор за разработчици, който ще използвате за писане на код за устройството на Python. + +##### Задача - конфигуриране на VS Code за дистанционен достъп + +Инсталирайте необходимия софтуер и се свържете дистанционно към вашия Pi. + +1. Инсталирайте VS Code на вашия компютър, като следвате [документацията за VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn). + +1. Следвайте инструкциите в [документацията за дистанционно разработване с VS Code чрез SSH](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn), за да инсталирате необходимите компоненти. + +1. Следвайки същите инструкции, свържете VS Code към Pi. + +1. След като се свържете, следвайте инструкциите за [управление на разширения](https://code.visualstudio.com/docs/remote/ssh#_managing-extensions?WT.mc_id=academic-17441-jabenn), за да инсталирате разширението [Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) дистанционно на Pi. + +## Hello world +Традиционно, когато започвате с нов програмен език или технология, се създава приложение 'Hello World' - малко приложение, което извежда текст като `"Hello World"`, за да покаже, че всички инструменти са правилно конфигурирани. + +Приложението Hello World за Pi ще гарантира, че имате правилно инсталирани Python и Visual Studio Code. + +Това приложение ще бъде в папка, наречена `nightlight`, и ще бъде използвано повторно с различен код в по-късните части на това задание за изграждане на приложението nightlight. + +### Задача - hello world + +Създайте приложението Hello World. + +1. Стартирайте VS Code, директно на Pi или на вашия компютър, свързан към Pi чрез Remote SSH разширението. + +1. Стартирайте терминала на VS Code, като изберете *Terminal -> New Terminal* или натиснете `` CTRL+` ``. Терминалът ще се отвори в домашната директория на потребителя `pi`. + +1. Изпълнете следните команди, за да създадете директория за вашия код и да създадете Python файл, наречен `app.py`, вътре в тази директория: + + ```sh + mkdir nightlight + cd nightlight + touch app.py + ``` + +1. Отворете тази папка в VS Code, като изберете *File -> Open...* и изберете папката *nightlight*, след това натиснете **OK**. + + ![Диалоговият прозорец за отваряне на VS Code, показващ папката nightlight](../../../../../translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.bg.png) + +1. Отворете файла `app.py` от VS Code explorer и добавете следния код: + + ```python + print('Hello World!') + ``` + + Функцията `print` извежда в конзолата всичко, което ѝ бъде подадено. + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python app.py + ``` + + > 💁 Може да се наложи изрично да извикате `python3`, за да стартирате този код, ако имате инсталиран Python 2 в допълнение към Python 3 (най-новата версия). Ако имате инсталиран Python 2, извикването на `python` ще използва Python 2 вместо Python 3. По подразбиране, най-новите версии на Raspberry Pi OS имат само Python 3 инсталиран. + + Следният изход ще се появи в терминала: + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Hello World! + ``` + +> 💁 Можете да намерите този код в папката [code/pi](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/pi). + +😀 Вашата програма 'Hello World' беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md new file mode 100644 index 00000000..6c5f9a2a --- /dev/null +++ b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md @@ -0,0 +1,245 @@ + +# Виртуален едноплатков компютър + +Вместо да закупувате IoT устройство заедно със сензори и изпълнителни механизми, можете да използвате вашия компютър, за да симулирате IoT хардуер. Проектът [CounterFit](https://github.com/CounterFit-IoT/CounterFit) ви позволява да стартирате локално приложение, което симулира IoT хардуер като сензори и изпълнителни механизми, и да имате достъп до тях чрез локален Python код, написан по същия начин, както бихте го направили на Raspberry Pi с физически хардуер. + +## Настройка + +За да използвате CounterFit, ще трябва да инсталирате няколко безплатни софтуера на вашия компютър. + +### Задача + +Инсталирайте необходимия софтуер. + +1. Инсталирайте Python. Вижте [страницата за изтегляне на Python](https://www.python.org/downloads/) за инструкции как да инсталирате последната версия на Python. + +1. Инсталирайте Visual Studio Code (VS Code). Това е редакторът, който ще използвате, за да пишете кода за вашето виртуално устройство на Python. Вижте [документацията за VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) за инструкции как да инсталирате VS Code. + + > 💁 Можете да използвате всяка Python IDE или редактор за тези уроци, ако предпочитате друг инструмент, но инструкциите в уроците ще бъдат базирани на използването на VS Code. + +1. Инсталирайте разширението Pylance за VS Code. Това е разширение за VS Code, което предоставя поддръжка за Python. Вижте [документацията за разширението Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) за инструкции как да го инсталирате във VS Code. + +Инструкциите за инсталиране и конфигуриране на приложението CounterFit ще бъдат предоставени в съответния момент в указанията за задачата, тъй като то се инсталира на база проект. + +## Hello World + +Традиционно, когато започвате с нов програмен език или технология, се създава приложение "Hello World" – малко приложение, което извежда текст като `"Hello World"`, за да покаже, че всички инструменти са правилно конфигурирани. + +Приложението Hello World за виртуалния IoT хардуер ще гарантира, че Python и Visual Studio Code са правилно инсталирани. То също така ще се свърже с CounterFit за виртуалните IoT сензори и изпълнителни механизми. Няма да използва хардуер, а само ще се свърже, за да докаже, че всичко работи. + +Това приложение ще бъде в папка, наречена `nightlight`, и ще бъде използвано повторно с различен код в следващите части на задачата за създаване на приложението за нощна лампа. + +### Конфигуриране на виртуална среда за Python + +Една от мощните функции на Python е възможността за инсталиране на [Pip пакети](https://pypi.org) – това са пакети с код, написан от други хора и публикуван в интернет. Можете да инсталирате Pip пакет на вашия компютър с една команда и след това да го използвате в кода си. Ще използвате Pip, за да инсталирате пакет за работа с CounterFit. + +По подразбиране, когато инсталирате пакет, той е достъпен навсякъде на вашия компютър, което може да доведе до проблеми с версиите на пакетите – например, едно приложение зависи от една версия на пакет, която спира да работи, когато инсталирате нова версия за друго приложение. За да избегнете този проблем, можете да използвате [виртуална среда за Python](https://docs.python.org/3/library/venv.html), която представлява копие на Python в специална папка, и когато инсталирате Pip пакети, те се инсталират само в тази папка. + +> 💁 Ако използвате Raspberry Pi, тогава не сте конфигурирали виртуална среда на това устройство за управление на Pip пакети, а използвате глобални пакети, тъй като пакетите Grove са инсталирани глобално чрез инсталационния скрипт. + +#### Задача – конфигуриране на виртуална среда за Python + +Конфигурирайте виртуална среда за Python и инсталирайте Pip пакетите за CounterFit. + +1. От вашия терминал или команден ред, изпълнете следното на избрано от вас място, за да създадете и навигирате до нова директория: + + ```sh + mkdir nightlight + cd nightlight + ``` + +1. Сега изпълнете следното, за да създадете виртуална среда в папката `.venv`: + + ```sh + python3 -m venv .venv + ``` + + > 💁 Трябва изрично да извикате `python3`, за да създадете виртуалната среда, в случай че имате инсталиран Python 2 в допълнение към Python 3 (последната версия). Ако имате инсталиран Python 2, извикването на `python` ще използва Python 2 вместо Python 3. + +1. Активирайте виртуалната среда: + + * В Windows: + * Ако използвате Command Prompt или Command Prompt през Windows Terminal, изпълнете: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * Ако използвате PowerShell, изпълнете: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + > Ако получите грешка за забранено изпълнение на скриптове на тази система, ще трябва да разрешите изпълнението на скриптове, като зададете подходяща политика за изпълнение. Можете да направите това, като стартирате PowerShell като администратор и изпълните следната команда: + + ```powershell + Set-ExecutionPolicy -ExecutionPolicy Unrestricted + ``` + + Въведете `Y`, когато бъдете попитани за потвърждение. След това рестартирайте PowerShell и опитайте отново. + + Можете да нулирате тази политика за изпълнение на по-късен етап, ако е необходимо. Можете да прочетете повече за това на [страницата за политики за изпълнение в Microsoft Docs](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?WT.mc_id=academic-17441-jabenn). + + * В macOS или Linux, изпълнете: + + ```cmd + source ./.venv/bin/activate + ``` + + > 💁 Тези команди трябва да се изпълняват от същото място, където сте изпълнили командата за създаване на виртуалната среда. Никога няма да се налага да навигирате в папката `.venv`, винаги трябва да изпълнявате командата за активиране и всякакви команди за инсталиране на пакети или изпълнение на код от папката, в която сте били, когато сте създали виртуалната среда. + +1. След като виртуалната среда е активирана, командата `python` по подразбиране ще изпълнява версията на Python, която е използвана за създаване на виртуалната среда. Изпълнете следното, за да получите версията: + + ```sh + python --version + ``` + + Изходът трябва да съдържа следното: + + ```output + (.venv) ➜ nightlight python --version + Python 3.9.1 + ``` + + > 💁 Вашата версия на Python може да е различна – стига да е версия 3.6 или по-нова, всичко е наред. Ако не е, изтрийте тази папка, инсталирайте по-нова версия на Python и опитайте отново. + +1. Изпълнете следните команди, за да инсталирате Pip пакетите за CounterFit. Тези пакети включват основното приложение CounterFit, както и шими за хардуера Grove. Тези шими ви позволяват да пишете код, сякаш програмирате с физически сензори и изпълнителни механизми от екосистемата Grove, но свързани с виртуални IoT устройства. + + ```sh + pip install CounterFit + pip install counterfit-connection + pip install counterfit-shims-grove + ``` + + Тези Pip пакети ще бъдат инсталирани само във виртуалната среда и няма да бъдат достъпни извън нея. + +### Напишете кода + +След като виртуалната среда за Python е готова, можете да напишете кода за приложението "Hello World". + +#### Задача – напишете кода + +Създайте Python приложение, което отпечатва `"Hello World"` в конзолата. + +1. От вашия терминал или команден ред, изпълнете следното вътре във виртуалната среда, за да създадете Python файл, наречен `app.py`: + + * В Windows изпълнете: + + ```cmd + type nul > app.py + ``` + + * В macOS или Linux изпълнете: + + ```cmd + touch app.py + ``` + +1. Отворете текущата папка във VS Code: + + ```sh + code . + ``` + + > 💁 Ако вашият терминал върне `command not found` в macOS, това означава, че VS Code не е добавен към вашия PATH. Можете да добавите VS Code към вашия PATH, като следвате инструкциите в [секцията за стартиране от командния ред в документацията за VS Code](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) и след това изпълните командата. VS Code се добавя към вашия PATH по подразбиране в Windows и Linux. + +1. Когато VS Code се стартира, той ще активира виртуалната среда за Python. Избраната виртуална среда ще се появи в долната статусна лента: + + ![VS Code показва избраната виртуална среда](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.bg.png) + +1. Ако терминалът на VS Code вече работи, когато VS Code се стартира, той няма да има активирана виртуална среда в него. Най-лесното решение е да затворите терминала, като използвате бутона **Kill the active terminal instance**: + + ![VS Code бутон за затваряне на активния терминал](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.bg.png) + + Можете да разберете дали терминалът има активирана виртуална среда, като проверите дали името на виртуалната среда е префикс на подканата на терминала. Например, това може да бъде: + + ```sh + (.venv) ➜ nightlight + ``` + + Ако нямате `.venv` като префикс на подканата, виртуалната среда не е активна в терминала. + +1. Стартирайте нов терминал във VS Code, като изберете *Terminal -> New Terminal* или натиснете `` CTRL+` ``. Новият терминал ще зареди виртуалната среда, и извикването за активиране ще се появи в терминала. Подканата също ще има името на виртуалната среда (`.venv`): + + ```output + ➜ nightlight source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. Отворете файла `app.py` от VS Code explorer и добавете следния код: + + ```python + print('Hello World!') + ``` + + Функцията `print` отпечатва всичко, което ѝ се подаде, в конзолата. + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python app.py + ``` + + В изхода ще се появи следното: + + ```output + (.venv) ➜ nightlight python app.py + Hello World! + ``` + +😀 Вашата програма "Hello World" беше успешна! + +### Свържете "хардуера" + +Като втора стъпка "Hello World", ще стартирате приложението CounterFit и ще свържете кода си към него. Това е виртуалният еквивалент на свързване на IoT хардуер към развойна платка. + +#### Задача – свържете "хардуера" + +1. От терминала на VS Code стартирайте приложението CounterFit със следната команда: + + ```sh + counterfit + ``` + + Приложението ще започне да работи и ще се отвори във вашия уеб браузър: + + ![Приложението CounterFit работи в браузър](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.bg.png) + + То ще бъде отбелязано като *Disconnected*, със светодиод в горния десен ъгъл, който е изключен. + +1. Добавете следния код в началото на `app.py`: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + + Този код импортира класа `CounterFitConnection` от модула `counterfit_connection`, който идва от Pip пакета `counterfit-connection`, който инсталирахте по-рано. След това инициализира връзка към приложението CounterFit, работещо на `127.0.0.1`, което е IP адрес, който винаги можете да използвате, за да получите достъп до вашия локален компютър (често наричан *localhost*), на порт 5000. + + > 💁 Ако имате други приложения, работещи на порт 5000, можете да промените това, като актуализирате порта в кода и стартирате CounterFit, използвайки `CounterFit --port `, като замените `` с порта, който искате да използвате. + +1. Ще трябва да стартирате нов терминал във VS Code, като изберете бутона **Create a new integrated terminal**. Това е, защото приложението CounterFit работи в текущия терминал. + + ![VS Code бутон за създаване на нов интегриран терминал](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.bg.png) + +1. В този нов терминал стартирайте файла `app.py`, както преди. Статусът на CounterFit ще се промени на **Connected**, и светодиодът ще светне. + + ![CounterFit показва статус Connected](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.bg.png) + +> 💁 Можете да намерите този код в папката [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device). + +😀 Вашата връзка с хардуера беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md new file mode 100644 index 00000000..f75e7847 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md @@ -0,0 +1,222 @@ + +# Wio Terminal + +[Wio Terminal от Seeed Studios](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) е микроконтролер, съвместим с Arduino, с вградени WiFi, някои сензори и изпълнителни механизми, както и портове за добавяне на допълнителни сензори и изпълнителни механизми, използвайки хардуерна екосистема, наречена [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html). + +![Wio Terminal от Seeed Studios](../../../../../translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.bg.png) + +## Настройка + +За да използвате Wio Terminal, трябва да инсталирате безплатен софтуер на вашия компютър. Също така ще трябва да актуализирате фърмуера на Wio Terminal, преди да го свържете към WiFi. + +### Задача - настройка + +Инсталирайте необходимия софтуер и актуализирайте фърмуера. + +1. Инсталирайте Visual Studio Code (VS Code). Това е редакторът, който ще използвате за писане на код за устройството си на C/C++. Вижте [документацията за VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) за инструкции относно инсталирането на VS Code. + + > 💁 Друг популярен IDE за разработка с Arduino е [Arduino IDE](https://www.arduino.cc/en/software). Ако вече сте запознати с този инструмент, можете да го използвате вместо VS Code и PlatformIO, но уроците ще дават инструкции, базирани на използването на VS Code. + +1. Инсталирайте разширението PlatformIO за VS Code. Това е разширение за VS Code, което поддържа програмиране на микроконтролери на C/C++. Вижте [документацията за разширението PlatformIO](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=platformio.platformio-ide) за инструкции относно инсталирането на това разширение в VS Code. Това разширение зависи от разширението Microsoft C/C++, което се инсталира автоматично при инсталиране на PlatformIO. + +1. Свържете Wio Terminal към вашия компютър. Wio Terminal има USB-C порт в долната част, който трябва да бъде свързан към USB порт на вашия компютър. Wio Terminal идва с USB-C към USB-A кабел, но ако вашият компютър има само USB-C портове, ще ви трябва USB-C кабел или адаптер USB-A към USB-C. + +1. Следвайте инструкциите в [документацията за WiFi на Wio Terminal Wiki](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/), за да настроите вашия Wio Terminal и да актуализирате фърмуера. + +## Здравей свят + +Традиционно, когато започвате с нов език за програмиране или технология, създавате приложение "Здравей свят" - малко приложение, което извежда текст като `"Hello World"`, за да покаже, че всички инструменти са правилно конфигурирани. + +Приложението "Здравей свят" за Wio Terminal ще гарантира, че сте инсталирали Visual Studio Code правилно с PlatformIO и сте го настроили за разработка на микроконтролери. + +### Създаване на проект в PlatformIO + +Първата стъпка е да създадете нов проект в PlatformIO, конфигуриран за Wio Terminal. + +#### Задача - създаване на проект в PlatformIO + +Създайте проект в PlatformIO. + +1. Свържете Wio Terminal към вашия компютър. + +1. Стартирайте VS Code. + +1. Иконата на PlatformIO ще бъде в страничното меню: + + ![Опцията за меню PlatformIO](../../../../../translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.bg.png) + + Изберете този елемент от менюто, след това изберете *PIO Home -> Open*. + + ![Опцията за отваряне на PlatformIO](../../../../../translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.bg.png) + +1. От началния екран изберете бутона **+ New Project**. + + ![Бутонът за нов проект](../../../../../translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.bg.png) + +1. Конфигурирайте проекта в *Project Wizard*: + + 1. Назовете проекта си `nightlight`. + + 1. От падащото меню *Board* въведете `WIO`, за да филтрирате платките, и изберете *Seeeduino Wio Terminal*. + + 1. Оставете *Framework* като *Arduino*. + + 1. Или оставете отметката *Use default location* включена, или я махнете и изберете местоположение за вашия проект. + + 1. Изберете бутона **Finish**. + + ![Завършен Project Wizard](../../../../../translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.bg.png) + + PlatformIO ще изтегли компонентите, необходими за компилиране на код за Wio Terminal, и ще създаде вашия проект. Това може да отнеме няколко минути. + +### Разглеждане на проекта в PlatformIO + +Explorer в VS Code ще покаже редица файлове и папки, създадени от wizard-а на PlatformIO. + +#### Папки + +* `.pio` - тази папка съдържа временни данни, необходими на PlatformIO, като библиотеки или компилиран код. Тя се създава автоматично, ако бъде изтрита, и не е необходимо да я добавяте към контрол на изходния код, ако споделяте проекта си на сайтове като GitHub. +* `.vscode` - тази папка съдържа конфигурацията, използвана от PlatformIO и VS Code. Тя се създава автоматично, ако бъде изтрита, и не е необходимо да я добавяте към контрол на изходния код, ако споделяте проекта си на сайтове като GitHub. +* `include` - тази папка е за външни header файлове, необходими при добавяне на допълнителни библиотеки към вашия код. Няма да използвате тази папка в тези уроци. +* `lib` - тази папка е за външни библиотеки, които искате да извикате от вашия код. Няма да използвате тази папка в тези уроци. +* `src` - тази папка съдържа основния изходен код за вашето приложение. Първоначално ще съдържа един файл - `main.cpp`. +* `test` - тази папка е мястото, където бихте поставили всички unit тестове за вашия код. + +#### Файлове + +* `main.cpp` - този файл в папката `src` съдържа началната точка за вашето приложение. Отворете този файл, и той ще съдържа следния код: + + ```cpp + #include + + void setup() { + // put your setup code here, to run once: + } + + void loop() { + // put your main code here, to run repeatedly: + } + ``` + + Когато устройството се стартира, framework-ът на Arduino ще изпълни функцията `setup` веднъж, след което ще изпълнява функцията `loop` многократно, докато устройството бъде изключено. + +* `.gitignore` - този файл изброява файловете и директориите, които трябва да бъдат игнорирани при добавяне на вашия код към контрол на изходния код, като качване в хранилище на GitHub. + +* `platformio.ini` - този файл съдържа конфигурация за вашето устройство и приложение. Отворете този файл, и той ще съдържа следния код: + + ```ini + [env:seeed_wio_terminal] + platform = atmelsam + board = seeed_wio_terminal + framework = arduino + ``` + + Секцията `[env:seeed_wio_terminal]` съдържа конфигурация за Wio Terminal. Можете да имате множество секции `env`, така че вашият код да може да бъде компилиран за множество платки. + + Другите стойности съответстват на конфигурацията от wizard-а на проекта: + + * `platform = atmelsam` определя хардуера, който използва Wio Terminal (микроконтролер, базиран на ATSAMD51). + * `board = seeed_wio_terminal` определя типа на микроконтролерната платка (Wio Terminal). + * `framework = arduino` определя, че този проект използва framework-а на Arduino. + +### Напишете приложението "Здравей свят" + +Сега сте готови да напишете приложението "Здравей свят". + +#### Задача - напишете приложението "Здравей свят" + +Напишете приложението "Здравей свят". + +1. Отворете файла `main.cpp` във VS Code. + +1. Променете кода, за да съответства на следното: + + ```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); + } + ``` + + Функцията `setup` инициализира връзка със серийния порт - в този случай USB порта, който се използва за свързване на Wio Terminal към вашия компютър. Параметърът `9600` е [baud rate](https://wikipedia.org/wiki/Symbol_rate) (известен също като символна скорост), или скоростта, с която данните ще бъдат изпращани през серийния порт в битове в секунда. Тази настройка означава 9,600 бита (0 и 1) данни се изпращат всяка секунда. След това изчаква серийният порт да бъде готов. + + Функцията `loop` изпраща реда `Hello World!` към серийния порт, така че символите на `Hello World!` заедно с нов ред. След това спи за 5,000 милисекунди или 5 секунди. След като `loop` приключи, тя се изпълнява отново, и отново, и така нататък, докато микроконтролерът е включен. + +1. Поставете вашия Wio Terminal в режим на качване. Ще трябва да правите това всеки път, когато качвате нов код на устройството: + + 1. Дръпнете два пъти бързо превключвателя за захранване - той ще се върне в позиция "включено" всеки път. + + 1. Проверете синята LED светлина вдясно от USB порта. Тя трябва да пулсира. + + [![Видео, показващо как да поставите Wio Terminal в режим на качване](https://img.youtube.com/vi/LeKU_7zLRrQ/0.jpg)](https://youtu.be/LeKU_7zLRrQ) + + Кликнете върху изображението по-горе за видео, показващо как да направите това. + +1. Компилирайте и качете кода на Wio Terminal. + + 1. Отворете командния палет на VS Code. + + 1. Въведете `PlatformIO Upload`, за да потърсите опцията за качване, и изберете *PlatformIO: Upload*. + + ![Опцията за качване в PlatformIO в командния палет](../../../../../translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.bg.png) + + PlatformIO автоматично ще компилира кода, ако е необходимо, преди да го качи. + + 1. Кодът ще бъде компилиран и качен на Wio Terminal. + + > 💁 Ако използвате macOS, ще се появи известие за *DISK NOT EJECTED PROPERLY*. Това е защото Wio Terminal се монтира като устройство като част от процеса на качване, и се изключва, когато компилираният код се записва на устройството. Можете да игнорирате това известие. + + ⚠️ Ако получите грешки за недостъпен порт за качване, първо се уверете, че сте свързали Wio Terminal към вашия компютър и сте го включили с превключвателя от лявата страна на екрана, и сте го поставили в режим на качване. Зелената светлина в долната част трябва да е включена, а синята светлина трябва да пулсира. Ако все още получавате грешката, дръпнете превключвателя за включване/изключване два пъти бързо отново, за да принудите Wio Terminal в режим на качване и опитайте качването отново. + +PlatformIO има Serial Monitor, който може да наблюдава данни, изпратени през USB кабела от Wio Terminal. Това ви позволява да наблюдавате данните, изпратени от командата `Serial.println("Hello World");`. + +1. Отворете командния палет на VS Code. + +1. Въведете `PlatformIO Serial`, за да потърсите опцията за Serial Monitor, и изберете *PlatformIO: Serial Monitor*. + + ![Опцията за Serial Monitor в PlatformIO в командния палет](../../../../../translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.bg.png) + + Ще се отвори нов терминал, и данните, изпратени през серийния порт, ще бъдат стриймвани в този терминал: + + ```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` ще се отпечатва в серийния монитор на всеки 5 секунди. + +> 💁 Можете да намерите този код в папката [code/wio-terminal](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/wio-terminal). + +😀 Вашата програма "Здравей свят" беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/2-deeper-dive/README.md b/translations/bg/1-getting-started/lessons/2-deeper-dive/README.md new file mode 100644 index 00000000..ac1011fa --- /dev/null +++ b/translations/bg/1-getting-started/lessons/2-deeper-dive/README.md @@ -0,0 +1,273 @@ + +# По-задълбочен поглед върху IoT + +![Скица, обобщаваща този урок](../../../../../translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок е част от [Hello IoT серията](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) на [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Урокът е представен в два видеоклипа - един час урок и един час офис часове, където се разглеждат по-задълбочено части от урока и се отговаря на въпроси. + +[![Урок 2: По-задълбочен поглед върху IoT](https://img.youtube.com/vi/t0SySWw3z9M/0.jpg)](https://youtu.be/t0SySWw3z9M) + +[![Урок 2: По-задълбочен поглед върху IoT - Офис часове](https://img.youtube.com/vi/tTZYf9EST1E/0.jpg)](https://youtu.be/tTZYf9EST1E) + +> 🎥 Кликнете върху изображенията по-горе, за да гледате видеоклиповете + +## Предварителен тест + +[Предварителен тест](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3) + +## Въведение + +Този урок разглежда по-задълбочено някои от концепциите, обсъдени в предишния урок. + +В този урок ще разгледаме: + +* [Компоненти на IoT приложение](../../../../../1-getting-started/lessons/2-deeper-dive) +* [По-задълбочен поглед върху микроконтролерите](../../../../../1-getting-started/lessons/2-deeper-dive) +* [По-задълбочен поглед върху едноплатковите компютри](../../../../../1-getting-started/lessons/2-deeper-dive) + +## Компоненти на IoT приложение + +Двата основни компонента на IoT приложението са *Интернетът* и *устройството*. Нека разгледаме тези два компонента по-подробно. + +### Устройството + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg) + +**Устройството** в IoT се отнася до устройство, което може да взаимодейства с физическия свят. Тези устройства обикновено са малки, нискобюджетни компютри, работещи с ниска скорост и използващи малко енергия - например, прости микроконтролери с килобайти RAM (за разлика от гигабайти в PC), работещи само на няколко стотици мегахерца (за разлика от гигахерци в PC), но понякога консумиращи толкова малко енергия, че могат да работят седмици, месеци или дори години на батерии. + +Тези устройства взаимодействат с физическия свят, като използват сензори за събиране на данни от околната среда или чрез контролиране на изходи или задвижващи механизми за извършване на физически промени. Типичен пример за това е интелигентен термостат - устройство, което има температурен сензор, средство за задаване на желаната температура, като например циферблат или сензорен екран, и връзка с отоплителна или охлаждаща система, която може да се включи, когато откритата температура е извън желаните граници. Температурният сензор открива, че стаята е твърде студена, и задвижващ механизъм включва отоплението. + +![Диаграма, показваща температура и циферблат като входове към IoT устройство, и контрол на отоплителна система като изход](../../../../../translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.bg.png) + +Съществува огромен набор от различни устройства, които могат да действат като IoT устройства - от специализирани хардуери, които засичат едно нещо, до универсални устройства, дори вашия смартфон! Смартфонът може да използва сензори за откриване на света около него и задвижващи механизми за взаимодействие със света - например, използвайки GPS сензор за откриване на вашето местоположение и високоговорител за предоставяне на навигационни инструкции до дестинация. + +✅ Помислете за други системи около вас, които четат данни от сензор и използват тези данни за вземане на решения. Един пример би бил термостатът на фурна. Можете ли да намерите още? + +### Интернетът + +**Интернетът** в IoT приложението включва приложения, към които IoT устройството може да се свърже, за да изпраща и получава данни, както и други приложения, които могат да обработват данните от IoT устройството и да помагат при вземането на решения за това какви заявки да се изпращат към задвижващите механизми на IoT устройството. + +Един типичен сценарий би бил наличието на някакъв вид облачна услуга, към която IoT устройството се свързва, и тази облачна услуга обработва неща като сигурност, както и получаване на съобщения от IoT устройството и изпращане на съобщения обратно към устройството. Тази облачна услуга след това се свързва с други приложения, които могат да обработват или съхраняват данни от сензори, или да използват данните от сензорите заедно с данни от други системи за вземане на решения. + +Устройствата не винаги се свързват директно с Интернет чрез WiFi или кабелни връзки. Някои устройства използват мрежова комуникация, за да говорят помежду си чрез технологии като Bluetooth, свързвайки се чрез хъб устройство, което има Интернет връзка. + +В примера с интелигентния термостат, термостатът би се свързал чрез домашен WiFi към облачна услуга, работеща в облака. Той би изпратил данните за температурата към тази облачна услуга, откъдето те ще бъдат записани в база данни, позволявайки на собственика на дома да провери текущите и минали температури чрез приложение на телефона. Друга услуга в облака би знаела каква температура иска собственикът на дома и би изпратила съобщения обратно към IoT устройството чрез облачната услуга, за да каже на отоплителната система да се включи или изключи. + +![Диаграма, показваща температура и циферблат като входове към IoT устройство, IoT устройството с двупосочна комуникация с облака, който от своя страна има двупосочна комуникация с телефон, и контрол на отоплителна система като изход от IoT устройството](../../../../../translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.bg.png) + +Още по-интелигентна версия би могла да използва AI в облака с данни от други сензори, свързани към други IoT устройства, като сензори за заетост, които откриват кои стаи се използват, както и данни като времето и дори вашия календар, за да взема решения как да настрои температурата по интелигентен начин. Например, тя би могла да изключи отоплението, ако прочете от вашия календар, че сте на почивка, или да изключи отоплението на стая по стая, в зависимост от това кои стаи използвате, като се учи от данните, за да става все по-точна с времето. + +![Диаграма, показваща множество температурни сензори и циферблат като входове към IoT устройство, IoT устройството с двупосочна комуникация с облака, който от своя страна има двупосочна комуникация с телефон, календар и услуга за времето, и контрол на отоплителна система като изход от IoT устройството](../../../../../translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.bg.png) + +✅ Какви други данни биха могли да помогнат за създаването на по-интелигентен термостат, свързан с Интернет? + +### IoT на ръба + +Въпреки че "I" в IoT означава Интернет, тези устройства не е задължително да се свързват с Интернет. В някои случаи устройствата могат да се свързват с "edge" устройства - шлюзови устройства, които работят във вашата локална мрежа, което означава, че можете да обработвате данни, без да правите заявка през Интернет. Това може да бъде по-бързо, когато имате много данни или бавна Интернет връзка, позволява ви да работите офлайн, когато Интернет връзката не е възможна, като например на кораб или в зона на бедствие при хуманитарна криза, и ви позволява да запазите данните си частни. Някои устройства ще съдържат код за обработка, създаден с облачни инструменти, и ще го изпълняват локално, за да събират и реагират на данни, без да използват Интернет връзка за вземане на решение. + +Един пример за това е интелигентно домашно устройство като Apple HomePod, Amazon Alexa или Google Home, което ще слуша вашия глас, използвайки AI модели, обучени в облака, но изпълнявани локално на устройството. Тези устройства ще "се събудят", когато бъде изговорена определена дума или фраза, и едва тогава ще изпратят вашата реч през Интернет за обработка. Устройството ще спре да изпраща реч в подходящ момент, като например когато открие пауза във вашата реч. Всичко, което казвате преди събуждането на устройството с ключовата дума, и всичко, което казвате след като устройството е спряло да слуша, няма да бъде изпратено през Интернет към доставчика на устройството и следователно ще остане частно. + +✅ Помислете за други сценарии, в които поверителността е важна, така че обработката на данни би била по-добре извършена на ръба, отколкото в облака. Подсказка - помислете за IoT устройства с камери или други устройства за изображения. + +### IoT сигурност + +С всяка Интернет връзка сигурността е важен аспект. Съществува стар виц, че "S в IoT означава сигурност" - няма "S" в IoT, което предполага, че не е сигурно. + +IoT устройствата се свързват с облачна услуга и следователно са толкова сигурни, колкото е сигурна тази облачна услуга - ако вашата облачна услуга позволява на всяко устройство да се свърже, тогава могат да бъдат изпратени злонамерени данни или да се извършат вирусни атаки. Това може да има много реални последици, тъй като IoT устройствата взаимодействат и контролират други устройства. Например, [Stuxnet червеят](https://wikipedia.org/wiki/Stuxnet) манипулира клапани в центрофуги, за да ги повреди. Хакери също са се възползвали от [лоша сигурност, за да получат достъп до бебешки монитори](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) и други домашни устройства за наблюдение. + +> 💁 Понякога IoT устройства и edge устройства работят в мрежа, напълно изолирана от Интернет, за да запазят данните частни и сигурни. Това е известно като [air-gapping](https://wikipedia.org/wiki/Air_gap_(networking)). + +## По-задълбочен поглед върху микроконтролерите + +В предишния урок въведохме микроконтролерите. Нека сега ги разгледаме по-задълбочено. + +### CPU + +CPU е "мозъкът" на микроконтролера. Това е процесорът, който изпълнява вашия код и може да изпраща данни към и да получава данни от свързани устройства. CPU може да съдържа едно или повече ядра - по същество едно или повече CPU, които могат да работят заедно, за да изпълняват вашия код. + +CPU разчита на часовник, който тиктака милиони или милиарди пъти в секунда. Всеки тик или цикъл синхронизира действията, които CPU може да предприеме. С всеки тик CPU може да изпълни инструкция от програма, като например да извлече данни от външно устройство или да извърши математическо изчисление. Този редовен цикъл позволява всички действия да бъдат завършени преди следващата инструкция да бъде обработена. + +Колкото по-бърз е цикълът на часовника, толкова повече инструкции могат да бъдат обработени всяка секунда и следователно толкова по-бърз е CPU. Скоростите на CPU се измерват в [Hertz (Hz)](https://wikipedia.org/wiki/Hertz), стандартна единица, където 1 Hz означава един цикъл или тик на часовника в секунда. + +> 🎓 Скоростите на CPU често се дават в MHz или GHz. 1MHz е 1 милион Hz, 1GHz е 1 милиард Hz. + +> 💁 CPU изпълнява програми, използвайки [fetch-decode-execute цикъл](https://wikipedia.org/wiki/Instruction_cycle). За всеки тик на часовника CPU ще извлече следващата инструкция от паметта, ще я декодира и след това ще я изпълни, като например използва аритметично-логическо устройство (ALU), за да събере 2 числа. Някои изпълнения ще отнемат няколко тика, така че следващият цикъл ще се изпълни при следващия тик след завършването на инструкцията. + +![Fetch-decode-execute цикъл, показващ извличането на инструкция от програмата, съхранена в RAM, след това декодирането и изпълнението ѝ на CPU](../../../../../translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.bg.png) + +Микроконтролерите имат много по-ниски скорости на часовника от настолните или лаптоп компютри, или дори от повечето смартфони. Например, Wio Terminal има CPU, който работи на 120MHz или 120,000,000 цикъла в секунда. + +✅ Средният PC или Mac има CPU с множество ядра, работещи на множество гигахерци, което означава, че часовникът тиктака милиарди пъти в секунда. Проучете скоростта на часовника на вашия компютър и сравнете колко пъти е по-бърз от Wio Terminal. + +Всеки цикъл на часовника консумира енергия и генерира топлина. Колкото по-бързи са тиктаканията, толкова повече енергия се консумира и повече топлина се генерира. PC-тата имат радиатори и вентилатори за премахване на топлината, без които те биха прегрели и изключили в рамките на секунди. Микроконтролерите често нямат нито едно от тези, тъй като работят много по-хладно и следователно много по-бавно. PC-тата работят на мрежово захранване или големи батерии за няколко часа, микроконтролерите могат да работят дни, месеци или дори години на малки батерии. Микроконтролерите могат също да имат ядра, които работят на различни скорости, превключвайки към по-бавни ядра с ниска мощност, когато натоварването на CPU е ниско, за да намалят консумацията на енергия. + +> 💁 Някои PC-та и Mac-ове приемат същата комбинация от бързи ядра с висока мощност и по-бавни ядра с ниска мощност, превключвайки, за да оптимизират батерията. Например, M1 чипът в последните лаптопи на Apple може да превключва между 4 производителни ядра и 4 ефективни ядра, за да оптимизира живота на батерията или скоростта в зависимост от задачата, която се изпълнява. + +✅ Направете малко проучване: Прочетете за CPU на [Wikipedia CPU статията](https://wikipedia.org/wiki/Central_processing_unit) + +#### Задача + +Разгледайте Wio Terminal. + +Ако използвате Wio Terminal за тези уроци, опитайте да намерите CPU. Намерете секцията *Hardware Overview* на [Wio Terminal продуктовата страница](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) за снимка на вътрешността и опитайте да намерите CPU през прозрачното пластмасово прозорче на гърба. + +### Памет + +Микроконтролерите обикновено +🎓 Програмната памет съхранява вашия код и остава, когато няма захранване. +> 🎓 RAM се използва за изпълнение на вашата програма и се нулира, когато няма захранване + +Подобно на процесора, паметта в микроконтролера е с порядъци по-малка от тази на компютър или Mac. Типичен компютър може да има 8 гигабайта (GB) RAM, или 8,000,000,000 байта, като всеки байт е достатъчен за съхранение на една буква или число от 0 до 255. Микроконтролерът обикновено има само килобайти (KB) RAM, като един килобайт е 1,000 байта. Wio терминалът, споменат по-горе, има 192KB RAM, или 192,000 байта - повече от 40,000 пъти по-малко от средния компютър! + +Диаграмата по-долу показва относителната разлика в размера между 192KB и 8GB - малката точка в центъра представлява 192KB. + +![Сравнение между 192KB и 8GB - повече от 40,000 пъти по-голямо](../../../../../translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.bg.png) + +Паметта за съхранение на програми също е по-малка от тази на компютър. Типичен компютър може да има 500GB твърд диск за съхранение на програми, докато микроконтролерът може да има само килобайти или няколко мегабайта (MB) памет (1MB е 1,000KB, или 1,000,000 байта). Wio терминалът има 4MB памет за съхранение на програми. + +✅ Направете малко проучване: Колко RAM и памет за съхранение има компютърът, който използвате в момента? Как това се сравнява с микроконтролер? + +### Вход/Изход + +Микроконтролерите се нуждаят от входни и изходни (I/O) връзки, за да четат данни от сензори и да изпращат контролни сигнали към изпълнителни механизми. Те обикновено съдържат редица универсални входно/изходни (GPIO) пинове. Тези пинове могат да бъдат конфигурирани чрез софтуер като вход (т.е. получават сигнал) или изход (изпращат сигнал). + +🧠⬅️ Входните пинове се използват за четене на стойности от сензори + +🧠➡️ Изходните пинове изпращат инструкции към изпълнителни механизми + +✅ Ще научите повече за това в следващ урок. + +#### Задача + +Разгледайте Wio терминала. + +Ако използвате Wio терминал за тези уроци, намерете GPIO пиновете. Намерете секцията *Pinout diagram* на [страницата на продукта Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html), за да научите кои пинове за какво служат. Wio терминалът идва с лепенка, която можете да залепите на гърба с номерата на пиновете, така че я добавете сега, ако още не сте го направили. + +### Физически размер + +Микроконтролерите обикновено са малки по размер, като най-малкият, [Freescale Kinetis KL03 MCU, е достатъчно малък, за да се побере в вдлъбнатината на голф топка](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/). Само процесорът в компютър може да бъде с размери 40mm x 40mm, и това не включва охлаждащите радиатори и вентилатори, необходими, за да може процесорът да работи повече от няколко секунди без прегряване, което го прави значително по-голям от цял микроконтролер. Комплектът за разработка Wio терминал с микроконтролер, корпус, екран и редица връзки и компоненти не е много по-голям от голия Intel i9 процесор и е значително по-малък от процесора с охлаждащ радиатор и вентилатор! + +| Устройство | Размер | +| -------------------------------- | --------------------- | +| Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm | +| Wio терминал | 72mm x 57mm x 12mm | +| Intel i9 CPU, радиатор и вентилатор | 136mm x 145mm x 103mm | + +### Рамки и операционни системи + +Поради ниската си скорост и размер на паметта, микроконтролерите не използват операционна система (OS) в смисъла на десктоп компютрите. Операционната система, която кара вашия компютър да работи (Windows, Linux или macOS), се нуждае от много памет и процесорна мощност, за да изпълнява задачи, които са напълно ненужни за микроконтролер. Помнете, че микроконтролерите обикновено се програмират да изпълняват една или повече много специфични задачи, за разлика от универсален компютър като PC или Mac, който трябва да поддържа потребителски интерфейс, да възпроизвежда музика или филми, да предоставя инструменти за писане на документи или код, да играе игри или да сърфира в интернет. + +За да програмирате микроконтролер без операционна система, ви е необходим инструментариум, който да ви позволи да изградите вашия код по начин, който микроконтролерът може да изпълни, използвайки API-та, които могат да комуникират с периферни устройства. Всеки микроконтролер е различен, така че производителите обикновено поддържат стандартни рамки, които ви позволяват да следвате стандартна "рецепта", за да изградите вашия код и да го изпълните на всеки микроконтролер, който поддържа тази рамка. + +Можете да програмирате микроконтролери с операционна система - често наричана операционна система в реално време (RTOS), тъй като те са проектирани да обработват изпращането на данни към и от периферни устройства в реално време. Тези операционни системи са много леки и предоставят функции като: + +* Многозадачност, позволяваща вашият код да изпълнява повече от един блок код едновременно, или на множество ядра, или като се редуват на едно ядро +* Мрежова свързаност за сигурна комуникация през интернет +* Компоненти за графичен потребителски интерфейс (GUI) за изграждане на потребителски интерфейси (UI) на устройства с екрани. + +✅ Прочетете за различни RTOS: [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](../../../../../images/arduino-logo.svg) + +[Arduino](https://www.arduino.cc) вероятно е най-популярната рамка за микроконтролери, особено сред студенти, любители и създатели. Arduino е платформа за електроника с отворен код, която комбинира софтуер и хардуер. Можете да закупите съвместими с Arduino платки от самите Arduino или от други производители, след което да програмирате, използвайки рамката Arduino. + +Платките Arduino се програмират на C или C++. Използването на C/C++ позволява вашият код да бъде компилиран много малък и да работи бързо, нещо необходимо за ограничено устройство като микроконтролер. Основата на приложение Arduino се нарича скица и представлява C/C++ код с две функции - `setup` и `loop`. Когато платката се стартира, кодът на рамката Arduino ще изпълни функцията `setup` веднъж, след което ще изпълнява функцията `loop` отново и отново, непрекъснато, докато захранването бъде изключено. + +Вие бихте написали вашия начален код във функцията `setup`, като например свързване към WiFi и облачни услуги или инициализиране на пинове за вход и изход. Вашият код за обработка би се намирал във функцията `loop`, като например четене от сензор и изпращане на стойността към облака. Обикновено бихте включили забавяне във всяка итерация на цикъла, например ако искате данните от сензора да се изпращат на всеки 10 секунди, бихте добавили забавяне от 10 секунди в края на цикъла, за да може микроконтролерът да спи, спестявайки енергия, след което да изпълни цикъла отново, когато е необходимо, 10 секунди по-късно. + +![Скица на Arduino, която първо изпълнява setup, след това изпълнява loop многократно](../../../../../translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.bg.png) + +✅ Тази архитектура на програмиране е известна като *цикъл на събития* или *цикъл на съобщения*. Много приложения използват това под капака и това е стандартът за повечето десктоп приложения, които работят на операционни системи като Windows, macOS или Linux. Функцията `loop` слуша за съобщения от компоненти на потребителския интерфейс като бутони или устройства като клавиатурата и реагира на тях. Можете да прочетете повече в тази [статия за цикъла на събития](https://wikipedia.org/wiki/Event_loop). + +Arduino предоставя стандартни библиотеки за взаимодействие с микроконтролери и I/O пинове, с различни реализации под капака, за да работят на различни микроконтролери. Например, функцията [`delay`](https://www.arduino.cc/reference/en/language/functions/time/delay/) ще паузира програмата за даден период от време, функцията [`digitalRead`](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/) ще прочете стойност `HIGH` или `LOW` от даден пин, независимо от това на коя платка се изпълнява кодът. Тези стандартни библиотеки означават, че кодът на Arduino, написан за една платка, може да бъде прекомпилиран за всяка друга платка Arduino и ще работи, при условие че пиновете са същите и платките поддържат същите функции. + +Съществува голяма екосистема от библиотеки на трети страни за Arduino, които ви позволяват да добавите допълнителни функции към вашите проекти с Arduino, като използване на сензори и изпълнителни механизми или свързване към облачни IoT услуги. + +##### Задача + +Разгледайте Wio терминала. + +Ако използвате Wio терминал за тези уроци, прегледайте кода, който написахте в предишния урок. Намерете функциите `setup` и `loop`. Наблюдавайте серийния изход за многократно извикване на функцията `loop`. Опитайте да добавите код към функцията `setup`, за да пишете към серийния порт и наблюдавайте, че този код се извиква само веднъж при всяко рестартиране. Опитайте да рестартирате устройството с превключвателя за захранване отстрани, за да покажете, че това се извиква всеки път, когато устройството се рестартира. + +## По-задълбочен поглед върху едноплатковите компютри + +В предишния урок въведохме едноплатковите компютри. Сега нека ги разгледаме по-задълбочено. + +### Raspberry Pi + +![Логото на Raspberry Pi](../../../../../translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.bg.png) + +[Фондацията Raspberry Pi](https://www.raspberrypi.org) е благотворителна организация от Великобритания, основана през 2009 г., с цел да насърчи изучаването на компютърни науки, особено на училищно ниво. Като част от тази мисия, те разработиха едноплатков компютър, наречен Raspberry Pi. Raspberry Pi в момента се предлага в 3 варианта - пълноразмерна версия, по-малката Pi Zero и модул за изчисления, който може да бъде вграден във вашето крайно IoT устройство. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.bg.jpg) + +Последната итерация на пълноразмерния Raspberry Pi е Raspberry Pi 4B. Той има четириядрен (4 ядра) процесор, работещ на 1.5GHz, 2, 4 или 8GB RAM, гигабитов Ethernet, WiFi, 2 HDMI порта, поддържащи 4k екрани, аудио и композитен видео изход, USB портове (2 USB 2.0, 2 USB 3.0), 40 GPIO пина, конектор за камера за модул Raspberry Pi камера и слот за SD карта. Всичко това на платка с размери 88mm x 58mm x 19.5mm, захранвана от USB-C адаптер с 3A. Цените започват от 35 щатски долара, много по-евтино от компютър или Mac. + +> 💁 Съществува и Pi400, всичко в едно компютър с Pi4, вграден в клавиатура. + +![Raspberry Pi Zero](../../../../../translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.bg.jpg) + +Pi Zero е много по-малък и с по-ниска мощност. Той има едноядрен процесор с честота 1GHz, 512MB RAM, WiFi (в модела Zero W), един HDMI порт, един micro-USB порт, 40 GPIO пина, конектор за камера за модул Raspberry Pi камера и слот за SD карта. Размерите му са 65mm x 30mm x 5mm и консумира много малко енергия. Zero струва 5 щатски долара, а версията W с WiFi - 10 щатски долара. + +> 🎓 Процесорите и в двата модела са ARM процесори, за разлика от Intel/AMD x86 или x64 процесорите, които се намират в повечето компютри и Mac. Те са подобни на процесорите, които се намират в някои микроконтролери, както и в почти всички мобилни телефони, Microsoft Surface X и новите Apple Silicon базирани Mac компютри. + +Всички варианти на Raspberry Pi работят с версия на Debian Linux, наречена Raspberry Pi OS. Тя е налична като лека версия без десктоп, която е идеална за проекти без екран, или като пълна версия с пълна десктоп среда, включваща уеб браузър, офис приложения, инструменти за програмиране и игри. Тъй като операционната система е версия на Debian Linux, можете да инсталирате всяко приложение или инструмент, който работи на Debian и е създаден за ARM процесора в Pi. + +#### Задача + +Разгледайте Raspberry Pi. + +Ако използвате Raspberry Pi за тези уроци, прочетете за различните хардуерни компоненти на платката. + +* Можете да намерите подробности за процесорите, използвани в [документацията за хардуера на Raspberry Pi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/). Прочетете за процесора, използван в модела, който използвате. +* Намерете GPIO пиновете. Прочетете повече за тях в [документацията за GPIO на Raspberry Pi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md). Използвайте [ръководството за използване на GPIO пинове](https://www.raspberrypi.org/documentation/usage/gpio/README.md), за да идентифицирате различните пинове на вашия Pi. + +### Програмиране на едноплаткови компютри + +Едноплатковите компютри са пълноценни компютри, работещи с пълна операционна система. Това означава, че има широк набор от програмни езици, рамки и инструменти, които можете да използвате за програмирането им, за разлика от микроконтролерите, които разчитат на поддръжка за платката в рамки като Arduino. Повечето програмни езици имат библиотеки, които могат да достъпват GPIO пиновете, за да изпращат и получават данни от сензори и изпълнителни механизми. + +✅ С кои програмни езици сте запознати? Поддържат ли се те на Linux? + +Най-често използваният програмен език за изграждане на IoT приложения на Raspberry Pi е Python. Съществува огромна екосистема от хардуер, проектиран за Pi, и почти всички от тях включват необходимия код за използването им като Python библиотеки. Някои от тези екосистеми +### Използване на едноплаткови компютри в професионални IoT внедрения + +Едноплатковите компютри се използват за професионални IoT внедрения, а не само като комплекти за разработчици. Те могат да предоставят мощен начин за управление на хардуер и изпълнение на сложни задачи, като например стартиране на модели за машинно обучение. Например, съществува [Raspberry Pi 4 compute module](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/), който предлага цялата мощ на Raspberry Pi 4, но в по-компактен и по-евтин формат без повечето портове, проектиран за вграждане в персонализиран хардуер. + +--- + +## 🚀 Предизвикателство + +Предизвикателството в последния урок беше да изброите колкото се може повече IoT устройства, които се намират във вашия дом, училище или работно място. За всяко устройство в този списък, мислите ли, че е изградено около микроконтролери, едноплаткови компютри или дори комбинация от двете? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4) + +## Преглед и самостоятелно обучение + +* Прочетете [ръководството за започване с Arduino](https://www.arduino.cc/en/Guide/Introduction), за да разберете повече за платформата Arduino. +* Прочетете [въведението към Raspberry Pi 4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/), за да научите повече за Raspberry Pi. +* Научете повече за някои от концепциите и акронимите в [статията "Какво са CPU, MPU, MCU и GPU" в Electrical Engineering Journal](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/). + +✅ Използвайте тези ръководства, заедно с цените, показани чрез следване на връзките в [хардуерното ръководство](../../../hardware.md), за да решите коя хардуерна платформа искате да използвате или дали предпочитате да използвате виртуално устройство. + +## Задача + +[Сравнете и противопоставете микроконтролерите и едноплатковите компютри](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/2-deeper-dive/assignment.md b/translations/bg/1-getting-started/lessons/2-deeper-dive/assignment.md new file mode 100644 index 00000000..d42da260 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/2-deeper-dive/assignment.md @@ -0,0 +1,26 @@ + +# Сравнение и контраст между микроконтролери и едноплаткови компютри + +## Инструкции + +Този урок обхвана микроконтролери и едноплаткови компютри. Създайте таблица, която ги сравнява и противопоставя, и отбележете поне 2 причини защо бихте използвали микроконтролер вместо едноплатков компютър, и поне 2 причини защо бихте използвали едноплатков компютър вместо микроконтролер. + +## Рубрика + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Създаване на таблица за сравнение на микроконтролери и едноплаткови компютри | Създадена е таблица с множество елементи, които правилно сравняват и противопоставят | Създадена е таблица с само няколко елемента | Създаден е само един елемент или няма елементи за сравнение и противопоставяне | +| Причини за използване на едното пред другото | Успешно са предоставени 2 или повече причини за микроконтролери и 2 или повече за едноплаткови компютри | Предоставени са само 1-2 причини за микроконтролер и 1-2 причини за едноплатков компютър | Не са предоставени 1 или повече причини за микроконтролер или за едноплатков компютър | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/README.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/README.md new file mode 100644 index 00000000..2e562dc0 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/README.md @@ -0,0 +1,230 @@ + +# Взаимодействие с физическия свят чрез сензори и изпълнителни устройства + +![Скица на урока](../../../../../translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок е част от [Hello IoT серията](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) на [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Урокът е представен в 2 видеа - едночасов урок и едночасова сесия за въпроси и отговори, в която се разглеждат по-задълбочено части от урока. + +[![Урок 3: Взаимодействие с физическия свят чрез сензори и изпълнителни устройства](https://img.youtube.com/vi/Lqalu1v6aF4/0.jpg)](https://youtu.be/Lqalu1v6aF4) + +[![Урок 3: Взаимодействие с физическия свят чрез сензори и изпълнителни устройства - Сесия за въпроси и отговори](https://img.youtube.com/vi/qR3ekcMlLWA/0.jpg)](https://youtu.be/qR3ekcMlLWA) + +> 🎥 Кликнете върху изображенията по-горе, за да гледате видеата + +## Предварителен тест + +[Предварителен тест](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/5) + +## Въведение + +Този урок представя две от основните концепции за вашето IoT устройство - сензори и изпълнителни устройства. Ще имате възможност да работите с тях, като добавите светлинен сензор към вашия IoT проект и след това добавите LED, който се контролира от нивата на светлина, ефективно създавайки нощна лампа. + +В този урок ще разгледаме: + +* [Какво представляват сензорите?](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Използване на сензор](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Видове сензори](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Какво представляват изпълнителните устройства?](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Използване на изпълнително устройство](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [Видове изпълнителни устройства](../../../../../1-getting-started/lessons/3-sensors-and-actuators) + +## Какво представляват сензорите? + +Сензорите са хардуерни устройства, които усещат физическия свят - тоест измерват едно или повече свойства около тях и изпращат информацията към IoT устройство. Съществува огромно разнообразие от сензори, тъй като има толкова много неща, които могат да бъдат измерени - от природни свойства като температура на въздуха до физически взаимодействия като движение. + +Някои често срещани сензори включват: + +* Температурни сензори - измерват температурата на въздуха или на обекта, в който са потопени. За любители и разработчици те често са комбинирани с датчици за налягане и влажност в един сензор. +* Бутони - засичат кога са натиснати. +* Светлинни сензори - откриват нива на светлина и могат да бъдат за специфични цветове, UV светлина, IR светлина или общо видима светлина. +* Камери - заснемат визуално представяне на света чрез снимка или видео поток. +* Акселерометри - засичат движение в различни посоки. +* Микрофони - засичат звук, било то общи нива на звук или насочен звук. + +✅ Направете проучване. Какви сензори има вашият телефон? + +Всички сензори имат едно общо нещо - те преобразуват това, което засичат, в електрически сигнал, който може да бъде интерпретиран от IoT устройство. Как този електрически сигнал се интерпретира зависи от сензора, както и от комуникационния протокол, използван за връзка с IoT устройството. + +## Използване на сензор + +Следвайте съответното ръководство по-долу, за да добавите сензор към вашето IoT устройство: + +* [Arduino - Wio Terminal](wio-terminal-sensor.md) +* [Едноплатков компютър - Raspberry Pi](pi-sensor.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device-sensor.md) + +## Видове сензори + +Сензорите могат да бъдат аналогови или цифрови. + +### Аналогови сензори + +Някои от най-основните сензори са аналогови. Тези сензори получават напрежение от IoT устройството, компонентите на сензора променят това напрежение, а напрежението, което се връща от сензора, се измерва, за да се получи стойността на сензора. + +> 🎓 Напрежението е мярка за това колко силно се "бутат" електроните от едно място на друго, например от положителния към отрицателния полюс на батерия. Например, стандартна AA батерия е 1.5V (V е символът за волтове) и може да "бутне" електричество със сила от 1.5V. Различните електрически устройства изискват различни напрежения, за да работят. Например, LED може да свети с напрежение между 2-3V, но 100W крушка с нажежаема жичка би изисквала 240V. Можете да прочетете повече за напрежението на [страницата за напрежение в Wikipedia](https://wikipedia.org/wiki/Voltage). + +Един пример за това е потенциометърът. Това е въртящ се диск, който може да се регулира между две позиции, а сензорът измерва въртенето. + +![Потенциометър, настроен на средна точка, получаващ 5 волта и връщащ 3.8 волта](../../../../../translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.bg.png) + +IoT устройството изпраща електрически сигнал към потенциометъра с определено напрежение, например 5 волта (5V). Когато потенциометърът се регулира, той променя напрежението, което излиза от другата страна. Представете си, че имате потенциометър, обозначен като диск, който се върти от 0 до [11](https://wikipedia.org/wiki/Up_to_eleven), като копче за сила на звука на усилвател. Когато потенциометърът е в изключено положение (0), излизат 0V (0 волта). Когато е в напълно включено положение (11), излизат 5V (5 волта). + +> 🎓 Това е опростено обяснение. Можете да прочетете повече за потенциометрите и променливите резистори на [страницата за потенциометри в Wikipedia](https://wikipedia.org/wiki/Potentiometer). + +Напрежението, което излиза от сензора, се чете от IoT устройството и устройството може да реагира на него. В зависимост от сензора, това напрежение може да бъде произволна стойност или да съответства на стандартна единица. Например, аналогов температурен сензор, базиран на [термистор](https://wikipedia.org/wiki/Thermistor), променя съпротивлението си в зависимост от температурата. Изходното напрежение може да бъде преобразувано в температура в Келвини, а съответно и в °C или °F, чрез изчисления в кода. + +✅ Какво мислите, че ще се случи, ако сензорът върне по-високо напрежение от изпратеното (например идващо от външен източник на захранване)? ⛔️ НЕ тествайте това. + +#### Аналогово-цифрово преобразуване + +IoT устройствата са цифрови - те не могат да работят с аналогови стойности, а само с 0 и 1. Това означава, че стойностите от аналоговите сензори трябва да бъдат преобразувани в цифров сигнал, преди да могат да бъдат обработени. Много IoT устройства имат аналогово-цифрови преобразуватели (ADC), които преобразуват аналоговите входове в цифрови представяния на техните стойности. Сензорите също могат да работят с ADC чрез свързваща платка. Например, в екосистемата Seeed Grove с Raspberry Pi, аналоговите сензори се свързват към специфични портове на "шапка", която се поставя върху Pi и е свързана към GPIO пиновете на Pi. Тази "шапка" има ADC, който преобразува напрежението в цифров сигнал, който може да бъде изпратен от GPIO пиновете на Pi. + +Представете си, че имате аналогов светлинен сензор, свързан към IoT устройство, което използва 3.3V и връща стойност от 1V. Тези 1V нямат смисъл в цифровия свят, затова трябва да бъдат преобразувани. Напрежението ще бъде преобразувано в аналогова стойност, използвайки скала, която зависи от устройството и сензора. Например, светлинният сензор Seeed Grove връща стойности от 0 до 1,023. За този сензор, работещ на 3.3V, изход от 1V би бил стойност от 300. IoT устройството не може да обработи 300 като аналогова стойност, затова стойността ще бъде преобразувана в `0000000100101100`, двоичното представяне на 300 от "шапката" Grove. Това след това ще бъде обработено от IoT устройството. + +✅ Ако не знаете какво е двоична система, направете кратко проучване, за да научите как числата се представят чрез 0 и 1. [Въведението в двоичната система на BBC Bitesize](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1) е чудесно място за начало. + +От гледна точка на програмирането, всичко това обикновено се обработва от библиотеки, които идват със сензорите, така че не е необходимо сами да се занимавате с това преобразуване. За светлинния сензор Grove бихте използвали библиотеката за Python и извикали свойството `light`, или бихте използвали библиотеката за Arduino и извикали `analogRead`, за да получите стойност от 300. + +### Цифрови сензори + +Цифровите сензори, подобно на аналоговите, засичат света около тях чрез промени в електрическото напрежение. Разликата е, че те връщат цифров сигнал, като измерват само две състояния или използват вграден ADC. Цифровите сензори стават все по-често срещани, за да се избегне необходимостта от използване на ADC в свързваща платка или в самото IoT устройство. + +Най-простият цифров сензор е бутон или превключвател. Това е сензор с две състояния - включено или изключено. + +![Бутон, който получава 5 волта. Когато не е натиснат, връща 0 волта; когато е натиснат, връща 5 волта](../../../../../translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.bg.png) + +Пиновете на IoT устройства, като GPIO пинове, могат директно да измерват този сигнал като 0 или 1. Ако напрежението, което се изпраща, е същото като напрежението, което се връща, стойността е 1, в противен случай стойността е 0. Няма нужда от преобразуване на сигнала, той може да бъде само 1 или 0. + +> 💁 Напреженията никога не са напълно точни, особено тъй като компонентите в сензора имат известно съпротивление, затова обикновено има толеранс. Например, GPIO пиновете на Raspberry Pi работят на 3.3V и четат сигнал над 1.8V като 1, а под 1.8V като 0. + +* 3.3V се изпращат към бутона. Бутонът е изключен, така че излизат 0V, което дава стойност 0. +* 3.3V се изпращат към бутона. Бутонът е включен, така че излизат 3.3V, което дава стойност 1. + +По-сложните цифрови сензори измерват аналогови стойности и след това ги преобразуват чрез вградени ADC в цифрови сигнали. Например, цифров температурен сензор все още използва термодвойка по същия начин като аналогов сензор и все още измерва промяната в напрежението, причинена от съпротивлението на термодвойката при текущата температура. Вместо да връща аналогова стойност и да разчита на устройството или свързващата платка за преобразуване в цифров сигнал, ADC, вграден в сензора, преобразува стойността и я изпраща като поредица от 0 и 1 към IoT устройството. Тези 0 и 1 се изпращат по същия начин като цифровия сигнал за бутон, като 1 е пълно напрежение, а 0 е 0V. + +![Цифров температурен сензор, който преобразува аналогово отчитане в двоични данни с 0 като 0 волта и 1 като 5 волта, преди да ги изпрати към IoT устройство](../../../../../translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.bg.png) + +Изпращането на цифрови данни позволява сензорите да станат по-сложни и да изпращат по-подробни данни, дори криптирани данни за сигурни сензори. Един пример е камерата. Това е сензор, който заснема изображение и го изпраща като цифрови данни, съдържащи това изображение, обикновено в компресиран формат като JPEG, за да бъде прочетено от IoT устройството. Тя може дори да предава видео, като заснема изображения и изпраща или цялото изображение кадър по кадър, или компресиран видео поток. + +## Какво представляват изпълнителните устройства? + +Изпълнителните устройства са противоположността на сензорите - те преобразуват електрически сигнал от вашето IoT устройство в взаимодействие с физическия свят, като излъчване на светлина или звук, или задвижване на мотор. + +Някои често срещани изпълнителни устройства включват: + +* LED - излъчват светлина, когато са включени. +* Високоговорител - излъчва звук въз основа на изпратения сигнал, от основен зумер до аудио високоговорител, който може да възпроизвежда музика. +* Стъпков мотор - преобразува сигнал в определено количество въртене, например завъртане на диск на 90°. +* Реле - превключватели, които могат да бъдат включени или изключени чрез електрически сигнал. Те позволяват малко напрежение от IoT устройство да включи по-големи напрежения. +* Екрани - по-сложни изпълнителни устройства, които показват информация на многосегментен дисплей. Екраните варират от прости LED дисплеи до високорезолюционни видео монитори. + +✅ Направете проучване. Какви изпълнителни устройства има вашият телефон? + +## Използване на изпълнително устройство + +Следвайте съответното ръководство по-долу, за да добавите изпълнително устройство към вашето IoT устройство, контролирано от сензора, за да създадете IoT нощна лампа. Тя ще събира нива на светлина от светлинния сензор и ще използва изпълнително устройство под формата на LED, за да излъчва светлина, когато засеченото ниво на светлина е твърде ниско. + +![Диаграма на задачата, показваща как се четат и проверяват нивата на светлина, и как се контролира LED](../../../../../translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.bg.png) + +* [Arduino - Wio Terminal](wio-terminal-actuator.md) +* [Едноплатков компютър - Raspberry Pi](pi-actuator.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device-actuator.md) + +## Видове изпълнителни устройства + +Подобно на сензорите, изпълнителните устройства могат да бъдат аналогови или цифрови. + +### Аналогови изпълнителни устройства + +Аналоговите изпълнителни устройства приемат аналогов сигнал и го преобразуват в някакъв вид взаимодействие, при което взаимодействието се променя в зависимост от подаденото напрежение. + +Един пример е димируема светлина, като тези, които може да имате у дома. Количеството напрежение, подадено към свет +![Светлина, затъмнена при ниско напрежение и по-ярка при високо напрежение](../../../../../translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.bg.png) + +Както при сензорите, реалното IoT устройство работи с цифрови сигнали, а не с аналогови. Това означава, че за да изпрати аналогов сигнал, IoT устройството се нуждае от цифрово-аналогов преобразувател (DAC), който може да бъде вграден директно в устройството или да се намира на свързваща платка. Този преобразувател превръща 0 и 1 от IoT устройството в аналогово напрежение, което изпълнителният механизъм може да използва. + +✅ Какво мислите, че ще се случи, ако IoT устройството изпрати напрежение, по-високо от това, което изпълнителният механизъм може да понесе? +⛔️ НЕ тествайте това. + +#### Широчинно-импулсна модулация (PWM) + +Друга възможност за преобразуване на цифрови сигнали от IoT устройство в аналогов сигнал е широчинно-импулсната модулация (PWM). Това включва изпращане на множество кратки цифрови импулси, които действат като аналогов сигнал. + +Например, можете да използвате PWM, за да контролирате скоростта на мотор. + +Представете си, че контролирате мотор с 5V захранване. Изпращате кратък импулс към мотора, като превключвате напрежението на високо (5V) за две стотни от секундата (0.02s). През това време моторът може да направи една десета от оборот, или 36°. След това сигналът спира за две стотни от секундата (0.02s), изпращайки нисък сигнал (0V). Всеки цикъл на включване и изключване трае 0.04s. Цикълът се повтаря. + +![Широчинно-импулсна модулация на мотор с 150 оборота в минута](../../../../../translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.bg.png) + +Това означава, че за една секунда имате 25 импулса от 5V с продължителност 0.02s, които въртят мотора, всеки последван от пауза от 0.02s с 0V, когато моторът не се върти. Всеки импулс завърта мотора с една десета от оборот, което означава, че моторът прави 2.5 оборота в секунда. Използвали сте цифров сигнал, за да завъртите мотора с 2.5 оборота в секунда, или 150 [оборота в минута](https://wikipedia.org/wiki/Revolutions_per_minute) (нестандартна мярка за скорост на въртене). + +```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 +``` + +> 🎓 Когато PWM сигналът е включен за половината от времето и изключен за другата половина, това се нарича [50% работен цикъл](https://wikipedia.org/wiki/Duty_cycle). Работните цикли се измерват като процент от времето, през което сигналът е в състояние "включен" спрямо "изключен". + +![Широчинно-импулсна модулация на мотор с 75 оборота в минута](../../../../../translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.bg.png) + +Можете да промените скоростта на мотора, като промените размера на импулсите. Например, със същия мотор можете да запазите същото време на цикъла от 0.04s, като намалите импулса на включване наполовина до 0.01s, а импулса на изключване увеличите до 0.03s. Имате същия брой импулси в секунда (25), но всеки импулс на включване е с половин дължина. Импулс с половин дължина завърта мотора с една двадесета от оборот, а при 25 импулса в секунда моторът ще направи 1.25 оборота в секунда или 75 оборота в минута. Чрез промяна на скоростта на импулсите на цифровия сигнал сте намалили наполовина скоростта на аналоговия мотор. + +```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 +``` + +✅ Как бихте запазили въртенето на мотора плавно, особено при ниски скорости? Бихте ли използвали малък брой дълги импулси с дълги паузи или много кратки импулси с много кратки паузи? + +> 💁 Някои сензори също използват PWM, за да преобразуват аналогови сигнали в цифрови. + +> 🎓 Можете да прочетете повече за широчинно-импулсната модулация на [страницата за PWM в Wikipedia](https://wikipedia.org/wiki/Pulse-width_modulation). + +### Цифрови изпълнителни механизми + +Цифровите изпълнителни механизми, подобно на цифровите сензори, или имат две състояния, контролирани от високо или ниско напрежение, или имат вграден DAC, който може да преобразува цифров сигнал в аналогов. + +Един прост цифров изпълнителен механизъм е LED. Когато устройството изпрати цифров сигнал 1, се изпраща високо напрежение, което включва LED. Когато се изпрати цифров сигнал 0, напрежението пада до 0V и LED се изключва. + +![LED е изключен при 0 волта и включен при 5V](../../../../../translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.bg.png) + +✅ Какви други прости изпълнителни механизми с две състояния можете да измислите? Един пример е соленоид, който е електромагнит, който може да се активира, за да извършва действия като преместване на болт за заключване/отключване на врата. + +По-сложни цифрови изпълнителни механизми, като екрани, изискват цифровите данни да се изпращат в определени формати. Те обикновено идват с библиотеки, които улесняват изпращането на правилните данни за тяхното управление. + +--- + +## 🚀 Предизвикателство + +Предизвикателството от последните два урока беше да изброите колкото се може повече IoT устройства, които се намират във вашия дом, училище или работно място, и да решите дали са изградени около микроконтролери или едноплаткови компютри, или дори комбинация от двете. + +За всяко устройство, което изброихте, какви сензори и изпълнителни механизми са свързани с него? Каква е целта на всеки сензор и изпълнителен механизъм, свързани с тези устройства? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/6) + +## Преглед и самостоятелно обучение + +* Прочетете за електричеството и електрическите вериги на [ThingLearn](http://thinglearn.jenlooper.com/curriculum/). +* Прочетете за различните видове температурни сензори в [ръководството за температурни сензори на Seeed Studios](https://www.seeedstudio.com/blog/2019/10/14/temperature-sensors-for-arduino-projects/). +* Прочетете за LED на [страницата за LED в Wikipedia](https://wikipedia.org/wiki/Light-emitting_diode). + +## Задание + +[Проучете сензори и изпълнителни механизми](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/assignment.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/assignment.md new file mode 100644 index 00000000..4d7deeef --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/assignment.md @@ -0,0 +1,31 @@ + +# Изследване на сензори и изпълнителни механизми + +## Инструкции + +Този урок обхвана сензори и изпълнителни механизми. Изследвайте и опишете един сензор и един изпълнителен механизъм, които могат да се използват с IoT комплект за разработка, включително: + +* Какво прави +* Електроника/хардуер, използвани вътре +* Дали е аналогов или цифров +* Какви са единиците и диапазонът на входовете или измерванията + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Описание на сензор | Описан е сензор с подробности за всичките 4 секции, изброени по-горе. | Описан е сензор, но са предоставени подробности само за 2-3 от секциите по-горе. | Описан е сензор, но са предоставени подробности само за 1 от секциите по-горе. | +| Описание на изпълнителен механизъм | Описан е изпълнителен механизъм с подробности за всичките 4 секции, изброени по-горе. | Описан е изпълнителен механизъм, но са предоставени подробности само за 2-3 от секциите по-горе. | Описан е изпълнителен механизъм, но са предоставени подробности само за 1 от секциите по-горе. | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md new file mode 100644 index 00000000..cecc77f9 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md @@ -0,0 +1,130 @@ + +# Създайте нощна лампа - Raspberry Pi + +В тази част от урока ще добавите LED към вашия Raspberry Pi и ще го използвате, за да създадете нощна лампа. + +## Хардуер + +Нощната лампа вече се нуждае от изпълнителен механизъм. + +Изпълнителният механизъм е **LED**, [светодиод](https://wikipedia.org/wiki/Light-emitting_diode), който излъчва светлина, когато през него протича ток. Това е цифров изпълнителен механизъм с две състояния - включено и изключено. Изпращането на стойност 1 включва LED, а стойност 0 го изключва. LED е външен Grove изпълнителен механизъм и трябва да бъде свързан към Grove Base hat на Raspberry Pi. + +Логиката на нощната лампа в псевдокод е: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### Свържете LED + +Grove LED идва като модул с избор от светодиоди, което ви позволява да изберете цвета. + +#### Задача - свържете LED + +Свържете LED. + +![Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.bg.png) + +1. Изберете любимия си LED и поставете крачетата му в двете отвори на LED модула. + + Светодиодите са електронни устройства, които могат да пропускат ток само в една посока. Това означава, че LED трябва да бъде свързан правилно, иначе няма да работи. + + Едно от крачетата на LED е положителният пин, а другото е отрицателният пин. LED не е напълно кръгъл и е леко плосък от едната страна. Леко плоската страна е отрицателният пин. Когато свързвате LED към модула, уверете се, че пинът от закръглената страна е свързан към гнездото, маркирано с **+** на външната страна на модула, а плоската страна е свързана към гнездото, което е по-близо до средата на модула. + +1. LED модулът има въртящ бутон, който ви позволява да контролирате яркостта. Завъртете го напълно нагоре, като го завъртите обратно на часовниковата стрелка, доколкото може, с помощта на малка отвертка с кръстата глава. + +1. Поставете единия край на Grove кабел в гнездото на LED модула. Той ще влезе само в една посока. + +1. С изключен Raspberry Pi свържете другия край на Grove кабела към цифровото гнездо, маркирано **D5** на Grove Base hat, прикрепен към Pi. Това гнездо е второто отляво, на реда от гнезда до GPIO пиновете. + +![Grove LED, свързан към гнездо D5](../../../../../translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.bg.png) + +## Програмирайте нощната лампа + +Нощната лампа вече може да бъде програмирана с помощта на Grove светлинен сензор и Grove LED. + +### Задача - програмирайте нощната лампа + +Програмирайте нощната лампа. + +1. Включете Pi и изчакайте да се зареди. + +1. Отворете проекта за нощна лампа в VS Code, който създадохте в предишната част на задачата, като го стартирате директно на Pi или като се свържете чрез Remote SSH разширението. + +1. Добавете следния код към файла `app.py`, за да импортирате необходимата библиотека. Това трябва да бъде добавено в началото, под другите редове `import`. + + ```python + from grove.grove_led import GroveLed + ``` + + Изразът `from grove.grove_led import GroveLed` импортира `GroveLed` от Grove Python библиотеките. Тази библиотека съдържа код за взаимодействие с Grove LED. + +1. Добавете следния код след декларацията на `light_sensor`, за да създадете инстанция на класа, който управлява LED: + + ```python + led = GroveLed(5) + ``` + + Редът `led = GroveLed(5)` създава инстанция на класа `GroveLed`, свързвайки се към пин **D5** - цифровия Grove пин, към който е свързан LED. + + > 💁 Всички гнезда имат уникални номера на пинове. Пинове 0, 2, 4 и 6 са аналогови пинове, а пинове 5, 16, 18, 22, 24 и 26 са цифрови пинове. + +1. Добавете проверка вътре в цикъла `while`, преди `time.sleep`, за да проверите нивата на светлина и да включите или изключите LED: + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + Този код проверява стойността на `light`. Ако тя е по-малка от 300, извиква метода `on` на класа `GroveLed`, който изпраща цифрова стойност 1 към LED, включвайки го. Ако стойността на светлината е равна или по-голяма от 300, извиква метода `off`, изпращайки цифрова стойност 0 към LED, изключвайки го. + + > 💁 Този код трябва да бъде с отстъп на същото ниво като реда `print('Light level:', light)`, за да бъде вътре в цикъла `while`! + + > 💁 Когато изпращате цифрови стойности към изпълнителни механизми, стойност 0 е 0V, а стойност 1 е максималното напрежение за устройството. За Raspberry Pi с Grove сензори и изпълнителни механизми напрежението за стойност 1 е 3.3V. + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python3 app.py + ``` + + Стойностите на светлината ще бъдат изведени в конзолата. + + ```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. Покрийте и открийте светлинния сензор. Забележете как LED ще светне, ако нивото на светлината е 300 или по-малко, и ще се изключи, когато нивото на светлината е по-голямо от 300. + + > 💁 Ако LED не се включи, уверете се, че е свързан правилно и че въртящият бутон е настроен на максимална яркост. + +![LED, свързан към Pi, се включва и изключва според промените в нивото на светлината](../../../../../images/pi-running-assignment-1-1.gif) + +> 💁 Можете да намерите този код в папката [code-actuator/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/pi). + +😀 Вашата програма за нощна лампа беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md new file mode 100644 index 00000000..be7b1491 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md @@ -0,0 +1,110 @@ + +# Създаване на нощна лампа - Raspberry Pi + +В тази част от урока ще добавите светлинен сензор към вашия Raspberry Pi. + +## Хардуер + +Сензорът за този урок е **светлинен сензор**, който използва [фотодиод](https://wikipedia.org/wiki/Photodiode), за да преобразува светлината в електрически сигнал. Това е аналогов сензор, който изпраща цяло число от 0 до 1,000, показващо относителното количество светлина, което не съответства на стандартна единица за измерване като [лукс](https://wikipedia.org/wiki/Lux). + +Светлинният сензор е външен Grove сензор и трябва да бъде свързан към Grove Base hat на Raspberry Pi. + +### Свързване на светлинния сензор + +Grove светлинният сензор, който се използва за откриване на нивата на светлина, трябва да бъде свързан към Raspberry Pi. + +#### Задача - свържете светлинния сензор + +Свържете светлинния сензор. + +![Grove светлинен сензор](../../../../../translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на модула на светлинния сензор. Кабелът може да бъде поставен само в една посока. + +1. С изключен Raspberry Pi свържете другия край на Grove кабела към аналоговото гнездо, обозначено като **A0** на Grove Base hat, прикрепен към Pi. Това гнездо е второто отдясно в реда от гнезда до GPIO пиновете. + +![Grove светлинен сензор, свързан към гнездо A0](../../../../../translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.bg.png) + +## Програмиране на светлинния сензор + +Устройството вече може да бъде програмирано с помощта на Grove светлинния сензор. + +### Задача - програмирайте светлинния сензор + +Програмирайте устройството. + +1. Включете Pi и изчакайте да се зареди. + +1. Отворете проекта за нощна лампа в VS Code, който създадохте в предишната част на задачата, като го стартирате директно на Pi или се свържете чрез Remote SSH разширението. + +1. Отворете файла `app.py` и премахнете целия код от него. + +1. Добавете следния код във файла `app.py`, за да импортирате необходимите библиотеки: + + ```python + import time + from grove.grove_light_sensor_v1_2 import GroveLightSensor + ``` + + Изразът `import time` импортира модула `time`, който ще бъде използван по-късно в задачата. + + Изразът `from grove.grove_light_sensor_v1_2 import GroveLightSensor` импортира `GroveLightSensor` от Grove Python библиотеките. Тази библиотека съдържа код за взаимодействие с Grove светлинния сензор и беше инсталирана глобално по време на настройката на Pi. + +1. Добавете следния код след горния, за да създадете инстанция на класа, който управлява светлинния сензор: + + ```python + light_sensor = GroveLightSensor(0) + ``` + + Редът `light_sensor = GroveLightSensor(0)` създава инстанция на класа `GroveLightSensor`, свързвайки се към пин **A0** - аналоговия Grove пин, към който е свързан светлинният сензор. + +1. Добавете безкраен цикъл след горния код, за да извличате стойността на светлинния сензор и да я отпечатвате в конзолата: + + ```python + while True: + light = light_sensor.light + print('Light level:', light) + ``` + + Това ще прочете текущото ниво на светлина в скала от 0-1,023, използвайки свойството `light` на класа `GroveLightSensor`. Това свойство чете аналоговата стойност от пина. Тази стойност след това се отпечатва в конзолата. + +1. Добавете кратка пауза от една секунда в края на `loop`, тъй като нивата на светлина не е необходимо да се проверяват непрекъснато. Паузата намалява консумацията на енергия на устройството. + + ```python + time.sleep(1) + ``` + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python3 app.py + ``` + + Стойностите на светлината ще се изведат в конзолата. Покрийте и открийте светлинния сензор, и стойностите ще се променят: + + ```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 + ``` + +> 💁 Можете да намерите този код в папката [code-sensor/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/pi). + +😀 Добавянето на сензор към вашата програма за нощна лампа беше успешно! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md new file mode 100644 index 00000000..9f215bef --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md @@ -0,0 +1,124 @@ + +# Създаване на нощна лампа - Виртуален IoT хардуер + +В тази част от урока ще добавите LED към вашето виртуално IoT устройство и ще го използвате, за да създадете нощна лампа. + +## Виртуален хардуер + +Нощната лампа се нуждае от един изпълнителен механизъм, създаден в приложението CounterFit. + +Изпълнителният механизъм е **LED**. В физическо IoT устройство това би бил [светодиод](https://wikipedia.org/wiki/Light-emitting_diode), който излъчва светлина, когато през него преминава ток. Това е цифров изпълнителен механизъм с две състояния: включено и изключено. Изпращането на стойност 1 включва LED, а стойност 0 го изключва. + +Логиката на нощната лампа в псевдокод е: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### Добавяне на изпълнителния механизъм в CounterFit + +За да използвате виртуален LED, трябва да го добавите в приложението CounterFit. + +#### Задача - добавяне на изпълнителния механизъм в CounterFit + +Добавете LED в приложението CounterFit. + +1. Уверете се, че уеб приложението CounterFit работи от предишната част на задачата. Ако не, стартирайте го и добавете отново сензора за светлина. + +1. Създайте LED: + + 1. В полето *Create actuator* в панела *Actuator*, отворете падащото меню *Actuator type* и изберете *LED*. + + 1. Задайте *Pin* на *5*. + + 1. Натиснете бутона **Add**, за да създадете LED на Pin 5. + + ![Настройки на LED](../../../../../translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.bg.png) + + LED ще бъде създаден и ще се появи в списъка с изпълнителни механизми. + + ![Създаден LED](../../../../../translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.bg.png) + + След като LED е създаден, можете да промените цвета му, използвайки инструмента *Color picker*. Натиснете бутона **Set**, за да промените цвета, след като сте го избрали. + +### Програмиране на нощната лампа + +Сега нощната лампа може да бъде програмирана, използвайки сензора за светлина и LED в CounterFit. + +#### Задача - програмиране на нощната лампа + +Програмирайте нощната лампа. + +1. Отворете проекта за нощна лампа в VS Code, който създадохте в предишната част на задачата. Ако е необходимо, затворете и създайте отново терминала, за да се уверите, че работи с виртуалната среда. + +1. Отворете файла `app.py`. + +1. Добавете следния код в файла `app.py`, за да импортирате необходимата библиотека. Това трябва да бъде добавено в началото, под другите редове с `import`. + + ```python + from counterfit_shims_grove.grove_led import GroveLed + ``` + + Редът `from counterfit_shims_grove.grove_led import GroveLed` импортира `GroveLed` от Python библиотеките CounterFit Grove shim. Тази библиотека съдържа код за взаимодействие с LED, създаден в приложението CounterFit. + +1. Добавете следния код след декларацията на `light_sensor`, за да създадете инстанция на класа, който управлява LED: + + ```python + led = GroveLed(5) + ``` + + Редът `led = GroveLed(5)` създава инстанция на класа `GroveLed`, свързвайки го с pin **5** - CounterFit Grove pin, към който е свързан LED. + +1. Добавете проверка вътре в цикъла `while`, преди `time.sleep`, за да проверите нивата на светлина и да включите или изключите LED: + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + Този код проверява стойността на `light`. Ако тя е по-малка от 300, се извиква методът `on` на класа `GroveLed`, който изпраща цифрова стойност 1 към LED, включвайки го. Ако стойността на светлината е равна или по-голяма от 300, се извиква методът `off`, който изпраща цифрова стойност 0 към LED, изключвайки го. + + > 💁 Този код трябва да бъде подравнен на същото ниво като реда `print('Light level:', light)`, за да бъде вътре в цикъла `while`! + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python3 app.py + ``` + + Стойностите на светлината ще бъдат изведени в конзолата. + + ```output + (.venv) ➜ GroveTest python3 app.py + Light level: 143 + Light level: 244 + Light level: 246 + Light level: 253 + ``` + +1. Променете настройките *Value* или *Random*, за да варирате нивото на светлина над и под 300. LED ще се включва и изключва. + +![LED в приложението CounterFit се включва и изключва, докато нивото на светлина се променя](../../../../../images/virtual-device-running-assignment-1-1.gif) + +> 💁 Можете да намерите този код в папката [code-actuator/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/virtual-device). + +😀 Вашата програма за нощна лампа беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md new file mode 100644 index 00000000..37187321 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md @@ -0,0 +1,124 @@ + +# Създаване на нощна лампа - Виртуален IoT хардуер + +В тази част от урока ще добавите светлинен сензор към вашето виртуално IoT устройство. + +## Виртуален хардуер + +Нощната лампа се нуждае от един сензор, създаден в приложението CounterFit. + +Сензорът е **светлинен сензор**. В едно физическо IoT устройство това би бил [фотодиод](https://wikipedia.org/wiki/Photodiode), който преобразува светлината в електрически сигнал. Светлинните сензори са аналогови сензори, които изпращат цяло число, показващо относителното количество светлина, което не съответства на стандартна единица за измерване като [лукс](https://wikipedia.org/wiki/Lux). + +### Добавяне на сензори в CounterFit + +За да използвате виртуален светлинен сензор, трябва да го добавите в приложението CounterFit. + +#### Задача - добавяне на сензори в CounterFit + +Добавете светлинния сензор в приложението CounterFit. + +1. Уверете се, че уеб приложението CounterFit работи от предишната част на задачата. Ако не, стартирайте го. + +1. Създайте светлинен сензор: + + 1. В полето *Create sensor* в панела *Sensors*, отворете падащото меню *Sensor type* и изберете *Light*. + + 1. Оставете *Units* настроено на *NoUnits*. + + 1. Уверете се, че *Pin* е настроен на *0*. + + 1. Натиснете бутона **Add**, за да създадете светлинния сензор на Pin 0. + + ![Настройки на светлинния сензор](../../../../../translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.bg.png) + + Светлинният сензор ще бъде създаден и ще се появи в списъка със сензори. + + ![Създаден светлинен сензор](../../../../../translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.bg.png) + +## Програмиране на светлинния сензор + +Устройството вече може да бъде програмирано да използва вградения светлинен сензор. + +### Задача - програмиране на светлинния сензор + +Програмирайте устройството. + +1. Отворете проекта за нощна лампа в VS Code, който създадохте в предишната част на задачата. Затворете и създайте отново терминала, за да се уверите, че работи с виртуалната среда, ако е необходимо. + +1. Отворете файла `app.py`. + +1. Добавете следния код в началото на файла `app.py` заедно с останалите `import` изявления, за да импортирате необходимите библиотеки: + + ```python + import time + from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor + ``` + + Изявлението `import time` импортира Python модула `time`, който ще бъде използван по-късно в задачата. + + Изявлението `from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor` импортира `GroveLightSensor` от Python библиотеките CounterFit Grove shim. Тази библиотека съдържа код за взаимодействие със светлинен сензор, създаден в приложението CounterFit. + +1. Добавете следния код в края на файла, за да създадете инстанции на класове, които управляват светлинния сензор: + + ```python + light_sensor = GroveLightSensor(0) + ``` + + Редът `light_sensor = GroveLightSensor(0)` създава инстанция на класа `GroveLightSensor`, свързана с пин **0** - CounterFit Grove пин, към който е свързан светлинният сензор. + +1. Добавете безкраен цикъл след горния код, за да проверявате стойността на светлинния сензор и да я отпечатвате в конзолата: + + ```python + while True: + light = light_sensor.light + print('Light level:', light) + ``` + + Това ще прочете текущото ниво на светлина, използвайки свойството `light` на класа `GroveLightSensor`. Това свойство чете аналоговата стойност от пина. Тази стойност след това се отпечатва в конзолата. + +1. Добавете кратка пауза от една секунда в края на цикъла `while`, тъй като нивата на светлина не е необходимо да се проверяват непрекъснато. Пауза намалява консумацията на енергия на устройството. + + ```python + time.sleep(1) + ``` + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python3 app.py + ``` + + Стойностите на светлината ще бъдат изведени в конзолата. Първоначално тази стойност ще бъде 0. + +1. В приложението CounterFit променете стойността на светлинния сензор, която ще бъде прочетена от приложението. Можете да направите това по два начина: + + * Въведете число в полето *Value* за светлинния сензор, след това натиснете бутона **Set**. Числото, което въведете, ще бъде стойността, върната от сензора. + + * Отметнете полето *Random* и въведете стойности за *Min* и *Max*, след това натиснете бутона **Set**. Всеки път, когато сензорът прочете стойност, тя ще бъде случайно число между *Min* и *Max*. + + Стойностите, които зададете, ще бъдат изведени в конзолата. Променете *Value* или настройките *Random*, за да направите стойността променлива. + + ```output + (.venv) ➜ GroveTest python3 app.py + Light level: 143 + Light level: 244 + Light level: 246 + Light level: 253 + ``` + +> 💁 Можете да намерите този код в папката [code-sensor/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/virtual-device). + +😀 Вашата програма за нощна лампа беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md new file mode 100644 index 00000000..19b24b83 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md @@ -0,0 +1,124 @@ + +# Създайте нощна лампа - Wio Terminal + +В тази част на урока ще добавите LED към вашия Wio Terminal и ще го използвате, за да създадете нощна лампа. + +## Хардуер + +Сега нощната лампа се нуждае от изпълнителен механизъм. + +Изпълнителният механизъм е **LED**, [светодиод](https://wikipedia.org/wiki/Light-emitting_diode), който излъчва светлина, когато през него протича ток. Това е цифров изпълнителен механизъм с две състояния: включено и изключено. Изпращането на стойност 1 включва LED-а, а стойност 0 го изключва. Това е външен Grove изпълнителен механизъм, който трябва да бъде свързан към Wio Terminal. + +Логиката на нощната лампа в псевдокод е: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### Свържете LED-а + +Grove LED идва като модул с избор от светодиоди, което ви позволява да изберете цвят. + +#### Задача - свържете LED-а + +Свържете LED-а. + +![Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.bg.png) + +1. Изберете любимия си LED и поставете крачетата му в двете дупки на LED модула. + + Светодиодите са диоди, а диодите са електронни устройства, които могат да пропускат ток само в една посока. Това означава, че LED-ът трябва да бъде свързан правилно, иначе няма да работи. + + Едно от крачетата на LED-а е положителният пин, а другото е отрицателният пин. LED-ът не е напълно кръгъл и е леко сплескан от едната страна. Леко сплесканата страна е отрицателният пин. Когато свързвате LED-а към модула, уверете се, че пинът от закръглената страна е свързан към гнездото, маркирано с **+** от външната страна на модула, а сплесканата страна е свързана към гнездото, което е по-близо до средата на модула. + +1. LED модулът има въртящ се бутон, който ви позволява да контролирате яркостта. Завъртете го докрай, като го завъртите обратно на часовниковата стрелка, доколкото е възможно, с помощта на малка отвертка с кръстата глава. + +1. Поставете единия край на Grove кабела в гнездото на LED модула. Той ще влезе само в една посока. + +1. С изключен Wio Terminal от вашия компютър или друг източник на захранване, свържете другия край на Grove кабела към десния Grove порт на Wio Terminal, когато гледате екрана. Това е портът, който е най-далеч от бутона за захранване. + + > 💁 Десният Grove порт може да се използва както с аналогови, така и с цифрови сензори и изпълнителни механизми. Левият порт е само за цифрови сензори и изпълнителни механизми. C ще бъде разгледан в по-късен урок. + +![Grove LED, свързан към десния порт](../../../../../translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.bg.png) + +## Програмирайте нощната лампа + +Сега нощната лампа може да бъде програмирана, използвайки вградения светлинен сензор и Grove LED. + +### Задача - програмирайте нощната лампа + +Програмирайте нощната лампа. + +1. Отворете проекта за нощна лампа във VS Code, който създадохте в предишната част на това задание. + +1. Добавете следния ред в края на функцията `setup`: + + ```cpp + pinMode(D0, OUTPUT); + ``` + + Този ред конфигурира пина, използван за комуникация с LED-а чрез Grove порта. + + Пинът `D0` е цифровият пин за десния Grove порт. Този пин е зададен като `OUTPUT`, което означава, че е свързан към изпълнителен механизъм и данни ще бъдат записвани към него. + +1. Добавете следния код непосредствено преди `delay` във функцията `loop`: + + ```cpp + if (light < 300) + { + digitalWrite(D0, HIGH); + } + else + { + digitalWrite(D0, LOW); + } + ``` + + Този код проверява стойността на `light`. Ако тя е по-малка от 300, се изпраща стойност `HIGH` към цифровия пин `D0`. Тази стойност `HIGH` е равна на 1 и включва LED-а. Ако светлината е равна или по-голяма от 300, се изпраща стойност `LOW`, равна на 0, която изключва LED-а. + + > 💁 Когато изпращате цифрови стойности към изпълнителни механизми, стойността LOW е 0V, а стойността HIGH е максималното напрежение за устройството. За Wio Terminal, HIGH напрежението е 3.3V. + +1. Свържете отново Wio Terminal към вашия компютър и качете новия код, както направихте преди. + +1. Свържете Serial 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.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. Покрийте и разкрийте светлинния сензор. Забележете как LED-ът ще светне, ако нивото на светлината е 300 или по-малко, и ще изгасне, когато нивото на светлината е по-голямо от 300. + +![LED, свързан към WIO, който се включва и изключва в зависимост от нивото на светлината](../../../../../images/wio-running-assignment-1-1.gif) + +> 💁 Можете да намерите този код в папката [code-actuator/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/wio-terminal). + +😀 Вашата програма за нощна лампа беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md new file mode 100644 index 00000000..ce7d92b0 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md @@ -0,0 +1,87 @@ + +# Добавяне на сензор - Wio Terminal + +В тази част от урока ще използвате светлинния сензор на вашия Wio Terminal. + +## Хардуер + +Сензорът за този урок е **светлинен сензор**, който използва [фотодиод](https://wikipedia.org/wiki/Photodiode), за да преобразува светлината в електрически сигнал. Това е аналогов сензор, който изпраща цяло число от 0 до 1,023, показващо относително количество светлина, което не съответства на стандартна мерна единица като [лукс](https://wikipedia.org/wiki/Lux). + +Светлинният сензор е вграден в Wio Terminal и е видим през прозрачния пластмасов прозорец на гърба. + +![Светлинният сензор на гърба на Wio Terminal](../../../../../translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.bg.png) + +## Програмиране на светлинния сензор + +Устройството вече може да бъде програмирано да използва вградения светлинен сензор. + +### Задача + +Програмирайте устройството. + +1. Отворете проекта за нощна лампа в VS Code, който създадохте в предишната част на това задание. + +1. Добавете следния ред в края на функцията `setup`: + + ```cpp + pinMode(WIO_LIGHT, INPUT); + ``` + + Този ред конфигурира пиновете, използвани за комуникация със сензорния хардуер. + + Пинът `WIO_LIGHT` е номерът на GPIO пина, свързан с вградения светлинен сензор. Този пин е зададен като `INPUT`, което означава, че е свързан към сензор и данните ще бъдат четени от него. + +1. Изтрийте съдържанието на функцията `loop`. + +1. Добавете следния код в сега празната функция `loop`. + + ```cpp + int light = analogRead(WIO_LIGHT); + Serial.print("Light value: "); + Serial.println(light); + ``` + + Този код чете аналогова стойност от пина `WIO_LIGHT`. Това чете стойност от 0 до 1,023 от вградения светлинен сензор. Тази стойност след това се изпраща към серийния порт, за да можете да я видите в Serial Monitor, докато този код работи. `Serial.print` записва текста без нов ред в края, така че всяка линия ще започва с `Light value:` и ще завършва с действителната стойност на светлината. + +1. Добавете малко закъснение от една секунда (1,000ms) в края на `loop`, тъй като нивата на светлина не е необходимо да се проверяват непрекъснато. Закъснението намалява консумацията на енергия на устройството. + + ```cpp + delay(1000); + ``` + +1. Свържете отново Wio Terminal към вашия компютър и качете новия код, както направихте преди. + +1. Свържете Serial Monitor. Стойностите на светлината ще се изведат в терминала. Покрийте и разкрийте светлинния сензор на гърба на Wio 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 + ``` + +> 💁 Можете да намерите този код в папката [code-sensor/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/wio-terminal). + +😀 Добавянето на сензор към вашата програма за нощна лампа беше успешно! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/README.md b/translations/bg/1-getting-started/lessons/4-connect-internet/README.md new file mode 100644 index 00000000..5b29ffe7 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/README.md @@ -0,0 +1,458 @@ + +# Свържете устройството си с интернет + +![Скица на урока](../../../../../translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок е част от [Hello IoT серията](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) на [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Урокът е представен в 2 видеа - едночасов урок и едночасова сесия за въпроси и отговори, където се разглеждат по-задълбочено части от урока и се отговаря на въпроси. + +[![Урок 4: Свържете устройството си с интернет](https://img.youtube.com/vi/O4dd172mZhs/0.jpg)](https://youtu.be/O4dd172mZhs) + +[![Урок 4: Свържете устройството си с интернет - Сесия за въпроси и отговори](https://img.youtube.com/vi/j-cVCzRDE2Q/0.jpg)](https://youtu.be/j-cVCzRDE2Q) + +> 🎥 Кликнете върху изображенията по-горе, за да гледате видеата + +## Предварителен тест + +[Предварителен тест](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/7) + +## Въведение + +**I** в IoT означава **Интернет** - облачната свързаност и услуги, които позволяват много от функциите на IoT устройствата, от събиране на измервания от сензорите, свързани с устройството, до изпращане на съобщения за управление на изпълнителните механизми. IoT устройствата обикновено се свързват с един облачен IoT услуга, използвайки стандартен комуникационен протокол, а тази услуга е свързана с останалата част от вашето IoT приложение, от AI услуги за вземане на интелигентни решения въз основа на данните, до уеб приложения за управление или отчетност. + +> 🎓 Данните, събрани от сензори и изпратени в облака, се наричат телеметрия. + +IoT устройствата могат да получават съобщения от облака. Често тези съобщения съдържат команди - инструкции за извършване на действие, било то вътрешно (като рестартиране или актуализация на фърмуера), или чрез изпълнителен механизъм (като включване на светлина). + +Този урок представя някои от комуникационните протоколи, които IoT устройствата могат да използват за свързване с облака, както и типовете данни, които могат да изпращат или получават. Ще имате и практически опит с тях, добавяйки интернет управление към вашия нощен светлинен индикатор, като преместите логиката за управление на LED към 'сървърен' код, който работи локално. + +В този урок ще разгледаме: + +* [Комуникационни протоколи](../../../../../1-getting-started/lessons/4-connect-internet) +* [Message Queueing Telemetry Transport (MQTT)](../../../../../1-getting-started/lessons/4-connect-internet) +* [Телеметрия](../../../../../1-getting-started/lessons/4-connect-internet) +* [Команди](../../../../../1-getting-started/lessons/4-connect-internet) + +## Комуникационни протоколи + +Съществуват редица популярни комуникационни протоколи, които IoT устройствата използват за комуникация с интернет. Най-популярните са базирани на публикуване/абониране чрез някакъв вид брокер. IoT устройствата се свързват с брокера и публикуват телеметрия и се абонират за команди. Облачните услуги също се свързват с брокера, абонират се за всички телеметрични съобщения и публикуват команди, било то към конкретни устройства или към групи устройства. + +![IoT устройствата се свързват с брокер, публикуват телеметрия и се абонират за команди. Облачните услуги се свързват с брокера, абонират се за всички телеметрични съобщения и изпращат команди към конкретни устройства.](../../../../../translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.bg.png) + +MQTT е най-популярният комуникационен протокол за IoT устройства и е разгледан в този урок. Други протоколи включват AMQP и HTTP/HTTPS. + +## Message Queueing Telemetry Transport (MQTT) + +[MQTT](http://mqtt.org) е лек, отворен стандарт за съобщения, който може да изпраща съобщения между устройства. Той е създаден през 1999 г. за мониторинг на нефтопроводи, преди да бъде пуснат като отворен стандарт 15 години по-късно от IBM. + +MQTT има един брокер и множество клиенти. Всички клиенти се свързват с брокера, а брокерът маршрутизира съобщенията към съответните клиенти. Съобщенията се маршрутизират чрез именувани теми, вместо да се изпращат директно към индивидуален клиент. Клиент може да публикува в тема, а всички клиенти, които са абонирани за тази тема, ще получат съобщението. + +![IoT устройство публикува телеметрия в темата /telemetry, а облачната услуга се абонира за тази тема](../../../../../translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.bg.png) + +✅ Направете проучване. Ако имате много IoT устройства, как можете да гарантирате, че вашият MQTT брокер може да обработи всички съобщения? + +### Свържете вашето IoT устройство с MQTT + +Първата стъпка в добавянето на интернет управление към вашия нощен светлинен индикатор е свързването му с MQTT брокер. + +#### Задача + +Свържете устройството си с MQTT брокер. + +В тази част от урока ще свържете вашия IoT нощен светлинен индикатор с интернет, за да може да бъде управляван дистанционно. По-късно в урока вашето IoT устройство ще изпрати телеметрично съобщение чрез MQTT към публичен MQTT брокер с нивото на светлина, където ще бъде обработено от сървърен код, който ще напишете. Този код ще провери нивото на светлина и ще изпрати командно съобщение обратно към устройството, казвайки му да включи или изключи LED. + +Реалният случай на употреба за такава настройка може да бъде събиране на данни от множество светлинни сензори, преди да се вземе решение за включване на светлините в място с много осветителни тела, като стадион. Това може да предотврати включването на светлините, ако само един сензор е покрит от облаци или птица, но другите сензори засичат достатъчно светлина. + +✅ Какви други ситуации биха изисквали данни от множество сензори да бъдат оценени преди изпращане на команди? + +Вместо да се занимавате със сложността на настройването на MQTT брокер като част от това задание, можете да използвате публичен тестов сървър, който работи с [Eclipse Mosquitto](https://www.mosquitto.org), отворен MQTT брокер. Този тестов брокер е публично достъпен на [test.mosquitto.org](https://test.mosquitto.org) и не изисква създаване на акаунт, което го прави отличен инструмент за тестване на MQTT клиенти и сървъри. + +> 💁 Този тестов брокер е публичен и не е защитен. Всеки може да слуша какво публикувате, така че не трябва да се използва за данни, които трябва да останат поверителни. + +![Диаграма на заданието, показваща как нивата на светлина се четат и проверяват, а LED се управлява](../../../../../translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.bg.png) + +Следвайте съответната стъпка по-долу, за да свържете устройството си с MQTT брокера: + +* [Arduino - Wio Terminal](wio-terminal-mqtt.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-mqtt.md) + +### По-задълбочен поглед върху MQTT + +Темите могат да имат йерархия, а клиентите могат да се абонират за различни нива на йерархията, използвайки заместващи символи. Например, можете да изпращате телеметрични съобщения за температура към темата `/telemetry/temperature` и съобщения за влажност към темата `/telemetry/humidity`, след което в облачното приложение да се абонирате за темата `/telemetry/*`, за да получавате както съобщенията за температура, така и тези за влажност. + +Съобщенията могат да бъдат изпращани с качество на услугата (QoS), което определя гаранцията за получаване на съобщението. + +* Най-много веднъж - съобщението се изпраща само веднъж и клиентът и брокерът не предприемат допълнителни стъпки за потвърждаване на доставката (изпрати и забрави). +* Най-малко веднъж - съобщението се изпраща многократно от изпращача, докато не бъде получено потвърждение (потвърдена доставка). +* Точно веднъж - изпращачът и получателят извършват двустепенно ръкостискане, за да гарантират, че само едно копие на съобщението е получено (гарантирана доставка). + +✅ Какви ситуации биха изисквали гарантирана доставка на съобщение вместо изпрати и забрави? + +Въпреки че името е Message Queueing (MQTT), протоколът всъщност не поддържа опашки за съобщения. Това означава, че ако клиентът се изключи, след това се свърже отново, той няма да получи съобщения, изпратени по време на изключването, освен тези, които вече е започнал да обработва чрез процеса QoS. Съобщенията могат да имат зададен флаг за задържане. Ако този флаг е зададен, MQTT брокерът ще съхрани последното съобщение, изпратено на тема с този флаг, и ще го изпрати на всички клиенти, които по-късно се абонират за темата. По този начин клиентите винаги ще получават последното съобщение. + +MQTT също поддържа функция за поддържане на връзката, която проверява дали връзката е все още активна по време на дълги паузи между съобщенията. + +> 🦟 [Mosquitto от Eclipse Foundation](https://mosquitto.org) предлага безплатен MQTT брокер, който можете да стартирате сами, за да експериментирате с MQTT, както и публичен MQTT брокер, който можете да използвате за тестване на вашия код, хостван на [test.mosquitto.org](https://test.mosquitto.org). + +MQTT връзките могат да бъдат публични и отворени или криптирани и защитени с потребителски имена и пароли или сертификати. + +> 💁 MQTT комуникира чрез TCP/IP, същия основен мрежов протокол като HTTP, но на различен порт. Можете също да използвате MQTT чрез уебсокети, за да комуникирате с уеб приложения, работещи в браузър, или в ситуации, където защитни стени или други мрежови правила блокират стандартните MQTT връзки. + +## Телеметрия + +Думата телеметрия произлиза от гръцки корени и означава измерване от разстояние. Телеметрията е актът на събиране на данни от сензори и изпращането им в облака. + +> 💁 Един от най-ранните телеметрични устройства е изобретен във Франция през 1874 г. и изпраща в реално време данни за времето и снежните дълбочини от Монблан до Париж. То използва физически проводници, тъй като безжичните технологии не са били налични по това време. + +Нека се върнем към примера със смарт термостата от Урок 1. + +![Термостат, свързан с интернет, използващ множество сензори за стаи](../../../../../translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.bg.png) + +Термостатът има температурни сензори за събиране на телеметрия. Най-вероятно ще има един вграден температурен сензор и може да се свързва с множество външни температурни сензори чрез безжичен протокол като [Bluetooth Low Energy](https://wikipedia.org/wiki/Bluetooth_Low_Energy) (BLE). + +Пример за телеметричните данни, които би изпратил, може да бъде: + +| Име | Стойност | Описание | +| ---- | ----- | ----------- | +| `thermostat_temperature` | 18°C | Температурата, измерена от вградения температурен сензор на термостата | +| `livingroom_temperature` | 19°C | Температурата, измерена от дистанционен температурен сензор, който е наречен `livingroom`, за да идентифицира стаята, в която се намира | +| `bedroom_temperature` | 21°C | Температурата, измерена от дистанционен температурен сензор, който е наречен `bedroom`, за да идентифицира стаята, в която се намира | + +Облачната услуга може след това да използва тези телеметрични данни, за да вземе решения относно какви команди да изпрати за управление на отоплението. + +### Изпращане на телеметрия от вашето IoT устройство + +Следващата стъпка в добавянето на интернет управление към вашия нощен светлинен индикатор е изпращането на телеметрия за нивото на светлина към MQTT брокера на телеметрична тема. + +#### Задача - изпращане на телеметрия от вашето IoT устройство + +Изпратете телеметрия за нивото на светлина към MQTT брокера. + +Данните се изпращат кодирани като JSON - съкращение от JavaScript Object Notation, стандарт за кодиране на данни в текст, използвайки ключ/стойност двойки. + +✅ Ако не сте срещали JSON преди, можете да научите повече за него в [документацията на JSON.org](https://www.json.org/). + +Следвайте съответната стъпка по-долу, за да изпратите телеметрия от вашето устройство към MQTT брокера: + +* [Arduino - Wio Terminal](wio-terminal-telemetry.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-telemetry.md) + +### Получаване на телеметрия от MQTT брокера + +Няма смисъл да изпращате телеметрия, ако няма кой да я слуша. Телеметрията за нивото на светлина се нуждае от нещо, което да я слуша и обработва. Този 'сървърен' код е вид код, който ще разположите в облачна услуга като част от по-голямо IoT приложение, но тук ще го стартирате локално на вашия компютър (или на вашия Pi, ако кодирате директно там). Сървърният код се състои от Python приложение, което слуша телеметрични съобщения чрез MQTT с нива на светлина. По-късно в този урок ще го накарате да отговаря с командно съобщение с инструкции за включване или изключване на LED. + +✅ Направете проучване: Какво се случва с MQTT съобщенията, ако няма слушател? + +#### Инсталиране на Python и VS Code + +Ако нямате инсталирани Python и VS Code локално, ще трябва да ги инсталирате, за да напишете сървърния код. Ако използвате виртуално IoT устройство или работите на вашия Raspberry Pi, можете да пропуснете тази стъпка, тъй като вече трябва да имате инсталирани и конфигурирани тези инструменти. + +##### Задача - инсталиране на Python и VS Code + +Инсталирайте Python и VS Code. + +1. Инсталирайте Python. Вижте [страницата за изтегляне на Python](https://www.python.org/downloads/) за инструкции как да инсталирате последната версия на Python. + +1. Инсталирайте Visual Studio Code (VS Code). Това е редакторът, който ще използвате, за да напишете кода за вашето виртуално устройство на Python. Вижте [документацията на VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) за инструкции как да инсталирате VS Code. +💁 Можете да използвате всяка Python IDE или редактор за тези уроци, ако имате предпочитан инструмент, но уроците ще дават инструкции, базирани на използването на VS Code. +1. Инсталирайте разширението Pylance за VS Code. Това е разширение за VS Code, което предоставя поддръжка за езика Python. Вижте [документацията за разширението Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) за инструкции как да го инсталирате в VS Code. + +#### Конфигуриране на виртуална среда за Python + +Една от мощните функции на Python е възможността за инсталиране на [pip пакети](https://pypi.org) - това са пакети с код, написан от други хора и публикуван в интернет. Можете да инсталирате pip пакет на компютъра си с една команда и след това да използвате този пакет в кода си. Ще използвате pip, за да инсталирате пакет за комуникация чрез MQTT. + +По подразбиране, когато инсталирате пакет, той е достъпен навсякъде на компютъра ви, което може да доведе до проблеми с версиите на пакетите - например, едно приложение може да зависи от една версия на пакет, която се счупва, когато инсталирате нова версия за друго приложение. За да избегнете този проблем, можете да използвате [виртуална среда за Python](https://docs.python.org/3/library/venv.html), която представлява копие на Python в специална папка, и когато инсталирате pip пакети, те се инсталират само в тази папка. + +##### Задача - конфигуриране на виртуална среда за Python + +Конфигурирайте виртуална среда за Python и инсталирайте MQTT pip пакетите. + +1. От вашия терминал или команден ред, изпълнете следното на избрано от вас място, за да създадете и навигирате до нова директория: + + ```sh + mkdir nightlight-server + cd nightlight-server + ``` + +1. Сега изпълнете следното, за да създадете виртуална среда в папката `.venv`: + + ```sh + python3 -m venv .venv + ``` + + > 💁 Трябва изрично да извикате `python3`, за да създадете виртуалната среда, в случай че имате инсталиран Python 2 в допълнение към Python 3 (най-новата версия). Ако имате инсталиран Python 2, тогава извикването на `python` ще използва Python 2 вместо Python 3. + +1. Активирайте виртуалната среда: + + * На Windows: + * Ако използвате Command Prompt или Command Prompt чрез Windows Terminal, изпълнете: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * Ако използвате PowerShell, изпълнете: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + * На macOS или Linux, изпълнете: + + ```cmd + source ./.venv/bin/activate + ``` + + > 💁 Тези команди трябва да се изпълняват от същото място, където сте изпълнили командата за създаване на виртуалната среда. Никога няма да ви се наложи да навигирате в папката `.venv`, винаги трябва да изпълнявате командата за активиране и всякакви команди за инсталиране на пакети или изпълнение на код от папката, в която сте били, когато сте създали виртуалната среда. + +1. След като виртуалната среда е активирана, командата `python` по подразбиране ще изпълнява версията на Python, която е използвана за създаване на виртуалната среда. Изпълнете следното, за да получите версията: + + ```sh + python --version + ``` + + Резултатът ще бъде подобен на следното: + + ```output + (.venv) ➜ nightlight-server python --version + Python 3.9.1 + ``` + + > 💁 Вашата версия на Python може да е различна - стига да е версия 3.6 или по-нова, всичко е наред. Ако не е, изтрийте тази папка, инсталирайте по-нова версия на Python и опитайте отново. + +1. Изпълнете следните команди, за да инсталирате pip пакета за [Paho-MQTT](https://pypi.org/project/paho-mqtt/), популярна библиотека за MQTT. + + ```sh + pip install paho-mqtt + ``` + + Този pip пакет ще бъде инсталиран само във виртуалната среда и няма да бъде достъпен извън нея. + +#### Напишете сървърния код + +Сървърният код вече може да бъде написан на Python. + +##### Задача - напишете сървърния код + +Напишете сървърния код. + +1. От вашия терминал или команден ред, изпълнете следното във виртуалната среда, за да създадете Python файл, наречен `app.py`: + + * На Windows изпълнете: + + ```cmd + type nul > app.py + ``` + + * На macOS или Linux изпълнете: + + ```cmd + touch app.py + ``` + +1. Отворете текущата папка в VS Code: + + ```sh + code . + ``` + +1. Когато VS Code се стартира, той ще активира виртуалната среда за Python. Това ще бъде показано в долната статусна лента: + + ![VS Code показва избраната виртуална среда](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.bg.png) + +1. Ако терминалът на VS Code вече работи, когато VS Code се стартира, той няма да има активирана виртуална среда в него. Най-лесното нещо, което можете да направите, е да затворите терминала, като използвате бутона **Kill the active terminal instance**: + + ![VS Code бутон за затваряне на активния терминал](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.bg.png) + +1. Стартирайте нов терминал в VS Code, като изберете *Terminal -> New Terminal*, или натиснете `` CTRL+` ``. Новият терминал ще зареди виртуалната среда, като извикването за активиране ще се появи в терминала. Името на виртуалната среда (`.venv`) също ще бъде в подканата: + + ```output + ➜ nightlight-server source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. Отворете файла `app.py` от VS Code explorer и добавете следния код: + + ```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) + ``` + + Заменете `` на ред 6 с уникалния идентификатор, който сте използвали при създаването на кода за вашето устройство. + + ⚠️ Това **трябва** да бъде същият идентификатор, който сте използвали на вашето устройство, иначе сървърният код няма да се абонира или публикува към правилната тема. + + Този код създава MQTT клиент с уникално име и се свързва към брокера *test.mosquitto.org*. След това стартира обработващ цикъл, който работи на фонов поток, слушайки за съобщения на всички абонирани теми. + + Клиентът след това се абонира за съобщения на телеметричната тема и дефинира функция, която се извиква, когато се получи съобщение. Когато се получи телеметрично съобщение, функцията `handle_telemetry` се извиква, отпечатвайки полученото съобщение в конзолата. + + Накрая, безкраен цикъл поддържа приложението активно. MQTT клиентът слуша съобщения на фонов поток и работи през цялото време, докато основното приложение работи. + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python app.py + ``` + + Приложението ще започне да слуша съобщения от IoT устройството. + +1. Уверете се, че вашето устройство работи и изпраща телеметрични съобщения. Регулирайте нивата на светлина, засечени от вашето физическо или виртуално устройство. Получените съобщения ще бъдат отпечатани в терминала. + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Message received: {'light': 400} + ``` + + Файлът app.py във виртуалната среда на nightlight трябва да работи, за да може файлът app.py във виртуалната среда на nightlight-server да получава изпратените съобщения. + +> 💁 Можете да намерите този код в папката [code-server/server](../../../../../1-getting-started/lessons/4-connect-internet/code-server/server). + +### Колко често трябва да се изпраща телеметрия? + +Един важен въпрос при телеметрията е колко често да се измерват и изпращат данните? Отговорът е - зависи. Ако измервате често, можете да реагирате по-бързо на промените в измерванията, но използвате повече енергия, повече честотна лента, генерирате повече данни и се нуждаете от повече облачни ресурси за обработка. Трябва да измервате достатъчно често, но не прекалено често. + +За термостат, измерването на всеки няколко минути вероятно е повече от достатъчно, тъй като температурите не се променят толкова често. Ако измервате само веднъж на ден, може да се окажете, че отоплявате дома си за нощни температури в средата на слънчев ден, докато ако измервате всяка секунда, ще имате хиляди ненужно дублирани температурни измервания, които ще изяждат скоростта и честотната лента на интернет на потребителя (проблем за хора с ограничени планове за честотна лента), ще използват повече енергия, което може да е проблем за устройства, захранвани с батерии като отдалечени сензори, и ще увеличат разходите за облачни ресурси за обработка и съхранение. + +Ако наблюдавате данни около машина в завод, която при повреда може да причини катастрофални щети и милиони долари загуби, тогава измерването няколко пъти в секунда може да е необходимо. По-добре е да се изразходва честотна лента, отколкото да се пропусне телеметрия, която показва, че машината трябва да бъде спряна и поправена, преди да се счупи. + +> 💁 В такава ситуация може да обмислите използването на edge устройство за предварителна обработка на телеметрията, за да намалите зависимостта от интернет. + +### Загуба на свързаност + +Интернет връзките могат да бъдат ненадеждни, с чести прекъсвания. Какво трябва да направи IoT устройство при такива обстоятелства - трябва ли да загуби данните или да ги съхрани, докато свързаността бъде възстановена? Отново, отговорът е - зависи. + +За термостат данните вероятно могат да бъдат загубени веднага щом бъде направено ново температурно измерване. Отоплителната система не се интересува, че преди 20 минути температурата е била 20.5°C, ако сега е 19°C, важно е текущата температура, която определя дали отоплението трябва да бъде включено или изключено. + +За машини може да искате да запазите данните, особено ако се използват за търсене на тенденции. Съществуват модели за машинно обучение, които могат да откриват аномалии в потоци от данни, като разглеждат данни от определен период от време (като последния час) и откриват аномални данни. Това често се използва за предиктивна поддръжка, търсейки индикации, че нещо може скоро да се счупи, за да можете да го поправите или замените, преди това да се случи. Може да искате всяка част от телеметрията за машина да бъде изпратена, за да може да бъде обработена за откриване на аномалии, така че веднага щом IoT устройството се свърже отново, то ще изпрати цялата телеметрия, генерирана по време на прекъсването на интернет. + +Дизайнерите на IoT устройства също трябва да обмислят дали IoT устройството може да бъде използвано по време на прекъсване на интернет или загуба на сигнал, причинена от местоположение. Умният термостат трябва да може да взема някои ограничени решения за контрол на отоплението, ако не може да изпраща телеметрия към облака поради прекъсване. + +[![Този Ferrari беше блокиран, защото някой се опита да го обнови под земята, където няма клетъчен сигнал](../../../../../translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.bg.png)](https://twitter.com/internetofshit/status/1315736960082808832) + +За MQTT, за да се справи със загуба на свързаност, устройството и сървърният код ще трябва да бъдат отговорни за осигуряване на доставката на съобщения, ако е необходимо, например чрез изискване всички изпратени съобщения да бъдат отговорени с допълнителни съобщения на тема за отговор, и ако не, те да бъдат опашени ръчно, за да бъдат преиграни по-късно. + +## Команди + +Командите са съобщения, изпратени от облака към устройство, инструктиращи го да направи нещо. Повечето от времето това включва даване на някакъв вид изход чрез актуатор, но може да бъде инструкция за самото устройство, като например да се рестартира или да събере допълнителна телеметрия и да я върне като отговор на командата. + +![Интернет свързан термостат, получаващ команда за включване на отоплението](../../../../../translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.bg.png) + +Термостат може да получи команда от облака да включи отоплението. Въз основа на телеметричните данни от всички сензори, ако облачната услуга е решила, че отоплението трябва да бъде включено, тя изпраща съответната команда. + +### Изпращане на команди към MQTT брокера + +Следващата стъпка за нашия интернет контролиран нощен светлинен индикатор е сървърният код да изпрати команда обратно към IoT устройството, за да контролира светлината въз основа на нивата на светлина, които то засича. + +1. Отворете сървърния код в VS Code. + +1. Добавете следния ред след декларацията на `client_telemetry_topic`, за да дефинирате коя тема да изпраща команди: + + ```python + server_command_topic = id + '/commands' + ``` + +1. Добавете следния код в края на функцията `handle_telemetry`: + + ```python + command = { 'led_on' : payload['light'] < 300 } + print("Sending message:", command) + + client.publish(server_command_topic, json.dumps(command)) + ``` + + Това изпраща JSON съобщение към командната тема със стойността на `led_on`, зададена на true или false, в зависимост от това дали светлината е по-малка от 300 или не. Ако светлината е по-малка от 300, се изпраща true, за да инструктира устройството да включи LED. + +1. Стартирайте кода както преди. + +1. Регулирайте нивата на светлина, засечени от вашето физическо или виртуално устройство. Получените съобщения и изпратените команди ще бъдат написани в терминала: + + ```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} + ``` + +> 💁 Телеметрията и командите се изпращат на една тема всяка. Това означава, че телеметрията от множество устройства ще се появи на една телеметрична тема, а командите към множество устройства ще се появят на една командна тема. Ако искате да изпратите команда към конкретно устройство, можете да използвате множество теми, именувани с уникален идентификатор на устройството, като `/commands/device1`, `/commands/device2`. Така устройството може да слуша съобщения, предназначени само за него. + +> 💁 Можете да намерите този код в папката [code-commands/server](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/server). + +### Обработка на команди на IoT устройството + +Сега, когато командите се изпращат от сървъра, можете да добавите код към IoT устройството, за да ги обработва и контролира LED. + +Следвайте съответната стъпка по-долу, за да слушате команди от MQTT брокера: + +* [Arduino - Wio Terminal](wio-terminal-commands.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-commands.md) + +След като този код бъде написан и изпълнен, експериментирайте с промяна на нивата на светлина. Наблюдавайте изхода от сървъра и устройството и наблюдавайте LED, докато променяте нивата на светлина. + +### Загуба на свързаност + +Какво трябва да направи облачна услуга, ако трябва да изпрати команда към IoT устройство, което е офлайн? Отново, отговорът е - зависи. + +Ако последната команда отменя предишна, тогава предишните вероятно могат да бъдат игнорирани. Ако облачна услуга изпрати команда за включване на отоплението, след това изпрати команда за изключване, тогава командата за включване може да бъде игнорирана и да не бъде изпратена отново. + +Ако командите трябва да бъдат обработени в последователност, като например движение на роботизирана ръка нагоре, след това затваряне на захващач, тогава те трябва да бъдат +За тези устройства, помислете какви съобщения може да изпращат или получават. Каква телеметрия изпращат? Какви съобщения или команди може да получават? Смятате ли, че са сигурни? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8) + +## Преглед и самостоятелно обучение + +Прочетете повече за MQTT на [страницата на Wikipedia за MQTT](https://wikipedia.org/wiki/MQTT). + +Опитайте да стартирате MQTT брокер сами, използвайки [Mosquitto](https://www.mosquitto.org), и се свържете с него от вашето IoT устройство и сървърен код. + +> 💁 Съвет - по подразбиране Mosquitto не позволява анонимни връзки (т.е. свързване без потребителско име и парола) и не позволява връзки извън компютъра, на който работи. +> Можете да поправите това с [`mosquitto.conf` конфигурационен файл](https://www.mosquitto.org/man/mosquitto-conf-5.html) със следното съдържание: +> +> ```sh +> listener 1883 0.0.0.0 +> allow_anonymous true +> ``` + +## Задача + +[Сравнете и противопоставете MQTT с други комуникационни протоколи](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/assignment.md b/translations/bg/1-getting-started/lessons/4-connect-internet/assignment.md new file mode 100644 index 00000000..5c115575 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/assignment.md @@ -0,0 +1,28 @@ + +# Сравнение и съпоставка на MQTT с други комуникационни протоколи + +## Инструкции + +Този урок обхвана MQTT като комуникационен протокол. Съществуват и други, включително AMQP и HTTP/HTTPS. + +Проучете и двата и ги сравнете/съпоставете с MQTT. Помислете за консумация на енергия, сигурност и устойчивост на съобщенията при загуба на връзка. + +## Критерии за оценка + +| Критерий | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Сравнение на AMQP с MQTT | Успява да сравни и съпостави AMQP с MQTT, като обхваща консумация на енергия, сигурност и устойчивост на съобщенията. | Частично успява да сравни и съпостави AMQP с MQTT, като обхваща два от аспектите: консумация на енергия, сигурност и устойчивост на съобщенията. | Частично успява да сравни и съпостави AMQP с MQTT, като обхваща един от аспектите: консумация на енергия, сигурност и устойчивост на съобщенията. | +| Сравнение на HTTP/HTTPS с MQTT | Успява да сравни и съпостави HTTP/HTTPS с MQTT, като обхваща консумация на енергия, сигурност и устойчивост на съобщенията. | Частично успява да сравни и съпостави HTTP/HTTPS с MQTT, като обхваща два от аспектите: консумация на енергия, сигурност и устойчивост на съобщенията. | Частично успява да сравни и съпостави HTTP/HTTPS с MQTT, като обхваща един от аспектите: консумация на енергия, сигурност и устойчивост на съобщенията. | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md b/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md new file mode 100644 index 00000000..864ab80c --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md @@ -0,0 +1,67 @@ + +# Контролирайте нощната си лампа през Интернет - Виртуален IoT хардуер и Raspberry Pi + +В тази част на урока ще се абонирате за команди, изпратени от MQTT брокер към вашия Raspberry Pi или виртуално IoT устройство. + +## Абониране за команди + +Следващата стъпка е да се абонирате за командите, изпратени от MQTT брокера, и да реагирате на тях. + +### Задача + +Абонирайте се за команди. + +1. Отворете проекта за нощната лампа във VS Code. + +1. Ако използвате виртуално IoT устройство, уверете се, че терминалът работи във виртуалната среда. Ако използвате Raspberry Pi, няма да използвате виртуална среда. + +1. Добавете следния код след дефинициите на `client_telemetry_topic`: + + ```python + server_command_topic = id + '/commands' + ``` + + `server_command_topic` е MQTT темата, за която устройството ще се абонира, за да получава команди за LED. + +1. Добавете следния код точно над основния цикъл, след реда `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 + ``` + + Този код дефинира функцията `handle_command`, която чете съобщение като JSON документ и търси стойността на свойството `led_on`. Ако е зададено на `True`, LED светлината се включва, в противен случай се изключва. + + MQTT клиентът се абонира за темата, по която сървърът ще изпраща съобщения, и задава функцията `handle_command` да се извиква, когато се получи съобщение. + + > 💁 Обработчикът `on_message` се извиква за всички теми, за които сте се абонирали. Ако по-късно напишете код, който слуша множество теми, можете да получите темата, към която е изпратено съобщението, от обекта `message`, предаден на функцията обработчик. + +1. Стартирайте кода по същия начин, както стартирахте кода от предишната част на задачата. Ако използвате виртуално IoT устройство, уверете се, че приложението CounterFit работи и че светлинният сензор и LED са създадени на правилните пинове. + +1. Регулирайте нивата на светлина, засечени от вашето физическо или виртуално устройство. Получените съобщения и изпратените команди ще бъдат изписани в терминала. LED светлината също ще се включва и изключва в зависимост от нивото на светлината. + +> 💁 Можете да намерите този код в папката [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device) или в папката [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi). + +😀 Успешно програмирахте устройството си да реагира на команди от MQTT брокер. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md b/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md new file mode 100644 index 00000000..23974657 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md @@ -0,0 +1,93 @@ + +# Контролирайте нощната си лампа през Интернет - Виртуален IoT хардуер и Raspberry Pi + +IoT устройството трябва да бъде програмирано да комуникира с *test.mosquitto.org* чрез MQTT, за да изпраща телеметрични стойности с показанията на светлинния сензор и да получава команди за управление на LED. + +В тази част от урока ще свържете вашия Raspberry Pi или виртуално IoT устройство към MQTT брокер. + +## Инсталирайте MQTT клиентския пакет + +За да комуникирате с MQTT брокера, трябва да инсталирате библиотека за MQTT чрез pip пакет, или на вашия Pi, или във виртуалната среда, ако използвате виртуално устройство. + +### Задача + +Инсталирайте pip пакета + +1. Отворете проекта за нощната лампа в VS Code. + +1. Ако използвате виртуално IoT устройство, уверете се, че терминалът работи във виртуалната среда. Ако използвате Raspberry Pi, няма да използвате виртуална среда. + +1. Изпълнете следната команда, за да инсталирате MQTT pip пакета: + + ```sh + pip3 install paho-mqtt + ``` + +## Програмирайте устройството + +Устройството е готово за програмиране. + +### Задача + +Напишете кода за устройството. + +1. Добавете следния импорт в началото на файла `app.py`: + + ```python + import paho.mqtt.client as mqtt + ``` + + Библиотеката `paho.mqtt.client` позволява на вашето приложение да комуникира чрез MQTT. + +1. Добавете следния код след дефинициите на светлинния сензор и LED: + + ```python + id = '' + + client_name = id + 'nightlight_client' + ``` + + Заменете `` с уникален идентификатор, който ще се използва като име на този клиент на устройството, а по-късно и за темите, които устройството публикува и на които се абонира. Брокерът *test.mosquitto.org* е публичен и се използва от много хора, включително други ученици, които работят по това задание. Уникалното име на MQTT клиента и темите гарантират, че вашият код няма да се сблъска с този на другите. Ще ви е необходим този идентификатор и когато създавате сървърния код по-късно в това задание. + + > 💁 Можете да използвате уебсайт като [GUIDGen](https://www.guidgen.com), за да генерирате уникален идентификатор. + + `client_name` е уникално име за този MQTT клиент на брокера. + +1. Добавете следния код под новия код, за да създадете MQTT клиентски обект и да се свържете с MQTT брокера: + + ```python + mqtt_client = mqtt.Client(client_name) + mqtt_client.connect('test.mosquitto.org') + + mqtt_client.loop_start() + + print("MQTT connected!") + ``` + + Този код създава клиентския обект, свързва се с публичния MQTT брокер и стартира обработващ цикъл, който работи във фонов поток и слуша за съобщения на всички абонирани теми. + +1. Изпълнете кода по същия начин, както изпълнихте кода от предишната част на заданието. Ако използвате виртуално IoT устройство, уверете се, че приложението CounterFit работи и че светлинният сензор и LED са създадени на правилните пинове. + + ```output + (.venv) ➜ nightlight python app.py + MQTT connected! + Light level: 0 + Light level: 0 + ``` + +> 💁 Можете да намерите този код в папката [code-mqtt/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/virtual-device) или в папката [code-mqtt/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/pi). + +😀 Успешно свързахте вашето устройство към MQTT брокер. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md b/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md new file mode 100644 index 00000000..ea11b8b9 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md @@ -0,0 +1,74 @@ + +# Контролирайте нощната си лампа през Интернет - Виртуален IoT хардуер и Raspberry Pi + +В тази част на урока ще изпратите телеметрия със стойности на светлината от вашия Raspberry Pi или виртуално IoT устройство към MQTT брокер. + +## Изпращане на телеметрия + +Следващата стъпка е да създадете JSON документ с телеметрия и да го изпратите към MQTT брокера. + +### Задача + +Изпратете телеметрия към MQTT брокера. + +1. Отворете проекта за нощната лампа в VS Code. + +1. Ако използвате виртуално IoT устройство, уверете се, че терминалът работи във виртуалната среда. Ако използвате Raspberry Pi, няма да използвате виртуална среда. + +1. Добавете следния импорт в началото на файла `app.py`: + + ```python + import json + ``` + + Библиотеката `json` се използва за кодиране на телеметрията като JSON документ. + +1. Добавете следното след декларацията на `client_name`: + + ```python + client_telemetry_topic = id + '/telemetry' + ``` + + `client_telemetry_topic` е MQTT темата, към която устройството ще изпраща стойностите на светлината. + +1. Заменете съдържанието на цикъла `while True:` в края на файла със следното: + + ```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) + ``` + + Този код пакетира стойността на светлината в JSON документ и я изпраща към MQTT брокера. След това прави пауза, за да намали честотата на изпращане на съобщения. + +1. Стартирайте кода по същия начин, както стартирахте кода от предишната част на задачата. Ако използвате виртуално IoT устройство, уверете се, че приложението CounterFit работи и че светлинният сензор и LED са създадени на правилните пинове. + + ```output + (.venv) ➜ nightlight python app.py + MQTT connected! + Sending telemetry {"light": 0} + Sending telemetry {"light": 0} + ``` + +> 💁 Можете да намерите този код в папката [code-telemetry/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/virtual-device) или в папката [code-telemetry/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/pi). + +😀 Успешно изпратихте телеметрия от вашето устройство. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md b/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md new file mode 100644 index 00000000..4429f061 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md @@ -0,0 +1,93 @@ + +# Контролирайте нощната си лампа през Интернет - Wio Terminal + +В тази част от урока ще се абонирате за команди, изпратени от MQTT брокер към вашия Wio Terminal. + +## Абониране за команди + +Следващата стъпка е да се абонирате за командите, изпратени от MQTT брокера, и да реагирате на тях. + +### Задача + +Абонирайте се за команди. + +1. Отворете проекта за нощната лампа в VS Code. + +1. Добавете следния код в края на файла `config.h`, за да дефинирате името на темата за командите: + + ```cpp + const string SERVER_COMMAND_TOPIC = ID + "/commands"; + ``` + + `SERVER_COMMAND_TOPIC` е темата, за която устройството ще се абонира, за да получава команди за LED. + +1. Добавете следния ред в края на функцията `reconnectMQTTClient`, за да се абонирате за темата за команди, когато MQTT клиентът се свърже отново: + + ```cpp + client.subscribe(SERVER_COMMAND_TOPIC.c_str()); + ``` + +1. Добавете следния код под функцията `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); + } + ``` + + Тази функция ще бъде callback, който MQTT клиентът ще извика, когато получи съобщение от сървъра. + + Съобщението се получава като масив от беззнакови 8-битови числа, затова трябва да бъде преобразувано в масив от символи, за да се третира като текст. + + Съобщението съдържа JSON документ, който се декодира с помощта на библиотеката ArduinoJson. Свойството `led_on` от JSON документа се прочита и, в зависимост от стойността му, LED светлината се включва или изключва. + +1. Добавете следния код към функцията `createMQTTClient`: + + ```cpp + client.setCallback(clientCallback); + ``` + + Този код задава `clientCallback` като callback, който ще бъде извикан, когато се получи съобщение от MQTT брокера. + + > 💁 Callback обработчикът `clientCallback` се извиква за всички теми, за които сте се абонирали. Ако по-късно напишете код, който слуша множество теми, можете да получите темата, към която е изпратено съобщението, от параметъра `topic`, предаден на callback функцията. + +1. Качете кода на вашия Wio Terminal и използвайте Serial Monitor, за да видите нивата на светлина, които се изпращат към MQTT брокера. + +1. Регулирайте нивата на светлина, засечени от вашето физическо или виртуално устройство. Ще видите съобщения, които се получават, и команди, които се изпращат в терминала. Също така ще видите как LED светлината се включва и изключва в зависимост от нивото на светлина. + +> 💁 Можете да намерите този код в папката [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal). + +😀 Успешно програмирахте вашето устройство да реагира на команди от MQTT брокер. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md b/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md new file mode 100644 index 00000000..042a9b56 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md @@ -0,0 +1,251 @@ + +# Контролирайте нощната си лампа през Интернет - Wio Terminal + +IoT устройството трябва да бъде програмирано да комуникира с *test.mosquitto.org* чрез MQTT, за да изпраща телеметрични стойности с показанията на светлинния сензор и да получава команди за управление на LED. + +В тази част от урока ще свържете вашия Wio Terminal към MQTT брокер. + +## Инсталирайте WiFi и MQTT Arduino библиотеки + +За да комуникирате с MQTT брокера, трябва да инсталирате някои Arduino библиотеки, които да използват WiFi чипа в Wio Terminal и да комуникират с MQTT. При разработка за Arduino устройства можете да използвате широк набор от библиотеки, които съдържат отворен код и реализират огромен набор от функционалности. Seeed публикува библиотеки за Wio Terminal, които му позволяват да комуникира чрез WiFi. Други разработчици са публикували библиотеки за комуникация с MQTT брокери, и вие ще използвате тези библиотеки с вашето устройство. + +Тези библиотеки се предоставят като изходен код, който може да бъде автоматично импортиран в PlatformIO и компилиран за вашето устройство. По този начин Arduino библиотеките ще работят на всяко устройство, което поддържа Arduino framework, при условие че устройството има специфичен хардуер, необходим за тази библиотека. Някои библиотеки, като Seeed WiFi библиотеките, са специфични за определен хардуер. + +Библиотеките могат да бъдат инсталирани глобално и компилирани при нужда или в конкретен проект. За тази задача библиотеките ще бъдат инсталирани в проекта. + +✅ Можете да научите повече за управлението на библиотеки и как да намерите и инсталирате библиотеки в [документацията за библиотечния мениджър на PlatformIO](https://docs.platformio.org/en/latest/librarymanager/index.html). + +### Задача - инсталирайте WiFi и MQTT Arduino библиотеки + +Инсталирайте Arduino библиотеките. + +1. Отворете проекта за нощната лампа в VS Code. + +1. Добавете следното в края на файла `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 + ``` + + Това импортира Seeed WiFi библиотеките. Синтаксисът `@ ` се отнася до конкретна версия на библиотеката. + + > 💁 Можете да премахнете `@ `, за да използвате винаги най-новата версия на библиотеките, но няма гаранция, че по-късните версии ще работят с кода по-долу. Кодът тук е тестван с тази версия на библиотеките. + + Това е всичко, което трябва да направите, за да добавите библиотеките. Следващия път, когато PlatformIO компилира проекта, ще изтегли изходния код за тези библиотеки и ще го компилира в проекта ви. + +1. Добавете следното към `lib_deps`: + + ```ini + knolleary/PubSubClient @ 2.8 + ``` + + Това импортира [PubSubClient](https://github.com/knolleary/pubsubclient), Arduino MQTT клиент. + +## Свързване към WiFi + +Wio Terminal вече може да бъде свързан към WiFi. + +### Задача - свържете се към WiFi + +Свържете Wio Terminal към WiFi. + +1. Създайте нов файл в папката `src`, наречен `config.h`. Можете да направите това, като изберете папката `src` или файла `main.cpp` вътре и натиснете бутона **New file** от explorer. Този бутон се появява само когато курсорът ви е върху explorer. + + ![Бутон за нов файл](../../../../../translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.bg.png) + +1. Добавете следния код в този файл, за да дефинирате константи за вашите WiFi идентификационни данни: + + ```cpp + #pragma once + + #include + + using namespace std; + + // WiFi credentials + const char *SSID = ""; + const char *PASSWORD = ""; + ``` + + Заменете `` с SSID на вашия WiFi. Заменете `` с паролата за вашия WiFi. + +1. Отворете файла `main.cpp`. + +1. Добавете следните `#include` директиви в горната част на файла: + + ```cpp + #include + #include + #include + + #include "config.h" + ``` + + Това включва header файлове за библиотеките, които добавихте по-рано, както и header файла за конфигурация. Тези header файлове са необходими, за да кажат на PlatformIO да включи кода от библиотеките. Без изрично включване на тези header файлове, част от кода няма да бъде компилиран и ще получите грешки при компилация. + +1. Добавете следния код над функцията `setup`: + + ```cpp + void connectWiFi() + { + while (WiFi.status() != WL_CONNECTED) + { + Serial.println("Connecting to WiFi.."); + WiFi.begin(SSID, PASSWORD); + delay(500); + } + + Serial.println("Connected!"); + } + ``` + + Този код се изпълнява, докато устройството не е свързано към WiFi, и се опитва да се свърже, използвайки SSID и паролата от header файла за конфигурация. + +1. Добавете извикване на тази функция в долната част на функцията `setup`, след като пиновете са конфигурирани. + + ```cpp + connectWiFi(); + ``` + +1. Качете този код на вашето устройство, за да проверите дали WiFi връзката работи. Трябва да видите това в серийния монитор. + + ```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! + ``` + +## Свързване към MQTT + +След като Wio Terminal е свързан към WiFi, той може да се свърже към MQTT брокера. + +### Задача - свържете се към MQTT + +Свържете се към MQTT брокера. + +1. Добавете следния код в долната част на файла `config.h`, за да дефинирате детайлите за връзка с MQTT брокера: + + ```cpp + // MQTT settings + const string ID = ""; + + const string BROKER = "test.mosquitto.org"; + const string CLIENT_NAME = ID + "nightlight_client"; + ``` + + Заменете `` с уникален идентификатор, който ще се използва като име на този клиент на устройството и по-късно за темите, които това устройство публикува и на които се абонира. Брокерът *test.mosquitto.org* е публичен и се използва от много хора, включително други студенти, които работят по това задание. Уникалното име на MQTT клиента и имената на темите гарантират, че вашият код няма да се сблъска с този на други хора. Ще ви е необходим този идентификатор и когато създавате сървърния код по-късно в това задание. + + > 💁 Можете да използвате уебсайт като [GUIDGen](https://www.guidgen.com), за да генерирате уникален идентификатор. + + `BROKER` е URL адресът на MQTT брокера. + + `CLIENT_NAME` е уникално име за този MQTT клиент на брокера. + +1. Отворете файла `main.cpp` и добавете следния код под функцията `connectWiFi` и над функцията `setup`: + + ```cpp + WiFiClient wioClient; + PubSubClient client(wioClient); + ``` + + Този код създава WiFi клиент, използвайки WiFi библиотеките на Wio Terminal, и го използва за създаване на MQTT клиент. + +1. Под този код добавете следното: + + ```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); + } + } + } + ``` + + Тази функция тества връзката с MQTT брокера и се свързва отново, ако не е свързана. Тя се изпълнява постоянно, докато не е свързана, и се опитва да се свърже, използвайки уникалното име на клиента, дефинирано в header файла за конфигурация. + + Ако връзката се провали, тя се опитва отново след 5 секунди. + +1. Добавете следния код под функцията `reconnectMQTTClient`: + + ```cpp + void createMQTTClient() + { + client.setServer(BROKER.c_str(), 1883); + reconnectMQTTClient(); + } + ``` + + Този код задава MQTT брокера за клиента, както и настройва callback функцията, когато се получи съобщение. След това се опитва да се свърже с брокера. + +1. Извикайте функцията `createMQTTClient` във функцията `setup`, след като WiFi е свързан. + +1. Заменете цялата функция `loop` със следното: + + ```cpp + void loop() + { + reconnectMQTTClient(); + client.loop(); + + delay(2000); + } + ``` + + Този код започва с повторно свързване към MQTT брокера. Тези връзки могат лесно да бъдат прекъснати, затова е добре редовно да се проверява и свързва отново, ако е необходимо. След това извиква метода `loop` на MQTT клиента, за да обработи всички съобщения, които идват на темата, на която е абониран. Това приложение е еднопоточково, така че съобщенията не могат да бъдат получени на фонов поток, затова трябва да се отдели време на основния поток за обработка на всички съобщения, които чакат на мрежовата връзка. + + Накрая, забавяне от 2 секунди гарантира, че нивата на светлина не се изпращат твърде често и намалява консумацията на енергия на устройството. + +1. Качете кода на вашия Wio Terminal и използвайте серийния монитор, за да видите устройството, което се свързва към WiFi и 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 + ``` + +> 💁 Можете да намерите този код в папката [code-mqtt/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal). + +😀 Успешно свързахте вашето устройство към MQTT брокер. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md b/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md new file mode 100644 index 00000000..8b95cdc9 --- /dev/null +++ b/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md @@ -0,0 +1,93 @@ + +# Контролирайте нощната си лампа през Интернет - Wio Terminal + +В тази част от урока ще изпращате телеметрия с нива на светлина от вашия Wio Terminal към MQTT брокера. + +## Инсталирайте JSON библиотеките за Arduino + +Популярен начин за изпращане на съобщения през MQTT е използването на JSON. Съществува библиотека за Arduino, която улеснява четенето и писането на JSON документи. + +### Задача + +Инсталирайте JSON библиотеката за Arduino. + +1. Отворете проекта за нощна лампа в VS Code. + +1. Добавете следния ред като допълнителен към списъка `lib_deps` в файла `platformio.ini`: + + ```ini + bblanchon/ArduinoJson @ 6.17.3 + ``` + + Това импортира [ArduinoJson](https://arduinojson.org), библиотека за JSON за Arduino. + +## Публикувайте телеметрия + +Следващата стъпка е да създадете JSON документ с телеметрия и да го изпратите към MQTT брокера. + +### Задача - публикуване на телеметрия + +Публикувайте телеметрия към MQTT брокера. + +1. Добавете следния код в долната част на файла `config.h`, за да дефинирате името на темата за телеметрия за MQTT брокера: + + ```cpp + const string CLIENT_TELEMETRY_TOPIC = ID + "/telemetry"; + ``` + + `CLIENT_TELEMETRY_TOPIC` е темата, в която устройството ще публикува нивата на светлина. + +1. Отворете файла `main.cpp`. + +1. Добавете следната директива `#include` в горната част на файла: + + ```cpp + #include + ``` + +1. Добавете следния код вътре във функцията `loop`, точно преди `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()); + ``` + + Този код чете нивото на светлина и създава JSON документ, използвайки ArduinoJson, който съдържа това ниво. След това документът се сериализира в низ и се публикува в темата за телеметрия на MQTT чрез MQTT клиента. + +1. Качете кода на вашия Wio Terminal и използвайте Serial Monitor, за да видите нивата на светлина, които се изпращат към MQTT брокера. + + ```output + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + Sending telemetry {"light":652} + Sending telemetry {"light":612} + Sending telemetry {"light":583} + ``` + +> 💁 Можете да намерите този код в папката [code-telemetry/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/wio-terminal). + +😀 Успешно изпратихте телеметрия от вашето устройство. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/README.md b/translations/bg/2-farm/README.md new file mode 100644 index 00000000..5c57e1bf --- /dev/null +++ b/translations/bg/2-farm/README.md @@ -0,0 +1,34 @@ + +# Земеделие с IoT + +С нарастването на населението се увеличава и натискът върху земеделието. Количеството налична земя не се променя, но климатът - да, което създава още повече предизвикателства за фермерите, особено за 2 милиарда [фермери за собствена издръжка](https://wikipedia.org/wiki/Subsistence_agriculture), които разчитат на това, което отглеждат, за да се хранят и изхранват семействата си. IoT може да помогне на фермерите да вземат по-умни решения за това какво да отглеждат и кога да прибират реколтата, да увеличат добивите, да намалят количеството ръчен труд и да откриват и се справят с вредители. + +В тези 6 урока ще научите как да приложите Интернет на нещата, за да подобрите и автоматизирате земеделието. + +> 💁 Тези уроци ще използват някои облачни ресурси. Ако не завършите всички уроци в този проект, уверете се, че сте [почистили проекта си](../clean-up.md). + +## Теми + +1. [Прогнозиране на растежа на растенията с IoT](lessons/1-predict-plant-growth/README.md) +1. [Откриване на влажността на почвата](lessons/2-detect-soil-moisture/README.md) +1. [Автоматизирано поливане на растения](lessons/3-automated-plant-watering/README.md) +1. [Миграция на вашето растение към облака](lessons/4-migrate-your-plant-to-the-cloud/README.md) +1. [Миграция на логиката на приложението към облака](lessons/5-migrate-application-to-the-cloud/README.md) +1. [Осигуряване на сигурност за вашето растение](lessons/6-keep-your-plant-secure/README.md) + +## Благодарности + +Всички уроци са написани с ♥️ от [Jim Bennett](https://GitHub.com/JimBobBennett) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/README.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/README.md new file mode 100644 index 00000000..9a59a59b --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/README.md @@ -0,0 +1,276 @@ + +## Прогнозиране на растежа на растенията с IoT + +![Скица на урока](../../../../../translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +## Тест преди лекцията + +[Тест преди лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/9) + +## Въведение + +Растенията се нуждаят от определени условия, за да растат - вода, въглероден диоксид, хранителни вещества, светлина и топлина. В този урок ще научите как да изчислявате темповете на растеж и зрелост на растенията, като измервате температурата на въздуха. + +В този урок ще разгледаме: + +* [Дигитално земеделие](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Защо температурата е важна в земеделието?](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Измерване на околната температура](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Дни на растеж (GDD)](../../../../../2-farm/lessons/1-predict-plant-growth) +* [Изчисляване на GDD с данни от температурен сензор](../../../../../2-farm/lessons/1-predict-plant-growth) + +## Дигитално земеделие + +Дигиталното земеделие трансформира начина, по който се извършва земеделие, като използва инструменти за събиране, съхранение и анализ на данни от земеделски дейности. В момента се намираме в период, описван като "Четвъртата индустриална революция" от Световния икономически форум, а възходът на дигиталното земеделие е наречен "Четвъртата земеделска революция" или "Земеделие 4.0". + +> 🎓 Терминът "Дигитално земеделие" включва и цялата "верига на стойността в земеделието", тоест целия път от фермата до масата. Това включва проследяване на качеството на продукцията, докато храната се транспортира и обработва, системи за складове и електронна търговия, дори приложения за наемане на трактори! + +Тези промени позволяват на фермерите да увеличат добивите, да използват по-малко торове и пестициди и да пестят вода по-ефективно. Въпреки че основно се използват в по-богатите страни, сензорите и другите устройства постепенно намаляват цената си, което ги прави по-достъпни и за развиващите се страни. + +Някои техники, които се използват в дигиталното земеделие, са: + +* Измерване на температурата - измерването на температурата позволява на фермерите да прогнозират растежа и зрелостта на растенията. +* Автоматизирано напояване - измерване на влажността на почвата и включване на напоителни системи, когато почвата е прекалено суха, вместо напояване по график. Напояването по график може да доведе до недостатъчно напояване по време на горещи и сухи периоди или до прекомерно напояване по време на дъждове. Чрез напояване само когато почвата има нужда, фермерите могат да оптимизират използването на вода. +* Контрол на вредителите - фермерите могат да използват камери на автоматизирани роботи или дронове, за да проверяват за вредители, след което да прилагат пестициди само там, където е необходимо, намалявайки количеството използвани пестициди и замърсяването на местните водоизточници. + +✅ Направете проучване. Какви други техники се използват за подобряване на земеделските добиви? + +> 🎓 Терминът "Прецизно земеделие" се използва за определяне на наблюдението, измерването и реагирането на нуждите на културите на ниво поле или дори на части от поле. Това включва измерване на нивата на вода, хранителни вещества и вредители и точното реагиране, например напояване само на малка част от полето. + +## Защо температурата е важна в земеделието? + +Когато изучаваме растенията, повечето ученици научават за необходимостта от вода, светлина, въглероден диоксид и хранителни вещества. Растенията също така се нуждаят от топлина, за да растат - затова растенията цъфтят през пролетта, когато температурата се повишава, защо кокичетата или нарцисите могат да поникнат рано при кратко затопляне и защо оранжериите са толкова ефективни за отглеждане на растения. + +> 🎓 Оранжериите и парниците изпълняват подобна функция, но с важна разлика. Парниците се отопляват изкуствено и позволяват на фермерите да контролират температурата по-точно, докато оранжериите разчитат на слънцето за топлина и обикновено единственият контрол са прозорци или други отвори за изпускане на топлина. + +Растенията имат базова или минимална температура, оптимална температура и максимална температура, всички базирани на среднодневните температури. + +* Базова температура - това е минималната среднодневна температура, необходима за растежа на растението. +* Оптимална температура - това е най-добрата среднодневна температура за максимален растеж. +* Максимална температура - това е максималната температура, която растението може да издържи. Над тази температура растението ще спре растежа си, за да запази вода и да оцелее. + +> 💁 Това са средни температури, изчислени като средно аритметично от дневните и нощните температури. Растенията също така се нуждаят от различни температури през деня и нощта, за да фотосинтезират по-ефективно и да пестят енергия през нощта. + +Всяко растение има различни стойности за базова, оптимална и максимална температура. Затова някои растения процъфтяват в горещи страни, а други в по-студени. + +✅ Направете проучване. За растенията във вашата градина, училище или местен парк, опитайте се да намерите базовата температура. + +![Графика, показваща как темпът на растеж се увеличава с повишаването на температурата, след което намалява, когато температурата стане твърде висока](../../../../../translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.bg.png) + +Графиката по-горе показва примерна зависимост между темпа на растеж и температурата. До базовата температура няма растеж. Темпът на растеж се увеличава до оптималната температура, след което намалява след достигане на този пик. + +Формата на тази графика варира при различните видове растения. Някои имат по-рязък спад след оптималната температура, други имат по-бавен ръст от базовата до оптималната температура. + +> 💁 За да постигне най-добър растеж, фермерът трябва да знае трите температурни стойности и да разбира формата на графиките за растенията, които отглежда. + +Ако фермерът има контрол върху температурата, например в търговски парник, той може да оптимизира условията за своите растения. Например, търговски парник за домати ще поддържа температура около 25°C през деня и 20°C през нощта, за да постигне най-бърз растеж. + +> 🍅 Комбинирането на тези температури с изкуствено осветление, торове и контролиран въглероден диоксид позволява на търговските производители да отглеждат и събират реколта през цялата година. + +## Измерване на околната температура + +Температурните сензори могат да се използват с IoT устройства за измерване на околната температура. + +### Задача - измерване на температурата + +Следвайте съответното ръководство, за да наблюдавате температурите с вашето IoT устройство: + +* [Arduino - Wio Terminal](wio-terminal-temp.md) +* [Едноплатков компютър - Raspberry Pi](pi-temp.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device-temp.md) + +## Дни на растеж (GDD) + +Дните на растеж (известни също като единици на растеж) са начин за измерване на растежа на растенията въз основа на температурата. Ако растението има достатъчно вода, хранителни вещества и въглероден диоксид, температурата определя темпа на растеж. + +Дните на растеж (GDD) се изчисляват за всеки ден като средната температура в Целзий за деня над базовата температура на растението. Всяко растение се нуждае от определен брой GDD, за да расте, да цъфти или да узрее. Колкото повече GDD има всеки ден, толкова по-бързо растението ще расте. + +> 🇺🇸 За американците, дните на растеж могат също да се изчисляват във Фаренхайт. 5 GDD (в Целзий) са еквивалентни на 9 GDD (във Фаренхайт). + +Пълната формула за GDD е малко сложна, но има опростено уравнение, което често се използва като добра приблизителност: + +![GDD = T max + T min разделено на 2, всичко минус T base](../../../../../translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.bg.png) + +* **GDD** - това е броят на дните на растеж +* **T max** - това е дневната максимална температура в градуси Целзий +* **T min** - това е дневната минимална температура в градуси Целзий +* **T base** - това е базовата температура на растението в градуси Целзий + +> 💁 Има вариации, които се занимават с T max над 30°C или T min под T base, но ще ги игнорираме засега. + +### Пример - Царевица 🌽 + +В зависимост от сорта, царевицата се нуждае от между 800 и 2,700 GDD, за да узрее, като базовата температура е 10°C. + +На първия ден над базовата температура са измерени следните температури: + +| Измерване | Температура °C | +| :-------- | :------------: | +| Максимална | 16 | +| Минимална | 12 | + +Подставяйки тези числа в нашето уравнение: + +* T max = 16 +* T min = 12 +* T base = 10 + +Това дава изчисление: + +![GDD = 16 + 12 разделено на 2, всичко минус 10, дава отговор 4](../../../../../translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.bg.png) + +Царевицата е получила 4 GDD за този ден. Ако приемем сорт царевица, който се нуждае от 800 GDD, за да узрее, ще са необходими още 796 GDD, за да достигне зрелост. + +✅ Направете проучване. За растенията във вашата градина, училище или местен парк, опитайте се да намерите броя на GDD, необходими за достигане на зрелост или за производство на реколта. + +## Изчисляване на GDD с данни от температурен сензор + +Растенията не растат на фиксирани дати - например не можете да засадите семе и да знаете, че растението ще даде плод точно след 100 дни. Вместо това фермерът може да има приблизителна представа колко време отнема на растението да расте, след което ще проверява ежедневно, за да види кога реколтата е готова. + +Това има голямо въздействие върху труда в голяма ферма и съществува риск фермерът да пропусне реколта, която е готова неочаквано рано. Чрез измерване на температурите фермерът може да изчисли GDD, които растението е получило, което му позволява да проверява само близо до очакваната зрелост. + +Чрез събиране на данни за температурата с IoT устройство фермерът може автоматично да бъде уведомен, когато растенията са близо до зрелост. Типична архитектура за това е IoT устройствата да измерват температурата, след което да публикуват тези данни чрез Интернет, използвайки нещо като MQTT. Сървърният код след това слуша тези данни и ги съхранява някъде, например в база данни. Това означава, че данните могат да бъдат анализирани по-късно, например чрез нощна задача за изчисляване на GDD за деня, сумиране на GDD за всяка култура досега и предупреждение, ако растението е близо до зрелост. + +![Данните за телеметрия се изпращат към сървър и след това се съхраняват в база данни](../../../../../translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.bg.png) + +Сървърният код може също така да добавя допълнителна информация към данните. Например IoT устройството може да публикува идентификатор, който показва кое устройство е, а сървърният код може да използва това, за да намери местоположението на устройството и какви култури наблюдава. Може също така да добавя основни данни като текущото време, тъй като някои IoT устройства нямат необходимия хардуер за точно отчитане на времето или изискват допълнителен код за получаване на текущото време чрез Интернет. + +✅ Защо мислите, че различните полета може да имат различни температури? + +### Задача - публикуване на информация за температурата + +Следвайте съответното ръководство, за да публикувате данни за температурата чрез MQTT с вашето IoT устройство, така че те да могат да бъдат анализирани по-късно: + +* [Arduino - Wio Terminal](wio-terminal-temp-publish.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-temp-publish.md) + +### Задача - улавяне и съхранение на информацията за температурата + +След като IoT устройството публикува телеметрия, сървърният код може да бъде написан, за да се абонира за тези данни и да ги съхранява. Вместо да ги запазва в база данни, сървърният код ще ги запазва в CSV файл (Comma Separated Values). CSV файловете съхраняват данни като редове от стойности в текстов формат, като всяка стойност е разделена със запетая, а всеки запис е на нов ред. Те са удобен, четим за хора и добре поддържан начин за съхранение на данни като файл. + +CSV файлът ще има две колони - *дата* и *температура*. Колоната *дата* ще бъде зададена като текущата дата и час, когато съобщението е получено от сървъра, а *температурата* ще идва от телеметричното съобщение. + +1. Повторете стъпките от урок 4, за да създадете сървърен код за абониране за телеметрия. Не е необходимо да добавяте код за публикуване на команди. + + Стъпките за това са: + + * Конфигуриране и активиране на Python виртуална среда + + * Инсталиране на pip пакета paho-mqtt + + * Написване на код за слушане на MQTT съобщения, публикувани в темата за телеметрия + + > ⚠️ Можете да се обърнете към [инструкциите в урок 4 за създаване на Python приложение за получаване на телеметрия, ако е необходимо](../../../1-getting-started/lessons/4-connect-internet/README.md#receive-telemetry-from-the-mqtt-broker). + + Назовете папката за този проект `temperature-sensor-server`. + +1. Уверете се, че `client_name` отразява този проект: + + ```cpp + client_name = id + 'temperature_sensor_server' + ``` + +1. Добавете следните импорти в началото на файла, под съществуващите импорти: + + ```python + from os import path + import csv + from datetime import datetime + ``` + + Това импортира библиотека за четене на файлове, библиотека за работа с CSV файлове и библиотека за работа с дати и часове. + +1. Добавете следния код преди функцията `handle_telemetry`: + + ```python + temperature_file_name = 'temperature.csv' + fieldnames = ['date', 'temperature'] + + if not path.exists(temperature_file_name): + with open(temperature_file_name, mode='w') as csv_file: + writer = csv.DictWriter(csv_file, fieldnames=fieldnames) + writer.writeheader() + ``` + + Този код декларира някои константи за името на файла, в който ще се записва, и имената на колоните за CSV файла. Първият ред на CSV файла традиционно съдържа заглавия на колоните, разделени със запетая. + + Кодът след това проверява дали CSV файлът вече съществува. Ако не съществува, той се създава със заглав +Този код отваря CSV файла и добавя нов ред в края. Редът съдържа текущата дата и час, форматирани в четим за хора формат, последвани от температурата, получена от IoT устройството. Данните се съхраняват в [ISO 8601 формат](https://wikipedia.org/wiki/ISO_8601) с часовата зона, но без микросекунди. + +1. Стартирайте този код по същия начин както преди, като се уверите, че вашето IoT устройство изпраща данни. CSV файл, наречен `temperature.csv`, ще бъде създаден в същата папка. Ако го отворите, ще видите дати/часове и измервания на температурата: + + ```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. Стартирайте този код за известно време, за да съберете данни. Идеално би било да го стартирате за цял ден, за да съберете достатъчно данни за изчисленията на GDD. + + +> 💁 Ако използвате виртуално IoT устройство, изберете отметката за случайни стойности и задайте диапазон, за да избегнете получаването на една и съща температура всеки път, когато се връща стойността на температурата. + ![Изберете отметката за случайни стойности и задайте диапазон](../../../../../translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.bg.png) + + > 💁 Ако искате да стартирате това за цял ден, трябва да се уверите, че компютърът, на който работи вашият сървърен код, няма да премине в режим на заспиване, като промените настройките за захранване или използвате нещо като [този Python скрипт за поддържане на системата активна](https://github.com/jaqsparow/keep-system-active). + +> 💁 Можете да намерите този код в папката [code-server/temperature-sensor-server](../../../../../2-farm/lessons/1-predict-plant-growth/code-server/temperature-sensor-server). + +### Задача - изчисляване на GDD с използване на съхранените данни + +След като сървърът е събрал данни за температурата, GDD за дадено растение може да бъде изчислен. + +Стъпките за ръчно изчисление са: + +1. Намерете базовата температура за растението. Например, за ягоди базовата температура е 10°C. + +1. От `temperature.csv` намерете най-високата и най-ниската температура за деня. + +1. Използвайте формулата за изчисление на GDD, дадена по-рано, за да изчислите GDD. + +Например, ако най-високата температура за деня е 25°C, а най-ниската е 12°C: + +![GDD = 25 + 12 разделено на 2, след това извадете 10 от резултата, което дава 8.5](../../../../../translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.bg.png) + +* 25 + 12 = 37 +* 37 / 2 = 18.5 +* 18.5 - 10 = 8.5 + +Следователно ягодите са получили **8.5** GDD. Ягодите се нуждаят от около 250 GDD, за да дадат плод, така че има още време. + +--- + +## 🚀 Предизвикателство + +Растенията се нуждаят от повече от топлина, за да растат. Какви други фактори са необходими? + +За тези фактори, намерете дали има сензори, които могат да ги измерват. А какво ще кажете за актуатори, които да контролират тези нива? Как бихте създали едно или повече IoT устройства, за да оптимизирате растежа на растенията? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/10) + +## Преглед и самостоятелно обучение + +* Прочетете повече за дигиталното земеделие на [страницата за дигитално земеделие в Wikipedia](https://wikipedia.org/wiki/Digital_agriculture). Също така прочетете повече за прецизното земеделие на [страницата за прецизно земеделие в Wikipedia](https://wikipedia.org/wiki/Precision_agriculture). +* Пълното изчисление на растежните градус-дни (GDD) е по-сложно от опростеното, дадено тук. Прочетете повече за по-сложната формула и как да се справите с температури под базовата линия на [страницата за растежни градус-дни в Wikipedia](https://wikipedia.org/wiki/Growing_degree-day). +* Храната може да стане оскъдна в бъдеще, ако продължим да използваме същите методи за земеделие. Научете повече за високотехнологичните земеделски техники в [видеото за високотехнологични ферми на бъдещето в YouTube](https://www.youtube.com/watch?v=KIEOuKD9KX8). + +## Задание + +[Визуализирайте данните за GDD с помощта на Jupyter Notebook](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/assignment.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/assignment.md new file mode 100644 index 00000000..b7889dad --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/assignment.md @@ -0,0 +1,57 @@ + +# Визуализиране на данни за GDD с помощта на Jupyter Notebook + +## Инструкции + +В този урок събрахте данни за GDD с помощта на IoT сензор. За да получите качествени данни за GDD, трябва да събирате данни за няколко дни. За да визуализирате температурните данни и да изчислите GDD, можете да използвате инструменти като [Jupyter Notebooks](https://jupyter.org) за анализ на данните. + +Започнете със събиране на данни за няколко дни. Трябва да се уверите, че сървърният код работи през цялото време, докато вашето IoT устройство е активно, като коригирате настройките за управление на захранването или използвате нещо като [този Python скрипт за поддържане на системата активна](https://github.com/jaqsparow/keep-system-active). + +След като имате температурни данни, можете да използвате Jupyter Notebook в този репозиторий, за да ги визуализирате и изчислите GDD. Jupyter Notebook комбинира код и инструкции в блокове, наречени *клетки*, често с код на Python. Можете да прочетете инструкциите и след това да изпълните всеки блок код, блок по блок. Можете също така да редактирате кода. Например, в този notebook можете да редактирате базовата температура, използвана за изчисляване на GDD за вашето растение. + +1. Създайте папка с име `gdd-calculation` + +1. Изтеглете файла [gdd.ipynb](./code-notebook/gdd.ipynb) и го копирайте в папката `gdd-calculation`. + +1. Копирайте файла `temperature.csv`, създаден от MQTT сървъра. + +1. Създайте нова Python виртуална среда в папката `gdd-calculation`. + +1. Инсталирайте някои pip пакети за Jupyter Notebook, заедно с библиотеки, необходими за управление и визуализация на данните: + + ```sh + pip install --upgrade pip + pip install pandas + pip install matplotlib + pip install jupyter + ``` + +1. Стартирайте notebook-а в Jupyter: + + ```sh + jupyter notebook gdd.ipynb + ``` + + Jupyter ще се стартира и ще отвори notebook-а във вашия браузър. Следвайте инструкциите в notebook-а, за да визуализирате измерените температури и да изчислите дните на растеж (GDD). + + ![Jupyter Notebook](../../../../../translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.bg.png) + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Събиране на данни | Събрани са данни за поне 2 пълни дни | Събрани са данни за поне 1 пълен ден | Събрани са някакви данни | +| Изчисляване на GDD | Notebook-ът е успешно изпълнен и GDD е изчислен | Notebook-ът е успешно изпълнен | Notebook-ът не може да бъде изпълнен | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb b/translations/bg/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb new file mode 100644 index 00000000..68fbb2d3 --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb @@ -0,0 +1,167 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Натрупани топлинни единици\n", + "\n", + "Този тефтер зарежда данни за температура, записани в CSV файл, и ги анализира. Той визуализира температурите, показва най-високата и най-ниската стойност за всеки ден и изчислява GDD.\n", + "\n", + "За да използвате този тефтер:\n", + "\n", + "* Копирайте файла `temperature.csv` в същата папка като този тефтер\n", + "* Стартирайте всички клетки, използвайки бутона **▶︎ Run** по-горе. Това ще стартира избраната клетка и ще премине към следващата.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В клетката по-долу задайте `base_temperature` на базовата температура на растението.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "base_temperature = 10" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "CSV файлът вече трябва да бъде зареден, като се използва 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": [ + "След като данните бъдат прочетени, те могат да бъдат групирани по колоната `date`, а минималните и максималните температури извлечени за всяка дата.\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 може да бъде изчислен с помощта на стандартното уравнение за GDD\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**Отказ от отговорност**: \nТози документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.\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-28T11:45:54+00:00", + "source_file": "2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb", + "language_code": "bg" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/pi-temp.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/pi-temp.md new file mode 100644 index 00000000..bdc1bc8b --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/pi-temp.md @@ -0,0 +1,125 @@ + +# Измерване на температура - Raspberry Pi + +В тази част от урока ще добавите температурен сензор към вашия Raspberry Pi. + +## Хардуер + +Сензорът, който ще използвате, е [DHT11 сензор за влажност и температура](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html), който комбинира два сензора в един пакет. Това е доста популярен сензор, като много от наличните на пазара комбинират измерване на температура, влажност и понякога атмосферно налягане. Компонентът за измерване на температура е термистор с отрицателен температурен коефициент (NTC), термистор, при който съпротивлението намалява с увеличаване на температурата. + +Това е цифров сензор, който има вграден ADC за създаване на цифров сигнал, съдържащ данни за температурата и влажността, които микроконтролерът може да прочете. + +### Свързване на температурния сензор + +Температурният сензор Grove може да бъде свързан към Raspberry Pi. + +#### Задача + +Свържете температурния сензор + +![Температурен сензор Grove](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.bg.png) + +1. Поставете единия край на кабела Grove в гнездото на сензора за влажност и температура. Кабелът може да бъде поставен само в една посока. + +1. С изключен Raspberry Pi свържете другия край на кабела Grove към цифровото гнездо, обозначено като **D5** на Grove Base hat, прикрепен към Pi. Това гнездо е второто отляво, в реда от гнезда до GPIO пиновете. + +![Температурният сензор Grove, свързан към гнездото A0](../../../../../translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.bg.png) + +## Програмиране на температурния сензор + +Устройството вече може да бъде програмирано за използване на свързания температурен сензор. + +### Задача + +Програмирайте устройството. + +1. Включете Pi и изчакайте да се зареди. + +1. Стартирайте VS Code, директно на Pi или чрез Remote SSH разширението. + + > ⚠️ Можете да се обърнете към [инструкциите за настройка и стартиране на VS Code в урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. От терминала създайте нова папка в домашната директория на потребителя `pi`, наречена `temperature-sensor`. Създайте файл в тази папка, наречен `app.py`: + + ```sh + mkdir temperature-sensor + cd temperature-sensor + touch app.py + ``` + +1. Отворете тази папка в VS Code. + +1. За да използвате сензора за температура и влажност, трябва да се инсталира допълнителен Pip пакет. От терминала в VS Code изпълнете следната команда, за да инсталирате този Pip пакет на Pi: + + ```sh + pip3 install seeed-python-dht + ``` + +1. Добавете следния код към файла `app.py`, за да импортирате необходимите библиотеки: + + ```python + import time + from seeed_dht import DHT + ``` + + Изразът `from seeed_dht import DHT` импортира класа `DHT`, който позволява взаимодействие със сензора за температура Grove от модула `seeed_dht`. + +1. Добавете следния код след горния, за да създадете инстанция на класа, който управлява температурния сензор: + + ```python + sensor = DHT("11", 5) + ``` + + Това декларира инстанция на класа `DHT`, който управлява **D**igital **H**umidity и **T**emperature сензора. Първият параметър указва, че използваният сензор е *DHT11* - библиотеката, която използвате, поддържа и други варианти на този сензор. Вторият параметър указва, че сензорът е свързан към цифровия порт `D5` на Grove Base hat. + + > ✅ Запомнете, всички гнезда имат уникални номера на пинове. Пинове 0, 2, 4 и 6 са аналогови, а пинове 5, 16, 18, 22, 24 и 26 са цифрови. + +1. Добавете безкраен цикъл след горния код, за да извличате стойността на температурния сензор и да я отпечатвате в конзолата: + + ```python + while True: + _, temp = sensor.read() + print(f'Temperature {temp}°C') + ``` + + Извикването на `sensor.read()` връща кортеж с влажност и температура. Нуждаете се само от стойността на температурата, така че влажността се игнорира. Стойността на температурата след това се отпечатва в конзолата. + +1. Добавете кратка пауза от десет секунди в края на `loop`, тъй като нивата на температура не е необходимо да се проверяват непрекъснато. Пауза намалява консумацията на енергия на устройството. + + ```python + time.sleep(10) + ``` + +1. От терминала на VS Code изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python3 app.py + ``` + + Трябва да видите стойности на температурата, които се извеждат в конзолата. Използвайте нещо, за да затоплите сензора, като например натискане с палец върху него или използване на вентилатор, за да видите как стойностите се променят: + + ```output + pi@raspberrypi:~/temperature-sensor $ python3 app.py + Temperature 26°C + Temperature 26°C + Temperature 28°C + Temperature 30°C + Temperature 32°C + ``` + +> 💁 Можете да намерите този код в папката [code-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/pi). + +😀 Вашата програма за температурния сензор беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md new file mode 100644 index 00000000..d5cb1354 --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md @@ -0,0 +1,71 @@ + +# Публикуване на температура - Виртуален IoT хардуер и Raspberry Pi + +В тази част от урока ще публикувате стойностите на температурата, засечени от Raspberry Pi или Виртуалното IoT устройство чрез MQTT, за да могат по-късно да се използват за изчисляване на GDD. + +## Публикуване на температурата + +След като температурата бъде прочетена, тя може да бъде публикувана чрез MQTT към някакъв 'сървърен' код, който ще прочете стойностите и ще ги съхрани, готови за използване при изчисляване на GDD. + +### Задача - публикуване на температурата + +Програмирайте устройството да публикува данните за температурата. + +1. Отворете проекта на приложението `temperature-sensor`, ако вече не е отворен. + +1. Повторете стъпките, които направихте в урок 4, за да се свържете с MQTT и да изпратите телеметрия. Ще използвате същия публичен Mosquitto брокер. + + Стъпките за това са: + + - Добавете pip пакета за MQTT + - Добавете кода за свързване към MQTT брокера + - Добавете кода за публикуване на телеметрия + + > ⚠️ Вижте [инструкциите за свързване към MQTT](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md) и [инструкциите за изпращане на телеметрия](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md) от урок 4, ако е необходимо. + +1. Уверете се, че `client_name` отразява името на този проект: + + ```python + client_name = id + 'temperature_sensor_client' + ``` + +1. За телеметрията, вместо да изпращате стойност за светлина, изпратете стойността на температурата, прочетена от DHT сензора, като свойство в JSON документа, наречено `temperature`: + + ```python + _, temp = sensor.read() + telemetry = json.dumps({'temperature' : temp}) + ``` + +1. Стойността на температурата не е необходимо да се чете много често - тя няма да се промени значително за кратко време, затова задайте `time.sleep` на 10 минути: + + ```cpp + time.sleep(10 * 60); + ``` + + > 💁 Функцията `sleep` приема времето в секунди, така че за по-лесно четене стойността се предава като резултат от изчисление. 60 секунди в минута, така че 10 x (60 секунди в минута) дава 10-минутно забавяне. + +1. Стартирайте кода по същия начин, както стартирахте кода от предишната част на задачата. Ако използвате виртуално IoT устройство, уверете се, че приложението CounterFit работи и че сензорите за влажност и температура са създадени на правилните пинове. + + ```output + pi@raspberrypi:~/temperature-sensor $ python3 app.py + MQTT connected! + Sending telemetry {"temperature": 25} + Sending telemetry {"temperature": 25} + ``` + +> 💁 Можете да намерите този код в папката [code-publish-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/virtual-device) или в папката [code-publish-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/pi). + +😀 Успешно публикувахте температурата като телеметрия от вашето устройство. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md new file mode 100644 index 00000000..dd0a7037 --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md @@ -0,0 +1,154 @@ + +# Измерване на температура - Виртуален IoT хардуер + +В тази част от урока ще добавите температурен сензор към вашето виртуално IoT устройство. + +## Виртуален хардуер + +Виртуалното IoT устройство ще използва симулиран Grove Digital Humidity and Temperature сензор. Това прави този лабораторен урок идентичен с използването на Raspberry Pi с физически Grove DHT11 сензор. + +Сензорът комбинира **температурен сензор** с **влажностен сензор**, но в този урок ще се фокусирате само върху температурния компонент. Във физическо IoT устройство температурният сензор би бил [термистор](https://wikipedia.org/wiki/Thermistor), който измерва температурата чрез промяна в съпротивлението при промяна на температурата. Температурните сензори обикновено са цифрови и вътрешно преобразуват измереното съпротивление в температура в градуси по Целзий (или Келвин, или Фаренхайт). + +### Добавяне на сензорите към CounterFit + +За да използвате виртуален сензор за влажност и температура, трябва да добавите двата сензора към приложението CounterFit. + +#### Задача - добавяне на сензорите към CounterFit + +Добавете сензорите за влажност и температура към приложението CounterFit. + +1. Създайте ново Python приложение на вашия компютър в папка, наречена `temperature-sensor`, с един файл, наречен `app.py`, и Python виртуална среда, и добавете pip пакетите за CounterFit. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване и настройка на CounterFit Python проект в урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. Инсталирайте допълнителен Pip пакет, за да добавите CounterFit shim за DHT11 сензора. Уверете се, че го инсталирате от терминал с активирана виртуална среда. + + ```sh + pip install counterfit-shims-seeed-python-dht + ``` + +1. Уверете се, че уеб приложението CounterFit работи. + +1. Създайте сензор за влажност: + + 1. В полето *Create sensor* в панела *Sensors*, отворете падащото меню *Sensor type* и изберете *Humidity*. + + 1. Оставете *Units* зададени на *Percentage*. + + 1. Уверете се, че *Pin* е зададен на *5*. + + 1. Натиснете бутона **Add**, за да създадете сензора за влажност на Pin 5. + + ![Настройки на сензора за влажност](../../../../../translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.bg.png) + + Сензорът за влажност ще бъде създаден и ще се появи в списъка със сензори. + + ![Създаден сензор за влажност](../../../../../translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.bg.png) + +1. Създайте температурен сензор: + + 1. В полето *Create sensor* в панела *Sensors*, отворете падащото меню *Sensor type* и изберете *Temperature*. + + 1. Оставете *Units* зададени на *Celsius*. + + 1. Уверете се, че *Pin* е зададен на *6*. + + 1. Натиснете бутона **Add**, за да създадете температурния сензор на Pin 6. + + ![Настройки на температурния сензор](../../../../../translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.bg.png) + + Температурният сензор ще бъде създаден и ще се появи в списъка със сензори. + + ![Създаден температурен сензор](../../../../../translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.bg.png) + +## Програмиране на приложението за температурния сензор + +Сега приложението за температурния сензор може да бъде програмирано с помощта на сензорите в CounterFit. + +### Задача - програмиране на приложението за температурния сензор + +Програмирайте приложението за температурния сензор. + +1. Уверете се, че приложението `temperature-sensor` е отворено в VS Code. + +1. Отворете файла `app.py`. + +1. Добавете следния код в началото на `app.py`, за да свържете приложението с CounterFit: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. Добавете следния код във файла `app.py`, за да импортирате необходимите библиотеки: + + ```python + import time + from counterfit_shims_seeed_python_dht import DHT + ``` + + Изразът `from seeed_dht import DHT` импортира класа `DHT`, който позволява взаимодействие с виртуален Grove температурен сензор чрез shim от модула `counterfit_shims_seeed_python_dht`. + +1. Добавете следния код след горния, за да създадете инстанция на класа, който управлява виртуалния сензор за влажност и температура: + + ```python + sensor = DHT("11", 5) + ``` + + Това декларира инстанция на класа `DHT`, който управлява виртуалния **D**igital **H**umidity и **T**emperature сензор. Първият параметър указва, че използваният сензор е виртуален *DHT11* сензор. Вторият параметър указва, че сензорът е свързан към порт `5`. + + > 💁 CounterFit симулира този комбиниран сензор за влажност и температура, като се свързва с два сензора: сензор за влажност на зададения пин при създаването на класа `DHT` и температурен сензор, който работи на следващия пин. Ако сензорът за влажност е на пин 5, shim очаква температурният сензор да е на пин 6. + +1. Добавете безкраен цикъл след горния код, за да извличате стойността на температурния сензор и да я отпечатвате в конзолата: + + ```python + while True: + _, temp = sensor.read() + print(f'Temperature {temp}°C') + ``` + + Извикването на `sensor.read()` връща кортеж със стойности за влажност и температура. Вие се нуждаете само от стойността за температура, така че стойността за влажност се игнорира. Стойността за температурата се отпечатва в конзолата. + +1. Добавете кратка пауза от десет секунди в края на цикъла, тъй като не е необходимо нивата на температурата да се проверяват непрекъснато. Пауза намалява консумацията на енергия на устройството. + + ```python + time.sleep(10) + ``` + +1. От терминала на VS Code с активирана виртуална среда изпълнете следното, за да стартирате вашето Python приложение: + + ```sh + python app.py + ``` + +1. От приложението CounterFit променете стойността на температурния сензор, която ще бъде прочетена от приложението. Можете да направите това по два начина: + + * Въведете число в полето *Value* за температурния сензор и натиснете бутона **Set**. Числото, което въведете, ще бъде стойността, върната от сензора. + + * Поставете отметка в полето *Random* и въведете стойности за *Min* и *Max*, след което натиснете бутона **Set**. Всеки път, когато сензорът прочете стойност, тя ще бъде случайно число между *Min* и *Max*. + + Трябва да видите стойностите, които задавате, да се появяват в конзолата. Променете *Value* или настройките за *Random*, за да видите промяната на стойността. + + ```output + (.venv) ➜ temperature-sensor python app.py + Temperature 28.25°C + Temperature 30.71°C + Temperature 25.17°C + ``` + +> 💁 Можете да намерите този код в папката [code-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/virtual-device). + +😀 Вашата програма за температурния сензор беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md new file mode 100644 index 00000000..1b649c0c --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md @@ -0,0 +1,82 @@ + +# Публикуване на температура - Wio Terminal + +В тази част от урока ще публикувате стойностите на температурата, засечени от Wio Terminal, чрез MQTT, за да могат по-късно да се използват за изчисляване на GDD. + +## Публикуване на температурата + +След като температурата бъде прочетена, тя може да бъде публикувана чрез MQTT към някакъв 'сървърен' код, който ще прочете стойностите и ще ги съхрани, за да бъдат използвани за изчисляване на GDD. Микроконтролерите не четат времето от интернет и не следят времето с реален часовник по подразбиране, устройството трябва да бъде програмирано за това, при условие че разполага с необходимия хардуер. + +За да опростим нещата в този урок, времето няма да бъде изпращано заедно с данните от сензора, вместо това то може да бъде добавено от сървърния код, когато получи съобщенията. + +### Задача + +Програмирайте устройството да публикува данните за температурата. + +1. Отворете проекта `temperature-sensor` за Wio Terminal. + +1. Повторете стъпките, които направихте в урок 4, за да се свържете с MQTT и да изпратите телеметрия. Ще използвате същия публичен Mosquitto брокер. + + Стъпките за това са: + + - Добавете библиотеките Seeed WiFi и MQTT към файла `.ini` + - Добавете конфигурационния файл и кода за свързване към WiFi + - Добавете кода за свързване към MQTT брокера + - Добавете кода за публикуване на телеметрия + + > ⚠️ Вижте [инструкциите за свързване към MQTT](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md) и [инструкциите за изпращане на телеметрия](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md) от урок 4, ако е необходимо. + +1. Уверете се, че `CLIENT_NAME` в хедър файла `config.h` отразява този проект: + + ```cpp + const string CLIENT_NAME = ID + "temperature_sensor_client"; + ``` + +1. За телеметрията, вместо да изпращате стойност за светлина, изпратете стойността на температурата, прочетена от DHT сензора, в свойство на JSON документа, наречено `temperature`, като промените функцията `loop` в `main.cpp`: + + ```cpp + float temp_hum_val[2] = {0}; + dht.readTempAndHumidity(temp_hum_val); + + DynamicJsonDocument doc(1024); + doc["temperature"] = temp_hum_val[1]; + ``` + +1. Стойността на температурата не е необходимо да се чете много често - тя няма да се промени значително за кратко време, затова задайте `delay` във функцията `loop` на 10 минути: + + ```cpp + delay(10 * 60 * 1000); + ``` + + > 💁 Функцията `delay` приема времето в милисекунди, така че за по-лесно четене стойността се подава като резултат от изчисление. 1,000ms в секунда, 60s в минута, така че 10 x (60s в минута) x (1000ms в секунда) дава закъснение от 10 минути. + +1. Качете това на вашия Wio Terminal и използвайте серийния монитор, за да видите как температурата се изпраща към MQTT брокера. + + ```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} + ``` + +> 💁 Можете да намерите този код в папката [code-publish-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/wio-terminal). + +😀 Успешно публикувахте температурата като телеметрия от вашето устройство. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md b/translations/bg/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md new file mode 100644 index 00000000..4e45fd51 --- /dev/null +++ b/translations/bg/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md @@ -0,0 +1,143 @@ + +# Измерване на температура - Wio Terminal + +В тази част от урока ще добавите температурен сензор към вашия Wio Terminal и ще четете стойности на температурата от него. + +## Хардуер + +Wio Terminal се нуждае от температурен сензор. + +Сензорът, който ще използвате, е [DHT11 сензор за влажност и температура](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html), който комбинира два сензора в един пакет. Това е доста популярен сензор, като много от наличните на пазара комбинират измерване на температура, влажност и понякога атмосферно налягане. Компонентът за измерване на температура е термистор с отрицателен температурен коефициент (NTC), при който съпротивлението намалява с увеличаване на температурата. + +Това е цифров сензор, който има вграден АЦП (аналогово-цифров преобразувател), за да създаде цифров сигнал, съдържащ данни за температурата и влажността, които микроконтролерът може да прочете. + +### Свързване на температурния сензор + +Grove температурният сензор може да бъде свързан към цифровия порт на Wio Terminal. + +#### Задача - свържете температурния сензор + +Свържете температурния сензор. + +![Grove температурен сензор](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на сензора за влажност и температура. Той ще влезе само в една посока. + +1. С изключен Wio Terminal от вашия компютър или друг източник на захранване, свържете другия край на Grove кабела към десния Grove порт на Wio Terminal, когато гледате екрана. Това е портът, който е най-далеч от бутона за захранване. + +![Температурният сензор е свързан към десния порт](../../../../../translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.bg.png) + +## Програмиране на температурния сензор + +Сега Wio Terminal може да бъде програмиран да използва свързания температурен сензор. + +### Задача - програмирайте температурния сензор + +Програмирайте устройството. + +1. Създайте нов проект за Wio Terminal, използвайки PlatformIO. Наречете този проект `temperature-sensor`. Добавете код във функцията `setup`, за да конфигурирате серийния порт. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване на PlatformIO проект в проект 1, урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project). + +1. Добавете зависимост за библиотеката Seeed Grove Humidity and Temperature sensor в `platformio.ini` файла на проекта: + + ```ini + lib_deps = + seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1 + ``` + + > ⚠️ Можете да се обърнете към [инструкциите за добавяне на библиотеки към PlatformIO проект в проект 1, урок 4, ако е необходимо](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md#install-the-wifi-and-mqtt-arduino-libraries). + +1. Добавете следните директиви `#include` в началото на файла, под съществуващото `#include `: + + ```cpp + #include + #include + ``` + + Това импортира файловете, необходими за взаимодействие със сензора. Хедър файлът `DHT.h` съдържа кода за самия сензор, а добавянето на `SPI.h` гарантира, че кодът, необходим за комуникация със сензора, ще бъде свързан при компилиране на приложението. + +1. Преди функцията `setup`, декларирайте DHT сензора: + + ```cpp + DHT dht(D0, DHT11); + ``` + + Това декларира инстанция на класа `DHT`, който управлява **D**igital **H**umidity и **T**emperature сензора. Той е свързан към порт `D0`, десния Grove порт на Wio Terminal. Вторият параметър указва, че използваният сензор е *DHT11* - библиотеката, която използвате, поддържа и други варианти на този сензор. + +1. Във функцията `setup` добавете код за настройка на серийната връзка: + + ```cpp + void setup() + { + Serial.begin(9600); + + while (!Serial) + ; // Wait for Serial to be ready + + delay(1000); + } + ``` + +1. В края на функцията `setup`, след последния `delay`, добавете извикване за стартиране на DHT сензора: + + ```cpp + dht.begin(); + ``` + +1. Във функцията `loop` добавете код за извикване на сензора и отпечатване на температурата в серийния порт: + + ```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); + } + ``` + + Този код декларира празен масив от 2 числа с плаваща запетая и го предава на извикването на `readTempAndHumidity` на инстанцията `DHT`. Това извикване попълва масива с 2 стойности - влажността се записва в 0-ия елемент на масива (помнете, че в C++ масивите са базирани на индекс 0, така че 0-ият елемент е "първият"), а температурата се записва в 1-вия елемент. + + Температурата се чете от 1-вия елемент на масива и се отпечатва в серийния порт. + + > 🇺🇸 Температурата се чете в Целзий. За американците, за да преобразувате в Фаренхайт, разделете стойността в Целзий на 5, умножете по 9 и добавете 32. Например, температура от 20°C става ((20/5)*9) + 32 = 68°F. + +1. Компилирайте и качете кода на Wio Terminal. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване на PlatformIO проект в проект 1, урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app). + +1. След като качите, можете да наблюдавате температурата, използвайки серийния монитор: + + ```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 + ``` + +> 💁 Можете да намерите този код в папката [code-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/wio-terminal). + +😀 Вашата програма за температурния сензор беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/2-detect-soil-moisture/README.md b/translations/bg/2-farm/lessons/2-detect-soil-moisture/README.md new file mode 100644 index 00000000..15b4fd60 --- /dev/null +++ b/translations/bg/2-farm/lessons/2-detect-soil-moisture/README.md @@ -0,0 +1,169 @@ + +C, произнасяно като *I-квадрат-C*, е протокол за комуникация между множество контролери и периферни устройства, при който всяко свързано устройство може да действа като контролер или периферия, комуникирайки през I²C шина (система за пренос на данни). Данните се изпращат като адресирани пакети, като всеки пакет съдържа адреса на свързаното устройство, за което е предназначен. + +> 💁 Този модел преди се наричаше master/slave, но тази терминология се изоставя поради асоциацията ѝ с робството. [Асоциацията за хардуер с отворен код прие термините контролер/периферия](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/), но все още може да срещнете препратки към старата терминология. + +Устройствата имат адрес, който се използва при свързване към I²C шината, и обикновено е предварително зададен на устройството. Например, всеки тип сензор Grove от Seeed има един и същ адрес, така че всички светлинни сензори имат един и същ адрес, всички бутони имат адрес, който е различен от адреса на светлинния сензор. Някои устройства имат начини за промяна на адреса, като промяна на джъмпер настройки или запояване на пинове. + +I²C има шина, състояща се от 2 основни проводника, заедно с 2 проводника за захранване: + +| Проводник | Име | Описание | +| ---- | --------- | ----------- | +| SDA | Серийни данни | Този проводник се използва за изпращане на данни между устройствата. | +| SCL | Серийни часовник | Този проводник изпраща часовников сигнал с честота, зададена от контролера. | +| VCC | Общ колектор на напрежение | Захранването за устройствата. Това е свързано към проводниците SDA и SCL, за да осигури тяхното захранване чрез pull-up резистор, който изключва сигнала, когато няма устройство, което да е контролер. | +| GND | Земя | Осигурява обща земя за електрическата верига. | + +![I2C шина с 3 устройства, свързани към проводниците SDA и SCL, споделящи общ проводник за земя](../../../../../translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.bg.png) + +За да изпрати данни, едно устройство издава стартово условие, за да покаже, че е готово да изпрати данни. След това то става контролер. Контролерът изпраща адреса на устройството, с което иска да комуникира, заедно с информация дали иска да чете или записва данни. След като данните са предадени, контролерът изпраща стоп условие, за да покаже, че е приключил. След това друго устройство може да стане контролер и да изпраща или получава данни. + +22C има ограничения на скоростта, с три различни режима, които работят с фиксирани скорости. Най-бързият е режимът High Speed с максимална скорост от 3.4 Mbps (мегабита в секунда), въпреки че много малко устройства поддържат тази скорост. Например, Raspberry Pi е ограничен до fast mode със скорост 400 Kbps (килобита в секунда). Standard mode работи със скорост 100 Kbps. + +> 💁 Ако използвате Raspberry Pi с Grove Base hat като ваш IoT хардуер, ще видите няколко I2C гнезда на платката, които можете да използвате за комуникация с I2C сензори. Аналоговите Grove сензори също използват I2C с ADC, за да изпращат аналогови стойности като цифрови данни, така че светлинният сензор, който използвахте, симулира аналогов пин, като стойността се изпраща през I2C, тъй като Raspberry Pi поддържа само цифрови пинове. + +### Универсален асинхронен приемо-предавател (UART) + +UART включва физическа схема, която позволява на две устройства да комуникират. Всяко устройство има 2 комуникационни пина - предаване (Tx) и приемане (Rx), като Tx пинът на първото устройство е свързан с Rx пина на второто, а Tx пинът на второто устройство е свързан с Rx пина на първото. Това позволява данните да се изпращат в двете посоки. + +* Устройство 1 предава данни от своя Tx пин, които се приемат от устройство 2 на неговия Rx пин +* Устройство 1 получава данни на своя Rx пин, които се предават от устройство 2 от неговия Tx пин + +![UART с Tx пин на един чип, свързан с Rx пин на друг, и обратно](../../../../../translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.bg.png) + +> 🎓 Данните се изпращат по един бит наведнъж, което е известно като *серийна* комуникация. Повечето операционни системи и микроконтролери имат *серийни портове*, тоест връзки, които могат да изпращат и получават серийни данни, достъпни за вашия код. + +UART устройствата имат [baud rate](https://wikipedia.org/wiki/Symbol_rate) (известна също като символна скорост), която е скоростта, с която данните ще се изпращат и получават в битове в секунда. Често срещана baud rate е 9,600, което означава, че 9,600 бита (0 и 1) данни се изпращат всяка секунда. + +UART използва стартови и стоп битове - тоест изпраща стартов бит, за да покаже, че ще изпрати байт (8 бита) данни, след което стоп бит след изпращането на 8-те бита. + +Скоростта на UART зависи от хардуера, но дори и най-бързите реализации не надвишават 6.5 Mbps (мегабита в секунда, или милиони битове, 0 или 1, изпратени в секунда). + +Можете да използвате UART през GPIO пинове - можете да зададете един пин като Tx и друг като Rx, след което да ги свържете към друго устройство. + +> 💁 Ако използвате Raspberry Pi с Grove Base hat като ваш IoT хардуер, ще видите UART гнездо на платката, което можете да използвате за комуникация със сензори, които използват UART протокола. + +### Серийно периферно интерфейс (SPI) + +SPI е проектиран за комуникация на къси разстояния, например на микроконтролер за връзка с устройство за съхранение като флаш памет. Той се основава на модел контролер/периферия с един контролер (обикновено процесорът на IoT устройството), който взаимодейства с множество периферии. Контролерът управлява всичко, като избира периферия и изпраща или заявява данни. + +> 💁 Подобно на I2C, термините контролер и периферия са скорошни промени, така че може да срещнете по-старите термини. + +SPI контролерите използват 3 жици, заедно с 1 допълнителна жица за всяка периферия. Перифериите използват 4 жици. Тези жици са: + +| Жица | Име | Описание | +| ---- | --------- | ----------- | +| COPI | Изход на контролера, вход на периферията | Тази жица е за изпращане на данни от контролера към периферията. | +| CIPO | Вход на контролера, изход на периферията | Тази жица е за изпращане на данни от периферията към контролера. | +| SCLK | Сериен часовник | Тази жица изпраща часовников сигнал със скорост, зададена от контролера. | +| CS | Избор на чип | Контролерът има множество жици, по една за всяка периферия, и всяка жица се свързва с CS жицата на съответната периферия. | + +![SPI с един контролер и две периферии](../../../../../translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.bg.png) + +Жицата CS се използва за активиране на една периферия наведнъж, като се комуникира през жиците COPI и CIPO. Когато контролерът трябва да смени периферията, той деактивира CS жицата, свързана с текущо активната периферия, след което активира жицата, свързана с периферията, с която иска да комуникира следващата. + +SPI е *пълен дуплекс*, което означава, че контролерът може да изпраща и получава данни едновременно от една и съща периферия, използвайки жиците COPI и CIPO. SPI използва часовников сигнал на жицата SCLK, за да поддържа устройствата синхронизирани, така че за разлика от изпращането директно през UART, не се нуждае от стартови и стоп битове. + +Няма определени ограничения за скоростта на SPI, като реализациите често могат да предават множество мегабайти данни в секунда. + +IoT комплекти за разработка често поддържат SPI през някои от GPIO пиновете. Например, на Raspberry Pi можете да използвате GPIO пинове 19, 21, 23, 24 и 26 за SPI. + +### Безжична комуникация + +Някои сензори могат да комуникират през стандартни безжични протоколи, като Bluetooth (главно Bluetooth Low Energy, или BLE), LoRaWAN (протокол за мрежи с ниска мощност и голям обхват) или WiFi. Това позволява отдалечени сензори, които не са физически свързани към IoT устройство. + +Един такъв пример са търговските сензори за влажност на почвата. Те измерват влажността на почвата в поле, след което изпращат данните през LoRaWAN към хъб устройство, което обработва данните или ги изпраща през Интернет. Това позволява сензорът да бъде далеч от IoT устройството, което управлява данните, намалявайки консумацията на енергия и нуждата от големи WiFi мрежи или дълги кабели. + +BLE е популярен за усъвършенствани сензори като фитнес тракери, които работят на китката. Те комбинират множество сензори и изпращат данните към IoT устройство, например вашия телефон, чрез BLE. + +✅ Имате ли някакви Bluetooth сензори върху себе си, в дома си или в училището си? Те могат да включват температурни сензори, сензори за присъствие, тракери за устройства и фитнес устройства. + +Един популярен начин за свързване на търговски устройства е Zigbee. Zigbee използва WiFi, за да формира мрежи от типа "мрежа" между устройствата, където всяко устройство се свързва с възможно най-много близки устройства, формирайки голям брой връзки като паяжина. Когато едно устройство иска да изпрати съобщение към Интернет, то го изпраща към най-близките устройства, които след това го препращат към други близки устройства и така нататък, докато достигне до координатор и може да бъде изпратено към Интернет. + +> 🐝 Името Zigbee се отнася до танца на пчелите, когато се връщат в кошера. + +## Измерване на нивата на влажност в почвата + +Можете да измерите нивото на влажност в почвата, използвайки сензор за влажност на почвата, IoT устройство и стайно растение или близък участък от почва. + +### Задача - измерване на влажността на почвата + +Следвайте съответното ръководство, за да измерите влажността на почвата, използвайки вашето IoT устройство: + +* [Arduino - Wio Terminal](wio-terminal-soil-moisture.md) +* [Едноплатков компютър - Raspberry Pi](pi-soil-moisture.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device-soil-moisture.md) + +## Калибриране на сензори + +Сензорите разчитат на измерване на електрически свойства като съпротивление или капацитет. + +> 🎓 Съпротивлението, измервано в омове (Ω), показва колко голямо е съпротивлението срещу електрическия ток, преминаващ през нещо. Когато напрежение се приложи към материал, количеството ток, което преминава през него, зависи от съпротивлението на материала. Можете да прочетете повече на [страницата за електрическо съпротивление в Wikipedia](https://wikipedia.org/wiki/Electrical_resistance_and_conductance). + +> 🎓 Капацитетът, измерван във фаради (F), е способността на компонент или верига да събира и съхранява електрическа енергия. Можете да прочетете повече за капацитета на [страницата за капацитет в Wikipedia](https://wikipedia.org/wiki/Capacitance). + +Тези измервания не винаги са полезни - представете си температурен сензор, който ви дава измерване от 22.5KΩ! Вместо това измерената стойност трябва да бъде преобразувана в полезна единица чрез калибриране - тоест съпоставяне на измерените стойности с измерваното количество, за да се позволи новите измервания да бъдат преобразувани в правилната единица. + +Някои сензори идват предварително калибрирани. Например температурният сензор, който използвахте в предишния урок, вече беше калибриран, така че да може да връща измерване на температурата в °C. Във фабриката първият създаден сензор би бил изложен на редица известни температури и съпротивлението би било измерено. Това би било използвано за създаване на изчисление, което може да преобразува от измерената стойност в Ω (единицата за съпротивление) в °C. + +> 💁 Формулата за изчисляване на съпротивлението от температура се нарича [уравнение на Щайнхарт–Харт](https://wikipedia.org/wiki/Steinhart–Hart_equation). + +### Калибриране на сензор за влажност на почвата + +Влажността на почвата се измерва чрез гравиметрично или обемно съдържание на вода. + +* Гравиметричното е теглото на водата в единица тегло на почвата, измерено като брой килограми вода на килограм суха почва +* Обемното е обемът на водата в единица обем на почвата, измерено като брой кубически метри вода на кубически метри суха почва + +> 🇺🇸 За американците, поради консистентността на единиците, тези могат да бъдат измерени в паунди вместо килограми или в кубически футове вместо кубически метри. + +Сензорите за влажност на почвата измерват електрическо съпротивление или капацитет - това не само варира според влажността на почвата, но и според типа почва, тъй като компонентите в почвата могат да променят нейните електрически характеристики. Идеално е сензорите да бъдат калибрирани - тоест да се вземат показания от сензора и да се сравнят с измервания, направени по-научен начин. Например лаборатория може да изчисли гравиметричната влажност на почвата, използвайки проби от конкретно поле, взети няколко пъти в годината, и тези числа да се използват за калибриране на сензора, съпоставяйки показанията на сензора с гравиметричната влажност на почвата. + +![Графика на напрежение спрямо съдържание на влага в почвата](../../../../../translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.bg.png) + +Графиката по-горе показва как да се калибрира сензор. Напрежението се записва за проба почва, която след това се измерва в лаборатория, като се сравнява влажното тегло със сухото тегло (чрез измерване на теглото влажно, след това изсушаване във фурна и измерване на сухото тегло). След като се вземат няколко показания, те могат да бъдат нанесени на графика и да се начертае линия, която да пасва на точките. Тази линия може след това да се използва за преобразуване на показанията на сензора за влажност на почвата, взети от IoT устройство, в реални измервания на влажността на почвата. + +💁 За резистивните сензори за влажност на почвата напрежението се увеличава с увеличаване на влажността на почвата. За капацитивните сензори за влажност на почвата напрежението намалява с увеличаване на влажността на почвата, така че графиките за тях биха имали наклон надолу, а не нагоре. + +![Стойност на влажността на почвата, интерполирана от графиката](../../../../../translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.bg.png) + +Графиката по-горе показва напрежение, отчетено от сензор за влажност на почвата, и като се следва това до линията на графиката, може да се изчисли реалната влажност на почвата. + +Този подход означава, че фермерът трябва да получи само няколко лабораторни измервания за поле, след което може да използва IoT устройства за измерване на влажността на почвата - драстично ускорявайки времето за вземане на измервания. + +--- + +## 🚀 Предизвикателство + +Резистивните и капацитивните сензори за влажност на почвата имат редица разлики. Какви са тези разлики и кой тип (ако има такъв) е най-добър за използване от фермер? Променя ли се този отговор между развиващите се и развитите страни? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12) + +## Преглед и самостоятелно обучение + +Прочетете за хардуера и протоколите, използвани от сензорите и изпълнителните механизми: + +* [GPIO страница в Wikipedia](https://wikipedia.org/wiki/General-purpose_input/output) +* [UART страница в Wikipedia](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) +* [SPI страница в Wikipedia](https://wikipedia.org/wiki/Serial_Peripheral_Interface) +* [I2C страница в Wikipedia](https://wikipedia.org/wiki/I²C) +* [Zigbee страница в Wikipedia](https://wikipedia.org/wiki/Zigbee) + +## Задание + +[Калибрирайте вашия сензор](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/2-detect-soil-moisture/assignment.md b/translations/bg/2-farm/lessons/2-detect-soil-moisture/assignment.md new file mode 100644 index 00000000..3df87f10 --- /dev/null +++ b/translations/bg/2-farm/lessons/2-detect-soil-moisture/assignment.md @@ -0,0 +1,61 @@ + +# Калибрирайте вашия сензор + +## Инструкции + +В този урок събрахте показания от сензор за почвена влажност, измерени като стойности от 0 до 1023. За да ги преобразувате в реални показания за почвена влажност, трябва да калибрирате сензора. Това може да стане, като вземете показания от почвени проби и след това изчислите гравиметричното съдържание на почвена влага от тези проби. + +Ще трябва да повторите тези стъпки няколко пъти, за да получите необходимите показания, като използвате почва с различна влажност всеки път. + +1. Вземете показание за почвена влажност с помощта на сензора за почвена влажност. Запишете това показание. + +1. Вземете проба от почвата и я претеглете. Запишете теглото. + +1. Изсушете почвата – топла фурна на 110°C (230°F) за няколко часа е най-добрият начин. Можете да я изсушите и на слънце или да я поставите на топло и сухо място, докато почвата стане напълно суха. Тя трябва да бъде прахообразна и рохкава. + + > 💁 В лаборатория за най-точни резултати бихте изсушили почвата във фурна за 48-72 часа. Ако във вашето училище има сушилни фурни, проверете дали можете да ги използвате за по-дълго сушене. Колкото по-дълго сушите пробата, толкова по-суха ще бъде тя и толкова по-точни ще са резултатите. + +1. Претеглете почвата отново. + + > 🔥 Ако сте я сушили във фурна, уверете се, че първо е изстинала! + +Гравиметричната почвена влажност се изчислява по следната формула: + +![почвена влажност % е теглото на мократа почва минус теглото на сухата почва, разделено на теглото на сухата почва, умножено по 100](../../../../../translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.bg.png) + +* W - теглото на мократа почва +* W - теглото на сухата почва + +Например, да кажем, че имате почвена проба с тегло 212 г мокра и 197 г суха. + +![Попълнено изчисление](../../../../../translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.bg.png) + +* W = 212 г +* W = 197 г +* 212 - 197 = 15 +* 15 / 197 = 0.076 +* 0.076 * 100 = 7.6% + +В този пример почвата има гравиметрична почвена влажност от 7.6%. + +След като имате показания за поне 3 проби, начертайте графика на почвена влажност % спрямо показанията на сензора за почвена влажност и добавете линия, която най-добре пасва на точките. След това можете да използвате тази графика, за да изчислите гравиметричното съдържание на почвена влага за дадено показание на сензора, като прочетете стойността от линията. + +## Рубрика + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Събиране на данни за калибриране | Събрани са поне 3 проби за калибриране | Събрани са поне 2 проби за калибриране | Събрана е поне 1 проба за калибриране | +| Извършване на калибрирано показание | Успешно начертана графика за калибриране и направено показание от сензора, преобразувано в гравиметрично съдържание на почвена влага | Успешно начертана графика за калибриране | Не е възможно да се начертае графика | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md b/translations/bg/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md new file mode 100644 index 00000000..65fcb9e2 --- /dev/null +++ b/translations/bg/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md @@ -0,0 +1,108 @@ + +# Измерване на влажността на почвата - Raspberry Pi + +В тази част на урока ще добавите капацитивен сензор за влажност на почвата към вашия Raspberry Pi и ще четете стойности от него. + +## Хардуер + +Raspberry Pi се нуждае от капацитивен сензор за влажност на почвата. + +Сензорът, който ще използвате, е [Капацитивен сензор за влажност на почвата](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), който измерва влажността на почвата чрез откриване на капацитета на почвата – свойство, което се променя с промяната на влажността. С увеличаването на влажността на почвата напрежението намалява. + +Това е аналогов сензор, който използва аналогов пин и 10-битовия ADC в Grove Base Hat на Raspberry Pi, за да преобразува напрежението в цифров сигнал от 1 до 1,023. След това този сигнал се изпраща през I²C чрез GPIO пиновете на Raspberry Pi. + +### Свързване на сензора за влажност на почвата + +Grove сензорът за влажност на почвата може да бъде свързан към Raspberry Pi. + +#### Задача - свържете сензора за влажност на почвата + +Свържете сензора за влажност на почвата. + +![Сензор за влажност на почвата Grove](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на сензора за влажност на почвата. Кабелът може да бъде поставен само в една посока. + +1. С изключено захранване на Raspberry Pi свържете другия край на Grove кабела към аналоговото гнездо, маркирано като **A0**, на Grove Base Hat, прикрепен към Pi. Това гнездо е второто отдясно в реда от гнезда до GPIO пиновете. + +![Сензорът за влажност на почвата Grove, свързан към гнездото A0](../../../../../translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.bg.png) + +1. Поставете сензора за влажност на почвата в почвата. Той има линия за "най-висока позиция" – бяла линия, която минава през сензора. Поставете сензора до тази линия, но не я преминавайте. + +![Сензорът за влажност на почвата Grove в почвата](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.bg.png) + +## Програмиране на сензора за влажност на почвата + +Сега Raspberry Pi може да бъде програмиран да използва свързания сензор за влажност на почвата. + +### Задача - програмирайте сензора за влажност на почвата + +Програмирайте устройството. + +1. Включете Raspberry Pi и изчакайте да се зареди. + +1. Стартирайте VS Code, директно на Pi или чрез разширението Remote SSH. + + > ⚠️ Можете да се обърнете към [инструкциите за настройка и стартиране на VS Code в nightlight - урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. От терминала създайте нова папка в домашната директория на потребителя `pi`, наречена `soil-moisture-sensor`. Създайте файл в тази папка, наречен `app.py`. + +1. Отворете тази папка във VS Code. + +1. Добавете следния код във файла `app.py`, за да импортирате необходимите библиотеки: + + ```python + import time + from grove.adc import ADC + ``` + + Изразът `import time` импортира модула `time`, който ще бъде използван по-късно в задачата. + + Изразът `from grove.adc import ADC` импортира `ADC` от библиотеките на Grove за Python. Тази библиотека съдържа код за взаимодействие с аналогово-цифровия преобразувател на Pi Base Hat и за четене на напрежения от аналогови сензори. + +1. Добавете следния код под този, за да създадете инстанция на класа `ADC`: + + ```python + adc = ADC() + ``` + +1. Добавете безкраен цикъл, който чете от този ADC на пин A0 и записва резултата в конзолата. Този цикъл може да изчаква 10 секунди между четенията. + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. Стартирайте Python приложението. Ще видите измерванията на влажността на почвата, изписани в конзолата. Добавете вода към почвата или извадете сензора от почвата и наблюдавайте как стойността се променя. + + ```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 + ``` + + В примерния изход по-горе можете да видите как напрежението намалява, когато се добавя вода. + +> 💁 Можете да намерите този код в папката [code/pi](../../../../../2-farm/lessons/2-detect-soil-moisture/code/pi). + +😀 Вашата програма за сензора за влажност на почвата беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md b/translations/bg/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md new file mode 100644 index 00000000..d54d4291 --- /dev/null +++ b/translations/bg/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md @@ -0,0 +1,123 @@ + +# Измерване на влажността на почвата - Виртуален IoT хардуер + +В тази част на урока ще добавите капацитивен сензор за влажност на почвата към вашето виртуално IoT устройство и ще четете стойности от него. + +## Виртуален хардуер + +Виртуалното IoT устройство ще използва симулиран капацитивен сензор за влажност на почвата Grove. Това запазва лабораторията идентична с използването на Raspberry Pi с физически капацитивен сензор за влажност на почвата Grove. + +При физическо IoT устройство сензорът за влажност на почвата би бил капацитивен сензор, който измерва влажността на почвата, като открива капацитета на почвата – свойство, което се променя с промяната на влажността. С увеличаването на влажността на почвата напрежението намалява. + +Това е аналогов сензор, който използва симулиран 10-битов ADC, за да отчита стойности от 1 до 1,023. + +### Добавяне на сензора за влажност на почвата към CounterFit + +За да използвате виртуален сензор за влажност на почвата, трябва да го добавите към приложението CounterFit. + +#### Задача - Добавяне на сензора за влажност на почвата към CounterFit + +Добавете сензора за влажност на почвата към приложението CounterFit. + +1. Създайте ново Python приложение на вашия компютър в папка, наречена `soil-moisture-sensor`, с един файл, наречен `app.py`, и Python виртуална среда, и добавете CounterFit pip пакетите. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване и настройка на CounterFit Python проект в урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. Уверете се, че CounterFit уеб приложението работи. + +1. Създайте сензор за влажност на почвата: + + 1. В полето *Create sensor* в панела *Sensors* изберете от падащото меню *Sensor type* опцията *Soil Moisture*. + + 1. Оставете *Units* зададено на *NoUnits*. + + 1. Уверете се, че *Pin* е зададен на *0*. + + 1. Натиснете бутона **Add**, за да създадете сензора *Soil Moisture* на Pin 0. + + ![Настройки на сензора за влажност на почвата](../../../../../translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.bg.png) + + Сензорът за влажност на почвата ще бъде създаден и ще се появи в списъка със сензори. + + ![Създаден сензор за влажност на почвата](../../../../../translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.bg.png) + +## Програмиране на приложението за сензор за влажност на почвата + +Сега приложението за сензор за влажност на почвата може да бъде програмирано с помощта на сензорите в CounterFit. + +### Задача - Програмиране на приложението за сензор за влажност на почвата + +Програмирайте приложението за сензор за влажност на почвата. + +1. Уверете се, че приложението `soil-moisture-sensor` е отворено в VS Code. + +1. Отворете файла `app.py`. + +1. Добавете следния код в началото на `app.py`, за да свържете приложението с CounterFit: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. Добавете следния код във файла `app.py`, за да импортирате необходимите библиотеки: + + ```python + import time + from counterfit_shims_grove.adc import ADC + ``` + + Изразът `import time` импортира модула `time`, който ще бъде използван по-късно в задачата. + + Изразът `from counterfit_shims_grove.adc import ADC` импортира класа `ADC`, който позволява взаимодействие със симулиран аналогово-цифров преобразувател, свързан към сензор в CounterFit. + +1. Добавете следния код под този, за да създадете инстанция на класа `ADC`: + + ```python + adc = ADC() + ``` + +1. Добавете безкраен цикъл, който чете стойности от този ADC на пин 0 и ги записва в конзолата. Този цикъл може да изчаква 10 секунди между четенията. + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. От приложението CounterFit променете стойността на сензора за влажност на почвата, която ще бъде прочетена от приложението. Можете да направите това по два начина: + + * Въведете число в полето *Value* за сензора за влажност на почвата и натиснете бутона **Set**. Числото, което въведете, ще бъде стойността, върната от сензора. + + * Поставете отметка в полето *Random* и въведете стойности за *Min* и *Max*, след което натиснете бутона **Set**. Всеки път, когато сензорът чете стойност, тя ще бъде случайно число между *Min* и *Max*. + +1. Стартирайте Python приложението. Ще видите измерванията на влажността на почвата, записани в конзолата. Променете стойността или настройките за *Random*, за да видите как стойността се променя. + + ```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 + ``` + +> 💁 Можете да намерите този код в папката [code/virtual-device](../../../../../2-farm/lessons/2-detect-soil-moisture/code/virtual-device). + +😀 Вашето приложение за сензор за влажност на почвата беше успешно! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md b/translations/bg/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md new file mode 100644 index 00000000..b286aa49 --- /dev/null +++ b/translations/bg/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md @@ -0,0 +1,117 @@ + +# Измерване на влажността на почвата - Wio Terminal + +В тази част от урока ще добавите капацитивен сензор за влажност на почвата към вашия Wio Terminal и ще четете стойности от него. + +## Хардуер + +Wio Terminal се нуждае от капацитивен сензор за влажност на почвата. + +Сензорът, който ще използвате, е [Капацитивен сензор за влажност на почвата](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), който измерва влажността на почвата чрез откриване на капацитета на почвата – свойство, което се променя с промяната на влажността. С увеличаване на влажността на почвата напрежението намалява. + +Това е аналогов сензор, който се свързва към аналоговите пинове на Wio Terminal, използвайки вграден ADC за създаване на стойност от 0 до 1023. + +### Свързване на сензора за влажност на почвата + +Grove сензорът за влажност на почвата може да бъде свързан към конфигурируемия аналогов/цифров порт на Wio Terminal. + +#### Задача - свържете сензора за влажност на почвата + +Свържете сензора за влажност на почвата. + +![Grove сензор за влажност на почвата](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на сензора за влажност на почвата. Той ще влезе само в една посока. + +1. С изключен Wio Terminal от компютъра или друг източник на захранване, свържете другия край на Grove кабела към десния Grove порт на Wio Terminal, гледайки екрана. Това е портът, който е най-далеч от бутона за захранване. + +![Grove сензор за влажност на почвата, свързан към десния порт](../../../../../translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.bg.png) + +1. Поставете сензора за влажност на почвата в почвата. Той има линия за "максимална позиция" – бяла линия, която минава през сензора. Поставете сензора до тази линия, но не я преминавайте. + +![Grove сензор за влажност на почвата в почвата](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.bg.png) + +1. Сега можете да свържете Wio Terminal към вашия компютър. + +## Програмиране на сензора за влажност на почвата + +Сега Wio Terminal може да бъде програмиран да използва свързания сензор за влажност на почвата. + +### Задача - програмирайте сензора за влажност на почвата + +Програмирайте устройството. + +1. Създайте нов проект за Wio Terminal, използвайки PlatformIO. Наречете този проект `soil-moisture-sensor`. Добавете код във функцията `setup`, за да конфигурирате серийния порт. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване на PlatformIO проект в проект 1, урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project). + +1. Няма библиотека за този сензор, вместо това можете да четете от аналоговия пин, използвайки вградената Arduino функция [`analogRead`](https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/). Започнете, като конфигурирате аналоговия пин за вход, така че стойности да могат да бъдат четени от него, като добавите следното към функцията `setup`. + + ```cpp + pinMode(A0, INPUT); + ``` + + Това задава пина `A0`, комбинирания аналогов/цифров пин, като входен пин, от който може да се чете напрежение. + +1. Добавете следното към функцията `loop`, за да четете напрежението от този пин: + + ```cpp + int soil_moisture = analogRead(A0); + ``` + +1. Под този код добавете следния код, за да отпечатате стойността на серийния порт: + + ```cpp + Serial.print("Soil Moisture: "); + Serial.println(soil_moisture); + ``` + +1. Накрая добавете закъснение от 10 секунди в края: + + ```cpp + delay(10000); + ``` + +1. Компилирайте и качете кода на Wio Terminal. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване на PlatformIO проект в проект 1, урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app). + +1. След като качите, можете да наблюдавате влажността на почвата, използвайки серийния монитор. Добавете малко вода към почвата или извадете сензора от почвата и вижте как стойността се променя. + + ```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 + ``` + + В примерния изход по-горе можете да видите как напрежението намалява, когато се добавя вода. + +> 💁 Можете да намерите този код в папката [code/wio-terminal](../../../../../2-farm/lessons/2-detect-soil-moisture/code/wio-terminal). + +😀 Вашата програма за сензор за влажност на почвата беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/3-automated-plant-watering/README.md b/translations/bg/2-farm/lessons/3-automated-plant-watering/README.md new file mode 100644 index 00000000..fb8f3480 --- /dev/null +++ b/translations/bg/2-farm/lessons/3-automated-plant-watering/README.md @@ -0,0 +1,314 @@ + +# Автоматизирано поливане на растения + +![Скица, обобщаваща този урок](../../../../../translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок беше преподаван като част от [IoT за начинаещи Проект 2 - серия за дигитално земеделие](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) от [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![IoT захранвано автоматизирано поливане на растения](https://img.youtube.com/vi/g9FfZwv9R58/0.jpg)](https://youtu.be/g9FfZwv9R58) + +## Тест преди лекцията + +[Тест преди лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13) + +## Въведение + +В последния урок научихте как да наблюдавате влажността на почвата. В този урок ще научите как да изградите основните компоненти на автоматизирана система за поливане, която реагира на влажността на почвата. Ще научите също за времето - как сензорите могат да се нуждаят от време, за да реагират на промени, и как изпълнителните механизми могат да се нуждаят от време, за да променят свойствата, измервани от сензорите. + +В този урок ще разгледаме: + +* [Контролиране на устройства с висока мощност от IoT устройство с ниска мощност](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Контролиране на реле](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Контролиране на вашето растение чрез MQTT](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Време за сензори и изпълнителни механизми](../../../../../2-farm/lessons/3-automated-plant-watering) +* [Добавяне на време към сървъра за управление на растенията](../../../../../2-farm/lessons/3-automated-plant-watering) + +## Контролиране на устройства с висока мощност от IoT устройство с ниска мощност + +IoT устройствата използват ниско напрежение. Докато това е достатъчно за сензори и изпълнителни механизми с ниска мощност като LED, то е твърде ниско за контролиране на по-голям хардуер, като водна помпа, използвана за напояване. Дори малки помпи, които бихте могли да използвате за стайни растения, изискват твърде много ток за IoT dev kit и биха изгорили платката. + +> 🎓 Токът, измерван в ампери (A), е количеството електричество, преминаващо през веригата. Напрежението осигурява тласъка, токът е колко се тласка. Можете да прочетете повече за тока на [страницата за електрически ток в Wikipedia](https://wikipedia.org/wiki/Electric_current). + +Решението за това е да имате помпа, свързана към външно захранване, и да използвате изпълнителен механизъм за включване на помпата, подобно на това как бихте включили лампа. Необходима е малка мощност (под формата на енергия в тялото ви), за да може пръстът ви да натисне ключа, и това свързва лампата към електрическата мрежа, работеща на 110v/240v. + +![Ключ за лампа включва захранването към лампата](../../../../../translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.bg.png) + +> 🎓 [Електрическата мрежа](https://wikipedia.org/wiki/Mains_electricity) се отнася до електричеството, доставяно до домове и бизнеси чрез национална инфраструктура в много части на света. + +✅ IoT устройствата обикновено осигуряват 3.3V или 5V, при по-малко от 1 ампер (1A) ток. Сравнете това с електрическата мрежа, която най-често е на 230V (120V в Северна Америка и 100V в Япония) и може да осигури мощност за устройства, които изискват 30A. + +Има редица изпълнителни механизми, които могат да направят това, включително механични устройства, които можете да прикрепите към съществуващи ключове, имитиращи пръст, който ги включва. Най-популярното е реле. + +### Релета + +Релето е електромеханичен ключ, който преобразува електрически сигнал в механично движение, което включва ключа. Основата на релето е електромагнит. + +> 🎓 [Електромагнитите](https://wikipedia.org/wiki/Electromagnet) са магнити, които се създават чрез пропускане на електричество през намотка от проводник. Когато електричеството е включено, намотката се намагнетизира. Когато електричеството е изключено, намотката губи своята магнетизация. + +![Когато е включено, електромагнитът създава магнитно поле, включвайки ключа за изходната верига](../../../../../translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.bg.png) + +В релето управляващата верига захранва електромагнита. Когато електромагнитът е включен, той издърпва лост, който движи ключа, затваряйки двойка контакти и завършвайки изходната верига. + +![Когато е изключено, електромагнитът не създава магнитно поле, изключвайки ключа за изходната верига](../../../../../translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.bg.png) + +Когато управляващата верига е изключена, електромагнитът се изключва, освобождавайки лоста и отваряйки контактите, изключвайки изходната верига. Релетата са цифрови изпълнителни механизми - висок сигнал към релето го включва, нисък сигнал го изключва. + +Изходната верига може да се използва за захранване на допълнителен хардуер, като система за напояване. IoT устройството може да включи релето, завършвайки изходната верига, която захранва системата за напояване, и растенията се поливат. IoT устройството може след това да изключи релето, прекъсвайки захранването към системата за напояване, спирайки водата. + +![Реле, което се включва, включва помпа, изпращаща вода към растение](../../../../../images/strawberry-pump.gif) + +Във видеото по-горе релето се включва. LED на релето светва, за да покаже, че е включено (някои платки с релета имат LED, които показват дали релето е включено или изключено), и захранването се изпраща към помпата, включвайки я и изпомпвайки вода към растение. + +> 💁 Релетата могат също да се използват за превключване между две изходни вериги вместо за включване и изключване на една. Когато лостът се движи, той премества ключа от завършване на една изходна верига към завършване на друга изходна верига, обикновено споделяйки обща връзка за захранване или обща връзка за земя. + +✅ Направете проучване: Има множество видове релета, с разлики като това дали управляващата верига включва или изключва релето, когато се приложи захранване, или множество изходни вериги. Разберете повече за тези различни видове. + +Когато лостът се движи, обикновено можете да чуете как той прави контакт с електромагнита с ясно изразен звук на щракване. + +> 💁 Реле може да бъде свързано така, че създаването на връзката всъщност да прекъсне захранването към релето, изключвайки го, което след това изпраща захранване към релето, включвайки го отново, и така нататък. Това означава, че релето ще щрака изключително бързо, създавайки бръмчащ звук. Това е начинът, по който някои от първите звънци, използвани в електрически звънци на врати, работеха. + +### Мощност на релето + +Електромагнитът не се нуждае от много мощност, за да се активира и да издърпа лоста, той може да се контролира с 3.3V или 5V изход от IoT dev kit. Изходната верига може да носи много повече мощност, в зависимост от релето, включително напрежение от електрическата мрежа или дори по-високи нива на мощност за индустриална употреба. По този начин IoT dev kit може да контролира система за напояване, от малка помпа за едно растение до огромна индустриална система за цяла търговска ферма. + +![Реле Grove с обозначени управляваща верига, изходна верига и реле](../../../../../translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.bg.png) + +Изображението по-горе показва реле Grove. Управляващата верига се свързва към IoT устройство и включва или изключва релето, използвайки 3.3V или 5V. Изходната верига има два терминала, всеки от тях може да бъде захранване или земя. Изходната верига може да обработва до 250V при 10A, достатъчно за редица устройства, захранвани от електрическата мрежа. Можете да получите релета, които могат да обработват дори по-високи нива на мощност. + +![Помпа, свързана чрез реле](../../../../../translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.bg.png) + +В изображението по-горе захранването се доставя на помпа чрез реле. Има червен проводник, който свързва +5V терминала на USB захранване към един терминал на изходната верига на релето, и друг червен проводник, който свързва другия терминал на изходната верига към помпата. Черен проводник свързва помпата към земята на USB захранването. Когато релето се включи, то завършва веригата, изпращайки 5V към помпата, включвайки я. + +## Контролиране на реле + +Можете да контролирате реле от вашия IoT dev kit. + +### Задача - контролиране на реле + +Работете по съответното ръководство, за да контролирате реле, използвайки вашето IoT устройство: + +* [Arduino - Wio Terminal](wio-terminal-relay.md) +* [Едноплатков компютър - Raspberry Pi](pi-relay.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device-relay.md) + +## Контролиране на вашето растение чрез MQTT + +Досега вашето реле се контролираше директно от IoT устройството въз основа на едно измерване на влажността на почвата. В търговска система за напояване логиката за управление ще бъде централизирана, позволявайки вземането на решения за поливане, използвайки данни от множество сензори, и позволявайки всяка конфигурация да бъде променена на едно място. За да симулирате това, можете да контролирате релето чрез MQTT. + +### Задача - контролиране на релето чрез MQTT + +1. Добавете съответните MQTT библиотеки/pip пакети и код към вашия проект `soil-moisture-sensor`, за да се свържете с MQTT. Назовете идентификатора на клиента като `soilmoisturesensor_client`, предшестван от вашия идентификатор. + + > ⚠️ Можете да се обърнете към [инструкциите за свързване към MQTT в проект 1, урок 4, ако е необходимо](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt). + +1. Добавете съответния код на устройството, за да изпращате телеметрия с настройките за влажност на почвата. За съобщението за телеметрия назовете свойството `soil_moisture`. + + > ⚠️ Можете да се обърнете към [инструкциите за изпращане на телеметрия към MQTT в проект 1, урок 4, ако е необходимо](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device). + +1. Създайте локален сървърен код, който да се абонира за телеметрия и да изпраща команда за контролиране на релето в папка, наречена `soil-moisture-sensor-server`. Назовете свойството в съобщението за команда `relay_on`, и задайте идентификатора на клиента като `soilmoisturesensor_server`, предшестван от вашия идентификатор. Запазете същата структура като сървърния код, който написахте за проект 1, урок 4, тъй като ще добавяте към този код по-късно в този урок. + + > ⚠️ Можете да се обърнете към [инструкциите за изпращане на телеметрия към MQTT](../../../1-getting-started/lessons/4-connect-internet/README.md#write-the-server-code) и [изпращане на команди чрез MQTT](../../../1-getting-started/lessons/4-connect-internet/README.md#send-commands-to-the-mqtt-broker) в проект 1, урок 4, ако е необходимо. + +1. Добавете съответния код на устройството, за да контролирате релето от получени команди, използвайки свойството `relay_on` от съобщението. Изпратете true за `relay_on`, ако `soil_moisture` е по-голямо от 450, в противен случай изпратете false, същото като логиката, която добавихте за IoT устройството по-рано. + + > ⚠️ Можете да се обърнете към [инструкциите за реагиране на команди от MQTT в проект 1, урок 4, ако е необходимо](../../../1-getting-started/lessons/4-connect-internet/README.md#handle-commands-on-the-iot-device). + +> 💁 Можете да намерите този код в папката [code-mqtt](../../../../../2-farm/lessons/3-automated-plant-watering/code-mqtt). + +Уверете се, че кодът работи на вашето устройство и локален сървър, и го тествайте, като промените нивата на влажност на почвата, или чрез промяна на стойностите, изпратени от виртуалния сензор, или чрез промяна на нивата на влажност на почвата, добавяйки вода или премахвайки сензора от почвата. + +## Време за сензори и изпълнителни механизми + +В урок 3 създадохте нощна лампа - LED, който се включва веднага щом се открие ниско ниво на светлина от светлинен сензор. Светлинният сензор открива промяна в нивата на светлина моментално, и устройството може да реагира бързо, ограничено само от дължината на забавянето в функцията `loop` или цикъла `while True:`. Като IoT разработчик, не винаги можете да разчитате на толкова бърз цикъл на обратна връзка. + +### Време за влажност на почвата + +Ако сте направили последния урок за влажност на почвата, използвайки физически сензор, вероятно сте забелязали, че отнема няколко секунди, докато показанията за влажност на почвата спаднат, след като сте поливали растението си. Това не е защото сензорът е бавен, а защото водата се нуждае от време, за да проникне през почвата. +💁 Ако сте поливали твърде близо до сензора, може да сте забелязали, че показанията бързо спадат, а след това се връщат обратно нагоре – това се дължи на факта, че водата около сензора се разпространява в останалата част от почвата, намалявайки влагата в почвата около сензора. +![Измерване на влажността на почвата от 658 не се променя по време на поливане, а пада до 320 след поливане, когато водата е проникнала през почвата](../../../../../translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.bg.png) + +На диаграмата по-горе измерването на влажността на почвата показва 658. Растението се полива, но тази стойност не се променя веднага, тъй като водата все още не е достигнала до сензора. Поливането може дори да приключи, преди водата да достигне сензора и стойността да спадне, за да отрази новото ниво на влажност. + +Ако пишете код за управление на напоителна система чрез реле, базирано на нивата на влажност на почвата, трябва да вземете предвид това забавяне и да изградите по-интелигентно време за реакция във вашето IoT устройство. + +✅ Отделете момент, за да помислите как бихте могли да направите това. + +### Управление на времето на сензора и изпълнителния механизъм + +Представете си, че сте натоварени със задачата да изградите напоителна система за ферма. Въз основа на типа почва, идеалното ниво на влажност за растенията е установено, че съответства на аналогово напрежение от 400-450. + +Можете да програмирате устройството по същия начин като нощната лампа - през цялото време, когато сензорът отчита над 450, включете релето, за да включите помпата. Проблемът е, че водата отнема време, за да премине от помпата през почвата до сензора. Сензорът ще спре водата, когато засече ниво от 450, но нивото на водата ще продължи да пада, тъй като изпомпваната вода продължава да прониква през почвата. Крайният резултат е загуба на вода и риск от увреждане на корените. + +✅ Запомнете - твърде много вода може да бъде толкова вредна за растенията, колкото и твърде малко, и разхищава ценен ресурс. + +По-доброто решение е да се разбере, че има забавяне между включването на изпълнителния механизъм и промяната на свойството, което сензорът отчита. Това означава, че не само сензорът трябва да изчака известно време, преди да измери стойността отново, но и изпълнителният механизъм трябва да се изключи за известно време, преди да се направи следващото измерване на сензора. + +Колко време трябва да бъде включено релето всеки път? По-добре е да се действа предпазливо и да се включва релето за кратко време, след това да се изчака водата да проникне, и след това да се провери нивото на влажност. В крайна сметка винаги можете да го включите отново, за да добавите още вода, но не можете да премахнете вода от почвата. + +> 💁 Този вид управление на времето е много специфично за IoT устройството, което изграждате, свойството, което измервате, и използваните сензори и изпълнителни механизми. + +![Растение ягода, свързано с вода чрез помпа, като помпата е свързана с реле. Релето и сензор за влажност на почвата в растението са свързани с Raspberry Pi](../../../../../translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.bg.png) + +Например, имам растение ягода със сензор за влажност на почвата и помпа, контролирана от реле. Наблюдавах, че когато добавя вода, отнема около 20 секунди, за да се стабилизира измерването на влажността на почвата. Това означава, че трябва да изключа релето и да изчакам 20 секунди, преди да проверя нивото на влажност. Предпочитам да има твърде малко вода, отколкото твърде много - винаги мога да включа помпата отново, но не мога да премахна вода от растението. + +![Стъпка 1: направете измерване. Стъпка 2: добавете вода. Стъпка 3: изчакайте водата да проникне през почвата. Стъпка 4: направете ново измерване](../../../../../translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.bg.png) + +Това означава, че най-добрият процес би бил цикъл на поливане, който изглежда така: + +* Включете помпата за 5 секунди +* Изчакайте 20 секунди +* Проверете влажността на почвата +* Ако нивото все още е над необходимото, повторете горните стъпки + +5 секунди може да са твърде дълго за помпата, особено ако нивата на влажност са само малко над необходимото ниво. Най-добрият начин да разберете какво време да използвате е да го изпробвате, след това да го коригирате, когато имате данни от сензора, с постоянен цикъл на обратна връзка. Това може дори да доведе до по-гранулирано време, като например включване на помпата за 1 секунда за всеки 100 над необходимото ниво на влажност, вместо фиксирани 5 секунди. + +✅ Направете проучване: Има ли други съображения за времето? Може ли растението да се полива по всяко време, когато влажността на почвата е твърде ниска, или има специфични часове от деня, които са добри и лоши за поливане на растенията? + +> 💁 Прогнозите за времето също могат да бъдат взети предвид при управлението на автоматизирани напоителни системи за външно отглеждане. Ако се очаква дъжд, поливането може да бъде отложено до след края на дъжда. В този момент почвата може да е достатъчно влажна, че да не се нуждае от поливане, което е много по-ефективно, отколкото да се разхищава вода, като се полива точно преди дъжда. + +## Добавете време към сървъра за управление на растенията + +Кодът на сървъра може да бъде модифициран, за да добави управление около времето на цикъла на поливане и изчакването за промяна на нивата на влажност на почвата. Логиката на сървъра за управление на времето на релето е: + +1. Получено съобщение за телеметрия +1. Проверете нивото на влажност на почвата +1. Ако е наред, не правете нищо. Ако измерването е твърде високо (което означава, че влажността на почвата е твърде ниска), тогава: + 1. Изпратете команда за включване на релето + 1. Изчакайте 5 секунди + 1. Изпратете команда за изключване на релето + 1. Изчакайте 20 секунди, за да се стабилизират нивата на влажност на почвата + +Цикълът на поливане, процесът от получаване на съобщението за телеметрия до готовност за обработка на нивата на влажност на почвата отново, отнема около 25 секунди. Изпращаме нивата на влажност на почвата на всеки 10 секунди, така че има припокриване, при което съобщение се получава, докато сървърът изчаква стабилизиране на нивата на влажност на почвата, което може да започне нов цикъл на поливане. + +Има два варианта за справяне с това: + +* Променете кода на IoT устройството, така че да изпраща телеметрия само веднъж в минута, така че цикълът на поливане да бъде завършен преди изпращането на следващото съобщение +* Отпишете се от телеметрията по време на цикъла на поливане + +Първият вариант не винаги е добро решение за големи ферми. Фермерът може да иска да записва нивата на влажност на почвата, докато почвата се полива, за по-късен анализ, например за да бъде наясно с потока на водата в различни области на фермата, за да насочи по-целенасочено поливане. Вторият вариант е по-добър - кодът просто игнорира телеметрията, когато не може да я използва, но телеметрията все още е налична за други услуги, които може да се абонират за нея. + +> 💁 IoT данните не се изпращат само от едно устройство към една услуга, вместо това много устройства могат да изпращат данни към брокер, и много услуги могат да слушат данните от брокера. Например, една услуга може да слуша данни за влажността на почвата и да ги съхранява в база данни за анализ на по-късен етап. Друга услуга може също да слуша същата телеметрия, за да управлява напоителна система. + +### Задача - добавете време към сървъра за управление на растенията + +Актуализирайте кода на сървъра, за да управлява релето за 5 секунди, след това да изчака 20 секунди. + +1. Отворете папката `soil-moisture-sensor-server` в VS Code, ако вече не е отворена. Уверете се, че виртуалната среда е активирана. + +1. Отворете файла `app.py` + +1. Добавете следния код към файла `app.py` под съществуващите импорти: + + ```python + import threading + ``` + + Това изявление импортира `threading` от библиотеките на Python, което позволява на Python да изпълнява друг код, докато чака. + +1. Добавете следния код преди функцията `handle_telemetry`, която обработва съобщенията за телеметрия, получени от кода на сървъра: + + ```python + water_time = 5 + wait_time = 20 + ``` + + Това определя колко дълго да работи релето (`water_time`) и колко дълго да се изчака след това, за да се провери влажността на почвата (`wait_time`). + +1. Под този код добавете следното: + + ```python + def send_relay_command(client, state): + command = { 'relay_on' : state } + print("Sending message:", command) + client.publish(server_command_topic, json.dumps(command)) + ``` + + Този код дефинира функция, наречена `send_relay_command`, която изпраща команда чрез MQTT за управление на релето. Телеметрията се създава като речник, след това се преобразува в JSON низ. Стойността, предадена в `state`, определя дали релето трябва да бъде включено или изключено. + +1. След функцията `send_relay_code` добавете следния код: + + ```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) + ``` + + Това дефинира функция за управление на релето въз основа на необходимото време. Започва с отписване от телеметрията, така че съобщенията за влажност на почвата да не се обработват, докато поливането се извършва. След това изпраща команда за включване на релето. След това изчаква `water_time`, преди да изпрати команда за изключване на релето. Накрая изчаква нивата на влажност на почвата да се стабилизират за `wait_time` секунди. След това се абонира отново за телеметрията. + +1. Променете функцията `handle_telemetry` на следното: + + ```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() + ``` + + Този код проверява нивото на влажност на почвата. Ако е над 450, почвата се нуждае от поливане, така че извиква функцията `control_relay`. Тази функция се изпълнява на отделен нишка, работеща във фонов режим. + +1. Уверете се, че вашето IoT устройство работи, след това изпълнете този код. Променете нивата на влажност на почвата и наблюдавайте какво се случва с релето - то трябва да се включи за 5 секунди, след това да остане изключено поне 20 секунди, като се включва само ако нивата на влажност на почвата не са достатъчни. + + ```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} + ``` + + Добър начин за тестване на това в симулирана напоителна система е да използвате суха почва, след това да налеете вода ръчно, докато релето е включено, спирайки наливането, когато релето се изключи. + +> 💁 Можете да намерите този код в папката [code-timing](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing). + +> 💁 Ако искате да използвате помпа, за да изградите реална напоителна система, можете да използвате [6V водна помпа](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) с [USB терминално захранване](https://www.adafruit.com/product/3628). Уверете се, че захранването към или от помпата е свързано чрез релето. + +--- + +## 🚀 Предизвикателство + +Можете ли да се сетите за други IoT или електрически устройства, които имат подобен проблем, при който отнема време резултатите от изпълнителния механизъм да достигнат до сензора? Вероятно имате няколко в дома си или училището си. + +* Какви свойства измерват? +* Колко време отнема на свойството да се промени след използване на изпълнителния механизъм? +* Ок ли е свойството да се промени над необходимата стойност? +* Как може да бъде върнато обратно към необходимата стойност, ако е нужно? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14) + +## Преглед и самостоятелно обучение + +* Прочетете повече за релетата, включително тяхната историческа употреба в телефонни централи, на [страницата за релета в Wikipedia](https://wikipedia.org/wiki/Relay). + +## Задание + +[Изградете по-ефективен цикъл на поливане](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/3-automated-plant-watering/assignment.md b/translations/bg/2-farm/lessons/3-automated-plant-watering/assignment.md new file mode 100644 index 00000000..12cd58cb --- /dev/null +++ b/translations/bg/2-farm/lessons/3-automated-plant-watering/assignment.md @@ -0,0 +1,54 @@ + +# Създайте по-ефективен цикъл за напояване + +## Инструкции + +Този урок обхвана как да управлявате реле чрез данни от сензор, като това реле може да контролира помпа за напоителна система. За определен обем почва, работата на помпата за фиксирано време винаги трябва да има същото въздействие върху влажността на почвата. Това означава, че можете да получите представа за това колко секунди напояване съответстват на определено намаление на показанията за влажност на почвата. Използвайки тези данни, можете да изградите по-контролирана напоителна система. + +За тази задача ще изчислите колко дълго трябва да работи помпата за определено увеличение на влажността на почвата. + +> ⚠️ Ако използвате виртуален IoT хардуер, можете да преминете през този процес, но симулирайте резултатите, като ръчно увеличите показанията за влажност на почвата с фиксирана стойност за всяка секунда, в която релето е включено. + +1. Започнете с суха почва. Измерете влажността на почвата. + +1. Добавете фиксирано количество вода, като пуснете помпата за 1 секунда или като налеете фиксирано количество вода. + + > Помпата винаги трябва да работи с постоянна скорост, така че всяка секунда, в която работи, трябва да доставя едно и също количество вода. + +1. Изчакайте, докато нивото на влажност на почвата се стабилизира, и направете измерване. + +1. Повторете това няколко пъти и създайте таблица с резултатите. Пример за такава таблица е даден по-долу. + + | Общо време на помпата | Влажност на почвата | Намаление | + | --- | --: | -: | + | Суха | 643 | 0 | + | 1с | 621 | 22 | + | 2с | 601 | 20 | + | 3с | 579 | 22 | + | 4с | 560 | 19 | + | 5с | 539 | 21 | + | 6с | 521 | 18 | + +1. Изчислете средното увеличение на влажността на почвата за всяка секунда вода. В горния пример всяка секунда вода намалява показанията със средно 20.3. + +1. Използвайте тези данни, за да подобрите ефективността на сървърния код, като пускате помпата за необходимото време, за да достигнете желаното ниво на влажност на почвата. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Събиране на данни за влажността на почвата | Успява да събере множество измервания след добавяне на фиксирани количества вода | Успява да събере някои измервания с фиксирани количества вода | Може да събере само едно или две измервания, или не успява да използва фиксирани количества вода | +| Калибриране на сървърния код | Успява да изчисли средно намаление на показанията за влажност на почвата и да актуализира сървърния код, за да го използва | Успява да изчисли средно намаление, но не може да актуализира сървърния код, или не успява правилно да изчисли средно намаление, но използва тази стойност за правилно актуализиране на сървърния код | Не успява да изчисли средно намаление или да актуализира сървърния код | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/3-automated-plant-watering/pi-relay.md b/translations/bg/2-farm/lessons/3-automated-plant-watering/pi-relay.md new file mode 100644 index 00000000..dd254165 --- /dev/null +++ b/translations/bg/2-farm/lessons/3-automated-plant-watering/pi-relay.md @@ -0,0 +1,123 @@ + +# Управление на реле - Raspberry Pi + +В тази част от урока ще добавите реле към вашия Raspberry Pi, в допълнение към сензора за влажност на почвата, и ще го управлявате въз основа на нивото на влажност на почвата. + +## Хардуер + +Raspberry Pi се нуждае от реле. + +Релето, което ще използвате, е [Grove реле](https://www.seeedstudio.com/Grove-Relay.html), нормално отворено реле (което означава, че изходната верига е отворена или изключена, когато няма сигнал, изпратен към релето), което може да управлява изходни вериги до 250V и 10A. + +Това е цифров актуатор, така че се свързва към цифров пин на Grove Base Hat. + +### Свързване на релето + +Grove релето може да бъде свързано към Raspberry Pi. + +#### Задача + +Свържете релето. + +![Grove реле](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на релето. Той ще влезе само в една посока. + +1. С изключено захранване на Raspberry Pi, свържете другия край на Grove кабела към цифровото гнездо, означено като **D5** на Grove Base Hat, прикрепен към Pi. Това гнездо е второто отляво, на реда с гнезда до GPIO пиновете. Оставете сензора за влажност на почвата свързан към гнездото **A0**. + +![Grove релето свързано към гнездото D5, а сензорът за влажност на почвата свързан към гнездото A0](../../../../../translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.bg.png) + +1. Поставете сензора за влажност на почвата в почвата, ако вече не е поставен от предишния урок. + +## Програмиране на релето + +Сега Raspberry Pi може да бъде програмиран да използва свързаното реле. + +### Задача + +Програмирайте устройството. + +1. Включете захранването на Pi и изчакайте да се стартира. + +1. Отворете проекта `soil-moisture-sensor` от последния урок във VS Code, ако вече не е отворен. Ще добавяте към този проект. + +1. Добавете следния код към файла `app.py` под съществуващите импорти: + + ```python + from grove.grove_relay import GroveRelay + ``` + + Това изявление импортира `GroveRelay` от библиотеките на Grove Python, за да взаимодействате с Grove релето. + +1. Добавете следния код под декларацията на класа `ADC`, за да създадете инстанция на `GroveRelay`: + + ```python + relay = GroveRelay(5) + ``` + + Това създава реле, използвайки пин **D5**, цифровия пин, към който сте свързали релето. + +1. За да тествате дали релето работи, добавете следното към цикъла `while True:`: + + ```python + relay.on() + time.sleep(.5) + relay.off() + ``` + + Кодът включва релето, изчаква 0.5 секунди, след което го изключва. + +1. Стартирайте Python приложението. Релето ще се включва и изключва на всеки 10 секунди, с половин секунда закъснение между включването и изключването. Ще чуете как релето щраква при включване и изключване. LED на Grove платката ще светне, когато релето е включено, и ще изгасне, когато е изключено. + + ![Релето се включва и изключва](../../../../../images/relay-turn-on-off.gif) + +## Управление на релето според влажността на почвата + +Сега, когато релето работи, то може да се управлява в отговор на показанията за влажност на почвата. + +### Задача + +Управлявайте релето. + +1. Изтрийте трите реда код, които добавихте за тестване на релето. Заменете ги със следния код: + + ```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() + ``` + + Този код проверява нивото на влажност на почвата от сензора за влажност. Ако е над 450, включва релето, а ако е под 450, го изключва. + + > 💁 Помнете, че капацитивният сензор за влажност на почвата отчита: колкото по-ниско е нивото на влажност, толкова повече влага има в почвата, и обратно. + +1. Стартирайте Python приложението. Ще видите как релето се включва или изключва в зависимост от нивото на влажност на почвата. Опитайте в суха почва, след това добавете вода. + + ```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. + ``` + +> 💁 Можете да намерите този код в папката [code-relay/pi](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/pi). + +😀 Вашата програма за управление на реле чрез сензор за влажност на почвата беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md b/translations/bg/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md new file mode 100644 index 00000000..c493e181 --- /dev/null +++ b/translations/bg/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md @@ -0,0 +1,127 @@ + +# Управление на реле - Виртуален IoT хардуер + +В тази част от урока ще добавите реле към вашето виртуално IoT устройство, освен сензора за влажност на почвата, и ще го управлявате въз основа на нивото на влажност на почвата. + +## Виртуален хардуер + +Виртуалното IoT устройство ще използва симулирано Grove реле. Това запазва лабораторията същата като използването на Raspberry Pi с физическо Grove реле. + +При физическо IoT устройство релето би било нормално отворено реле (което означава, че изходната верига е отворена или прекъсната, когато няма сигнал, изпратен към релето). Такова реле може да обработва изходни вериги до 250V и 10A. + +### Добавяне на реле към CounterFit + +За да използвате виртуално реле, трябва да го добавите към приложението CounterFit. + +#### Задача + +Добавете релето към приложението CounterFit. + +1. Отворете проекта `soil-moisture-sensor` от последния урок в VS Code, ако вече не е отворен. Ще добавяте към този проект. + +1. Уверете се, че уеб приложението CounterFit работи. + +1. Създайте реле: + + 1. В полето *Create actuator* в панела *Actuators*, отворете падащото меню *Actuator type* и изберете *Relay*. + + 1. Задайте *Pin* на *5*. + + 1. Изберете бутона **Add**, за да създадете релето на Pin 5. + + ![Настройки на релето](../../../../../translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.bg.png) + + Релето ще бъде създадено и ще се появи в списъка с актуатори. + + ![Създадено реле](../../../../../translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.bg.png) + +## Програмиране на релето + +Приложението за сензор за влажност на почвата вече може да бъде програмирано да използва виртуалното реле. + +### Задача + +Програмирайте виртуалното устройство. + +1. Отворете проекта `soil-moisture-sensor` от последния урок в VS Code, ако вече не е отворен. Ще добавяте към този проект. + +1. Добавете следния код към файла `app.py` под съществуващите импорти: + + ```python + from counterfit_shims_grove.grove_relay import GroveRelay + ``` + + Тази команда импортира `GroveRelay` от библиотеките Grove Python shim, за да взаимодействате с виртуалното Grove реле. + +1. Добавете следния код под декларацията на класа `ADC`, за да създадете инстанция на `GroveRelay`: + + ```python + relay = GroveRelay(5) + ``` + + Това създава реле, използвайки пин **5**, пина, към който сте свързали релето. + +1. За да тествате дали релето работи, добавете следното към цикъла `while True:`: + + ```python + relay.on() + time.sleep(.5) + relay.off() + ``` + + Кодът включва релето, изчаква 0.5 секунди, след което го изключва. + +1. Стартирайте Python приложението. Релето ще се включва и изключва на всеки 10 секунди, с половин секунда закъснение между включването и изключването. Ще видите как виртуалното реле в приложението CounterFit се затваря и отваря, когато релето се включва и изключва. + + ![Виртуалното реле се включва и изключва](../../../../../images/virtual-relay-turn-on-off.gif) + +## Управление на релето според влажността на почвата + +Сега, когато релето работи, то може да бъде управлявано в отговор на показанията за влажност на почвата. + +### Задача + +Управлявайте релето. + +1. Изтрийте трите реда код, които добавихте за тестване на релето. Заменете ги със следния код на тяхно място: + + ```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() + ``` + + Този код проверява нивото на влажност на почвата от сензора за влажност на почвата. Ако е над 450, включва релето, като го изключва, ако падне под 450. + + > 💁 Запомнете, че капацитивният сензор за влажност на почвата отчита: колкото по-ниско е нивото на влажност на почвата, толкова повече влага има в почвата и обратно. + +1. Стартирайте Python приложението. Ще видите как релето се включва или изключва в зависимост от нивата на влажност на почвата. Променете настройките *Value* или *Random* за сензора за влажност на почвата, за да видите как стойността се променя. + + ```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. + ``` + +> 💁 Можете да намерите този код в папката [code-relay/virtual-device](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device). + +😀 Вашата програма за виртуален сензор за влажност на почвата, която управлява реле, беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md b/translations/bg/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md new file mode 100644 index 00000000..39c436d1 --- /dev/null +++ b/translations/bg/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md @@ -0,0 +1,121 @@ + +# Управление на реле - Wio Terminal + +В тази част на урока ще добавите реле към вашия Wio Terminal, освен сензора за влажност на почвата, и ще го управлявате въз основа на нивото на влажност на почвата. + +## Хардуер + +Wio Terminal се нуждае от реле. + +Релето, което ще използвате, е [Grove реле](https://www.seeedstudio.com/Grove-Relay.html), нормално отворено реле (което означава, че изходната верига е отворена или прекъсната, когато няма сигнал, изпратен към релето), което може да обработва изходни вериги до 250V и 10A. + +Това е цифров актуатор, така че се свързва към цифровите пинове на Wio Terminal. Комбинираният аналогов/цифров порт вече се използва със сензора за влажност на почвата, така че това реле се включва в другия порт, който е комбиниран I2C и цифров порт. + +### Свързване на релето + +Grove релето може да бъде свързано към цифровия порт на Wio Terminal. + +#### Задача + +Свържете релето. + +![Grove реле](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на релето. Той ще влезе само в една посока. + +1. С изключен Wio Terminal от вашия компютър или друг източник на захранване, свържете другия край на Grove кабела към лявото гнездо на Wio Terminal, когато гледате екрана. Оставете сензора за влажност на почвата свързан към дясното гнездо. + +![Grove релето свързано към лявото гнездо, а сензорът за влажност на почвата свързан към дясното гнездо](../../../../../translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.bg.png) + +1. Поставете сензора за влажност на почвата в почвата, ако вече не е поставен от предишния урок. + +## Програмиране на релето + +Сега Wio Terminal може да бъде програмиран да използва свързаното реле. + +### Задача + +Програмирайте устройството. + +1. Отворете проекта `soil-moisture-sensor` от последния урок в VS Code, ако вече не е отворен. Ще добавяте към този проект. + +2. Няма библиотека за този актуатор - това е цифров актуатор, който се управлява чрез висок или нисък сигнал. За да го включите, изпращате висок сигнал към пина (3.3V), а за да го изключите - нисък сигнал (0V). Можете да направите това, като използвате вградената Arduino функция [`digitalWrite`](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/). Започнете, като добавите следното в края на функцията `setup`, за да настроите комбинирания I2C/цифров порт като изходен пин за изпращане на напрежение към релето: + + ```cpp + pinMode(PIN_WIRE_SCL, OUTPUT); + ``` + + `PIN_WIRE_SCL` е номерът на порта за комбинирания I2C/цифров порт. + +1. За да тествате дали релето работи, добавете следното към функцията `loop`, под последния `delay`: + + ```cpp + digitalWrite(PIN_WIRE_SCL, HIGH); + delay(500); + digitalWrite(PIN_WIRE_SCL, LOW); + ``` + + Кодът изпраща висок сигнал към пина, към който е свързано релето, за да го включи, изчаква 500ms (половин секунда), след което изпраща нисък сигнал, за да изключи релето. + +1. Компилирайте и качете кода на Wio Terminal. + +1. След като кодът бъде качен, релето ще се включва и изключва на всеки 10 секунди, с половин секунда закъснение между включването и изключването. Ще чуете как релето щраква при включване и изключване. LED на Grove платката ще светне, когато релето е включено, и ще изгасне, когато е изключено. + + ![Релето се включва и изключва](../../../../../images/relay-turn-on-off.gif) + +## Управление на релето според влажността на почвата + +След като релето работи, то може да се управлява в отговор на показанията за влажност на почвата. + +### Задача + +Управлявайте релето. + +1. Изтрийте трите реда код, които добавихте за тестване на релето. Заменете ги със следния код: + + ```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); + } + ``` + + Този код проверява нивото на влажност на почвата от сензора за влажност на почвата. Ако то е над 450, релето се включва, а ако е под 450, се изключва. + + > 💁 Помнете, че капацитивният сензор за влажност на почвата отчита: колкото по-ниско е нивото на влажност, толкова повече влага има в почвата, и обратно. + +1. Компилирайте и качете кода на Wio Terminal. + +1. Наблюдавайте устройството чрез серийния монитор. Ще видите как релето се включва или изключва в зависимост от нивото на влажност на почвата. Опитайте в суха почва, след което добавете вода. + + ```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. + ``` + +> 💁 Можете да намерите този код в папката [code-relay/wio-terminal](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/wio-terminal). + +😀 Вашата програма за управление на реле чрез сензор за влажност на почвата беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md new file mode 100644 index 00000000..9e6b3e1b --- /dev/null +++ b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md @@ -0,0 +1,451 @@ + +# Мигрирайте вашето растение към облака + +![Скица на урока](../../../../../translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок беше част от [IoT за начинаещи - Проект 2: Серия за дигитално земеделие](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) от [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![Свържете вашето устройство с облака чрез Azure IoT Hub](https://img.youtube.com/vi/bNxjopXkhvk/0.jpg)](https://youtu.be/bNxjopXkhvk) + +## Предварителен тест + +[Предварителен тест](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/15) + +## Въведение + +В предишния урок научихте как да свържете вашето растение към MQTT брокер и да управлявате реле чрез сървърен код, който работи локално. Това е основата на интернет-свързана автоматизирана система за поливане, която може да се използва както за отделни растения у дома, така и за комерсиални ферми. + +IoT устройството комуникира с публичен MQTT брокер, за да демонстрира принципите, но това не е най-надеждният или сигурен начин. В този урок ще научите за облака и IoT възможностите, предоставени от публични облачни услуги. Ще научите също как да мигрирате вашето растение към една от тези облачни услуги от публичния MQTT брокер. + +В този урок ще разгледаме: + +* [Какво е облакът?](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Създаване на облачен абонамент](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [IoT услуги в облака](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Създаване на IoT услуга в облака](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Комуникация с IoT Hub](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [Свързване на устройството към IoT услугата](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) + +## Какво е облакът? + +Преди облака, когато една компания искаше да предостави услуги на своите служители (като бази данни или съхранение на файлове) или на обществеността (като уебсайтове), тя трябваше да изгражда и управлява собствен център за данни. Това можеше да варира от стая с малък брой компютри до сграда с много компютри. Компанията трябваше да управлява всичко, включително: + +* Закупуване на компютри +* Поддръжка на хардуера +* Електрозахранване и охлаждане +* Мрежова свързаност +* Сигурност, включително защита на сградата и софтуера на компютрите +* Инсталиране и актуализиране на софтуера + +Това можеше да бъде много скъпо, да изисква широк спектър от квалифицирани служители и да бъде много бавно за промяна, когато е необходимо. Например, ако онлайн магазин трябваше да се подготви за натоварен празничен сезон, той трябваше да планира месеци предварително, за да закупи повече хардуер, да го конфигурира, да инсталира софтуера и да подготви процеса на продажби. След края на празничния сезон, когато продажбите намалеят, компютрите, за които са платили, остават неизползвани до следващия натоварен период. + +✅ Смятате ли, че това би позволило на компаниите да се движат бързо? Ако онлайн магазин за дрехи внезапно стане популярен заради знаменитост, която носи техни дрехи, дали ще могат да увеличат изчислителната си мощност достатъчно бързо, за да поддържат внезапния наплив от поръчки? + +### Компютър на някой друг + +Облакът често се нарича шеговито "компютър на някой друг". Първоначалната идея беше проста - вместо да купувате компютри, наемате компютър на някой друг. Някой друг, доставчик на облачни услуги, управлява огромни центрове за данни. Те отговарят за закупуването и инсталирането на хардуера, управлението на електрозахранването и охлаждането, мрежовата свързаност, сигурността на сградата, актуализациите на хардуера и софтуера - всичко. Като клиент, вие наемате компютрите, които ви трябват, наемате повече, когато търсенето се увеличава, и намалявате броя, когато търсенето намалява. Тези облачни центрове за данни са разположени по целия свят. + +![Облачен център за данни на Microsoft](../../../../../translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.bg.png) +![Планирано разширение на облачен център за данни на Microsoft](../../../../../translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.bg.png) + +Тези центрове за данни могат да бъдат с площ от няколко квадратни километра. Изображенията по-горе са направени преди няколко години в облачен център за данни на Microsoft и показват първоначалния размер, както и планираното разширение. Разчистената площ за разширението е над 5 квадратни километра. + +> 💁 Тези центрове за данни изискват толкова големи количества енергия, че някои имат собствени електроцентрали. Поради техния размер и нивото на инвестиции от облачните доставчици, те обикновено са много екологични. Те са по-ефективни от голям брой малки центрове за данни, работят предимно с възобновяема енергия, а облачните доставчици работят усилено за намаляване на отпадъците, ограничаване на водната употреба и залесяване на гори, за да компенсират изсечените за изграждане на центрове за данни. Можете да научите повече за усилията на един облачен доставчик за устойчивост на [сайта за устойчивост на Azure](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn). + +✅ Направете проучване: Прочетете за основните облаци като [Azure от Microsoft](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) или [GCP от Google](https://cloud.google.com). Колко центрове за данни имат и къде се намират по света? + +Използването на облака намалява разходите за компаниите и им позволява да се фокусират върху това, което правят най-добре, оставяйки експертизата в облачните изчисления в ръцете на доставчика. Компаниите вече не трябва да наемат или купуват пространство за центрове за данни, да плащат на различни доставчици за свързаност и електроенергия или да наемат експерти. Вместо това, те могат да плащат една месечна сметка на облачния доставчик, който се грижи за всичко. + +Облачният доставчик може да използва икономии от мащаба, за да намали разходите, купувайки компютри на едро на по-ниски цени, инвестирайки в инструменти за намаляване на работното натоварване за поддръжка, дори проектирайки и изграждайки собствен хардуер за подобряване на облачната си услуга. + +### Microsoft Azure + +Azure е облак за разработчици от Microsoft и това е облакът, който ще използвате за тези уроци. Видеото по-долу дава кратък преглед на Azure: + +[![Видео за преглед на Azure](../../../../../translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.bg.png)](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn) + +## Създаване на облачен абонамент + +За да използвате услуги в облака, трябва да се регистрирате за абонамент при облачен доставчик. За този урок ще се регистрирате за абонамент в Microsoft Azure. Ако вече имате абонамент за Azure, можете да пропуснете тази задача. Детайлите за абонамента, описани тук, са актуални към момента на писане, но може да се променят. + +> 💁 Ако имате достъп до тези уроци чрез вашето училище, може вече да имате наличен абонамент за Azure. Проверете с вашия учител. + +Има два различни типа безплатни абонаменти за Azure, за които можете да се регистрирате: + +* **Azure за студенти** - Това е абонамент, предназначен за студенти на възраст 18+. Не е необходима кредитна карта за регистрация, а се използва училищен имейл адрес за валидиране, че сте студент. При регистрация получавате $100 за разходи за облачни ресурси, както и безплатни услуги, включително безплатна версия на IoT услуга. Това продължава 12 месеца и може да се подновява всяка година, докато сте студент. + +* **Безплатен абонамент за Azure** - Това е абонамент за всеки, който не е студент. Ще ви е необходима кредитна карта за регистрация, но картата няма да бъде таксувана, тя се използва само за проверка, че сте реален човек, а не бот. Получавате $200 кредит за използване през първите 30 дни за всяка услуга, както и безплатни нива на услуги в Azure. След като кредитът ви бъде изчерпан, картата няма да бъде таксувана, освен ако не конвертирате абонамента в платен. + +> 💁 Microsoft предлага абонамент Azure за студенти Starter за студенти под 18 години, но към момента на писане той не поддържа IoT услуги. + +### Задача - регистрирайте се за безплатен облачен абонамент + +Ако сте студент на възраст 18+, можете да се регистрирате за абонамент Azure за студенти. Ще трябва да валидирате с училищен имейл адрес. Можете да направите това по два начина: + +* Регистрирайте се за GitHub Student Developer Pack на [education.github.com/pack](https://education.github.com/pack). Това ви дава достъп до набор от инструменти и оферти, включително GitHub и Microsoft Azure. След като се регистрирате за Developer Pack, можете да активирате офертата Azure за студенти. + +* Регистрирайте се директно за акаунт Azure за студенти на [azure.microsoft.com/free/students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-17441-jabenn). + +> ⚠️ Ако вашият училищен имейл адрес не е разпознат, създайте [проблем в този репо](https://github.com/Microsoft/IoT-For-Beginners/issues) и ще проверим дали може да бъде добавен към списъка за разрешение на Azure за студенти. + +Ако не сте студент или нямате валиден училищен имейл адрес, можете да се регистрирате за безплатен абонамент за Azure. + +* Регистрирайте се за безплатен абонамент за Azure на [azure.microsoft.com/free](https://azure.microsoft.com/free/?WT.mc_id=academic-17441-jabenn) + +## IoT услуги в облака + +Публичният тестов MQTT брокер, който използвахте, е чудесен инструмент за обучение, но има редица недостатъци като инструмент за използване в комерсиална среда: + +* Надеждност - това е безплатна услуга без гаранции и може да бъде изключена по всяко време +* Сигурност - тя е публична, така че всеки може да слуша вашата телеметрия или да изпраща команди за управление на вашия хардуер +* Производителност - тя е предназначена само за няколко тестови съобщения, така че не би се справила с голямо количество съобщения +* Откриване - няма начин да се знае кои устройства са свързани + +IoT услугите в облака решават тези проблеми. Те се поддържат от големи облачни доставчици, които инвестират значително в надеждност и са на разположение да решат всякакви възникнали проблеми. Те имат вградена сигурност, която предотвратява хакери да четат вашите данни или да изпращат злонамерени команди. Освен това, те са с висока производителност, способни да обработват милиони съобщения всеки ден, като използват облака за мащабиране според нуждите. + +> 💁 Въпреки че плащате за тези предимства с месечна такса, повечето облачни доставчици предлагат безплатна версия на своята IoT услуга с ограничен брой съобщения на ден или устройства, които могат да се свържат. Тази безплатна версия обикновено е повече от достатъчна за разработчик, който учи за услугата. В този урок ще използвате безплатна версия. + +IoT устройствата се свързват с облачна услуга или чрез SDK за устройства (библиотека, която предоставя код за работа с функциите на услугата), или директно чрез комуникационен протокол като MQTT или HTTP. SDK за устройства обикновено е най-лесният начин, тъй като се грижи за всичко, като например знае кои теми да публикува или абонира, и как да обработва сигурността. + +![Устройствата се свързват с услуга чрез SDK за устройства. Сървърният код също се свързва с услугата чрез SDK](../../../../../translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.bg.png) + +Вашето устройство след това комуникира с други части на вашето приложение чрез тази услуга - подобно на начина, по който изпращахте телеметрия и получавахте команди чрез MQTT. Това обикновено става чрез SDK за услуги или подобна библиотека. Съобщенията идват от вашето устройство към услугата, където други компоненти на вашето приложение могат да ги прочетат, а съобщенията могат да бъдат изпратени обратно към вашето устройство. + +![Устройства без валиден таен ключ не могат да се свържат с IoT услугата](../../../../../translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.bg.png) + +Тези услуги внедряват сигурност, като знаят за всички устройства, които могат да се свържат и изпращат данни, или чрез предварителна регистрация на устройствата в услугата, или чрез предоставяне на устройства с тайни ключове или сертификати, които могат да използват за регистрация в услугата при първото свързване. Непознати устройства не могат да се свържат; ако опитат, услугата отхвърля връзката и игнорира изпратените от тях съобщения. + +✅ Направете проучване: Какъв е недостатъкът на отворена IoT услуга, където всяко устройство или код може да се свърже? Можете ли да намерите конкретни примери за хакери, които се възползват от това? + +Други компоненти на вашето приложение могат да се свържат с IoT услугата и да научат за всички устройства, които са свързани или регистрирани, и да комуникират с тях директно, индивидуално или в група. +💁 IoT услугите също така внедряват допълнителни възможности, а доставчиците на облачни услуги предлагат допълнителни услуги и приложения, които могат да бъдат свързани към услугата. Например, ако искате да съхранявате всички телеметрични съобщения, изпратени от всички устройства, в база данни, обикновено са необходими само няколко клика в инструмента за конфигурация на облачния доставчик, за да свържете услугата с база данни и да предавате данните нататък. +## Създаване на IoT услуга в облака + +Сега, когато имате абонамент за Azure, можете да се регистрирате за IoT услуга. IoT услугата на Microsoft се нарича Azure IoT Hub. + +![Логото на Azure IoT Hub](../../../../../translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.bg.png) + +Видеото по-долу предоставя кратък преглед на Azure IoT Hub: + +[![Видео преглед на Azure IoT Hub](https://img.youtube.com/vi/smuZaZZXKsU/0.jpg)](https://www.youtube.com/watch?v=smuZaZZXKsU) + +> 🎥 Кликнете върху изображението по-горе, за да гледате видеото + +✅ Отделете малко време, за да направите проучване и да прочетете прегледа на IoT Hub в [документацията на Microsoft IoT Hub](https://docs.microsoft.com/azure/iot-hub/about-iot-hub?WT.mc_id=academic-17441-jabenn). + +Облачните услуги, налични в Azure, могат да бъдат конфигурирани чрез уеб-базиран портал или чрез интерфейс на командния ред (CLI). За тази задача ще използвате CLI. + +### Задача - инсталиране на Azure CLI + +За да използвате Azure CLI, първо трябва да го инсталирате на вашия компютър или Mac. + +1. Следвайте инструкциите в [документацията на Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli?WT.mc_id=academic-17441-jabenn), за да инсталирате CLI. + +1. Azure CLI поддържа редица разширения, които добавят възможности за управление на широк спектър от Azure услуги. Инсталирайте IoT разширението, като изпълните следната команда от вашия команден ред или терминал: + + ```sh + az extension add --name azure-iot + ``` + +1. От вашия команден ред или терминал изпълнете следната команда, за да влезете в абонамента си за Azure чрез Azure CLI. + + ```sh + az login + ``` + + Уеб страница ще се отвори в браузъра ви по подразбиране. Влезте с акаунта, който сте използвали за регистрация за абонамента си за Azure. След като влезете, можете да затворите раздела на браузъра. + +1. Ако имате няколко абонамента за Azure, като например предоставен от училище и ваш собствен абонамент за Azure for Students, ще трябва да изберете този, който искате да използвате. Изпълнете следната команда, за да изброите всички абонаменти, до които имате достъп: + + ```sh + az account list --output table + ``` + + В изхода ще видите името на всеки абонамент заедно с неговия `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 + ``` + + За да изберете абонамента, който искате да използвате, използвайте следната команда: + + ```sh + az account set --subscription + ``` + + Заменете `` с идентификатора на абонамента, който искате да използвате. След като изпълните тази команда, изпълнете отново командата за изброяване на акаунтите си. Ще видите, че колоната `IsDefault` е маркирана като `True` за абонамента, който току-що сте задали. + +### Задача - създаване на ресурсна група + +Azure услугите, като например IoT Hub инстанции, виртуални машини, бази данни или AI услуги, се наричат **ресурси**. Всеки ресурс трябва да бъде част от **Ресурсна група**, която е логическа група от един или повече ресурси. + +> 💁 Използването на ресурсни групи ви позволява да управлявате множество услуги наведнъж. Например, след като завършите всички уроци за този проект, можете да изтриете ресурсната група и всички ресурси в нея ще бъдат изтрити автоматично. + +1. В Azure има множество центрове за данни по света, разделени на региони. Когато създавате Azure ресурс или ресурсна група, трябва да посочите къде искате да бъде създадена. Изпълнете следната команда, за да получите списък с местоположения: + + ```sh + az account list-locations --output table + ``` + + Ще видите списък с местоположения. Този списък ще бъде дълъг. + + > 💁 Към момента на писане има 65 местоположения, в които можете да разположите ресурси. + + ```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 + ... + ``` + + Запишете стойността от колоната `Name` на региона, който е най-близо до вас. Можете да намерите регионите на карта на [страницата за географски региони на Azure](https://azure.microsoft.com/global-infrastructure/geographies/?WT.mc_id=academic-17441-jabenn). + +1. Изпълнете следната команда, за да създадете ресурсна група с име `soil-moisture-sensor`. Имената на ресурсните групи трябва да бъдат уникални във вашия абонамент. + + ```sh + az group create --name soil-moisture-sensor \ + --location + ``` + + Заменете `` с местоположението, което сте избрали в предишната стъпка. + +### Задача - създаване на IoT Hub + +Сега можете да създадете IoT Hub ресурс във вашата ресурсна група. + +1. Използвайте следната команда, за да създадете вашия IoT Hub ресурс: + + ```sh + az iot hub create --resource-group soil-moisture-sensor \ + --sku F1 \ + --partition-count 2 \ + --name + ``` + + Заменете `` с име за вашия хъб. Това име трябва да бъде глобално уникално - тоест, никой друг IoT Hub, създаден от някого, не може да има същото име. Това име се използва в URL адрес, който сочи към хъба, така че трябва да бъде уникално. Използвайте нещо като `soil-moisture-sensor-` и добавете уникален идентификатор накрая, като случайни думи или вашето име. + + Опцията `--sku F1` указва използването на безплатен план. Безплатният план поддържа 8,000 съобщения на ден заедно с повечето функции на платените планове. + + > 🎓 Различните ценови нива на Azure услугите се наричат планове. Всеки план има различна цена и предоставя различни функции или обеми данни. + + > 💁 Ако искате да научите повече за ценообразуването, можете да разгледате [ръководството за ценообразуване на Azure IoT Hub](https://azure.microsoft.com/pricing/details/iot-hub/?WT.mc_id=academic-17441-jabenn). + + Опцията `--partition-count 2` определя колко потока от данни поддържа IoT Hub. Повече партиции намаляват блокирането на данни, когато множество устройства четат и пишат в IoT Hub. Партициите са извън обхвата на тези уроци, но тази стойност трябва да бъде зададена, за да се създаде IoT Hub с безплатен план. + + > 💁 Можете да имате само един IoT Hub с безплатен план на абонамент. + +IoT Hub ще бъде създаден. Това може да отнеме минута или две. + +## Комуникация с IoT Hub + +В предишния урок използвахте MQTT и изпращахте съобщения напред-назад по различни теми, като различните теми имаха различни цели. Вместо да изпращате съобщения по различни теми, IoT Hub има няколко дефинирани начина за комуникация между устройството и хъба или между хъба и устройството. + +> 💁 В основата си тази комуникация между IoT Hub и вашето устройство може да използва MQTT, HTTPS или AMQP. + +* Съобщения от устройство към облака (D2C) - това са съобщения, изпратени от устройство към IoT Hub, като например телеметрия. Те могат да бъдат прочетени от приложния ви код. + + > 🎓 В основата си IoT Hub използва Azure услуга, наречена [Event Hubs](https://docs.microsoft.com/azure/event-hubs/?WT.mc_id=academic-17441-jabenn). Когато пишете код за четене на съобщения, изпратени към хъба, те често се наричат събития. + +* Съобщения от облака към устройството (C2D) - това са съобщения, изпратени от приложен код чрез IoT Hub към IoT устройство. + +* Заявки за директни методи - това са съобщения, изпратени от приложен код чрез IoT Hub към IoT устройство, за да се поиска устройството да извърши нещо, като например управление на изпълнителен механизъм. Тези съобщения изискват отговор, за да може приложният код да разбере дали са обработени успешно. + +* Устройствени двойници - това са JSON документи, които се синхронизират между устройството и IoT Hub и се използват за съхранение на настройки или други свойства, докладвани от устройството или зададени на устройството (наречени желани) от IoT Hub. + +IoT Hub може да съхранява съобщения и заявки за директни методи за конфигурируем период от време (по подразбиране един ден), така че ако устройство или приложен код загуби връзка, то все още може да извлече съобщенията, изпратени, докато е било офлайн, след като се свърже отново. Устройствените двойници се съхраняват постоянно в IoT Hub, така че по всяко време устройство може да се свърже отново и да получи последния устройствен двойник. + +✅ Направете проучване: Прочетете повече за тези типове съобщения в [Ръководството за комуникация от устройство към облака](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-d2c-guidance?WT.mc_id=academic-17441-jabenn) и [Ръководството за комуникация от облака към устройството](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-c2d-guidance?WT.mc_id=academic-17441-jabenn) в документацията на IoT Hub. + +## Свързване на вашето устройство към IoT услугата + +След като хъбът е създаден, вашето IoT устройство може да се свърже с него. Само регистрирани устройства могат да се свързват с услугата, така че първо ще трябва да регистрирате устройството си. Когато го регистрирате, ще получите низ за връзка, който устройството може да използва, за да се свърже. Този низ за връзка е специфичен за устройството и съдържа информация за IoT Hub, устройството и таен ключ, който ще позволи на устройството да се свърже. + +> 🎓 Низ за връзка е общ термин за текст, който съдържа детайли за връзка. Те се използват при свързване към IoT Hubs, бази данни и много други услуги. Обикновено се състоят от идентификатор за услугата, като например URL, и информация за сигурност, като таен ключ. Те се предават на SDK-та, за да се свържат с услугата. + +> ⚠️ Низовете за връзка трябва да се пазят в тайна! Сигурността ще бъде разгледана по-подробно в бъдещ урок. + +### Задача - регистриране на вашето IoT устройство + +IoT устройството може да бъде регистрирано във вашия IoT Hub, използвайки Azure CLI. + +1. Изпълнете следната команда, за да регистрирате устройство: + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor \ + --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + + Това ще създаде устройство с идентификатор `soil-moisture-sensor`. + +1. Когато вашето IoT устройство се свързва с вашия IoT Hub, използвайки SDK, то трябва да използва низ за връзка, който предоставя URL на хъба заедно с таен ключ. Изпълнете следната команда, за да получите низа за връзка: + + ```sh + az iot hub device-identity connection-string show --device-id soil-moisture-sensor \ + --output table \ + --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + +1. Запазете низа за връзка, който се показва в изхода, тъй като ще ви е необходим по-късно. + +### Задача - свързване на вашето IoT устройство към облака + +Следвайте съответното ръководство, за да свържете вашето IoT устройство към облака: + +* [Arduino - Wio Terminal](wio-terminal-connect-hub.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-connect-hub.md) + +### Задача - наблюдение на събития + +Засега няма да актуализирате сървърния си код. Вместо това можете да използвате Azure CLI, за да наблюдавате събития от вашето IoT устройство. + +1. Уверете се, че вашето IoT устройство работи и изпраща стойности за телеметрия на влажността на почвата. + +1. Изпълнете следната команда в командния си ред или терминал, за да наблюдавате съобщенията, изпратени към вашия IoT Hub: + + ```sh + az iot hub monitor-events --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + + Ще видите съобщения, които се появяват в изхода на конзолата, докато се изпращат от вашето IoT устройство. + + ```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}" + } + } + ``` + + Съдържанието на `payload` ще съответства на съобщението, изпратено от вашето IoT устройство. + + > Към момента на писане разширението `az iot` не работи напълно на устройства с Apple Silicon. Ако използвате устройство с Apple Silicon, ще трябва да наблюдавате съобщенията по друг начин, като например използвайки [Azure IoT Tools за Visual Studio Code](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-vscode-iot-toolkit-cloud-device-messaging). + +1. Тези съобщения имат редица свойства, които се добавят автоматично, като например времевия печат, когато са изпратени. Те са известни като *анотации*. За да видите всички анотации на съобщенията, използвайте следната команда: + + ```sh + az iot hub monitor-events --properties anno --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + + Ще видите съобщения, които се появяват в изхода на конзолата, докато се изпращат от вашето IoT устройство. + + ```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}" + } + } + ``` + + Времевите стойности в анотациите са в [UNIX време](https://wikipedia.org/wiki/Unix_time), което представлява броя секунди от полунощ на 1ви януари 1970 г. + + Излезте от монитора на събития, когато сте готови. + +### Задача - управление на вашето IoT устройство + +Можете също да използвате Azure CLI, за да извикате директни методи на вашето IoT устройство. + +1. Изпълнете следната команда в командния си ред или терминал, за да извикате метода `relay_on` на IoT устройството: + + ```sh + az iot hub invoke-device-method --device-id soil-moisture-sensor \ + --method-name relay_on \ + --method-payload '{}' \ + --hub-name + ``` + + Заменете ` + +` с името, което сте използвали за вашия IoT Hub. + +Това изпраща заявка за директен метод за метода, посочен от `method-name`. Директните методи могат да приемат полезен товар, съдържащ данни за метода, и това може да бъде зададено в параметъра `method-payload` като JSON. + +Ще видите как релето се включва и съответния изход от вашето IoT устройство: + +```output + Direct method received - relay_on + ``` + +1. Повторете горната стъпка, но задайте `--method-name` на `relay_off`. Ще видите как релето се изключва и съответния изход от IoT устройството. + +--- + +## 🚀 Предизвикателство + +Безплатният план на IoT Hub позволява 8,000 съобщения на ден. Кодът, който написахте, изпраща телеметрични съобщения на всеки 10 секунди. Колко съобщения на ден са това, ако се изпраща по едно съобщение на всеки 10 секунди? + +Помислете колко често трябва да се изпращат измерванията за влажността на почвата? Как можете да промените кода си, за да останете в рамките на безплатния план и да проверявате толкова често, колкото е необходимо, но не прекалено често? А какво ще стане, ако искате да добавите второ устройство? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/16) + +## Преглед и самостоятелно обучение + +IoT Hub SDK е с отворен код както за Arduino, така и за Python. В репозиториите на кода в GitHub има редица примери, които показват как да работите с различни функции на IoT Hub. + +* Ако използвате Wio Terminal, разгледайте [примерите за Arduino в GitHub](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples) +* Ако използвате Raspberry Pi или виртуално устройство, разгледайте [примерите за Python в GitHub](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples) + +## Задача + +[Научете повече за облачните услуги](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md new file mode 100644 index 00000000..e0aab238 --- /dev/null +++ b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md @@ -0,0 +1,33 @@ + +# Научете повече за облачните услуги + +## Инструкции + +Облаците, като Azure от Microsoft, предлагат повече от просто наемане на изчислителни ресурси. Основните видове облачни услуги включват: + +* Инфраструктура като услуга (IaaS) +* Платформа като услуга (PaaS) +* Безсървърни услуги +* Софтуер като услуга (SaaS) + +Научете за тези различни видове услуги и обяснете какво представляват и как се различават. Обяснете кои услуги са подходящи за IoT разработчици. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Обяснение на различните облачни услуги | Дадени са ясни обяснения за всичките 4 вида услуги | Успя да обясни 3 вида услуги | Успя да обясни само 1 или 2 вида услуги | +| Обяснение кои услуги са подходящи за IoT | Описано е обяснение кои услуги са подходящи за IoT разработчици и защо | Описано е обяснение кои услуги са подходящи за IoT разработчици, но не и защо | Не успя да опише кои услуги са подходящи за IoT разработчици | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md new file mode 100644 index 00000000..93454e29 --- /dev/null +++ b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md @@ -0,0 +1,130 @@ + +# Свържете вашето IoT устройство с облака - Виртуален IoT хардуер и Raspberry Pi + +В тази част от урока ще свържете вашето виртуално IoT устройство или Raspberry Pi към вашия IoT Hub, за да изпращате телеметрия и да получавате команди. + +## Свържете устройството си към IoT Hub + +Следващата стъпка е да свържете устройството си към IoT Hub. + +### Задача - свързване към IoT Hub + +1. Отворете папката `soil-moisture-sensor` в VS Code. Уверете се, че виртуалната среда работи в терминала, ако използвате виртуално IoT устройство. + +1. Инсталирайте някои допълнителни Pip пакети: + + ```sh + pip3 install azure-iot-device + ``` + + `azure-iot-device` е библиотека за комуникация с вашия IoT Hub. + +1. Добавете следните импорти в началото на файла `app.py`, под съществуващите импорти: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse + ``` + + Този код импортира SDK за комуникация с вашия IoT Hub. + +1. Премахнете реда `import paho.mqtt.client as mqtt`, тъй като тази библиотека вече не е необходима. Премахнете целия MQTT код, включително имената на темите, целия код, който използва `mqtt_client`, и `handle_command`. Запазете цикъла `while True:`, просто изтрийте реда `mqtt_client.publish` от този цикъл. + +1. Добавете следния код под изявленията за импортиране: + + ```python + connection_string = "" + ``` + + Заменете `` със стринга за връзка, който извлякохте за устройството по-рано в този урок. + + > 💁 Това не е най-добрата практика. Стринговете за връзка никога не трябва да се съхраняват в изходния код, тъй като могат да бъдат качени в система за контрол на версиите и намерени от всеки. Правим това тук заради простотата. Идеално би било да използвате нещо като променлива на средата и инструмент като [`python-dotenv`](https://pypi.org/project/python-dotenv/). Ще научите повече за това в предстоящ урок. + +1. Под този код добавете следното, за да създадете обект за клиент на устройството, който може да комуникира с IoT Hub, и го свържете: + + ```python + device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) + + print('Connecting') + device_client.connect() + print('Connected') + ``` + +1. Стартирайте този код. Ще видите как устройството ви се свързва. + + ```output + pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py + Connecting + Connected + Soil moisture: 379 + ``` + +## Изпращане на телеметрия + +Сега, когато устройството ви е свързано, можете да изпращате телеметрия към IoT Hub вместо към MQTT брокера. + +### Задача - изпращане на телеметрия + +1. Добавете следния код вътре в цикъла `while True`, точно преди командата за пауза: + + ```python + message = Message(json.dumps({ 'soil_moisture': soil_moisture })) + device_client.send_message(message) + ``` + + Този код създава IoT Hub `Message`, съдържащ показанията за влажност на почвата като JSON низ, след което го изпраща към IoT Hub като съобщение от устройство към облак. + +## Обработка на команди + +Вашето устройство трябва да обработва команда от сървърния код за управление на релето. Това се изпраща като заявка за директен метод. + +## Задача - обработка на заявка за директен метод + +1. Добавете следния код преди цикъла `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() + ``` + + Това дефинира метод, `handle_method_request`, който ще бъде извикан, когато директен метод бъде извикан от IoT Hub. Всеки директен метод има име, и този код очаква метод, наречен `relay_on`, за да включи релето, и `relay_off`, за да го изключи. + + > 💁 Това може да бъде реализирано и в един директен метод, като се предаде желаното състояние на релето в полезен товар, който може да бъде предаден със заявката за метод и достъпен от обекта `request`. + +1. Директните методи изискват отговор, за да информират извикващия код, че са били обработени. Добавете следния код в края на функцията `handle_method_request`, за да създадете отговор на заявката: + + ```python + method_response = MethodResponse.create_from_method_request(request, 200) + device_client.send_method_response(method_response) + ``` + + Този код изпраща отговор на заявката за директен метод с HTTP статус код 200 и го връща към IoT Hub. + +1. Добавете следния код под дефиницията на тази функция: + + ```python + device_client.on_method_request_received = handle_method_request + ``` + + Този код казва на клиента на IoT Hub да извика функцията `handle_method_request`, когато бъде извикан директен метод. + +> 💁 Можете да намерите този код в папката [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi) или [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device). + +😀 Вашата програма за сензор за влажност на почвата е свързана с вашия IoT Hub! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md new file mode 100644 index 00000000..82b2f69c --- /dev/null +++ b/translations/bg/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md @@ -0,0 +1,306 @@ + +# Свържете вашето IoT устройство с облака - Wio Terminal + +В тази част на урока ще свържете вашия Wio Terminal с вашия IoT Hub, за да изпращате телеметрия и да получавате команди. + +## Свържете устройството си с IoT Hub + +Следващата стъпка е да свържете устройството си с IoT Hub. + +### Задача - свързване с IoT Hub + +1. Отворете проекта `soil-moisture-sensor` във VS Code. + +1. Отворете файла `platformio.ini`. Премахнете зависимостта от библиотеката `knolleary/PubSubClient`. Тя се използваше за свързване с публичен MQTT брокер и не е необходима за свързване с IoT Hub. + +1. Добавете следните зависимости към библиотеката: + + ```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 + ``` + + Библиотеката `Seeed Arduino RTC` предоставя код за взаимодействие с реално-времевия часовник в Wio Terminal, който се използва за проследяване на времето. Останалите библиотеки позволяват вашето IoT устройство да се свърже с IoT Hub. + +1. Добавете следното в края на файла `platformio.ini`: + + ```ini + build_flags = + -DDONT_USE_UPLOADTOBLOB + ``` + + Това задава флаг за компилатора, който е необходим при компилиране на кода за Arduino IoT Hub. + +1. Отворете хедър файла `config.h`. Премахнете всички настройки за MQTT и добавете следната константа за връзковия низ на устройството: + + ```cpp + // IoT Hub settings + const char *CONNECTION_STRING = ""; + ``` + + Заменете `` с връзковия низ за вашето устройство, който копирахте по-рано. + +1. Свързването с IoT Hub използва токен, базиран на време. Това означава, че IoT устройството трябва да знае текущото време. За разлика от операционни системи като Windows, macOS или Linux, микроконтролерите не синхронизират автоматично текущото време през интернет. Това означава, че трябва да добавите код за получаване на текущото време от [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) сървър. След като времето бъде получено, то може да се съхрани в реално-времевия часовник на Wio Terminal, което позволява правилното време да бъде заявено по-късно, при условие че устройството не загуби захранване. Добавете нов файл, наречен `ntp.h`, със следния код: + + ```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); + } + ``` + + Подробностите за този код са извън обхвата на този урок. Той дефинира функция, наречена `initTime`, която получава текущото време от NTP сървър и го използва за настройка на часовника на Wio Terminal. + +1. Отворете файла `main.cpp` и премахнете целия код за MQTT, включително хедър файла `PubSubClient.h`, декларацията на променливата `PubSubClient`, методите `reconnectMQTTClient` и `createMQTTClient`, както и всички извиквания към тези променливи и методи. Този файл трябва да съдържа само код за свързване с WiFi, получаване на данни за влажността на почвата и създаване на JSON документ с тях. + +1. Добавете следните директиви `#include` в началото на файла `main.cpp`, за да включите хедър файлове за библиотеките на IoT Hub и за настройка на времето: + + ```cpp + #include + #include + #include + #include "ntp.h" + ``` + +1. Добавете следното извикване в края на функцията `setup`, за да зададете текущото време: + + ```cpp + initTime(); + ``` + +1. Добавете следната декларация на променлива в началото на файла, точно под директивите за включване: + + ```cpp + IOTHUB_DEVICE_CLIENT_LL_HANDLE _device_ll_handle; + ``` + + Това декларира `IOTHUB_DEVICE_CLIENT_LL_HANDLE`, манипулатор за връзка с IoT Hub. + +1. Под това добавете следния код: + + ```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"); + } + } + ``` + + Това декларира функция за обратен повик, която ще бъде извикана, когато връзката с IoT Hub промени състоянието си, като например свързване или прекъсване. Състоянието се изпраща към серийния порт. + +1. Под това добавете функция за свързване с IoT Hub: + + ```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); + } + ``` + + Този код инициализира библиотечния код на IoT Hub, след което създава връзка, използвайки връзковия низ в хедър файла `config.h`. Тази връзка е базирана на MQTT. Ако връзката се провали, това се изпраща към серийния порт - ако видите това в изхода, проверете връзковия низ. Накрая се настройва функцията за обратен повик за състоянието на връзката. + +1. Извикайте тази функция във функцията `setup` под извикването на `initTime`: + + ```cpp + connectIoTHub(); + ``` + +1. Подобно на MQTT клиента, този код работи на един поток, така че се нуждае от време за обработка на съобщенията, изпратени от хъба и към хъба. Добавете следното в началото на функцията `loop`, за да направите това: + + ```cpp + IoTHubDeviceClient_LL_DoWork(_device_ll_handle); + ``` + +1. Компилирайте и качете този код. Ще видите връзката в серийния монитор: + + ```output + Connecting to WiFi.. + Connected! + Fetched NTP epoch time is: 1619983687 + Sending telemetry {"soil_moisture":391} + The device client is connected to iothub + ``` + + В изхода можете да видите как се извлича времето от NTP, последвано от свързването на клиентското устройство. Може да отнеме няколко секунди за свързване, така че може да видите данните за влажността на почвата в изхода, докато устройството се свързва. + + > 💁 Можете да конвертирате UNIX времето от NTP в по-четим формат, използвайки уебсайт като [unixtimestamp.com](https://www.unixtimestamp.com) + +## Изпращане на телеметрия + +Сега, когато устройството ви е свързано, можете да изпращате телеметрия към IoT Hub вместо към MQTT брокера. + +### Задача - изпращане на телеметрия + +1. Добавете следната функция над функцията `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); + } + ``` + + Този код създава съобщение за IoT Hub от низ, предаден като параметър, изпраща го към хъба и след това освобождава обекта на съобщението. + +1. Извикайте този код във функцията `loop`, точно след реда, където телеметрията се изпраща към серийния порт: + + ```cpp + sendTelemetry(telemetry.c_str()); + ``` + +## Обработка на команди + +Вашето устройство трябва да обработва команда от сървърния код за управление на релето. Това се изпраща като заявка за директен метод. + +## Задача - обработка на заявка за директен метод + +1. Добавете следния код преди функцията `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); + } + } + ``` + + Този код дефинира функция за обратен повик, която библиотеката на IoT Hub може да извика, когато получи заявка за директен метод. Методът, който се заявява, се изпраща в параметъра `method_name`. Тази функция отпечатва извикания метод към серийния порт, след което включва или изключва релето в зависимост от името на метода. + + > 💁 Това може също да бъде реализирано в един директен метод, като се предаде желаното състояние на релето в полезен товар, който може да бъде предаден със заявката за метод и достъпен от параметъра `payload`. + +1. Добавете следния код в края на функцията `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; + ``` + + Заявките за директни методи изискват отговор, който се състои от две части - отговор като текст и код за връщане. Този код ще създаде резултат като следния JSON документ: + + ```JSON + { + "Result": "" + } + ``` + + Това след това се копира в параметъра `response`, а размерът на този отговор се задава в параметъра `response_size`. Този код след това връща `IOTHUB_CLIENT_OK`, за да покаже, че методът е обработен правилно. + +1. Свържете функцията за обратен повик, като добавите следното в края на функцията `connectIoTHub`: + + ```cpp + IoTHubClient_LL_SetDeviceMethodCallback(_device_ll_handle, directMethodCallback, NULL); + ``` + +1. Функцията `loop` ще извиква функцията `IoTHubDeviceClient_LL_DoWork`, за да обработва събития, изпратени от IoT Hub. Това се извиква само на всеки 10 секунди заради `delay`, което означава, че директните методи се обработват само на всеки 10 секунди. За да направите това по-ефективно, 10-секундното забавяне може да бъде реализирано като множество по-кратки забавяния, като се извиква `IoTHubDeviceClient_LL_DoWork` всеки път. За да направите това, добавете следния код над функцията `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); + } + ``` + + Този код ще се изпълнява многократно, като извиква `IoTHubDeviceClient_LL_DoWork` и забавя за 100ms всеки път. Това ще се прави толкова пъти, колкото е необходимо, за да се забави за времето, дадено в параметъра `delay_time`. Това означава, че устройството чака най-много 100ms, за да обработи заявки за директни методи. + +1. Във функцията `loop` премахнете извикването на `IoTHubDeviceClient_LL_DoWork` и заменете извикването на `delay(10000)` със следното, за да извикате тази нова функция: + + ```cpp + work_delay(10000); + ``` + +> 💁 Можете да намерите този код в папката [code/wio-terminal](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/wio-terminal). + +😀 Вашата програма за сензор за влажност на почвата е свързана с вашия IoT Hub! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/5-migrate-application-to-the-cloud/README.md b/translations/bg/2-farm/lessons/5-migrate-application-to-the-cloud/README.md new file mode 100644 index 00000000..1dea9a08 --- /dev/null +++ b/translations/bg/2-farm/lessons/5-migrate-application-to-the-cloud/README.md @@ -0,0 +1,652 @@ + +# Мигрирайте логиката на вашето приложение към облака + +![Скица на урока](../../../../../translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +Този урок беше част от [IoT за начинаещи Проект 2 - Серия за дигитално земеделие](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) от [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![Контролирайте вашето IoT устройство със serverless код](https://img.youtube.com/vi/VVZDcs5u1_I/0.jpg)](https://youtu.be/VVZDcs5u1_I) + +## Тест преди урока + +[Тест преди урока](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/17) + +## Въведение + +В предишния урок научихте как да свържете вашия мониторинг на влажността на почвата и управление на реле към облачна IoT услуга. Следващата стъпка е да преместите сървърния код, който контролира времето на релето, в облака. В този урок ще научите как да направите това, използвайки serverless функции. + +В този урок ще разгледаме: + +* [Какво е serverless?](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Създаване на serverless приложение](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Създаване на IoT Hub тригер](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Изпращане на директни заявки от serverless код](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [Деплой на вашия serverless код в облака](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) + +## Какво е serverless? + +Serverless, или serverless изчисления, включва създаването на малки блокове код, които се изпълняват в облака в отговор на различни видове събития. Когато събитието се случи, вашият код се изпълнява и получава данни за събитието. Тези събития могат да бъдат от различни източници, включително уеб заявки, съобщения в опашка, промени в база данни или съобщения, изпратени към IoT услуга от IoT устройства. + +![Събития, изпратени от IoT услуга към serverless услуга, обработвани едновременно от множество функции](../../../../../translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.bg.png) + +> 💁 Ако сте използвали тригери в база данни, можете да мислите за това като за нещо подобно – код, който се задейства от събитие, като например добавяне на ред. + +![Когато много събития се изпратят едновременно, serverless услугата се мащабира, за да ги обработи всички едновременно](../../../../../translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.bg.png) + +Вашият код се изпълнява само когато събитието се случи, а през останалото време не е активен. Това прави serverless много мащабируемо – ако много събития се случат едновременно, облачният доставчик може да изпълни вашата функция толкова пъти, колкото е необходимо, на различни налични сървъри. Недостатъкът е, че ако трябва да споделяте информация между събитията, трябва да я съхранявате някъде, например в база данни, вместо в паметта. + +Вашият код се пише като функция, която приема детайли за събитието като параметър. Можете да използвате широк набор от програмни езици за писане на тези serverless функции. + +> 🎓 Serverless често се нарича Functions as a Service (FaaS), тъй като всяко събитие се имплементира като функция в кода. + +Въпреки името, serverless всъщност използва сървъри. Името идва от това, че като разработчик не се интересувате от сървърите, необходими за изпълнението на вашия код – важното е, че кодът ви се изпълнява в отговор на събитие. Облачният доставчик има serverless *runtime*, който управлява разпределението на сървъри, мрежи, съхранение, CPU, памет и всичко останало, необходимо за изпълнението на вашия код. Това означава, че не плащате за сървър, а за времето, през което кодът ви се изпълнява, и за използваната памет. + +> 💰 Serverless е един от най-евтините начини за изпълнение на код в облака. Например, към момента на писане, един облачен доставчик позволява всички ваши serverless функции да се изпълняват общо 1,000,000 пъти месечно безплатно, а след това таксува $0.20 за всеки 1,000,000 изпълнения. Когато кодът ви не се изпълнява, не плащате. + +Като IoT разработчик, serverless моделът е идеален. Можете да напишете функция, която се извиква в отговор на съобщения, изпратени от всяко IoT устройство, свързано към вашата облачна IoT услуга. Вашият код ще обработва всички изпратени съобщения, но ще се изпълнява само когато е необходимо. + +✅ Върнете се към кода, който написахте като сървърен код за слушане на съобщения през MQTT. Как мислите, че този код може да се изпълнява в облака, използвайки serverless? Какви промени може да са необходими, за да поддържа serverless изчисления? + +> 💁 Serverless моделът се разширява и към други облачни услуги освен изпълнението на код. Например, в облака са налични serverless бази данни с модел на ценообразуване, базиран на заявките към базата данни, като заявки за селекция или вмъкване. Цената обикновено зависи от сложността на заявката – например, селекция на един ред по първичен ключ ще струва по-малко от сложна операция с множество таблици и хиляди редове. + +## Създаване на serverless приложение + +Услугата за serverless изчисления от Microsoft се нарича Azure Functions. + +![Лого на Azure Functions](../../../../../translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.bg.png) + +Краткото видео по-долу предоставя преглед на Azure Functions. + +[![Преглед на Azure Functions](https://img.youtube.com/vi/8-jz5f_JyEQ/0.jpg)](https://www.youtube.com/watch?v=8-jz5f_JyEQ) + +> 🎥 Кликнете върху изображението, за да гледате видеото. + +✅ Отделете време да направите проучване и прочетете прегледа на Azure Functions в [документацията на Microsoft Azure Functions](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn). + +За да пишете Azure Functions, започвате с приложение за Azure Functions на избрания от вас език. Azure Functions поддържа Python, JavaScript, TypeScript, C#, F#, Java и Powershell. В този урок ще научите как да напишете приложение за Azure Functions на Python. + +> 💁 Azure Functions също поддържа персонализирани обработчици, така че можете да пишете функции на всеки език, който поддържа HTTP заявки, включително по-стари езици като COBOL. + +Приложенията за функции се състоят от една или повече *тригери* – функции, които реагират на събития. Можете да имате множество тригери в едно приложение, като всички споделят обща конфигурация. Например, в конфигурационния файл на вашето приложение можете да зададете детайли за връзка с вашия IoT Hub, които всички функции в приложението могат да използват. + +### Задача - инсталиране на инструментите за Azure Functions + +> Към момента на писане, инструментите за Azure Functions не работят напълно на Apple Silicon с Python проекти. Ще трябва да използвате Mac с Intel, Windows PC или Linux PC. + +Една от страхотните функции на Azure Functions е, че можете да ги изпълнявате локално. Същата среда за изпълнение, която се използва в облака, може да се стартира на вашия компютър, което ви позволява да пишете код, който реагира на IoT съобщения, и да го тествате локално. Можете дори да дебъгвате кода си, докато се обработват събития. След като сте доволни от кода си, можете да го деплойнете в облака. + +Инструментите за Azure Functions са налични като CLI, известен като Azure Functions Core Tools. + +1. Инсталирайте Azure Functions Core Tools, следвайки инструкциите в [документацията за Azure Functions Core Tools](https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=academic-17441-jabenn). + +1. Инсталирайте разширението за Azure Functions за VS Code. Това разширение предоставя поддръжка за създаване, дебъгване и деплой на Azure Functions. Вижте [документацията за разширението за Azure Functions](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-azuretools.vscode-azurefunctions) за инструкции как да го инсталирате. + +Когато деплойнете приложението си в облака, то ще използва малко количество облачно съхранение за съхранение на файлове и логове. Когато изпълнявате приложението локално, можете да използвате емулатор за съхранение, наречен [Azurite](https://github.com/Azure/Azurite), който действа като облачно съхранение. + +> 🎓 В Azure, съхранението, което Azure Functions използва, е акаунт за съхранение. Тези акаунти могат да съхраняват файлове, данни в таблици или опашки. Можете да споделяте един акаунт между различни приложения. + +1. Azurite е Node.js приложение, така че ще трябва да инсталирате Node.js. Можете да намерите инструкции за инсталация на [уебсайта на Node.js](https://nodejs.org/). + +1. Инсталирайте Azurite с командата: + + ```sh + npm install -g azurite + ``` + +1. Създайте папка `azurite` за съхранение на данни: + + ```sh + mkdir azurite + ``` + +1. Стартирайте Azurite, като посочите новата папка: + + ```sh + azurite --location azurite + ``` + + Azurite ще се стартира и ще бъде готов за връзка с локалната среда за изпълнение. + + ```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 + ``` + +### Задача - създаване на проект за Azure Functions + +CLI за Azure Functions може да се използва за създаване на ново приложение. + +1. Създайте папка за приложението и навигирайте до нея. Наречете я `soil-moisture-trigger`: + + ```sh + mkdir soil-moisture-trigger + cd soil-moisture-trigger + ``` + +1. Създайте Python виртуална среда в тази папка: + + ```sh + python3 -m venv .venv + ``` + +1. Активирайте виртуалната среда: + + * В Windows: + * Ако използвате Command Prompt, изпълнете: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * Ако използвате PowerShell, изпълнете: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + * В macOS или Linux, изпълнете: + + ```cmd + source ./.venv/bin/activate + ``` + +1. Създайте приложение за функции в тази папка: + + ```sh + func init --worker-runtime python soil-moisture-trigger + ``` + + Това ще създаде три файла: + + * `host.json` - съдържа настройки за приложението. + * `local.settings.json` - съдържа локални настройки, като връзки към IoT Hub. + * `requirements.txt` - файл с необходимите Pip пакети. + +1. Актуализирайте `local.settings.json`, за да се свърже с Azurite: + + ```json + "AzureWebJobsStorage": "UseDevelopmentStorage=true", + ``` + +1. Инсталирайте необходимите Pip пакети: + + ```sh + pip install -r requirements.txt + ``` + +1. Стартирайте средата за изпълнение, за да тествате: + + ```sh + func start + ``` + + Ще видите, че средата се стартира и съобщава, че не са намерени функции. + + ```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. + ``` +> ⚠️ Ако получите известие от защитната стена, дайте достъп, тъй като приложението `func` трябва да може да чете и записва в мрежата ви. +> ⚠️ Ако използвате macOS, може да се появят предупреждения в изхода: +> +> ```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. + > ``` +> +> Можете да ги игнорирате, стига приложението Functions да стартира правилно и да показва работещите функции. Както е споменато в [този въпрос в 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), това може да бъде пренебрегнато. + +1. Спрете приложението Functions, като натиснете `ctrl+c`. + +1. Отворете текущата папка във VS Code, като или стартирате VS Code и след това отворите тази папка, или изпълните следната команда: + + ```sh + code . + ``` + + VS Code ще разпознае вашия проект за Functions и ще покаже известие със следното съобщение: + + ```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? + ``` + + ![Известието](../../../../../translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.bg.png) + + Изберете **Yes** от това известие. + +1. Уверете се, че виртуалната среда на Python работи в терминала на VS Code. Ако е необходимо, я спрете и рестартирайте. + +## Създаване на тригер за събития от IoT Hub + +Приложението Functions е обвивката на вашия сървърлесс код. За да реагирате на събития от IoT Hub, можете да добавите тригер за IoT Hub към това приложение. Този тригер трябва да се свърже към потока от съобщения, които се изпращат към IoT Hub, и да реагира на тях. За да получите този поток от съобщения, вашият тригер трябва да се свърже към *event hub compatible endpoint* на IoT Hub. + +IoT Hub е базиран на друга услуга на Azure, наречена Azure Event Hubs. Event Hubs е услуга, която позволява изпращане и получаване на съобщения, а IoT Hub разширява тази функционалност с допълнителни възможности за IoT устройства. Начинът, по който се свързвате, за да четете съобщения от IoT Hub, е същият като при използване на Event Hubs. + +✅ Направете проучване: Прочетете общия преглед на Event Hubs в [документацията за Azure Event Hubs](https://docs.microsoft.com/azure/event-hubs/event-hubs-about?WT.mc_id=academic-17441-jabenn). Как основните функции се сравняват с тези на IoT Hub? + +За да се свърже IoT устройство с IoT Hub, то трябва да използва таен ключ, който гарантира, че само разрешени устройства могат да се свържат. Същото важи и при свързване за четене на съобщения – вашият код ще се нуждае от connection string, който съдържа таен ключ, както и детайли за IoT Hub. + +> 💁 По подразбиране connection string, който получавате, има права **iothubowner**, което дава на всеки код, който го използва, пълни права върху IoT Hub. Идеално е да се свързвате с най-ниското ниво на права, което е необходимо. Това ще бъде разгледано в следващия урок. + +След като вашият тригер се свърже, кодът вътре във функцията ще бъде извикан за всяко съобщение, изпратено към IoT Hub, независимо от устройството, което го е изпратило. Тригерът ще предаде съобщението като параметър. + +### Задача - получаване на connection string за Event Hub compatible endpoint + +1. От терминала на VS Code изпълнете следната команда, за да получите connection string за Event Hub compatible endpoint на IoT Hub: + + ```sh + az iot hub connection-string show --default-eventhub \ + --output table \ + --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + +1. Във VS Code отворете файла `local.settings.json`. Добавете следната допълнителна стойност в секцията `Values`: + + ```json + "IOT_HUB_CONNECTION_STRING": "" + ``` + + Заменете `` със стойността от предишната стъпка. Ще трябва да добавите запетая след предишния ред, за да направите JSON-а валиден. + +### Задача - създаване на тригер за събития + +Сега сте готови да създадете тригера за събития. + +1. От терминала на VS Code изпълнете следната команда от папката `soil-moisture-trigger`: + + ```sh + func new --name iot-hub-trigger --template "Azure Event Hub trigger" + ``` + + Това ще създаде нова функция, наречена `iot-hub-trigger`. Тригерът ще се свърже към Event Hub compatible endpoint на IoT Hub, така че можете да използвате тригер за Event Hub. Няма специфичен тригер за IoT Hub. + +Това ще създаде папка в `soil-moisture-trigger`, наречена `iot-hub-trigger`, която съдържа тази функция. Тази папка ще съдържа следните файлове: + +* `__init__.py` - това е Python файлът, който съдържа тригера, използвайки стандартната Python конвенция за именуване на файлове, за да превърне тази папка в Python модул. + + Този файл ще съдържа следния код: + + ```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')) + ``` + + Основата на тригера е функцията `main`. Именно тази функция се извиква със събитията от IoT Hub. Тази функция има параметър, наречен `event`, който съдържа `EventHubEvent`. Всеки път, когато съобщение се изпрати към IoT Hub, тази функция се извиква, като предава това съобщение като `event`, заедно със свойства, които са същите като анотациите, които видяхте в предишния урок. + + Основата на тази функция е да записва събитието в логовете. + +* `function.json` - този файл съдържа конфигурацията за тригера. Основната конфигурация е в секция, наречена `bindings`. Binding е термин за връзка между Azure Functions и други услуги на Azure. Тази функция има входящ binding към Event Hub - тя се свързва с Event Hub и получава данни. + + > 💁 Можете също така да имате изходящи bindings, така че изходът на функцията да се изпраща към друга услуга. Например, можете да добавите изходящ binding към база данни и да върнете събитието от IoT Hub от функцията, и то автоматично ще бъде вмъкнато в базата данни. + + ✅ Направете проучване: Прочетете за bindings в [документацията за концепции на Azure Functions triggers и bindings](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python). + + Секцията `bindings` включва конфигурация за binding-а. Интересните стойности са: + + * `"type": "eventHubTrigger"` - това указва на функцията, че трябва да слуша събития от Event Hub + * `"name": "events"` - това е името на параметъра за събитията от Event Hub. Това съвпада с името на параметъра във функцията `main` в Python кода. + * `"direction": "in"` - това е входящ binding, данните от Event Hub влизат във функцията + * `"connection": ""` - това определя името на настройката, от която да се прочете connection string. Когато работите локално, това ще прочете тази настройка от файла `local.settings.json`. + + > 💁 Connection string не може да се съхранява във файла `function.json`, той трябва да се чете от настройките. Това е, за да се предотврати случайно излагане на connection string. + +1. Поради [грешка в шаблона на Azure Functions](https://github.com/Azure/azure-functions-templates/issues/1250), `function.json` има неправилна стойност за полето `cardinality`. Актуализирайте това поле от `many` на `one`: + + ```json + "cardinality": "one", + ``` + +1. Актуализирайте стойността на `"connection"` във файла `function.json`, за да сочи към новата стойност, която добавихте в `local.settings.json`: + + ```json + "connection": "IOT_HUB_CONNECTION_STRING", + ``` + + > 💁 Помнете - това трябва да сочи към настройката, а не да съдържа действителния connection string. + +1. Connection string съдържа стойността `eventHubName`, така че стойността за това във файла `function.json` трябва да бъде изчистена. Актуализирайте тази стойност на празен низ: + + ```json + "eventHubName": "", + ``` + +### Задача - стартиране на тригера за събития + +1. Уверете се, че не стартирате монитора за събития на IoT Hub. Ако той работи едновременно с приложението Functions, приложението няма да може да се свърже и да обработва събития. + + > 💁 Множество приложения могат да се свържат към IoT Hub endpoint-ите, използвайки различни *consumer groups*. Това ще бъде разгледано в по-късен урок. + +1. За да стартирате приложението Functions, изпълнете следната команда от терминала на VS Code: + + ```sh + func start + ``` + + Приложението Functions ще стартира и ще открие функцията `iot-hub-trigger`. След това ще обработи всички събития, които вече са изпратени към IoT Hub през последния ден. + + ```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) + ``` + + Всяко извикване на функцията ще бъде обградено от блокове `Executing 'Functions.iot-hub-trigger'`/`Executed 'Functions.iot-hub-trigger'` в изхода, така че можете да видите колко съобщения са обработени във всяко извикване на функцията. + +1. Уверете се, че вашето IoT устройство работи. Ще видите нови съобщения за влажност на почвата, които се появяват в приложението Functions. + +1. Спрете и рестартирайте приложението Functions. Ще видите, че то няма да обработва предишни съобщения отново, а само нови съобщения. + +> 💁 VS Code също поддържа дебъгване на вашите функции. Можете да зададете точки за спиране, като кликнете върху границата до началото на всеки ред от кода, или като поставите курсора върху ред от кода и изберете *Run -> Toggle breakpoint*, или натиснете `F9`. Можете да стартирате дебъгера, като изберете *Run -> Start debugging*, натиснете `F5`, или изберете панела *Run and debug* и натиснете бутона **Start debugging**. Така можете да видите детайлите на обработваните събития. + +#### Отстраняване на проблеми + +* Ако получите следната грешка: + + ```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. + ``` + + Проверете дали Azurite работи и дали сте задали `AzureWebJobsStorage` във файла `local.settings.json` на `UseDevelopmentStorage=true`. + +* Ако получите следната грешка: + + ```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' + ``` + + Проверете дали сте задали `cardinality` във файла `function.json` на `one`. + +* Ако получите следната грешка: + + ```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'). + ``` + + Проверете дали сте задали `eventHubName` във файла `function.json` на празен низ. + +## Изпращане на заявки за директни методи от сървърлесс код + +Досега вашето приложение Functions слушаше съобщения от IoT Hub, използвайки Event Hub compatible endpoint. Сега трябва да изпращате команди към IoT устройството. Това се прави чрез различна връзка към IoT Hub чрез *Registry Manager*. Registry Manager е инструмент, който ви позволява да видите кои устройства са регистрирани в IoT Hub и да комуникирате с тези устройства, като изпращате съобщения от облака към устройството, заявки за директни методи или актуализирате device twin. Можете също така да го използвате, за да регистрирате, актуализирате или изтривате IoT устройства от IoT Hub. + +За да се свържете с Registry Manager, ви е необходим connection string. + +### Задача - получаване на connection string за Registry Manager + +1. За да получите connection string, изпълнете следната команда: + + ```sh + az iot hub connection-string show --policy-name service \ + --output table \ + --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + + Connection string се заявява за политиката *ServiceConnect*, използвайки параметъра `--policy-name service`. Когато заявявате connection string, можете да посочите какви права ще позволи този connection string. Политиката ServiceConnect позволява на вашия код да се свърже и да изпраща съобщения към IoT устройства. + + ✅ Направете проучване: Прочетете за различните политики в [документацията за права на IoT Hub](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn) + +1. Във VS Code отворете файла `local.settings.json`. Добавете следната допълнителна стойност в секцията `Values`: + + ```json + "REGISTRY_MANAGER_CONNECTION_STRING": "" + ``` + + Заменете `` със стойността от предишната стъпка. Ще трябва да добавите запетая след предишния ред, за да направите JSON-а валиден. + +### Задача - изпращане на заявка за директен метод към устройство + +1. SDK за Registry Manager е наличен чрез Pip пакет. Добавете следния ред към файла `requirements.txt`, за да добавите зависимостта към този пакет: + + ```sh + azure-iot-hub + ``` + +1. Уверете се, че терминалът на VS Code има активирана виртуална среда, и изпълнете следната команда, за да инсталирате Pip пакетите: + + ```sh + pip install -r requirements.txt + ``` + +1. Добавете следните импорти към файла `__init__.py`: + + ```python + import json + import os + from azure.iot.hub import IoTHubRegistryManager + from azure.iot.hub.models import CloudToDeviceMethod + ``` + + Това импортира някои системни библиотеки, както и библиотеките за взаимодействие с Registry Manager и изпращане на заявки за директни методи. + +1. Премахнете кода от вътрешността на метода `main`, но запазете самия метод. + +1. В метода `main` добавете следния код: + + ```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}') + ``` + + Този код извлича тялото на събитието, което съдържа JSON съобщението, изпратено от IoT устройството. + + След това получава ID на устройството от анотациите, предадени със съобщението. Тялото на събитието съдържа съобщението, изпратено като телеметрия, а речникът `iothub_metadata` съдържа свойства, зададени от IoT Hub, като например ID на устройството-изпращач и времето, когато съобщението е изпратено. + + Тази информация след това се записва в логовете. Ще видите този лог в терминала, когато стартирате приложението Function локално. + +1. Под това добавете следния код: + + ```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='{}') + ``` + + Този код получава стойността за влажността на почвата от съобщението. След това проверява влажността и в зависимост от стойността създава помощен клас за заявка за директен метод за `relay_on` или `relay_off`. Заявката за метод не изисква полезен товар, така че се изпраща празен JSON документ. + +1. Под това добавете следния код: + + ```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) + ``` +Този код зарежда `REGISTRY_MANAGER_CONNECTION_STRING` от файла `local.settings.json`. Стойностите в този файл са достъпни като променливи на средата и могат да бъдат прочетени с помощта на функцията `os.environ`, която връща речник с всички променливи на средата. + +> 💁 Когато този код бъде разположен в облака, стойностите от файла `local.settings.json` ще бъдат зададени като *Application Settings* и могат да бъдат прочетени от променливите на средата. + +Кодът след това създава инстанция на помощния клас Registry Manager, използвайки връзковия низ. + +1. Под това добавете следния код: + + ```python + registry_manager.invoke_device_method(device_id, direct_method) + + logging.info('Direct method request sent!') + ``` + + Този код указва на Registry Manager да изпрати заявка за директен метод към устройството, което е изпратило телеметрията. + + > 💁 В предишните версии на приложението, които създадохте в по-ранни уроци с помощта на MQTT, командите за управление на релето се изпращаха към всички устройства. Кодът предполагаше, че ще имате само едно устройство. Тази версия на кода изпраща заявката за метод към едно устройство, така че ще работи, ако имате множество конфигурации на сензори за влажност и релета, изпращайки правилната заявка за директен метод към правилното устройство. + +1. Стартирайте приложението Functions и се уверете, че вашето IoT устройство изпраща данни. Ще видите как съобщенията се обработват и заявките за директни методи се изпращат. Преместете сензора за влажност на почвата вътре и извън почвата, за да видите как стойностите се променят и релето се включва и изключва. + +> 💁 Можете да намерите този код в папката [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions). + +## Разположете вашия сървърно-базиран код в облака + +Вашият код вече работи локално, така че следващата стъпка е да разположите приложението Functions в облака. + +### Задача - създайте облачните ресурси + +Вашето приложение Functions трябва да бъде разположено в ресурс Functions App в Azure, който се намира в Resource Group, създадена за вашия IoT Hub. Ще ви е необходим и Storage Account, създаден в Azure, за да замени емулатора, който използвате локално. + +1. Стартирайте следната команда, за да създадете Storage Account: + + ```sh + az storage account create --resource-group soil-moisture-sensor \ + --sku Standard_LRS \ + --name + ``` + + Заменете `` с име за вашия Storage Account. Това име трябва да бъде уникално в глобален мащаб, тъй като е част от URL адреса, използван за достъп до акаунта. Можете да използвате само малки букви и цифри за това име, без други символи, и то е ограничено до 24 символа. Използвайте нещо като `sms` и добавете уникален идентификатор накрая, като случайни думи или вашето име. + + Опцията `--sku Standard_LRS` избира ценовия план, като се избира най-ниската цена за обща употреба. Няма безплатен план за съхранение, и плащате за това, което използвате. Разходите са сравнително ниски, като най-скъпото съхранение струва по-малко от 0,05 USD на месец за гигабайт. + + ✅ Прочетете повече за цените на страницата [Azure Storage Account pricing](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn). + +1. Стартирайте следната команда, за да създадете Function App: + + ```sh + az functionapp create --resource-group soil-moisture-sensor \ + --runtime python \ + --functions-version 3 \ + --os-type Linux \ + --consumption-plan-location \ + --storage-account \ + --name + ``` + + Заменете `` с местоположението, което използвахте при създаването на Resource Group в предишния урок. + + Заменете `` с името на Storage Account, който създадохте в предишната стъпка. + + Заменете `` с уникално име за вашето Functions App. Това име трябва да бъде уникално в глобален мащаб, тъй като е част от URL адреса, който може да се използва за достъп до Functions App. Използвайте нещо като `soil-moisture-sensor-` и добавете уникален идентификатор накрая, като случайни думи или вашето име. + + Опцията `--functions-version 3` задава версията на Azure Functions, която да се използва. Версия 3 е най-новата версия. + + Опцията `--os-type Linux` указва на Functions runtime да използва Linux като операционна система за хостване на тези функции. Функциите могат да бъдат хоствани на Linux или Windows, в зависимост от използвания програмен език. Python приложенията се поддържат само на Linux. + +### Задача - качете настройките на приложението си + +Когато разработвахте вашето Functions App, съхранявахте някои настройки във файла `local.settings.json` за връзковите низове за вашия IoT Hub. Тези настройки трябва да бъдат записани в Application Settings във вашето Function App в Azure, за да могат да бъдат използвани от вашия код. + +> 🎓 Файлът `local.settings.json` е само за локални настройки за разработка и не трябва да бъде качван в системи за контрол на версиите, като GitHub. Когато се разположи в облака, се използват Application Settings. Application Settings са двойки ключ/стойност, хоствани в облака, и се четат от променливите на средата или във вашия код, или от runtime, когато свързва вашия код с IoT Hub. + +1. Стартирайте следната команда, за да зададете настройката `IOT_HUB_CONNECTION_STRING` в Application Settings на Functions App: + + ```sh + az functionapp config appsettings set --resource-group soil-moisture-sensor \ + --name \ + --settings "IOT_HUB_CONNECTION_STRING=" + ``` + + Заменете `` с името, което използвахте за вашето Functions App. + + Заменете `` със стойността на `IOT_HUB_CONNECTION_STRING` от вашия файл `local.settings.json`. + +1. Повторете горната стъпка, но задайте стойността на `REGISTRY_MANAGER_CONNECTION_STRING` на съответната стойност от вашия файл `local.settings.json`. + +Когато стартирате тези команди, те също ще изведат списък с всички Application Settings за Function App. Можете да използвате това, за да проверите дали стойностите са зададени правилно. + +> 💁 Ще видите стойност, която вече е зададена за `AzureWebJobsStorage`. Във вашия файл `local.settings.json` това беше зададено на стойност за използване на локалния емулатор за съхранение. Когато създадохте Functions App, подадохте Storage Account като параметър, и това се задава автоматично в тази настройка. + +### Задача - разположете вашето Functions App в облака + +Сега, когато Functions App е готово, вашият код може да бъде разположен. + +1. Стартирайте следната команда от терминала на VS Code, за да публикувате вашето Functions App: + + ```sh + func azure functionapp publish + ``` + + Заменете `` с името, което използвахте за вашето Functions App. + +Кодът ще бъде пакетиран и изпратен към Functions App, където ще бъде разположен и стартиран. Ще има много изход в конзолата, завършващ с потвърждение за разполагането и списък с разположените функции. В този случай списъкът ще съдържа само тригера. + +```output +Deployment successful. +Remote build succeeded! +Syncing triggers... +Functions in soil-moisture-sensor: + iot-hub-trigger - [eventHubTrigger] +``` + +Уверете се, че вашето IoT устройство работи. Променете нивата на влажност, като регулирате влажността на почвата или преместите сензора вътре и извън почвата. Ще видите как релето се включва и изключва, когато влажността на почвата се променя. + +--- + +## 🚀 Предизвикателство + +В предишния урок управлявахте времето за релето, като се отписвахте от MQTT съобщенията, докато релето беше включено, и за кратко след като беше изключено. Тук не можете да използвате този метод - не можете да се отпишете от IoT Hub тригера. + +Помислете за различни начини, по които бихте могли да се справите с това във вашето Functions App. + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18) + +## Преглед и самостоятелно обучение + +* Прочетете за сървърно-базираното изчисление на страницата [Serverless Computing в Wikipedia](https://wikipedia.org/wiki/Serverless_computing) +* Прочетете за използването на сървърно-базирани решения в Azure, включително още примери, в публикацията [Go serverless for your IoT needs Azure blog post](https://azure.microsoft.com/blog/go-serverless-for-your-iot-needs/?WT.mc_id=academic-17441-jabenn) +* Научете повече за Azure Functions на [Azure Functions YouTube канал](https://www.youtube.com/c/AzureFunctions) + +## Задание + +[Добавете ръчно управление на релето](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md b/translations/bg/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md new file mode 100644 index 00000000..107961de --- /dev/null +++ b/translations/bg/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md @@ -0,0 +1,70 @@ + +# Добавяне на ръчно управление на релето + +## Инструкции + +Сървърлес кодът може да бъде задействан от различни неща, включително HTTP заявки. Можете да използвате HTTP тригери, за да добавите ръчно управление на релето, което позволява на някого да включва или изключва релето чрез уеб заявка. + +За тази задача трябва да добавите два HTTP тригера към вашето Functions App, за да включвате и изключвате релето, като използвате наученото в този урок за изпращане на команди към устройството. + +Няколко съвета: + +* Можете да добавите HTTP тригер към съществуващото си Functions App със следната команда: + + ```sh + func new --name --template "HTTP trigger" + ``` + + Заменете `` с име за вашия HTTP тригер. Използвайте нещо като `relay_on` и `relay_off`. + +* HTTP тригерите могат да имат контрол на достъпа. По подразбиране те изискват API ключ, специфичен за функцията, който да бъде предаден с URL адреса, за да се изпълнят. За тази задача можете да премахнете това ограничение, така че всеки да може да изпълнява функцията. За да направите това, актуализирайте настройката `authLevel` в файла `function.json` за HTTP тригерите със следното: + + ```json + "authLevel": "anonymous" + ``` + + > 💁 Можете да прочетете повече за този контрол на достъпа в [документацията за ключовете за достъп на функциите](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn#authorization-keys). + +* HTTP тригерите по подразбиране поддържат GET и POST заявки. Това означава, че можете да ги извикате чрез вашия уеб браузър - уеб браузърите изпращат GET заявки. + + Когато стартирате вашето Functions App локално, ще видите URL адреса на тригера: + + ```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 + ``` + + Поставете URL адреса в браузъра си и натиснете `Enter`, или `Ctrl+клик` (`Cmd+клик` на macOS) върху връзката в терминалния прозорец в VS Code, за да го отворите в браузъра си по подразбиране. Това ще изпълни тригера. + + > 💁 Обърнете внимание, че URL адресът съдържа `/api` - HTTP тригерите по подразбиране са в поддомейна `api`. + +* Когато разположите Functions App, URL адресът на HTTP тригера ще бъде: + + `https://.azurewebsites.net/api/` + + Където `` е името на вашето Functions App, а `` е името на вашия тригер. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Създаване на HTTP тригери | Създадени са 2 тригера за включване и изключване на релето с подходящи имена | Създаден е един тригер с подходящо име | Не е създаден нито един тригер | +| Управление на релето чрез HTTP тригерите | Успешно свързани и двата тригера с IoT Hub и релето се управлява правилно | Успешно свързан един тригер с IoT Hub и релето се управлява правилно | Неуспешно свързване на тригерите с IoT Hub | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/6-keep-your-plant-secure/README.md b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/README.md new file mode 100644 index 00000000..37660adc --- /dev/null +++ b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/README.md @@ -0,0 +1,243 @@ + +# Поддържайте вашето растение защитено + +![Скица на урока](../../../../../translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +## Тест преди лекцията + +[Тест преди лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/19) + +## Въведение + +В последните няколко урока създадохте IoT устройство за мониторинг на почвата и го свързахте с облака. Но какво ще стане, ако хакери, работещи за конкурентен фермер, успеят да поемат контрол над вашите IoT устройства? Какво ще стане, ако те изпратят фалшиви данни за висока влажност на почвата, така че растенията ви никога да не бъдат поливани, или включат напоителната система да работи постоянно, убивайки растенията ви от преполиване и увеличавайки разходите ви за вода? + +В този урок ще научите как да защитите IoT устройствата си. Тъй като това е последният урок от този проект, ще научите също как да почистите облачните си ресурси, за да намалите потенциалните разходи. + +В този урок ще разгледаме: + +* [Защо е необходимо да защитите IoT устройствата си?](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [Криптография](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [Защита на вашите IoT устройства](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [Генериране и използване на X.509 сертификат](../../../../../2-farm/lessons/6-keep-your-plant-secure) + +> 🗑 Това е последният урок от този проект, така че след като завършите урока и задачата, не забравяйте да почистите облачните си услуги. Ще ви трябват услугите, за да завършите задачата, така че се уверете, че първо сте я изпълнили. +> +> Ако е необходимо, вижте [ръководството за почистване на проекта](../../../clean-up.md) за инструкции как да направите това. + +## Защо е необходимо да защитите IoT устройствата си? + +IoT сигурността включва гарантиране, че само очакваните устройства могат да се свързват с вашата облачна IoT услуга и да изпращат телеметрия, и че само вашата облачна услуга може да изпраща команди към устройствата ви. IoT данните също могат да бъдат лични, включително медицински или интимни данни, така че цялото ви приложение трябва да вземе предвид сигурността, за да предотврати изтичането на тези данни. + +Ако вашето IoT приложение не е защитено, съществуват редица рискове: + +* Фалшиво устройство може да изпрати грешни данни, карайки приложението ви да реагира неправилно. Например, те могат да изпратят постоянни високи показания за влажност на почвата, което означава, че напоителната ви система никога няма да се включи и растенията ви ще умрат от липса на вода. +* Неоторизирани потребители могат да четат данни от IoT устройства, включително лични или критични за бизнеса данни. +* Хакери могат да изпращат команди за управление на устройство по начин, който може да причини повреда на устройството или свързания хардуер. +* Чрез свързване към IoT устройство, хакерите могат да използват това, за да получат достъп до допълнителни мрежи и да проникнат в частни системи. +* Злонамерени потребители могат да получат достъп до лични данни и да ги използват за изнудване. + +Това са реални сценарии, които се случват постоянно. Някои примери бяха дадени в предишни уроци, но ето още няколко: + +* През 2018 г. хакери използваха отворена WiFi точка за достъп на термостат за аквариум, за да получат достъп до мрежата на казино и да откраднат данни. [The Hacker News - Casino Gets Hacked Through Its Internet-Connected Fish Tank Thermometer](https://thehackernews.com/2018/04/iot-hacking-thermometer.html) +* През 2016 г. Mirai Botnet стартира атака за отказ на услуга срещу Dyn, интернет доставчик, като прекъсна големи части от интернет. Този ботнет използваше зловреден софтуер, за да се свърже с IoT устройства като DVR и камери, които използваха стандартни потребителски имена и пароли, и оттам стартира атаката. [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 имаше база данни с потребители на техните свързани играчки CloudPets, която беше публично достъпна в интернет. [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 маркираше бегачи, които сте срещнали, и показваше техните маршрути, позволявайки на непознати ефективно да видят къде живеете. [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/). + +✅ Направете проучване: Потърсете още примери за IoT хакове и пробиви на IoT данни, особено с лични предмети като интернет-свързани четки за зъби или везни. Помислете за въздействието, което тези хакове могат да имат върху жертвите или клиентите. + +> 💁 Сигурността е огромна тема и този урок ще засегне само някои от основите, свързани със свързването на вашето устройство с облака. Други теми, които няма да бъдат разгледани, включват мониторинг на промени в данните по време на пренос, хакване на устройства директно или промени в конфигурациите на устройствата. IoT хакването е толкова сериозна заплаха, че са разработени инструменти като [Azure Defender for IoT](https://azure.microsoft.com/services/azure-defender-for-iot/?WT.mc_id=academic-17441-jabenn). Тези инструменти са подобни на антивирусните и защитните инструменти, които може да имате на компютъра си, но са предназначени за малки, нискоенергийни IoT устройства. + +## Криптография + +Когато устройство се свързва с IoT услуга, то използва идентификатор, за да се идентифицира. Проблемът е, че този идентификатор може да бъде клониран – хакер може да настрои злонамерено устройство, което използва същия идентификатор като истинското устройство, но изпраща фалшиви данни. + +![И истински, и злонамерени устройства могат да използват един и същ идентификатор, за да изпращат телеметрия](../../../../../translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.bg.png) + +Решението на този проблем е да се преобразуват данните, които се изпращат, в разбъркан формат, използвайки стойност, известна само на устройството и облака. Този процес се нарича *криптиране*, а стойността, използвана за криптиране на данните, се нарича *ключ за криптиране*. + +![Ако се използва криптиране, само криптирани съобщения ще бъдат приети, останалите ще бъдат отхвърлени](../../../../../translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.bg.png) + +Облачната услуга може след това да преобразува данните обратно в четим формат, използвайки процес, наречен *декриптиране*, като използва или същия ключ за криптиране, или *ключ за декриптиране*. Ако криптираното съобщение не може да бъде декриптирано с ключа, устройството е било хакнато и съобщението се отхвърля. + +Техниката за извършване на криптиране и декриптиране се нарича *криптография*. + +### Ранна криптография + +Най-ранните видове криптография са били шифри за заместване, датиращи отпреди 3500 години. Шифрите за заместване включват заместване на една буква с друга. Например, [шифърът на Цезар](https://wikipedia.org/wiki/Caesar_cipher) включва изместване на азбуката с определен брой позиции, като само изпращачът на криптираното съобщение и предвиденият получател знаят с колко букви да изместят. + +[Шифърът на Виженер](https://wikipedia.org/wiki/Vigenère_cipher) отива по-далеч, като използва думи за криптиране на текст, така че всяка буква в оригиналния текст се измества с различно количество, вместо винаги да се измества с един и същ брой букви. + +Криптографията е използвана за широк спектър от цели, като защита на рецепта за глазура на грънчар в древна Месопотамия, писане на тайни любовни бележки в Индия или запазване на древноегипетски магически заклинания в тайна. + +### Съвременна криптография + +Съвременната криптография е много по-напреднала, което я прави по-трудна за разбиване от ранните методи. Тя използва сложна математика за криптиране на данни с твърде много възможни ключове, за да направи атаките чрез груба сила възможни. + +Криптографията се използва по много различни начини за сигурна комуникация. Ако четете тази страница в GitHub, може да забележите, че адресът на уебсайта започва с *HTTPS*, което означава, че комуникацията между вашия браузър и уеб сървърите на GitHub е криптирана. Ако някой успее да прочете интернет трафика между вашия браузър и GitHub, той няма да може да прочете данните, тъй като те са криптирани. Вашият компютър дори може да криптира всички данни на твърдия ви диск, така че ако някой го открадне, няма да може да прочете никакви данни без вашата парола. + +> 🎓 HTTPS означава HyperText Transfer Protocol **Secure** + +За съжаление, не всичко е защитено. Някои устройства нямат никаква защита, други са защитени с лесни за разбиване ключове, а понякога дори всички устройства от един и същ тип използват един и същ ключ. Има случаи на много лични IoT устройства, които всички имат една и съща парола за свързване чрез WiFi или Bluetooth. Ако можете да се свържете със собственото си устройство, можете да се свържете и с чуждо. След като се свържете, можете да получите достъп до много лични данни или да контролирате устройството им. + +> 💁 Въпреки сложността на съвременната криптография и твърденията, че разбиването на криптиране може да отнеме милиарди години, възходът на квантовите изчисления доведе до възможността за разбиване на всички известни криптирания за много кратко време! + +### Симетрични и асиметрични ключове + +Криптирането се дели на два типа - симетрично и асиметрично. + +**Симетрично** криптиране използва един и същ ключ за криптиране и декриптиране на данните. И изпращачът, и получателят трябва да знаят един и същ ключ. Това е най-малко сигурният тип, тъй като ключът трябва да бъде споделен по някакъв начин. За да изпрати криптирано съобщение на получател, изпращачът първо може да трябва да изпрати ключа на получателя. + +![Симетричното криптиране използва един и същ ключ за криптиране и декриптиране на съобщение](../../../../../translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.bg.png) + +Ако ключът бъде откраднат по време на преноса или ако изпращачът или получателят бъдат хакнати и ключът бъде намерен, криптирането може да бъде разбито. + +![Симетричното криптиране е сигурно само ако хакерът не получи ключа - ако го направи, той може да прихване и декриптира съобщението](../../../../../translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.bg.png) + +**Асиметрично** криптиране използва 2 ключа - ключ за криптиране и ключ за декриптиране, наричани публичен/частен ключов чифт. Публичният ключ се използва за криптиране на съобщението, но не може да се използва за декриптиране, а частният ключ се използва за декриптиране на съобщението, но не може да се използва за криптиране. + +![Асиметричното криптиране използва различен ключ за криптиране и декриптиране. Ключът за криптиране се изпраща на изпращачите на съобщения, за да могат да криптират съобщение, преди да го изпратят на получателя, който притежава ключовете](../../../../../translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.bg.png) + +Получателят споделя своя публичен ключ, а изпращачът го използва, за да криптира съобщението. След като съобщението бъде изпратено, получателят го декриптира с частния си ключ. Асиметричното криптиране е по-сигурно, тъй като частният ключ се пази в тайна от получателя и никога не се споделя. Всеки може да има публичния ключ, тъй като той може да се използва само за криптиране на съобщения. + +Симетричното криптиране е по-бързо от асиметричното, но асиметричното е по-сигурно. Някои системи използват и двете - използват асиметрично криптиране, за да криптират и споделят симетричния ключ, а след това използват симетричния ключ за криптиране на всички данни. Това прави споделянето на симетричния ключ между изпращача и получателя по-сигурно и по-бързо при криптиране и декриптиране на данни. + +## Защита на вашите IoT устройства + +IoT устройствата могат да бъдат защитени чрез симетрично или асиметрично криптиране. Симетричното е по-лесно, но по-малко сигурно. + +### Симетрични ключове + +Когато настроихте вашето IoT устройство да взаимодейства с IoT Hub, използвахте низ за връзка. Пример за низ за връзка е: + +```output +HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0= +``` + +Този низ за връзка се състои от три части, разделени със запетаи, като всяка част е ключ и стойност: + +| Ключ | Стойност | Описание | +| --- | ----- | ----------- | +| HostName | `soil-moisture-sensor.azure-devices.net` | URL на IoT Hub | +| DeviceId | `soil-moisture-sensor` | Уникален идентификатор на устройството | +| SharedAccessKey | `Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=` | Симетричен ключ, известен на устройството и IoT Hub | + +Последната част от този низ за връзка, `SharedAccessKey`, е симетричният ключ, известен както на устройството, така и на IoT Hub. Този ключ никога не се изпраща от устройството към облака или от облака към устройството. Вместо това той се използва за криптиране на данни, които се изпращат или получават. + +✅ Направете експеримент. Какво мислите, че ще се случи, ако промените частта `SharedAccessKey` от низа за връзка, когато свързвате вашето IoT устройство? Опитайте. + +Когато устройството за първи път се опитва да се свърже, то изпраща токен за споделен достъп (SAS), състоящ се от URL на IoT Hub, времева отметка, когато токенът ще изтече (обикновено 1 ден от текущото време), и подпис. Този подпис се състои от URL и времето на изтичане, криптирани със споделения ключ за достъп от низа за връзка. + +IoT Hub декриптира този подпис със споделения ключ за достъп и ако декриптираната стойност съвпада с URL и времето на изтичане, устройството получава разрешение за свързване. Също така проверява дали текущото време +💁 Поради срока на валидност, вашето IoT устройство трябва да знае точния час, който обикновено се получава от [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) сървър. Ако времето не е точно, връзката ще се провали. +След свързването, всички данни, изпратени към IoT Hub от устройството или към устройството от IoT Hub, ще бъдат криптирани с ключа за споделен достъп. + +✅ Какво мислите, че ще се случи, ако множество устройства споделят една и съща връзка? + +> 💁 Лоша практика за сигурност е да съхранявате този ключ в кода. Ако хакер получи достъп до вашия изходен код, той може да получи ключа ви. Освен това е по-трудно при пускане на код, тъй като ще трябва да прекомпилирате с актуализиран ключ за всяко устройство. По-добре е този ключ да се зарежда от хардуерен модул за сигурност - чип на IoT устройството, който съхранява криптирани стойности, които могат да бъдат прочетени от вашия код. +> +> Когато учите IoT, често е по-лесно да поставите ключа в кода, както направихте в предишен урок, но трябва да се уверите, че този ключ не е качен в публичен контрол на изходния код. + +Устройствата имат 2 ключа и 2 съответстващи низове за връзка. Това позволява ротация на ключовете - тоест преминаване от един ключ към друг, ако първият бъде компрометиран, и повторно генериране на първия ключ. + +### X.509 сертификати + +Когато използвате асиметрично криптиране с двойка публичен/частен ключ, трябва да предоставите публичния си ключ на всеки, който иска да ви изпрати данни. Проблемът е как получателят на вашия ключ може да бъде сигурен, че това наистина е вашият публичен ключ, а не някой друг, който се представя за вас? Вместо да предоставяте ключ, можете да предоставите публичния си ключ в сертификат, който е проверен от доверена трета страна, наречена X.509 сертификат. + +X.509 сертификатите са цифрови документи, които съдържат публичната част от двойката публичен/частен ключ. Те обикновено се издават от една от редица доверени организации, наречени [сертификационни органи](https://wikipedia.org/wiki/Certificate_authority) (CAs), и са цифрово подписани от CA, за да се посочи, че ключът е валиден и идва от вас. Вие се доверявате на сертификата и че публичният ключ е от този, който сертификатът твърди, че е, защото се доверявате на CA, подобно на това как бихте се доверили на паспорт или шофьорска книжка, защото се доверявате на държавата, която го издава. Сертификатите струват пари, така че можете също да „самоподписвате“, тоест да създадете сертификат сами, който е подписан от вас, за тестови цели. + +> 💁 Никога не трябва да използвате самоподписан сертификат за продукционна версия. + +Тези сертификати имат редица полета, включително кой е източникът на публичния ключ, подробности за CA, който го е издал, колко дълго е валиден и самия публичен ключ. Преди да използвате сертификат, добра практика е да го проверите, като се уверите, че е подписан от оригиналния CA. + +✅ Можете да прочетете пълен списък с полетата в сертификата в [урока на Microsoft за разбиране на X.509 публични ключови сертификати](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-certificates?WT.mc_id=academic-17441-jabenn#certificate-fields). + +Когато използвате X.509 сертификати, както изпращачът, така и получателят ще имат свои собствени публични и частни ключове, както и X.509 сертификати, които съдържат публичния ключ. Те след това обменят X.509 сертификати по някакъв начин, използвайки публичните ключове един на друг, за да криптират данните, които изпращат, и своите частни ключове, за да декриптират данните, които получават. + +![Вместо да споделяте публичен ключ, можете да споделите сертификат. Потребителят на сертификата може да провери, че идва от вас, като се свърже със сертификационния орган, който го е подписал.](../../../../../translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.bg.png) + +Едно голямо предимство на използването на X.509 сертификати е, че те могат да бъдат споделяни между устройства. Можете да създадете един сертификат, да го качите в IoT Hub и да го използвате за всички ваши устройства. Всяко устройство трябва само да знае частния ключ, за да декриптира съобщенията, които получава от IoT Hub. + +Сертификатът, използван от вашето устройство за криптиране на съобщенията, които изпраща към IoT Hub, е публикуван от Microsoft. Това е същият сертификат, който много Azure услуги използват и понякога е вграден в SDK-ите. + +> 💁 Запомнете, публичният ключ е точно това - публичен. Публичният ключ на Azure може да се използва само за криптиране на данни, изпратени към Azure, а не за тяхното декриптиране, така че може да бъде споделян навсякъде, включително в изходния код. Например, можете да го видите в [изходния код на Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c/blob/master/certs/certs.c). + +✅ Има много жаргон, свързан с X.509 сертификатите. Можете да прочетете дефинициите на някои от термините, които може да срещнете, в [Ръководството за X.509 сертификатен жаргон за начинаещи](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). + +## Генериране и използване на X.509 сертификат + +Стъпките за генериране на X.509 сертификат са: + +1. Създайте двойка публичен/частен ключ. Един от най-широко използваните алгоритми за генериране на двойка публичен/частен ключ се нарича [Rivest–Shamir–Adleman](https://wikipedia.org/wiki/RSA_(cryptosystem))(RSA). + +1. Изпратете публичния ключ с асоциирани данни за подписване, или от CA, или чрез самоподписване. + +Azure CLI има команди за създаване на нова идентичност на устройство в IoT Hub и автоматично генериране на двойка публичен/частен ключ и създаване на самоподписан сертификат. + +> 💁 Ако искате да видите стъпките в детайли, вместо да използвате Azure CLI, можете да ги намерите в [урока за използване на OpenSSL за създаване на самоподписани сертификати в документацията на Microsoft IoT Hub](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-self-sign?WT.mc_id=academic-17441-jabenn). + +### Задача - създаване на идентичност на устройство с X.509 сертификат + +1. Изпълнете следната команда, за да регистрирате новата идентичност на устройството, автоматично генерирайки ключовете и сертификатите: + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor-x509 \ + --am x509_thumbprint \ + --output-dir . \ + --hub-name + ``` + + Заменете `` с името, което сте използвали за вашия IoT Hub. + + Това ще създаде устройство с идентификатор `soil-moisture-sensor-x509`, за да се разграничи от идентичността на устройството, която създадохте в предишния урок. Тази команда също ще създаде 2 файла в текущата директория: + + * `soil-moisture-sensor-x509-key.pem` - този файл съдържа частния ключ за устройството. + * `soil-moisture-sensor-x509-cert.pem` - това е X.509 сертификатният файл за устройството. + + Пазете тези файлове безопасно! Файлът с частния ключ не трябва да бъде качван в публичен контрол на изходния код. + +### Задача - използване на X.509 сертификат в кода на вашето устройство + +Работете през съответното ръководство, за да свържете вашето IoT устройство към облака, използвайки X.509 сертификат: + +* [Arduino - Wio Terminal](wio-terminal-x509.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-x509.md) + +--- + +## 🚀 Предизвикателство + +Има множество начини за създаване, управление и изтриване на Azure услуги като Resource Groups и IoT Hubs. Един от тях е [Azure Portal](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) - уеб-базиран интерфейс, който ви предоставя GUI за управление на вашите Azure услуги. + +Посетете [portal.azure.com](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) и разгледайте портала. Вижте дали можете да създадете IoT Hub чрез портала, след което да го изтриете. + +**Подсказка** - когато създавате услуги чрез портала, не е необходимо предварително да създавате Resource Group, такава може да бъде създадена, когато създавате услугата. Уверете се, че я изтривате, когато приключите! + +Можете да намерите много документация, уроци и ръководства за Azure Portal в [документацията за Azure Portal](https://docs.microsoft.com/azure/azure-portal/?WT.mc_id=academic-17441-jabenn). + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/20) + +## Преглед и самостоятелно обучение + +* Прочетете за историята на криптографията на [страницата за историята на криптографията в Wikipedia](https://wikipedia.org/wiki/History_of_cryptography). +* Прочетете за X.509 сертификатите на [страницата за X.509 в Wikipedia](https://wikipedia.org/wiki/X.509). + +## Задание + +[Създайте ново IoT устройство](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/6-keep-your-plant-secure/assignment.md b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/assignment.md new file mode 100644 index 00000000..7b73dbb9 --- /dev/null +++ b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/assignment.md @@ -0,0 +1,29 @@ + +# Създаване на ново IoT устройство + +## Инструкции + +През последните 6 урока научихте за дигиталното земеделие и как да използвате IoT устройства за събиране на данни, за да предвиждате растежа на растенията и автоматизирате поливането въз основа на показанията за влажност на почвата. + +Използвайте наученото, за да създадете ново IoT устройство, използвайки сензор и актуатор по ваш избор. Изпращайте телеметрия към IoT Hub и използвайте това, за да контролирате актуатора чрез безсървърен код. Можете да използвате сензор и актуатор, които вече сте използвали в този или предишния проект, или ако разполагате с друго оборудване, опитайте нещо ново. + +## Критерии за оценка + +| Критерий | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Програмиране на IoT устройство за използване на сензор и актуатор | Програмирано IoT устройство, което работи със сензор и актуатор | Програмирано IoT устройство, което работи със сензор или актуатор | Неуспешно програмиране на IoT устройство за използване на сензор или актуатор | +| Свързване на IoT устройството към IoT Hub | Успешно разположен IoT Hub, изпращане на телеметрия към него и получаване на команди от него | Успешно разположен IoT Hub и изпращане на телеметрия или получаване на команди | Неуспешно разполагане на IoT Hub и комуникация с него от IoT устройство | +| Контролиране на актуатора чрез безсървърен код | Успешно разположена Azure Function за контролиране на устройството, задействана от телеметрични събития | Успешно разположена Azure Function, задействана от телеметрични събития, но неуспешно контролиране на актуатора | Неуспешно разполагане на Azure Function | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md new file mode 100644 index 00000000..d620de9e --- /dev/null +++ b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md @@ -0,0 +1,71 @@ + +# Използване на X.509 сертификат в кода на вашето устройство - Виртуален IoT хардуер и Raspberry Pi + +В тази част от урока ще свържете вашето виртуално IoT устройство или Raspberry Pi към IoT Hub, използвайки X.509 сертификат. + +## Свържете устройството си към IoT Hub + +Следващата стъпка е да свържете устройството си към IoT Hub, използвайки X.509 сертификати. + +### Задача - свързване към IoT Hub + +1. Копирайте файловете с ключа и сертификата в папката, съдържаща кода на вашето IoT устройство. Ако използвате Raspberry Pi чрез VS Code Remote SSH и сте създали ключовете на вашия компютър или Mac, можете да плъзнете и пуснете файловете в Explorer в VS Code, за да ги копирате. + +1. Отворете файла `app.py`. + +1. За да се свържете, използвайки X.509 сертификат, ще ви е необходимо името на хоста на IoT Hub и X.509 сертификатът. Започнете, като създадете променлива, съдържаща името на хоста, като добавите следния код преди създаването на клиента на устройството: + + ```python + host_name = "" + ``` + + Заменете `` с името на хоста на вашия IoT Hub. Можете да го намерите в секцията `HostName` в `connection_string`. Това ще бъде името на вашия IoT Hub, завършващо с `.azure-devices.net`. + +1. Под това, декларирайте променлива с идентификатора на устройството: + + ```python + device_id = "soil-moisture-sensor-x509" + ``` + +1. Ще ви е необходим екземпляр на класа `X509`, съдържащ X.509 файловете. Добавете `X509` към списъка с класове, импортирани от модула `azure.iot.device`: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse, X509 + ``` + +1. Създайте екземпляр на класа `X509`, използвайки вашите файлове със сертификат и ключ, като добавите този код под декларацията на `host_name`: + + ```python + x509 = X509("./soil-moisture-sensor-x509-cert.pem", "./soil-moisture-sensor-x509-key.pem") + ``` + + Това ще създаде класа `X509`, използвайки файловете `soil-moisture-sensor-x509-cert.pem` и `soil-moisture-sensor-x509-key.pem`, създадени по-рано. + +1. Заменете реда с кода, който създава `device_client` от низ за връзка, със следния: + + ```python + device_client = IoTHubDeviceClient.create_from_x509_certificate(x509, host_name, device_id) + ``` + + Това ще се свърже, използвайки X.509 сертификат вместо низ за връзка. + +1. Изтрийте реда с променливата `connection_string`. + +1. Стартирайте кода си. Наблюдавайте съобщенията, изпратени към IoT Hub, и изпращайте заявки за директни методи, както преди. Ще видите как устройството се свързва и изпраща показания за влажност на почвата, както и получава заявки за директни методи. + +> 💁 Можете да намерите този код в папката [code/pi](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/pi) или [code/virtual-device](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/virtual-device). + +😀 Вашата програма за сензор за влажност на почвата е свързана към вашия IoT Hub, използвайки X.509 сертификат! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md new file mode 100644 index 00000000..65328608 --- /dev/null +++ b/translations/bg/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md @@ -0,0 +1,17 @@ + +# Използване на X.509 сертификат във вашия код за устройство - Wio Terminal + +Към момента на писане, Azure Arduino SDK не поддържа X.509 сертификати. Ако искате да експериментирате с X.509 сертификати, можете да се обърнете към [инструкциите за виртуално IoT устройство с помощта на Python SDK](single-board-computer-x509.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/README.md b/translations/bg/3-transport/README.md new file mode 100644 index 00000000..a51e67fe --- /dev/null +++ b/translations/bg/3-transport/README.md @@ -0,0 +1,38 @@ + +# Транспорт от фермата до фабриката - използване на IoT за проследяване на доставките на храна + +Много фермери отглеждат храна за продажба - било то като търговски фермери, които продават всичко, което произвеждат, или като фермери за собствена издръжка, които продават излишъка си, за да закупят необходимите стоки. По някакъв начин храната трябва да стигне от фермата до потребителя, което обикновено включва масов транспорт от фермите до хъбове или преработвателни предприятия, а след това до магазините. Например, фермер, който отглежда домати, ще ги събере, опакова в кутии, натовари кутиите в камион и ги достави до преработвателно предприятие. Там доматите ще бъдат сортирани и след това доставени до потребителите под формата на преработена храна, за продажба на дребно или за консумация в ресторанти. + +IoT може да помогне в тази верига на доставки, като проследява храната по време на транспортиране - гарантирайки, че шофьорите се движат по правилния маршрут, наблюдавайки местоположението на превозните средства и изпращайки известия, когато превозните средства пристигнат, за да може храната да бъде разтоварена и готова за преработка възможно най-бързо. + +> 🎓 *Верига на доставки* е последователността от дейности за създаване и доставка на нещо. Например, при отглеждането на домати тя обхваща семена, почва, торове и водоснабдяване, отглеждане на домати, доставянето им до централен хъб, транспортирането им до местен хъб на супермаркет, транспортирането до отделния супермаркет, излагането им на щандовете, продажбата им на потребител и отнасянето им вкъщи за консумация. Всяка стъпка е като звено от верига. + +> 🎓 Частта от веригата на доставки, свързана с транспорта, се нарича *логистика*. + +В тези 4 урока ще научите как да приложите Интернет на нещата (IoT), за да подобрите веригата на доставки, като наблюдавате храната, докато се товари на (виртуален) камион, който се проследява по време на движението му до дестинацията. Ще научите за GPS проследяване, как да съхранявате и визуализирате GPS данни и как да получавате известия, когато камионът пристигне на местоназначението си. + +> 💁 Тези уроци ще използват някои облачни ресурси. Ако не завършите всички уроци в този проект, уверете се, че сте [почистили проекта си](../clean-up.md). + +## Теми + +1. [Проследяване на местоположение](lessons/1-location-tracking/README.md) +1. [Съхраняване на данни за местоположение](lessons/2-store-location-data/README.md) +1. [Визуализиране на данни за местоположение](lessons/3-visualize-location-data/README.md) +1. [Геозони](lessons/4-geofences/README.md) + +## Благодарности + +Всички уроци са написани с ♥️ от [Jen Looper](https://github.com/jlooper) и [Jim Bennett](https://GitHub.com/JimBobBennett) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/README.md b/translations/bg/3-transport/lessons/1-location-tracking/README.md new file mode 100644 index 00000000..861c2d94 --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/README.md @@ -0,0 +1,216 @@ + +# Проследяване на местоположението + +![Скица на урока](../../../../../translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +## Тест преди лекцията + +[Тест преди лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/21) + +## Въведение + +Основният процес за доставяне на храна от фермер до потребител включва товарене на кутии с продукти в камиони, кораби, самолети или други търговски транспортни средства и доставяне на храната някъде – или директно до клиент, или до централен хъб или склад за обработка. Целият процес от фермата до потребителя е част от процес, наречен *верига на доставки*. Видеото по-долу от Училището по бизнес W. P. Carey на Университета на Аризона обяснява идеята за веригата на доставки и как тя се управлява в повече детайли. + +[![Какво е управление на веригата на доставки? Видео от Училището по бизнес W. P. Carey на Университета на Аризона](https://img.youtube.com/vi/Mi1QBxVjZAw/0.jpg)](https://www.youtube.com/watch?v=Mi1QBxVjZAw) + +> 🎥 Кликнете върху изображението по-горе, за да гледате видеото + +Добавянето на IoT устройства може драстично да подобри вашата верига на доставки, позволявайки ви да управлявате къде се намират стоките, да планирате транспорта и обработката на стоките по-добре и да реагирате по-бързо на проблеми. + +Когато управлявате автопарк от превозни средства като камиони, е полезно да знаете къде се намира всяко превозно средство в даден момент. Превозните средства могат да бъдат оборудвани с GPS сензори, които изпращат местоположението си до IoT системи, позволявайки на собствениците да определят точното им местоположение, да видят маршрута, който са изминали, и да знаят кога ще пристигнат на дестинацията си. Повечето превозни средства работят извън обхвата на WiFi, така че използват клетъчни мрежи за изпращане на този вид данни. Понякога GPS сензорът е вграден в по-сложни IoT устройства като електронни дневници. Тези устройства проследяват колко дълго камионът е бил в движение, за да се гарантира, че шофьорите спазват местните закони за работното време. + +В този урок ще научите как да проследявате местоположението на превозни средства, използвайки сензор за глобална позиционираща система (GPS). + +В този урок ще разгледаме: + +* [Свързани превозни средства](../../../../../3-transport/lessons/1-location-tracking) +* [Геопространствени координати](../../../../../3-transport/lessons/1-location-tracking) +* [Глобални позициониращи системи (GPS)](../../../../../3-transport/lessons/1-location-tracking) +* [Четене на данни от GPS сензор](../../../../../3-transport/lessons/1-location-tracking) +* [NMEA GPS данни](../../../../../3-transport/lessons/1-location-tracking) +* [Декодиране на данни от GPS сензор](../../../../../3-transport/lessons/1-location-tracking) + +## Свързани превозни средства + +IoT трансформира начина, по който се транспортират стоки, чрез създаване на автопаркове от *свързани превозни средства*. Тези превозни средства са свързани с централни IT системи, които докладват информация за местоположението им и други данни от сензори. Наличието на автопарк от свързани превозни средства има широк спектър от предимства: + +* Проследяване на местоположението - можете да определите точно къде се намира дадено превозно средство по всяко време, което ви позволява: + + * Да получавате известия, когато превозно средство е на път да пристигне на дестинация, за да подготвите екип за разтоварване + * Да локализирате откраднати превозни средства + * Да комбинирате данни за местоположение и маршрут с проблеми в трафика, за да пренасочите превозни средства по време на пътуване + * Да спазвате данъчните изисквания. Някои държави таксуват превозните средства за изминатите километри по обществени пътища (като [RUC в Нова Зеландия](https://www.nzta.govt.nz/vehicles/licensing-rego/road-user-charges/)), така че знанието кога превозното средство е на обществени пътища спрямо частни пътища улеснява изчисляването на дължимия данък. + * Да знаете къде да изпратите екипи за поддръжка в случай на повреда + +* Телеметрия на шофьора - възможност за гарантиране, че шофьорите спазват ограниченията на скоростта, завиват с подходяща скорост, спират рано и ефективно и шофират безопасно. Свързаните превозни средства могат също да имат камери за записване на инциденти. Това може да бъде свързано със застраховки, предоставяйки намалени ставки за добри шофьори. + +* Спазване на работното време на шофьорите - гарантиране, че шофьорите шофират само в рамките на законово позволените часове въз основа на времето, когато двигателят е включен и изключен. + +Тези предимства могат да бъдат комбинирани - например, комбиниране на спазването на работното време на шофьорите с проследяване на местоположението, за да се пренасочат шофьори, ако не могат да достигнат дестинацията си в рамките на позволените часове за шофиране. Те също могат да бъдат комбинирани с други специфични за превозното средство телеметрични данни, като данни за температура от камиони с контролирана температура, което позволява превозните средства да бъдат пренасочени, ако текущият им маршрут би означавал, че стоките не могат да бъдат поддържани при необходимата температура. + +> 🎓 Логистиката е процесът на транспортиране на стоки от едно място на друго, например от ферма до супермаркет чрез един или повече складове. Фермерът опакова кутии с домати, които се товарят на камион, доставят се до централен склад и се прехвърлят на втори камион, който може да съдържа смес от различни видове продукти, които след това се доставят до супермаркет. + +Основният компонент на проследяването на превозни средства е GPS - сензори, които могат да определят местоположението си навсякъде на Земята. В този урок ще научите как да използвате GPS сензор, започвайки с това как да дефинирате местоположение на Земята. + +## Геопространствени координати + +Геопространствените координати се използват за дефиниране на точки на повърхността на Земята, подобно на това как координатите могат да се използват за рисуване на пиксел на компютърен екран или позициониране на бодове в кръстат бод. За една точка имате двойка координати. Например, кампусът на Microsoft в Редмънд, Вашингтон, САЩ се намира на 47.6423109, -122.1390293. + +### Ширина и дължина + +Земята е сфера - триизмерен кръг. Поради това точките се дефинират чрез разделяне на сферата на 360 градуса, същото като геометрията на кръговете. Ширината измерва броя на градусите от север на юг, а дължината измерва броя на градусите от изток на запад. + +> 💁 Никой не знае със сигурност оригиналната причина защо кръговете са разделени на 360 градуса. [Страницата за градус (ъгъл) в Уикипедия](https://wikipedia.org/wiki/Degree_(angle)) обяснява някои от възможните причини. + +![Линии на ширина от 90° на Северния полюс, 45° между Северния полюс и екватора, 0° на екватора, -45° между екватора и Южния полюс и -90° на Южния полюс](../../../../../translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.bg.png) + +Ширината се измерва с линии, които обикалят Земята и са успоредни на екватора, разделяйки Северното и Южното полукълбо на по 90°. Екваторът е на 0°, Северният полюс е на 90°, известен също като 90° северна ширина, а Южният полюс е на -90°, или 90° южна ширина. + +Дължината се измерва като броя на градусите, измерени на изток и запад. Началната точка на дължината е *първият меридиан*, който е дефиниран през 1884 г. като линия от Северния до Южния полюс, преминаваща през [Кралската обсерватория в Гринуич, Англия](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich). + +![Линии на дължина от -180° на запад от първия меридиан, до 0° на първия меридиан, до 180° на изток от първия меридиан](../../../../../translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.bg.png) + +> 🎓 Меридиан е въображаема права линия, която преминава от Северния полюс до Южния полюс, образувайки полукръг. + +За да измерите дължината на дадена точка, измервате броя на градусите около екватора от първия меридиан до меридиан, който преминава през тази точка. Дължината варира от -180°, или 180° западна дължина, през 0° на първия меридиан, до 180°, или 180° източна дължина. 180° и -180° се отнасят до една и съща точка, антимеридиана или 180-ия меридиан. Това е меридиан на противоположната страна на Земята спрямо първия меридиан. + +> 💁 Антимеридианът не трябва да се бърка с Международната линия за смяна на датата, която е приблизително на същото място, но не е права линия и варира, за да се съобрази с геополитическите граници. + +✅ Направете проучване: Опитайте се да намерите ширината и дължината на текущото си местоположение. + +### Градуси, минути и секунди срещу десетични градуси + +Традиционно измерванията на градусите на ширината и дължината са правени с помощта на шейсетична система, или база-60, система за номериране, използвана от древните вавилонци, които първи са измервали и записвали времето и разстоянието. Вероятно използвате шейсетична система всеки ден, без дори да осъзнавате - разделяйки часовете на 60 минути и минутите на 60 секунди. + +Ширината и дължината се измерват в градуси, минути и секунди, като една минута е 1/60 от градус, а 1 секунда е 1/60 от минута. + +Например, на екватора: + +* 1° ширина е **111.3 километра** +* 1 минута ширина е 111.3/60 = **1.855 километра** +* 1 секунда ширина е 1.855/60 = **0.031 километра** + +Символът за минута е единична кавичка, а за секунда - двойна кавичка. Например, 2 градуса, 17 минути и 43 секунди се записват като 2°17'43". Частите от секундите се дават като десетични числа, например половин секунда е 0°0'0.5". + +Компютрите не работят в база-60, така че тези координати се дават като десетични градуси, когато се използват GPS данни в повечето компютърни системи. Например, 2°17'43" е 2.295277. Символът за градус обикновено се пропуска. + +Координатите за дадена точка винаги се дават като `ширина, дължина`, така че примерът по-рано за кампуса на Microsoft на 47.6423109,-122.117198 има: + +* Ширина от 47.6423109 (47.6423109 градуса северно от екватора) +* Дължина от -122.1390293 (122.1390293 градуса западно от първия меридиан). + +![Кампусът на Microsoft на 47.6423109,-122.117198](../../../../../translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.bg.png) + +## Глобални позициониращи системи (GPS) + +GPS системите използват множество сателити, които обикалят Земята, за да определят вашето местоположение. Вероятно сте използвали GPS системи, без дори да го осъзнавате - за да намерите местоположението си в приложение за карти на телефона си, като Apple Maps или Google Maps, за да видите къде е вашето превозно средство в приложение за споделено пътуване като Uber или Lyft, или когато използвате сателитна навигация (sat-nav) в колата си. + +> 🎓 Сателитите в "сателитната навигация" са GPS сателити! + +GPS системите работят, като имат редица сателити, които изпращат сигнал с текущото местоположение на всеки сателит и точен времеви отпечатък. Тези сигнали се изпращат чрез радиовълни и се засичат от антена в GPS сензора. GPS сензорът засича тези сигнали и, използвайки текущото време, измерва колко време е отнело сигналът да достигне сензора от сателита. Тъй като скоростта на радиовълните е постоянна, GPS сензорът може да използва изпратения времеви отпечатък, за да изчисли колко далеч е сензорът от сателита. Чрез комбиниране на данните от поне 3 сателита с изпратените позиции, GPS сензорът може да определи точното си местоположение на Земята. + +> 💁 GPS сензорите се нуждаят от антени, за да засичат радиовълни. Антените, вградени в камиони и автомобили с вграден GPS, са позиционирани така, че да получават добър сигнал, обикновено на предното стъкло или покрива. Ако използвате отделна GPS система, като смартфон или IoT устройство, трябва да се уверите, че антената, вградена в GPS системата или телефона, има ясен изглед към небето, например като е монтирана на предното стъкло. + +![Чрез знанието на разстоянието от сензора до множество сателити, местоположението може да бъде изчислено](../../../../../translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.bg.png) + +GPS сателитите обикалят Земята, а не са на фиксирана точка над сензора, така че данните за местоположението включват височина над морското равнище, както и ширина и дължина. + +GPS преди имаше ограничения за точността, наложени от американската армия, ограничаващи точността до около 5 метра. Това ограничение беше премахнато през 2000 г., позволявайки точност до 30 сантиметра. Постигането на тази точност не винаги е възможно поради смущения в сигналите. + +✅ Ако имате смартфон, стартирайте приложението за карти и вижте колко точно е вашето местоположение. Може да отнеме кратко време, докато телефонът ви засече множество сателити, за да получи по-точно местоположение. +💁 Сателитите съдържат атомни часовници, които са изключително точни, но те се отклоняват с 38 микросекунди (0.0000038 секунди) на ден в сравнение с атомните часовници на Земята, поради забавянето на времето при увеличаване на скоростта, както е предсказано от теориите на Айнщайн за специалната и общата теория на относителността - сателитите се движат по-бързо от въртенето на Земята. Това отклонение е използвано за доказване на предсказанията на специалната и общата теория на относителността и трябва да бъде коригирано при проектирането на GPS системи. Буквално времето тече по-бавно на GPS сателит. +GPS системите са разработени и внедрени от редица държави и политически съюзи, включително САЩ, Русия, Япония, Индия, ЕС и Китай. Съвременните GPS сензори могат да се свързват с повечето от тези системи, за да осигурят по-бързи и точни координати. + +> 🎓 Групите от сателити във всяка система се наричат съзвездия. + +## Четене на данни от GPS сензор + +Повечето GPS сензори изпращат данни през UART. + +> ⚠️ UART беше разгледан в [проект 2, урок 2](../../../2-farm/lessons/2-detect-soil-moisture/README.md#universal-asynchronous-receiver-transmitter-uart). Върнете се към този урок, ако е необходимо. + +Можете да използвате GPS сензор на вашето IoT устройство, за да получавате GPS данни. + +### Задача - свържете GPS сензор и четете GPS данни + +Следвайте съответното ръководство, за да четете GPS данни с вашето IoT устройство: + +* [Arduino - Wio Terminal](wio-terminal-gps-sensor.md) +* [Едноплатков компютър - Raspberry Pi](pi-gps-sensor.md) +* [Едноплатков компютър - Виртуално устройство](virtual-device-gps-sensor.md) + +## NMEA GPS данни + +Когато стартирате кода си, може да видите нещо, което изглежда като безсмислен текст в изхода. Това всъщност са стандартни GPS данни, които имат определено значение. + +GPS сензорите изпращат данни чрез NMEA съобщения, използвайки стандарта NMEA 0183. NMEA е акроним за [National Marine Electronics Association](https://www.nmea.org), американска търговска организация, която определя стандарти за комуникация между морска електроника. + +> 💁 Този стандарт е патентован и струва поне 2000 щатски долара, но достатъчно информация за него е публично достъпна, така че по-голямата част от стандарта е била обратен инженеринг и може да се използва в отворен код и други некомерсиални приложения. + +Тези съобщения са текстови. Всяко съобщение се състои от *изречение*, което започва със символа `$`, последвано от 2 символа, указващи източника на съобщението (например GP за GPS системата на САЩ, GN за GLONASS, руската GPS система), и 3 символа, указващи типа на съобщението. Останалата част от съобщението са полета, разделени със запетаи, завършващи с нов ред. + +Някои от типовете съобщения, които могат да бъдат получени, са: + +| Тип | Описание | +| ---- | ----------- | +| GGA | Данни за GPS фиксация, включително ширина, дължина и височина на GPS сензора, както и броя на сателитите, използвани за изчисляване на тази фиксация. | +| ZDA | Текуща дата и час, включително местната часова зона | +| GSV | Подробности за сателитите в обсега - определени като сателитите, от които GPS сензорът може да засече сигнали | + +> 💁 GPS данните включват времеви отметки, така че вашето IoT устройство може да получава времето от GPS сензор, вместо да разчита на NTP сървър или вътрешен часовник в реално време. + +Съобщението GGA включва текущото местоположение във формат `(dd)dmm.mmmm`, заедно с един символ, указващ посоката. `d` във формата означава градуси, `m` означава минути, а секундите са представени като десетични части от минути. Например, 2°17'43" ще бъде 217.716666667 - 2 градуса, 17.716666667 минути. + +Символът за посока може да бъде `N` или `S` за ширина, за да указва север или юг, и `E` или `W` за дължина, за да указва изток или запад. Например, ширина от 2°17'43" ще има символ за посока `N`, а -2°17'43" ще има символ за посока `S`. + +Пример - NMEA изречението `$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67` + +* Частта за ширината е `4738.538654,N`, което се преобразува в 47.6423109 в десетични градуси. `4738.538654` е 47.6423109, а посоката е `N` (север), така че това е положителна ширина. + +* Частта за дължината е `12208.341758,W`, което се преобразува в -122.1390293 в десетични градуси. `12208.341758` е 122.1390293°, а посоката е `W` (запад), така че това е отрицателна дължина. + +## Декодиране на данни от GPS сензор + +Вместо да използвате суровите NMEA данни, по-добре е да ги декодирате в по-полезен формат. Съществуват множество библиотеки с отворен код, които могат да ви помогнат да извлечете полезна информация от суровите NMEA съобщения. + +### Задача - декодирайте данни от GPS сензор + +Следвайте съответното ръководство, за да декодирате данни от GPS сензор с вашето IoT устройство: + +* [Arduino - Wio Terminal](wio-terminal-gps-decode.md) +* [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer-gps-decode.md) + +--- + +## 🚀 Предизвикателство + +Напишете свой собствен NMEA декодер! Вместо да разчитате на библиотеки на трети страни за декодиране на NMEA изречения, можете ли да напишете свой собствен декодер, който да извлича ширина и дължина от NMEA изречения? + +## Тест след лекцията + +[Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/22) + +## Преглед и самостоятелно обучение + +* Прочетете повече за геопространствените координати на [страницата за географска координатна система в Уикипедия](https://wikipedia.org/wiki/Geographic_coordinate_system). +* Научете за началните меридиани на други небесни тела освен Земята на [страницата за началния меридиан в Уикипедия](https://wikipedia.org/wiki/Prime_meridian#Prime_meridian_on_other_planetary_bodies). +* Проучете различните GPS системи от различни правителства и политически съюзи като ЕС, Япония, Русия, Индия и САЩ. + +## Задание + +[Изследвайте други GPS данни](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/assignment.md b/translations/bg/3-transport/lessons/1-location-tracking/assignment.md new file mode 100644 index 00000000..0aacfb95 --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/assignment.md @@ -0,0 +1,29 @@ + +# Разгледайте други GPS данни + +## Инструкции + +NMEA изреченията, които идват от вашия GPS сензор, съдържат и други данни освен местоположение. Разгледайте допълнителните данни и ги използвайте във вашето IoT устройство. + +Например - можете ли да получите текущата дата и час? Ако използвате микроконтролер, можете ли да настроите часовника с GPS данни по същия начин, както го направихте с NTP сигнали в предишния проект? Можете ли да получите надморската височина (вашата височина над морското равнище) или текущата си скорост? + +Ако използвате виртуално IoT устройство, можете да получите част от тези данни, като изпратите NMEA изречения, генерирани с инструменти като [nmeagen.org](https://www.nmeagen.org). + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| Получаване на повече GPS данни | Успява да получи и използва повече GPS данни, било като телеметрия или за настройка на IoT устройството | Успява да получи повече GPS данни, но не може да ги използва | Не успява да получи повече GPS данни | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/pi-gps-sensor.md b/translations/bg/3-transport/lessons/1-location-tracking/pi-gps-sensor.md new file mode 100644 index 00000000..07b87bc2 --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/pi-gps-sensor.md @@ -0,0 +1,193 @@ + +# Четене на GPS данни - Raspberry Pi + +В тази част от урока ще добавите GPS сензор към вашия Raspberry Pi и ще четете стойности от него. + +## Хардуер + +Raspberry Pi се нуждае от GPS сензор. + +Сензорът, който ще използвате, е [Grove GPS Air530 сензор](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html). Този сензор може да се свърже с множество GPS системи за бързо и точно позициониране. Сензорът се състои от две части - основната електроника на сензора и външна антена, свързана с тънък кабел, която улавя радиовълните от сателитите. + +Това е UART сензор, който изпраща GPS данни през UART. + +## Свързване на GPS сензора + +Grove GPS сензорът може да бъде свързан към Raspberry Pi. + +### Задача - свържете GPS сензора + +Свържете GPS сензора. + +![Grove GPS сензор](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на GPS сензора. Кабелът може да бъде поставен само в една посока. + +1. С изключен Raspberry Pi, свържете другия край на Grove кабела към гнездото UART, маркирано **UART** на Grove Base шапката, прикрепена към Pi. Това гнездо се намира на средния ред, от страната, най-близка до слота за SD карта, противоположно на USB портовете и Ethernet гнездото. + + ![Grove GPS сензор, свързан към гнездото UART](../../../../../translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.bg.png) + +1. Поставете GPS сензора така, че прикрепената антена да има видимост към небето - идеално до отворен прозорец или навън. По-лесно е да получите ясен сигнал, когато няма препятствия пред антената. + +## Програмиране на GPS сензора + +Сега Raspberry Pi може да бъде програмиран да използва свързания GPS сензор. + +### Задача - програмирайте GPS сензора + +Програмирайте устройството. + +1. Включете Pi и изчакайте да се зареди. + +1. GPS сензорът има два светодиода - син светодиод, който мига, когато се предават данни, и зелен светодиод, който мига всяка секунда, когато получава данни от сателити. Уверете се, че синият светодиод мига, когато включите Pi. След няколко минути зеленият светодиод ще започне да мига - ако не, може да се наложи да преместите антената. + +1. Стартирайте VS Code, директно на Pi или чрез Remote SSH разширението. + + > ⚠️ Можете да се обърнете към [инструкциите за настройка и стартиране на VS Code в урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. При по-новите версии на Raspberry Pi, които поддържат Bluetooth, има конфликт между серийния порт, използван за Bluetooth, и този, използван от Grove UART порта. За да го поправите, направете следното: + + 1. От терминала на VS Code редактирайте файла `/boot/config.txt`, използвайки `nano`, вградения текстов редактор в терминала, със следната команда: + + ```sh + sudo nano /boot/config.txt + ``` + + > Този файл не може да бъде редактиран от VS Code, тъй като трябва да го редактирате с `sudo` права, повишени права. VS Code не работи с тези права. + + 1. Използвайте клавишите за навигация, за да стигнете до края на файла, след което копирайте кода по-долу и го поставете в края на файла: + + ```ini + dtoverlay=pi3-miniuart-bt + dtoverlay=pi3-disable-bt + enable_uart=1 + ``` + + Можете да поставите текста, използвайки стандартните клавишни комбинации за вашето устройство (`Ctrl+v` на Windows, Linux или Raspberry Pi OS, `Cmd+v` на macOS). + + 1. Запазете файла и излезте от nano, като натиснете `Ctrl+x`. Натиснете `y`, когато бъдете попитани дали искате да запазите промените, след това натиснете `enter`, за да потвърдите, че искате да презапишете `/boot/config.txt`. + + > Ако направите грешка, можете да излезете без да запазвате и да повторите тези стъпки. + + 1. Редактирайте файла `/boot/cmdline.txt` в nano със следната команда: + + ```sh + sudo nano /boot/cmdline.txt + ``` + + 1. Този файл съдържа редица ключ/стойност двойки, разделени с интервали. Премахнете всички двойки ключ/стойност за ключа `console`. Те вероятно ще изглеждат така: + + ```output + console=serial0,115200 console=tty1 + ``` + + Можете да навигирате до тези записи, използвайки клавишите за навигация, след което да ги изтриете, използвайки стандартните клавиши `del` или `backspace`. + + Например, ако оригиналният файл изглежда така: + + ```output + console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait + ``` + + Новата версия ще бъде: + + ```output + root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait + ``` + + 1. Следвайте горните стъпки, за да запазите файла и да излезете от nano. + + 1. Рестартирайте вашия Pi, след това се свържете отново в VS Code, след като Pi се рестартира. + +1. От терминала създайте нова папка в домашната директория на потребителя `pi`, наречена `gps-sensor`. Създайте файл в тази папка, наречен `app.py`. + +1. Отворете тази папка в VS Code. + +1. GPS модулът изпраща UART данни през сериен порт. Инсталирайте Pip пакета `pyserial`, за да комуникирате със серийния порт от вашия Python код: + + ```sh + pip3 install pyserial + ``` + +1. Добавете следния код към вашия файл `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) + ``` + + Този код импортира модула `serial` от Pip пакета `pyserial`. След това се свързва към серийния порт `/dev/ttyAMA0` - това е адресът на серийния порт, който Grove Pi Base Hat използва за своя UART порт. След това изчиства всички съществуващи данни от тази серийна връзка. + + След това се дефинира функция, наречена `print_gps_data`, която отпечатва линията, предадена на нея, в конзолата. + + След това кодът се изпълнява в безкраен цикъл, четейки колкото се може повече линии текст от серийния порт във всяка итерация. Той извиква функцията `print_gps_data` за всяка линия. + + След като всички данни са прочетени, цикълът изчаква 1 секунда, след което опитва отново. + +1. Стартирайте този код. Ще видите суровия изход от GPS сензора, нещо подобно на следното: + + ```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 + ``` + + > Ако получите някоя от следните грешки при спиране и рестартиране на кода, добавете блок `try - except` към вашия while цикъл. + + ```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) + ``` + +> 💁 Можете да намерите този код в папката [code-gps/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps/pi). + +😀 Вашата програма за GPS сензора беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md b/translations/bg/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md new file mode 100644 index 00000000..e4762a38 --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md @@ -0,0 +1,75 @@ + +# Декодиране на GPS данни - Виртуален IoT хардуер и Raspberry Pi + +В тази част от урока ще декодирате NMEA съобщенията, прочетени от GPS сензора чрез Raspberry Pi или Виртуално IoT устройство, и ще извлечете ширина и дължина. + +## Декодиране на GPS данни + +След като суровите NMEA данни бъдат прочетени от серийния порт, те могат да бъдат декодирани с помощта на библиотека с отворен код за NMEA. + +### Задача - декодиране на GPS данни + +Програмирайте устройството да декодира GPS данните. + +1. Отворете проекта на приложението `gps-sensor`, ако вече не е отворен. + +1. Инсталирайте Pip пакета `pynmea2`. Този пакет съдържа код за декодиране на NMEA съобщения. + + ```sh + pip3 install pynmea2 + ``` + +1. Добавете следния код към импортирането в файла `app.py`, за да импортирате модула `pynmea2`: + + ```python + import pynmea2 + ``` + +1. Заменете съдържанието на функцията `print_gps_data` със следното: + + ```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') + ``` + + Този код използва библиотеката `pynmea2`, за да анализира реда, прочетен от серийния порт UART. + + Ако типът на съобщението е `GGA`, това е съобщение за фиксиране на позиция и се обработва. Стойностите за ширина и дължина се извличат от съобщението и се конвертират в десетични градуси от NMEA формата `(d)ddmm.mmmm`. Функцията `dm_to_sd` извършва тази конверсия. + + След това се проверява посоката на ширината, и ако тя е южна, стойността се преобразува в отрицателно число. Същото се прави и с дължината – ако тя е западна, се преобразува в отрицателно число. + + Накрая координатите се отпечатват на конзолата, заедно с броя на сателитите, използвани за определяне на местоположението. + +1. Стартирайте кода. Ако използвате виртуално IoT устройство, уверете се, че приложението CounterFit работи и GPS данните се изпращат. + + ```output + pi@raspberrypi:~/gps-sensor $ python3 app.py + 47.6423109,-122.1390293 - from 3 satellites + ``` + +> 💁 Можете да намерите този код в папката [code-gps-decode/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/virtual-device) или в папката [code-gps-decode/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/pi). + +😀 Вашата програма за GPS сензор с декодиране на данни беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md b/translations/bg/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md new file mode 100644 index 00000000..cc5f9d8c --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md @@ -0,0 +1,144 @@ + +# Четене на GPS данни - Виртуален IoT хардуер + +В тази част на урока ще добавите GPS сензор към вашето виртуално IoT устройство и ще четете стойности от него. + +## Виртуален хардуер + +Виртуалното IoT устройство ще използва симулиран GPS сензор, който е достъпен през UART чрез сериен порт. + +Физическият GPS сензор има антена за улавяне на радиовълни от GPS сателити и преобразуване на GPS сигналите в GPS данни. Виртуалната версия симулира това, като ви позволява да зададете ширина и дължина, да изпратите сурови NMEA изречения или да качите GPX файл с множество локации, които могат да бъдат връщани последователно. + +> 🎓 NMEA изреченията ще бъдат разгледани по-късно в този урок + +### Добавяне на сензора към CounterFit + +За да използвате виртуален GPS сензор, трябва да го добавите към приложението CounterFit. + +#### Задача - добавяне на сензора към CounterFit + +Добавете GPS сензора към приложението CounterFit. + +1. Създайте ново Python приложение на вашия компютър в папка, наречена `gps-sensor`, с един файл, наречен `app.py`, и Python виртуална среда, и добавете pip пакетите за CounterFit. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване и настройка на CounterFit Python проект в урок 1, ако е необходимо](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. Инсталирайте допълнителен pip пакет, за да добавите CounterFit shim, който може да комуникира със сензори, базирани на UART, през сериен порт. Уверете се, че инсталирате това от терминал с активирана виртуална среда. + + ```sh + pip install counterfit-shims-serial + ``` + +1. Уверете се, че уеб приложението CounterFit работи. + +1. Създайте GPS сензор: + + 1. В полето *Create sensor* в панела *Sensors*, отворете падащото меню *Sensor type* и изберете *UART GPS*. + + 1. Оставете *Port* зададен на */dev/ttyAMA0*. + + 1. Изберете бутона **Add**, за да създадете GPS сензора на порт `/dev/ttyAMA0`. + + ![Настройки на GPS сензора](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.bg.png) + + GPS сензорът ще бъде създаден и ще се появи в списъка със сензори. + + ![Създаден GPS сензор](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.bg.png) + +## Програмиране на GPS сензора + +Виртуалното IoT устройство вече може да бъде програмирано да използва виртуалния GPS сензор. + +### Задача - програмиране на GPS сензора + +Програмирайте приложението за GPS сензора. + +1. Уверете се, че приложението `gps-sensor` е отворено в VS Code. + +1. Отворете файла `app.py`. + +1. Добавете следния код в началото на `app.py`, за да свържете приложението с CounterFit: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. Добавете следния код под този, за да импортирате някои необходими библиотеки, включително библиотеката за CounterFit сериен порт: + + ```python + import time + import counterfit_shims_serial + + serial = counterfit_shims_serial.Serial('/dev/ttyAMA0') + ``` + + Този код импортира модула `serial` от pip пакета `counterfit_shims_serial`. След това се свързва към серийния порт `/dev/ttyAMA0` - това е адресът на серийния порт, който виртуалният GPS сензор използва за своя UART порт. + +1. Добавете следния код под този, за да четете от серийния порт и да отпечатвате стойностите в конзолата: + + ```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) + ``` + + Дефинира се функция, наречена `print_gps_data`, която отпечатва подадения ред в конзолата. + + След това кодът се изпълнява в безкраен цикъл, като чете колкото се може повече редове текст от серийния порт във всяка итерация. За всеки ред се извиква функцията `print_gps_data`. + + След като всички данни са прочетени, цикълът изчаква 1 секунда и опитва отново. + +1. Стартирайте този код, като се уверите, че използвате различен терминал от този, в който работи приложението CounterFit, за да остане CounterFit приложението активно. + +1. От приложението CounterFit променете стойността на GPS сензора. Можете да направите това по един от следните начини: + + * Задайте **Source** на `Lat/Lon` и задайте конкретна ширина, дължина и брой сателити, използвани за GPS фиксация. Тази стойност ще бъде изпратена само веднъж, така че маркирайте полето **Repeat**, за да се повтаря данните всяка секунда. + + ![GPS сензор с избрани Lat/Lon](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.bg.png) + + * Задайте **Source** на `NMEA` и добавете няколко NMEA изречения в текстовото поле. Всички тези стойности ще бъдат изпратени, като има забавяне от 1 секунда преди всяко ново GGA (позиционна фиксация) изречение да бъде прочетено. + + ![GPS сензор с зададени NMEA изречения](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.bg.png) + + Можете да използвате инструмент като [nmeagen.org](https://www.nmeagen.org), за да генерирате тези изречения, като рисувате върху карта. Тези стойности ще бъдат изпратени само веднъж, така че маркирайте полето **Repeat**, за да се повтарят данните една секунда след като всички са изпратени. + + * Задайте **Source** на GPX файл и качете GPX файл с местоположения на тракове. Можете да изтеглите GPX файлове от редица популярни сайтове за карти и туризъм, като [AllTrails](https://www.alltrails.com/). Тези файлове съдържат множество GPS местоположения като трак, а GPS сензорът ще връща всяко ново местоположение на интервали от 1 секунда. + + ![GPS сензор с зададен GPX файл](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.bg.png) + + Тези стойности ще бъдат изпратени само веднъж, така че маркирайте полето **Repeat**, за да се повтарят данните една секунда след като всички са изпратени. + + След като конфигурирате настройките на GPS, изберете бутона **Set**, за да запишете тези стойности в сензора. + +1. Ще видите суровия изход от GPS сензора, нещо подобно на следното: + + ```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 + ``` + +> 💁 Можете да намерите този код в папката [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device). + +😀 Вашата програма за GPS сензора беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md b/translations/bg/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md new file mode 100644 index 00000000..1bbb6f05 --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md @@ -0,0 +1,83 @@ + +# Декодиране на GPS данни - Wio Terminal + +В тази част на урока ще декодирате NMEA съобщенията, прочетени от GPS сензора на Wio Terminal, и ще извлечете географската ширина и дължина. + +## Декодиране на GPS данни + +След като суровите NMEA данни бъдат прочетени от серийния порт, те могат да бъдат декодирани с помощта на библиотека с отворен код за NMEA. + +### Задача - декодиране на GPS данни + +Програмирайте устройството да декодира GPS данните. + +1. Отворете проекта на приложението `gps-sensor`, ако вече не е отворен. + +1. Добавете зависимост към библиотеката [TinyGPSPlus](https://github.com/mikalhart/TinyGPSPlus) в `platformio.ini` файла на проекта. Тази библиотека съдържа код за декодиране на NMEA данни. + + ```ini + lib_deps = + mikalhart/TinyGPSPlus @ 1.0.2 + ``` + +1. В `main.cpp` добавете директива за включване на библиотеката TinyGPSPlus: + + ```cpp + #include + ``` + +1. Под декларацията на `Serial3` декларирайте обект TinyGPSPlus за обработка на NMEA съобщенията: + + ```cpp + TinyGPSPlus gps; + ``` + +1. Променете съдържанието на функцията `printGPSData` със следното: + + ```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"); + } + } + ``` + + Този код чете следващия символ от серийния порт на UART в декодера `gps` за NMEA. След всеки символ проверява дали декодерът е прочел валидно съобщение, след което проверява дали е прочел валидно местоположение. Ако местоположението е валидно, то се изпраща към серийния монитор заедно с броя на сателитите, които са допринесли за това определяне. + +1. Компилирайте и качете кода на Wio Terminal. + +1. След като качите, можете да наблюдавате данните за GPS местоположението чрез серийния монитор. + + ```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 + ``` + +> 💁 Можете да намерите този код в папката [code-gps-decode/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/wio-terminal). + +😀 Вашата програма за GPS сензора с декодиране на данни беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md b/translations/bg/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md new file mode 100644 index 00000000..ae6ff012 --- /dev/null +++ b/translations/bg/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md @@ -0,0 +1,154 @@ + +# Четене на GPS данни - Wio Terminal + +В тази част от урока ще добавите GPS сензор към вашия Wio Terminal и ще четете стойности от него. + +## Хардуер + +Wio Terminal се нуждае от GPS сензор. + +Сензорът, който ще използвате, е [Grove GPS Air530 сензор](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html). Този сензор може да се свърже с множество GPS системи за бързо и точно позициониране. Сензорът се състои от две части - основната електроника на сензора и външна антена, свързана с тънък кабел, която улавя радиовълните от сателитите. + +Това е UART сензор, който изпраща GPS данни през UART. + +### Свързване на GPS сензора + +Grove GPS сензорът може да бъде свързан към Wio Terminal. + +#### Задача - свържете GPS сензора + +Свържете GPS сензора. + +![Grove GPS сензор](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.bg.png) + +1. Поставете единия край на Grove кабела в гнездото на GPS сензора. Той ще влезе само в една посока. + +1. С изключен Wio Terminal от вашия компютър или друг източник на захранване, свържете другия край на Grove кабела към лявото гнездо на Wio Terminal, когато гледате екрана. Това е гнездото, което е най-близо до бутона за захранване. + + ![Grove GPS сензор, свързан към лявото гнездо](../../../../../translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.bg.png) + +1. Позиционирайте GPS сензора така, че прикрепената антена да има видимост към небето - най-добре до отворен прозорец или навън. По-лесно е да получите ясен сигнал, когато няма препятствия пред антената. + +1. Сега можете да свържете Wio Terminal към вашия компютър. + +1. GPS сензорът има 2 светодиода - син светодиод, който мига, когато се предават данни, и зелен светодиод, който мига всяка секунда, когато получава данни от сателити. Уверете се, че синият светодиод мига, когато включите Wio Terminal. След няколко минути зеленият светодиод ще започне да мига - ако не, може да се наложи да пренаредите антената. + +## Програмиране на GPS сензора + +Сега Wio Terminal може да бъде програмиран за използване на свързания GPS сензор. + +### Задача - програмирайте GPS сензора + +Програмирайте устройството. + +1. Създайте нов проект за Wio Terminal, използвайки PlatformIO. Наречете този проект `gps-sensor`. Добавете код във функцията `setup`, за да конфигурирате серийния порт. + +1. Добавете следната директива за включване в началото на файла `main.cpp`. Това включва заглавен файл с функции за конфигуриране на лявото Grove гнездо за UART. + + ```cpp + #include + ``` + +1. Под това добавете следния ред код, за да декларирате серийна връзка към UART порта: + + ```cpp + static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0); + ``` + +1. Трябва да добавите код за пренасочване на някои вътрешни обработчици на сигнали към този сериен порт. Добавете следния код под декларацията на `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. Във функцията `setup`, под мястото, където се конфигурира серийният порт `Serial`, конфигурирайте UART серийния порт със следния код: + + ```cpp + Serial3.begin(9600); + + while (!Serial3) + ; // Wait for Serial3 to be ready + + delay(1000); + ``` + +1. Под този код във функцията `setup` добавете следния код, за да свържете Grove пина към серийния порт: + + ```cpp + pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT); + ``` + +1. Добавете следната функция преди функцията `loop`, за да изпращате GPS данните към серийния монитор: + + ```cpp + void printGPSData() + { + Serial.println(Serial3.readStringUntil('\n')); + } + ``` + +1. Във функцията `loop` добавете следния код, за да четете от UART серийния порт и да отпечатвате изхода на серийния монитор: + + ```cpp + while (Serial3.available() > 0) + { + printGPSData(); + } + + delay(1000); + ``` + + Този код чете от UART серийния порт. Функцията `readStringUntil` чете до символ за край, в този случай нов ред. Това ще прочете цял NMEA ред (NMEA редовете завършват с нов ред). Докато има данни за четене от UART серийния порт, те се четат и изпращат към серийния монитор чрез функцията `printGPSData`. Когато няма повече данни за четене, `loop` изчаква 1 секунда (1,000ms). + +1. Компилирайте и качете кода на Wio Terminal. + +1. След като качите, можете да наблюдавате GPS данните чрез серийния монитор. + + ```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 + ``` + +> 💁 Можете да намерите този код в папката [code-gps/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps/wio-terminal). + +😀 Вашата програма за GPS сензора беше успешна! + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/3-transport/lessons/2-store-location-data/README.md b/translations/bg/3-transport/lessons/2-store-location-data/README.md new file mode 100644 index 00000000..009fb094 --- /dev/null +++ b/translations/bg/3-transport/lessons/2-store-location-data/README.md @@ -0,0 +1,477 @@ + +# Съхраняване на данни за местоположение + +![Скица на урока](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.bg.jpg) + +> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. + +## Тест преди лекцията + +[Тест преди лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) + +## Въведение + +В последния урок научихте как да използвате GPS сензор за улавяне на данни за местоположение. За да използвате тези данни за визуализиране на местоположението на камион, натоварен с храна, и неговото пътуване, те трябва да бъдат изпратени до IoT услуга в облака и след това съхранени някъде. + +В този урок ще научите за различните начини за съхранение на IoT данни и как да съхранявате данни от вашата IoT услуга, използвайки безсървърен код. + +В този урок ще разгледаме: + +* [Структурирани и неструктурирани данни](../../../../../3-transport/lessons/2-store-location-data) +* [Изпращане на GPS данни към IoT Hub](../../../../../3-transport/lessons/2-store-location-data) +* [Горещи, топли и студени пътища](../../../../../3-transport/lessons/2-store-location-data) +* [Обработка на GPS събития с безсървърен код](../../../../../3-transport/lessons/2-store-location-data) +* [Azure Storage Accounts](../../../../../3-transport/lessons/2-store-location-data) +* [Свързване на безсървърен код със съхранение](../../../../../3-transport/lessons/2-store-location-data) + +## Структурирани и неструктурирани данни + +Компютърните системи работят с данни, които могат да бъдат в различни форми и размери. Те могат да варират от единични числа до големи количества текст, видеа, изображения и IoT данни. Данните обикновено се разделят на две категории - *структурирани* и *неструктурирани* данни. + +* **Структурирани данни** са данни с добре дефинирана, твърда структура, която не се променя, и обикновено се свързват с таблици с данни и техните взаимоотношения. Пример за това са личните данни на човек, включително име, дата на раждане и адрес. + +* **Неструктурирани данни** са данни без добре дефинирана, твърда структура, включително данни, които често променят структурата си. Пример за това са документи като текстови файлове или електронни таблици. + +✅ Направете проучване: Можете ли да измислите други примери за структурирани и неструктурирани данни? + +> 💁 Съществуват и полуструктурирани данни, които са структурирани, но не се вписват в фиксирани таблици с данни. + +IoT данните обикновено се считат за неструктурирани данни. + +Представете си, че добавяте IoT устройства към автопарк от превозни средства за голяма търговска ферма. Може да искате да използвате различни устройства за различни видове превозни средства. Например: + +* За селскостопански машини като трактори искате GPS данни, за да се уверите, че работят на правилните полета. +* За камиони за доставка на храна до складове искате GPS данни, както и данни за скорост и ускорение, за да се уверите, че шофьорът шофира безопасно, както и данни за идентификация на водача и старт/стоп, за да се гарантира спазването на местните закони за работното време. +* За хладилни камиони искате и данни за температурата, за да се уверите, че храната не се нагрява или охлажда прекалено и не се разваля по време на транспортиране. + +Тези данни могат да се променят постоянно. Например, ако IoT устройството е в кабината на камион, данните, които изпраща, може да се променят в зависимост от ремаркето, например да изпраща данни за температурата само когато се използва хладилно ремарке. + +✅ Какви други IoT данни могат да бъдат събрани? Помислете за видовете товари, които камионите могат да превозват, както и за данни за поддръжка. + +Тези данни варират от превозно средство до превозно средство, но всички те се изпращат към една и съща IoT услуга за обработка. IoT услугата трябва да може да обработва тези неструктурирани данни, като ги съхранява по начин, който позволява търсене или анализ, но работи с различни структури на данните. + +### SQL срещу NoSQL съхранение + +Базите данни са услуги, които ви позволяват да съхранявате и извличате данни. Те се делят на два типа - SQL и NoSQL. + +#### SQL бази данни + +Първите бази данни са Релационни системи за управление на бази данни (RDBMS), известни също като SQL бази данни, поради използвания език за структурирани заявки (SQL). Тези бази данни имат схема - добре дефиниран набор от таблици с данни, подобни на електронна таблица. Всяка таблица има множество именувани колони. Когато добавяте данни, добавяте ред в таблицата, като поставяте стойности във всяка от колоните. Това поддържа данните в много твърда структура - въпреки че можете да оставите колони празни, ако искате да добавите нова колона, трябва да го направите в базата данни, като попълните стойности за съществуващите редове. Тези бази данни са релационни - една таблица може да има връзка с друга. + +![Релационна база данни с ID на таблицата User, свързващ се с колоната user ID на таблицата purchases, и ID на таблицата products, свързващ се с колоната product ID на таблицата purchases](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.bg.png) + +Например, ако съхранявате лични данни на потребители в таблица, ще имате някакъв вътрешен уникален ID за всеки потребител, който се използва в ред в таблица, съдържаща името и адреса на потребителя. Ако искате да съхранявате други данни за този потребител, като например неговите покупки, в друга таблица, ще имате една колона в новата таблица за ID на потребителя. Когато търсите потребител, можете да използвате неговия ID, за да получите личните му данни от една таблица и покупките му от друга. + +SQL базите данни са идеални за съхранение на структурирани данни и когато искате да гарантирате, че данните съответстват на вашата схема. + +✅ Ако не сте използвали SQL преди, отделете момент да прочетете за него на [страницата за SQL в Wikipedia](https://wikipedia.org/wiki/SQL). + +Някои известни SQL бази данни са Microsoft SQL Server, MySQL и PostgreSQL. + +✅ Направете проучване: Прочетете за някои от тези SQL бази данни и техните възможности. + +#### NoSQL бази данни + +NoSQL базите данни се наричат така, защото нямат същата твърда структура като SQL базите данни. Те са известни също като документни бази данни, тъй като могат да съхраняват неструктурирани данни като документи. + +> 💁 Въпреки името си, някои NoSQL бази данни позволяват използването на SQL за извличане на данни. + +![Документи в папки в NoSQL база данни](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.bg.png) + +NoSQL базите данни нямат предварително дефинирана схема, която ограничава начина на съхранение на данни. Вместо това можете да вмъквате всякакви неструктурирани данни, обикновено използвайки JSON документи. Тези документи могат да бъдат организирани в папки, подобно на файлове на вашия компютър. Всеки документ може да има различни полета от другите документи - например, ако съхранявате IoT данни от селскостопански превозни средства, някои може да имат полета за данни от акселерометър и скорост, а други - за температура в ремаркето. Ако добавите нов тип камион, например такъв с вградени везни за проследяване на теглото на превозваната продукция, вашето IoT устройство може да добави това ново поле и то може да бъде съхранено без промени в базата данни. + +Някои известни NoSQL бази данни включват Azure CosmosDB, MongoDB и CouchDB. + +✅ Направете проучване: Прочетете за някои от тези NoSQL бази данни и техните възможности. + +В този урок ще използвате NoSQL съхранение за съхранение на IoT данни. + +## Изпращане на GPS данни към IoT Hub + +В последния урок улавяхте GPS данни от GPS сензор, свързан с вашето IoT устройство. За да съхраните тези IoT данни в облака, трябва да ги изпратите към IoT услуга. Отново ще използвате Azure IoT Hub, същата IoT облачна услуга, която използвахте в предишния проект. + +![Изпращане на GPS телеметрия от IoT устройство към IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.bg.png) + +### Задача - изпращане на GPS данни към IoT Hub + +1. Създайте нов IoT Hub, използвайки безплатния план. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване на IoT Hub от проект 2, урок 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud), ако е необходимо. + + Не забравяйте да създадете нова Resource Group. Назовете новата Resource Group `gps-sensor`, а новия IoT Hub с уникално име, базирано на `gps-sensor`, например `gps-sensor-<вашето име>`. + + > 💁 Ако все още имате вашия IoT Hub от предишния проект, можете да го използвате повторно. Не забравяйте да използвате името на този IoT Hub и Resource Group, в която се намира, когато създавате други услуги. + +1. Добавете ново устройство към IoT Hub. Наречете това устройство `gps-sensor`. Вземете connection string за устройството. + +1. Актуализирайте кода на вашето устройство, за да изпраща GPS данни към новия IoT Hub, използвайки connection string от предишната стъпка. + + > ⚠️ Можете да се обърнете към [инструкциите за свързване на вашето устройство към IoT от проект 2, урок 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service), ако е необходимо. + +1. Когато изпращате GPS данни, направете го във формат JSON, както следва: + + ```json + { + "gps" : + { + "lat" : , + "lon" : + } + } + ``` + +1. Изпращайте GPS данни всяка минута, за да не изчерпите дневната си квота за съобщения. + +Ако използвате Wio Terminal, не забравяйте да добавите всички необходими библиотеки и да настроите времето, използвайки NTP сървър. Вашият код също трябва да се увери, че е прочел всички данни от серийния порт, преди да изпрати GPS местоположението, използвайки съществуващия код от последния урок. Използвайте следния код, за да създадете JSON документа: + +```cpp +DynamicJsonDocument doc(1024); +doc["gps"]["lat"] = gps.location.lat(); +doc["gps"]["lon"] = gps.location.lng(); +``` + +Ако използвате виртуално IoT устройство, не забравяйте да инсталирате всички необходими библиотеки, използвайки виртуална среда. + +За Raspberry Pi и виртуалното IoT устройство използвайте съществуващия код от последния урок, за да получите стойностите за ширина и дължина, след което ги изпратете в правилния JSON формат със следния код: + +```python +message_json = { "gps" : { "lat":lat, "lon":lon } } +print("Sending telemetry", message_json) +message = Message(json.dumps(message_json)) +``` + +> 💁 Можете да намерите този код в папките [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) или [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). + +Стартирайте кода на вашето устройство и се уверете, че съобщенията се изпращат към IoT Hub, използвайки CLI командата `az iot hub monitor-events`. + +## Горещи, топли и студени пътища + +Данните, които се изпращат от IoT устройство към облака, не винаги се обработват в реално време. Някои данни изискват обработка в реално време, други могат да бъдат обработени малко по-късно, а трети могат да бъдат обработени много по-късно. Потокът от данни към различни услуги, които ги обработват в различни моменти, се нарича горещи, топли и студени пътища. + +### Горещ път + +Горещият път се отнася до данни, които трябва да бъдат обработени в реално време или почти в реално време. Бихте използвали горещи данни за известия, като например, че превозно средство се приближава към депо или че температурата в хладилен камион е твърде висока. + +За да използвате горещи данни, вашият код трябва да реагира на събития веднага щом бъдат получени от вашите облачни услуги. + +### Топъл път + +Топлият път се отнася до данни, които могат да бъдат обработени малко след като бъдат получени, например за отчети или краткосрочна аналитика. Бихте използвали топли данни за дневни отчети за пробега на превозни средства, използвайки данни, събрани предишния ден. + +Топлите данни се съхраняват веднага след като бъдат получени от облачната услуга в някакъв вид съхранение, което може да бъде бързо достъпно. + +### Студен път + +Студеният път се отнася до исторически данни, които се съхраняват дългосрочно и могат да бъдат обработени, когато е необходимо. Например, можете да използвате студените данни за годишни отчети за пробега на превозни средства или за анализ на маршрути, за да намерите най-оптималния маршрут за намаляване на разходите за гориво. + +Студените данни се съхраняват в хранилища за данни - бази данни, предназначени за съхранение на големи количества данни, които никога няма да се променят и могат да бъдат извлечени бързо и лесно. Обикновено имате редовна задача във вашето облачно приложение, която се изпълнява в определено време всеки ден, седмица или месец, за да премести данни от топло съхранение в хранилището за данни. + +✅ Помислете за данните, които сте събрали досега в тези уроци. Те горещи, топли или студени данни ли са? + +## Обработка на GPS събития с безсървърен код + +След като данните започнат да се изпращат към вашия IoT Hub, можете да напишете безсървърен код, който да слуша събития, публикувани към Event-Hub съвместимия край. Това е топлият път - тези данни ще бъдат съхранени и използвани в следващия урок за отчитане на пътуването. + +![Изпращане на GPS телеметрия от IoT устройство към IoT Hub, след това към Azure Functions чрез event hub trigger](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.bg.png) + +### Задача - обработка на GPS събития с безсървърен код + +1. Създайте Azure Functions приложение, използвайки Azure Functions CLI. Използвайте Python runtime и го създайте в папка, наречена `gps-trigger`, като използвате същото име за името на проекта за Functions App. Уверете се, че създавате виртуална среда, която да използвате за това. +> ⚠️ Можете да се обърнете към [инструкциите за създаване на проект за Azure Functions от проект 2, урок 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application), ако е необходимо. +1. Добавете тригер за събития от IoT Hub, който използва съвместимата с Event Hub крайна точка на IoT Hub. + + > ⚠️ Можете да се обърнете към [инструкциите за създаване на тригер за събития от IoT Hub от проект 2, урок 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger), ако е необходимо. + +1. Задайте низ за връзка към съвместимата с Event Hub крайна точка в файла `local.settings.json` и използвайте ключа за този запис във файла `function.json`. + +1. Използвайте приложението Azurite като емулатор за локално съхранение. + +1. Стартирайте приложението си с функции, за да се уверите, че получава събития от вашето GPS устройство. Уверете се, че вашето IoT устройство също работи и изпраща GPS данни. + + ```output + Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} + ``` + +## Azure Storage Accounts + +![Логото на Azure Storage](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.bg.png) + +Azure Storage Accounts е универсална услуга за съхранение, която може да съхранява данни по различни начини. Можете да съхранявате данни като блобове, в опашки, в таблици или като файлове, и всичко това едновременно. + +### Блоб съхранение + +Думата *Blob* означава големи двоични обекти, но се е превърнала в термин за всякакви неструктурирани данни. Можете да съхранявате всякакви данни в блоб съхранение, от JSON документи, съдържащи IoT данни, до изображения и видео файлове. Блоб съхранението има концепцията за *контейнери*, наречени "кофи", в които можете да съхранявате данни, подобно на таблици в релационна база данни. Тези контейнери могат да имат една или повече папки за съхранение на блобове, а всяка папка може да съдържа други папки, подобно на начина, по който файловете се съхраняват на твърдия диск на вашия компютър. + +В този урок ще използвате блоб съхранение за съхранение на IoT данни. + +✅ Направете проучване: Прочетете за [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) + +### Таблично съхранение + +Табличното съхранение ви позволява да съхранявате полу-структурирани данни. Табличното съхранение всъщност е NoSQL база данни, така че не изисква предварително дефиниран набор от таблици, но е проектирано да съхранява данни в една или повече таблици с уникални ключове за дефиниране на всеки ред. + +✅ Направете проучване: Прочетете за [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) + +### Опашково съхранение + +Опашковото съхранение ви позволява да съхранявате съобщения с размер до 64KB в опашка. Можете да добавяте съобщения в края на опашката и да ги четете от началото. Опашките съхраняват съобщенията за неопределено време, докато има налично пространство за съхранение, което позволява съобщенията да се съхраняват дългосрочно и да се четат, когато е необходимо. Например, ако искате да изпълнявате месечна задача за обработка на GPS данни, можете да добавяте данни в опашката всеки ден за един месец, а след това в края на месеца да обработите всички съобщения от опашката. + +✅ Направете проучване: Прочетете за [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) + +### Файлово съхранение + +Файловото съхранение представлява съхранение на файлове в облака, като всяко приложение или устройство може да се свърже, използвайки стандартни протоколи. Можете да записвате файлове във файловото съхранение и след това да го монтирате като диск на вашия компютър или Mac. + +✅ Направете проучване: Прочетете за [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) + +## Свържете вашия безсървърен код със съхранението + +Вашето приложение с функции сега трябва да се свърже с блоб съхранението, за да съхранява съобщенията от IoT Hub. Има два начина да направите това: + +* Вътре в кода на функцията, свържете се с блоб съхранението, използвайки Python SDK за блоб съхранение, и запишете данните като блобове. +* Използвайте изходно свързване на функция, за да свържете стойността на връщане на функцията с блоб съхранението и автоматично да запишете блоба. + +В този урок ще използвате Python SDK, за да видите как да взаимодействате с блоб съхранението. + +![Изпращане на GPS телеметрия от IoT устройство към IoT Hub, след това към Azure Functions чрез тригер за събития от Event Hub, и след това записване в блоб съхранение](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.bg.png) + +Данните ще бъдат записани като JSON блоб със следния формат: + +```json +{ + "device_id": , + "timestamp" :