diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ar.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ar.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ar.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.mo.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.mo.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.mo.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ru.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ru.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ru.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ur.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ur.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.ur.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ar.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ar.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ar.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.mo.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.mo.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.mo.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ru.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ru.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ru.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ur.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ur.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.ur.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ar.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ar.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ar.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.mo.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.mo.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.mo.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ru.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ru.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ru.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ur.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ur.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.ur.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ar.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ar.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ar.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.mo.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.mo.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.mo.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ru.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ru.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ru.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ur.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ur.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.ur.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ar.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ar.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ar.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.mo.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.mo.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.mo.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ru.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ru.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ru.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ur.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ur.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.ur.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ar.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ar.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ar.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.mo.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.mo.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.mo.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ru.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ru.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ru.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ur.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ur.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.ur.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ar.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ar.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ar.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.mo.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.mo.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.mo.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ru.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ru.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ru.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ur.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ur.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.ur.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ar.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ar.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ar.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.mo.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.mo.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.mo.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ru.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ru.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ru.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ur.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ur.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.ur.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ar.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ar.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ar.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.mo.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.mo.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.mo.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ru.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ru.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ru.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ur.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ur.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.ur.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ar.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ar.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ar.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.mo.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.mo.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.mo.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ru.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ru.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ru.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ur.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ur.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.ur.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ar.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ar.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ar.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.mo.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.mo.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.mo.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ru.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ru.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ru.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ur.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ur.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.ur.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ar.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ar.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ar.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.mo.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.mo.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.mo.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ru.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ru.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ru.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ur.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ur.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.ur.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ar.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ar.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ar.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.mo.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.mo.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.mo.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ru.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ru.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ru.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ur.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ur.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.ur.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ar.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ar.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ar.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.mo.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.mo.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.mo.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ru.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ru.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ru.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ur.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ur.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.ur.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ar.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ar.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ar.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.mo.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.mo.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.mo.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ru.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ru.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ru.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ur.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ur.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.ur.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ar.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ar.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ar.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.mo.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.mo.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.mo.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ru.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ru.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ru.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ur.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ur.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.ur.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ar.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ar.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ar.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.mo.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.mo.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.mo.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ru.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ru.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ru.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ur.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ur.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.ur.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ar.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ar.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ar.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.mo.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.mo.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.mo.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ru.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ru.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ru.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ur.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ur.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.ur.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ar.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ar.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ar.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.mo.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.mo.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.mo.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ru.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ru.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ru.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ur.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ur.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.ur.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ar.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ar.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ar.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.mo.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.mo.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.mo.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ru.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ru.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ru.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ur.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ur.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.ur.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ar.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ar.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ar.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.mo.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.mo.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.mo.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ru.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ru.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ru.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ur.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ur.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.ur.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ar.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ar.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ar.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.mo.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.mo.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.mo.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ru.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ru.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ru.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ur.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ur.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.ur.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ar.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ar.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ar.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.mo.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.mo.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.mo.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ru.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ru.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ru.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ur.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ur.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.ur.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ar.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ar.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ar.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.mo.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.mo.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.mo.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ru.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ru.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ru.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ur.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ur.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.ur.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ar.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ar.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ar.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.mo.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.mo.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.mo.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ru.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ru.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ru.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ur.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ur.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.ur.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ar.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ar.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ar.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.mo.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.mo.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.mo.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ru.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ru.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ru.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ur.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ur.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.ur.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ar.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ar.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ar.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.mo.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.mo.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.mo.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ru.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ru.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ru.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ur.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ur.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.ur.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ar.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ar.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ar.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.mo.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.mo.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.mo.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ru.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ru.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ru.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ur.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ur.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.ur.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ar.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ar.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ar.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.mo.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.mo.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.mo.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ru.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ru.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ru.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ur.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ur.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.ur.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ar.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ar.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ar.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.mo.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.mo.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.mo.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ru.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ru.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ru.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ur.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ur.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.ur.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ar.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ar.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ar.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.mo.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.mo.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.mo.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ru.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ru.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ru.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ur.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ur.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.ur.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ar.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ar.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ar.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.mo.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.mo.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.mo.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ru.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ru.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ru.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ur.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ur.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.ur.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ar.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ar.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ar.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.mo.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.mo.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.mo.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ru.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ru.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ru.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ur.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ur.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.ur.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ar.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ar.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ar.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.mo.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.mo.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.mo.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ru.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ru.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ru.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ur.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ur.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.ur.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ar.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ar.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ar.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.mo.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.mo.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.mo.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ru.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ru.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ru.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ur.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ur.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.ur.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ar.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ar.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ar.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.mo.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.mo.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.mo.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ru.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ru.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ru.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ur.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ur.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.ur.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ar.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ar.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ar.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.mo.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.mo.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.mo.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ru.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ru.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ru.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ur.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ur.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.ur.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ar.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ar.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ar.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.mo.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.mo.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.mo.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ru.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ru.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ru.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ur.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ur.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.ur.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ar.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ar.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ar.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.mo.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.mo.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.mo.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ru.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ru.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ru.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ur.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ur.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.ur.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ar.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ar.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ar.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.mo.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.mo.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.mo.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ru.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ru.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ru.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ur.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ur.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.ur.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ar.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ar.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ar.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.mo.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.mo.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.mo.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ru.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ru.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ru.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ur.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ur.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.ur.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ar.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ar.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ar.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.mo.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.mo.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.mo.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ru.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ru.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ru.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ur.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ur.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.ur.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ar.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ar.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ar.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.mo.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.mo.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.mo.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ru.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ru.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ru.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ur.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ur.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.ur.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ar.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ar.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ar.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.mo.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.mo.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.mo.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ru.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ru.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ru.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ur.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ur.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.ur.png differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ar.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ar.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ar.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.mo.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.mo.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.mo.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ru.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ru.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ru.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ur.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ur.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.ur.jpg differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ar.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ar.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ar.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.mo.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.mo.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.mo.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ru.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ru.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ru.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ur.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ur.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.ur.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ar.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ar.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ar.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.mo.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.mo.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.mo.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ru.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ru.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ru.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ur.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ur.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.ur.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ar.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ar.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ar.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.mo.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.mo.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.mo.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ru.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ru.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ru.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ur.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ur.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.ur.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ar.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ar.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ar.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.mo.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.mo.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.mo.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ru.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ru.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ru.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ur.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ur.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.ur.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ar.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ar.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ar.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.mo.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.mo.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.mo.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ru.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ru.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ru.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ur.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ur.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ur.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ar.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ar.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ar.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.mo.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.mo.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.mo.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ru.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ru.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ru.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ur.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ur.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ur.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ar.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ar.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ar.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.mo.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.mo.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.mo.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ru.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ru.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ru.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ur.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ur.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.ur.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ar.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ar.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ar.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.mo.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.mo.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.mo.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ru.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ru.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ru.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ur.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ur.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.ur.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ar.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ar.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ar.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.mo.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.mo.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.mo.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ru.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ru.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ru.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ur.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ur.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ur.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ar.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ar.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ar.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.mo.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.mo.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.mo.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ru.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ru.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ru.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ur.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ur.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.ur.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ar.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ar.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ar.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.mo.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.mo.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.mo.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ru.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ru.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ru.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ur.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ur.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ur.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ar.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ar.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ar.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.mo.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.mo.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.mo.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ru.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ru.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ru.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ur.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ur.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.ur.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ar.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ar.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ar.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.mo.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.mo.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.mo.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ru.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ru.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ru.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ur.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ur.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ur.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ar.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ar.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ar.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.mo.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.mo.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.mo.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ru.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ru.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ru.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ur.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ur.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ur.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ar.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ar.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ar.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.mo.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.mo.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.mo.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ru.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ru.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ru.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ur.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ur.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.ur.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ar.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ar.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ar.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.mo.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.mo.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.mo.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ru.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ru.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ru.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ur.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ur.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ur.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ar.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ar.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ar.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.mo.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.mo.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.mo.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ru.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ru.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ru.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ur.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ur.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.ur.png differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ar.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ar.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ar.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.mo.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.mo.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.mo.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ru.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ru.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ru.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ur.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ur.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.ur.jpg differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ar.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ar.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ar.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.mo.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.mo.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.mo.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ru.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ru.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ru.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ur.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ur.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.ur.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ar.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ar.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ar.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.mo.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.mo.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.mo.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ru.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ru.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ru.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ur.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ur.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.ur.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ar.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ar.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ar.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.mo.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.mo.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.mo.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ru.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ru.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ru.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ur.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ur.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.ur.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ar.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ar.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ar.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.mo.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.mo.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.mo.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ru.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ru.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ru.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ur.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ur.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.ur.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ar.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ar.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ar.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.mo.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.mo.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.mo.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ru.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ru.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ru.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ur.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ur.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.ur.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ar.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ar.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ar.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.mo.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.mo.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.mo.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ru.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ru.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ru.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ur.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ur.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.ur.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ar.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ar.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ar.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.mo.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.mo.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.mo.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ru.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ru.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ru.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ur.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ur.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.ur.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ar.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ar.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ar.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.mo.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.mo.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.mo.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ru.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ru.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ru.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ur.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ur.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.ur.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ar.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ar.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ar.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.mo.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.mo.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.mo.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ru.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ru.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ru.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ur.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ur.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.ur.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ar.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ar.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ar.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.mo.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.mo.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.mo.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ru.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ru.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ru.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ur.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ur.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.ur.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ar.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ar.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ar.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.mo.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.mo.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.mo.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ru.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ru.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ru.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ur.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ur.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.ur.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ar.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ar.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ar.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.mo.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.mo.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.mo.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ru.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ru.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ru.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ur.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ur.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.ur.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ar.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ar.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ar.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.mo.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.mo.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.mo.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ru.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ru.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ru.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ur.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ur.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.ur.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ar.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ar.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ar.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.mo.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.mo.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.mo.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ru.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ru.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ru.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ur.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ur.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.ur.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ar.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ar.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ar.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.mo.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.mo.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.mo.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ru.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ru.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ru.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ur.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ur.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.ur.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ar.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ar.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ar.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.mo.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.mo.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.mo.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ru.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ru.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ru.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ur.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ur.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.ur.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ar.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ar.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ar.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.mo.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.mo.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.mo.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ru.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ru.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ru.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ur.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ur.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.ur.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ar.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ar.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ar.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.mo.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.mo.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.mo.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ru.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ru.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ru.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ur.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ur.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.ur.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ar.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ar.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ar.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.mo.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.mo.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.mo.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ru.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ru.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ru.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ur.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ur.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.ur.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ar.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ar.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ar.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.mo.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.mo.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.mo.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ru.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ru.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ru.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ur.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ur.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.ur.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ar.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ar.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ar.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.mo.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.mo.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.mo.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ru.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ru.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ru.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ur.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ur.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.ur.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ar.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ar.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ar.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.mo.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.mo.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.mo.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ru.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ru.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ru.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ur.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ur.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.ur.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ar.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ar.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ar.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.mo.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.mo.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.mo.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ru.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ru.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ru.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ur.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ur.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.ur.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ar.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ar.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ar.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.mo.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.mo.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.mo.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ru.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ru.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ru.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ur.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ur.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.ur.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ar.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ar.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ar.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.mo.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.mo.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.mo.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ru.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ru.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ru.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ur.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ur.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.ur.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ar.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ar.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ar.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.mo.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.mo.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.mo.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ru.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ru.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ru.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ur.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ur.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.ur.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ar.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ar.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ar.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.mo.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.mo.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.mo.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ru.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ru.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ru.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ur.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ur.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.ur.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ar.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ar.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ar.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.mo.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.mo.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.mo.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ru.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ru.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ru.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ur.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ur.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.ur.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ar.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ar.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ar.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.mo.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.mo.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.mo.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ru.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ru.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ru.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ur.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ur.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.ur.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ar.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ar.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ar.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.mo.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.mo.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.mo.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ru.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ru.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ru.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ur.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ur.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.ur.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ar.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ar.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ar.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.mo.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.mo.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.mo.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ru.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ru.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ru.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ur.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ur.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.ur.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ar.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ar.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ar.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.mo.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.mo.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.mo.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ru.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ru.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ru.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ur.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ur.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.ur.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ar.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ar.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ar.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.mo.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.mo.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.mo.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ru.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ru.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ru.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ur.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ur.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.ur.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ar.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ar.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ar.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.mo.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.mo.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.mo.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ru.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ru.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ru.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ur.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ur.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.ur.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ar.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ar.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ar.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.mo.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.mo.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.mo.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ru.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ru.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ru.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ur.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ur.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.ur.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ar.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ar.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ar.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.mo.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.mo.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.mo.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ru.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ru.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ru.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ur.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ur.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.ur.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ar.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ar.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ar.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.mo.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.mo.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.mo.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ru.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ru.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ru.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ur.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ur.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.ur.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ar.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ar.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ar.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.mo.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.mo.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.mo.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ru.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ru.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ru.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ur.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ur.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.ur.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ar.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ar.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ar.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.mo.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.mo.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.mo.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ru.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ru.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ru.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ur.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ur.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.ur.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ar.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ar.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ar.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.mo.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.mo.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.mo.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ru.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ru.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ru.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ur.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ur.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.ur.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ar.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ar.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ar.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.mo.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.mo.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.mo.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ru.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ru.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ru.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ur.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ur.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.ur.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ar.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ar.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ar.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.mo.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.mo.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.mo.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ru.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ru.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ru.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ur.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ur.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.ur.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ar.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ar.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ar.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.mo.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.mo.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.mo.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ru.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ru.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ru.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ur.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ur.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.ur.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ar.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ar.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ar.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.mo.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.mo.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.mo.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ru.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ru.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ru.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ur.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ur.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.ur.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ar.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ar.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ar.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.mo.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.mo.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.mo.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ru.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ru.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ru.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ur.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ur.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.ur.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ar.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ar.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ar.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.mo.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.mo.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.mo.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ru.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ru.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ru.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ur.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ur.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.ur.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ar.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ar.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ar.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.mo.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.mo.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.mo.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ru.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ru.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ru.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ur.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ur.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.ur.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ar.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ar.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ar.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.mo.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.mo.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.mo.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ru.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ru.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ru.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ur.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ur.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.ur.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ar.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ar.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ar.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.mo.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.mo.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.mo.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ru.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ru.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ru.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ur.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ur.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.ur.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ar.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ar.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ar.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.mo.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.mo.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.mo.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ru.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ru.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ru.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ur.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ur.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.ur.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ar.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ar.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ar.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.mo.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.mo.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.mo.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ru.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ru.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ru.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ur.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ur.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.ur.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ar.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ar.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ar.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.mo.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.mo.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.mo.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ru.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ru.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ru.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ur.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ur.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.ur.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ar.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ar.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ar.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.mo.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.mo.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.mo.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ru.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ru.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ru.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ur.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ur.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.ur.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ar.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ar.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ar.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.mo.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.mo.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.mo.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ru.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ru.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ru.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ur.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ur.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.ur.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ar.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ar.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ar.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.mo.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.mo.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.mo.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ru.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ru.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ru.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ur.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ur.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.ur.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ar.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ar.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ar.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.mo.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.mo.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.mo.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ru.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ru.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ru.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ur.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ur.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.ur.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ar.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ar.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ar.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.mo.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.mo.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.mo.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ru.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ru.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ru.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ur.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ur.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.ur.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ar.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ar.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ar.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.mo.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.mo.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.mo.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ru.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ru.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ru.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ur.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ur.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.ur.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ar.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ar.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ar.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.mo.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.mo.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.mo.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ru.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ru.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ru.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ur.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ur.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.ur.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ar.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ar.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ar.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.mo.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.mo.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.mo.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ru.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ru.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ru.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ur.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ur.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.ur.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ar.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ar.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ar.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.mo.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.mo.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.mo.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ru.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ru.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ru.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ur.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ur.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.ur.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ar.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ar.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ar.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.mo.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.mo.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.mo.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ru.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ru.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ru.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ur.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ur.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ur.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ar.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ar.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ar.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.mo.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.mo.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.mo.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ru.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ru.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ru.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ur.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ur.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.ur.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ar.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ar.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ar.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.mo.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.mo.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.mo.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ru.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ru.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ru.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ur.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ur.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ur.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ar.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ar.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ar.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.mo.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.mo.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.mo.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ru.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ru.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ru.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ur.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ur.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ur.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ar.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ar.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ar.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.mo.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.mo.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.mo.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ru.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ru.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ru.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ur.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ur.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.ur.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ar.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ar.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ar.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.mo.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.mo.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.mo.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ru.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ru.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ru.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ur.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ur.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ur.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ar.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ar.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ar.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.mo.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.mo.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.mo.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ru.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ru.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ru.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ur.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ur.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.ur.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ar.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ar.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ar.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.mo.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.mo.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.mo.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ru.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ru.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ru.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ur.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ur.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.ur.png differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ar.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ar.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ar.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.mo.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.mo.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.mo.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ru.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ru.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ru.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ur.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ur.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.ur.jpg differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ar.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ar.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ar.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.mo.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.mo.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.mo.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ru.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ru.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ru.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ur.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ur.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.ur.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ar.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ar.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ar.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.mo.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.mo.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.mo.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ru.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ru.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ru.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ur.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ur.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.ur.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ar.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ar.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ar.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.mo.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.mo.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.mo.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ru.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ru.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ru.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ur.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ur.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.ur.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ar.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ar.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ar.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.mo.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.mo.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.mo.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ru.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ru.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ru.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ur.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ur.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ur.png differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ar.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ar.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ar.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.mo.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.mo.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.mo.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ru.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ru.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ru.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ur.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ur.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.ur.jpg differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ar.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ar.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ar.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.mo.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.mo.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.mo.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ru.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ru.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ru.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ur.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ur.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.ur.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ar.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ar.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ar.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.mo.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.mo.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.mo.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ru.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ru.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ru.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ur.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ur.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.ur.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ar.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ar.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ar.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.mo.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.mo.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.mo.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ru.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ru.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ru.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ur.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ur.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.ur.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ar.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ar.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ar.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.mo.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.mo.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.mo.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ru.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ru.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ru.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ur.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ur.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.ur.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ar.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ar.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ar.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.mo.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.mo.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.mo.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ru.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ru.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ru.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ur.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ur.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.ur.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ar.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ar.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ar.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.mo.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.mo.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.mo.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ru.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ru.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ru.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ur.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ur.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ur.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ar.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ar.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ar.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.mo.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.mo.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.mo.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ru.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ru.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ru.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ur.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ur.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.ur.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ar.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ar.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ar.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.mo.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.mo.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.mo.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ru.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ru.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ru.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ur.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ur.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ur.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ar.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ar.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ar.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.mo.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.mo.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.mo.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ru.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ru.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ru.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ur.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ur.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ur.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ar.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ar.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ar.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.mo.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.mo.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.mo.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ru.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ru.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ru.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ur.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ur.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ur.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ar.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ar.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ar.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.mo.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.mo.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.mo.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ru.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ru.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ru.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ur.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ur.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ur.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ar.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ar.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ar.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.mo.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.mo.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.mo.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ru.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ru.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ru.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ur.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ur.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ur.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ar.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ar.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ar.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.mo.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.mo.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.mo.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ru.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ru.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ru.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ur.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ur.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.ur.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ar.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ar.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ar.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.mo.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.mo.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.mo.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ru.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ru.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ru.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ur.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ur.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ur.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ar.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ar.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ar.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.mo.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.mo.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.mo.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ru.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ru.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ru.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ur.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ur.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ur.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ar.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ar.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ar.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.mo.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.mo.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.mo.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ru.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ru.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ru.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ur.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ur.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ur.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ar.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ar.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ar.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.mo.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.mo.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.mo.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ru.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ru.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ru.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ur.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ur.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ur.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ar.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ar.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ar.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.mo.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.mo.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.mo.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ru.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ru.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ru.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ur.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ur.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ur.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ar.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ar.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ar.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.mo.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.mo.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.mo.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ru.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ru.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ru.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ur.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ur.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ur.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ar.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ar.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ar.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.mo.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.mo.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.mo.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ru.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ru.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ru.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ur.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ur.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ur.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ar.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ar.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ar.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.mo.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.mo.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.mo.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ru.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ru.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ru.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ur.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ur.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ur.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ar.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ar.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ar.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.mo.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.mo.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.mo.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ru.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ru.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ru.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ur.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ur.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ur.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ar.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ar.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ar.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.mo.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.mo.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.mo.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ru.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ru.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ru.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ur.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ur.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ur.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ar.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ar.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ar.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.mo.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.mo.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.mo.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ru.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ru.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ru.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ur.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ur.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ur.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ar.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ar.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ar.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.mo.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.mo.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.mo.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ru.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ru.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ru.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ur.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ur.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ur.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ar.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ar.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ar.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.mo.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.mo.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.mo.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ru.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ru.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ru.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ur.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ur.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ur.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ar.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ar.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ar.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.mo.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.mo.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.mo.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ru.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ru.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ru.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ur.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ur.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ur.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ar.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ar.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ar.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.mo.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.mo.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.mo.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ru.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ru.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ru.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ur.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ur.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.ur.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ar.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ar.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ar.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.mo.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.mo.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.mo.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ru.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ru.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ru.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ur.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ur.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.ur.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ar.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ar.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ar.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.mo.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.mo.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.mo.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ru.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ru.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ru.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ur.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ur.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.ur.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ar.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ar.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ar.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.mo.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.mo.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.mo.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ru.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ru.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ru.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ur.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ur.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.ur.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ar.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ar.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ar.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.mo.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.mo.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.mo.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ru.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ru.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ru.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ur.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ur.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ur.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ar.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ar.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ar.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.mo.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.mo.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.mo.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ru.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ru.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ru.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ur.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ur.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ur.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ar.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ar.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ar.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.mo.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.mo.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.mo.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ru.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ru.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ru.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ur.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ur.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.ur.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ar.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ar.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ar.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.mo.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.mo.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.mo.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ru.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ru.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ru.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ur.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ur.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ur.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ar.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ar.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ar.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.mo.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.mo.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.mo.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ru.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ru.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ru.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ur.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ur.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ur.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ar.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ar.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ar.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.mo.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.mo.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.mo.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ru.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ru.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ru.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ur.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ur.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.ur.png differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ar.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ar.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ar.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.mo.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.mo.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.mo.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ru.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ru.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ru.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ur.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ur.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.ur.jpg differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ar.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ar.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ar.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.mo.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.mo.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.mo.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ru.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ru.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ru.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ur.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ur.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ur.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ar.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ar.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ar.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.mo.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.mo.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.mo.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ru.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ru.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ru.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ur.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ur.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ur.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ar.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ar.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ar.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.mo.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.mo.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.mo.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ru.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ru.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ru.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ur.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ur.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.ur.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ar.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ar.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ar.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.mo.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.mo.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.mo.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ru.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ru.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ru.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ur.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ur.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ur.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ar.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ar.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ar.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.mo.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.mo.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.mo.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ru.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ru.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ru.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ur.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ur.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ur.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ar.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ar.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ar.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.mo.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.mo.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.mo.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ru.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ru.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ru.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ur.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ur.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ur.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ar.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ar.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ar.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.mo.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.mo.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.mo.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ru.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ru.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ru.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ur.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ur.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ur.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ar.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ar.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ar.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.mo.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.mo.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.mo.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ru.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ru.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ru.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ur.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ur.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.ur.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ar.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ar.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ar.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.mo.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.mo.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.mo.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ru.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ru.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ru.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ur.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ur.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.ur.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ar.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ar.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ar.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.mo.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.mo.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.mo.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ru.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ru.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ru.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ur.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ur.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ur.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ar.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ar.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ar.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.mo.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.mo.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.mo.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ru.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ru.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ru.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ur.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ur.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ur.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ar.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ar.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ar.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.mo.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.mo.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.mo.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ru.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ru.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ru.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ur.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ur.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ur.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ar.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ar.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ar.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.mo.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.mo.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.mo.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ru.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ru.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ru.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ur.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ur.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ur.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ar.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ar.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ar.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.mo.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.mo.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.mo.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ru.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ru.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ru.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ur.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ur.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.ur.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ar.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ar.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ar.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.mo.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.mo.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.mo.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ru.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ru.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ru.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ur.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ur.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ur.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ar.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ar.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ar.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.mo.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.mo.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.mo.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ru.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ru.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ru.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ur.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ur.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ur.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ar.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ar.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ar.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.mo.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.mo.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.mo.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ru.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ru.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ru.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ur.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ur.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ur.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ar.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ar.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ar.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.mo.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.mo.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.mo.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ru.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ru.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ru.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ur.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ur.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ur.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ar.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ar.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ar.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.mo.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.mo.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.mo.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ru.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ru.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ru.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ur.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ur.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ur.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ar.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ar.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ar.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.mo.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.mo.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.mo.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ru.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ru.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ru.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ur.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ur.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ur.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ar.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ar.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ar.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.mo.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.mo.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.mo.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ru.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ru.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ru.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ur.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ur.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ur.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ar.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ar.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ar.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.mo.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.mo.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.mo.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ru.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ru.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ru.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ur.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ur.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.ur.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ar.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ar.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ar.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.mo.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.mo.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.mo.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ru.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ru.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ru.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ur.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ur.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ur.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ar.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ar.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ar.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.mo.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.mo.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.mo.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ru.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ru.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ru.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ur.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ur.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ur.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ar.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ar.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ar.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.mo.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.mo.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.mo.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ru.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ru.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ru.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ur.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ur.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ur.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ar.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ar.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ar.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.mo.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.mo.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.mo.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ru.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ru.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ru.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ur.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ur.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.ur.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ar.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ar.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ar.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.mo.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.mo.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.mo.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ru.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ru.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ru.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ur.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ur.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.ur.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ar.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ar.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ar.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.mo.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.mo.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.mo.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ru.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ru.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ru.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ur.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ur.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.ur.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ar.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ar.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ar.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.mo.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.mo.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.mo.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ru.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ru.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ru.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ur.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ur.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ur.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ar.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ar.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ar.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.mo.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.mo.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.mo.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ru.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ru.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ru.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ur.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ur.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ur.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ar.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ar.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ar.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.mo.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.mo.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.mo.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ru.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ru.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ru.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ur.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ur.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.ur.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ar.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ar.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ar.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.mo.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.mo.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.mo.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ru.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ru.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ru.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ur.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ur.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.ur.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ar.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ar.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ar.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.mo.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.mo.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.mo.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ru.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ru.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ru.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ur.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ur.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.ur.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ar.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ar.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ar.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.mo.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.mo.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.mo.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ru.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ru.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ru.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ur.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ur.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.ur.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ar.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ar.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ar.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.mo.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.mo.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.mo.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ru.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ru.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ru.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ur.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ur.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.ur.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ar.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ar.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ar.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.mo.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.mo.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.mo.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ru.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ru.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ru.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ur.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ur.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ur.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ar.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ar.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ar.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.mo.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.mo.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.mo.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ru.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ru.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ru.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ur.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ur.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.ur.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ar.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ar.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ar.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.mo.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.mo.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.mo.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ru.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ru.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ru.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ur.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ur.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.ur.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ar.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ar.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ar.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.mo.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.mo.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.mo.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ru.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ru.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ru.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ur.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ur.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.ur.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ar.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ar.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ar.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.mo.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.mo.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.mo.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ru.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ru.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ru.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ur.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ur.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ur.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ar.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ar.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ar.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.mo.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.mo.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.mo.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ru.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ru.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ru.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ur.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ur.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ur.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ar.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ar.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ar.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.mo.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.mo.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.mo.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ru.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ru.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ru.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ur.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ur.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.ur.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ar.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ar.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ar.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.mo.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.mo.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.mo.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ru.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ru.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ru.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ur.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ur.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ur.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ar.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ar.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ar.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.mo.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.mo.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.mo.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ru.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ru.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ru.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ur.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ur.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.ur.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ar.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ar.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ar.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.mo.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.mo.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.mo.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ru.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ru.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ru.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ur.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ur.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ur.png differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ar.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ar.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ar.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.mo.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.mo.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.mo.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ru.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ru.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ru.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ur.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ur.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ur.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ar.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ar.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ar.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.mo.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.mo.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.mo.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ru.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ru.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ru.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ur.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ur.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ur.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ar.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ar.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ar.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.mo.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.mo.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.mo.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ru.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ru.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ru.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ur.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ur.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ur.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ar.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ar.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ar.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.mo.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.mo.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.mo.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ru.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ru.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ru.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ur.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ur.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ur.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ar.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ar.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ar.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.mo.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.mo.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.mo.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ru.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ru.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ru.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ur.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ur.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.ur.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ar.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ar.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ar.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.mo.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.mo.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.mo.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ru.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ru.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ru.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ur.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ur.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.ur.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ar.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ar.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ar.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.mo.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.mo.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.mo.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ru.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ru.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ru.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ur.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ur.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.ur.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ar.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ar.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ar.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.mo.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.mo.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.mo.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ru.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ru.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ru.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ur.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ur.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.ur.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ar.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ar.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ar.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.mo.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.mo.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.mo.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ru.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ru.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ru.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ur.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ur.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.ur.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ar.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ar.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ar.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.mo.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.mo.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.mo.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ru.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ru.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ru.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ur.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ur.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.ur.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ar.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ar.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ar.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.mo.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.mo.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.mo.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ru.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ru.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ru.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ur.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ur.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.ur.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ar.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ar.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ar.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.mo.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.mo.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.mo.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ru.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ru.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ru.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ur.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ur.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ur.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ar.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ar.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ar.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.mo.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.mo.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.mo.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ru.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ru.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ru.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ur.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ur.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ur.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ar.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ar.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ar.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.mo.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.mo.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.mo.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ru.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ru.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ru.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ur.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ur.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.ur.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ar.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ar.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ar.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.mo.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.mo.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.mo.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ru.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ru.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ru.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ur.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ur.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.ur.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ar.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ar.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ar.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.mo.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.mo.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.mo.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ru.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ru.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ru.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ur.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ur.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.ur.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ar.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ar.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ar.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.mo.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.mo.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.mo.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ru.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ru.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ru.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ur.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ur.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.ur.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ar.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ar.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ar.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.mo.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.mo.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.mo.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ru.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ru.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ru.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ur.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ur.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ur.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ar.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ar.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ar.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.mo.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.mo.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.mo.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ru.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ru.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ru.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ur.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ur.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ur.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ar.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ar.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ar.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.mo.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.mo.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.mo.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ru.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ru.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ru.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ur.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ur.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ur.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ar.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ar.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ar.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.mo.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.mo.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.mo.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ru.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ru.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ru.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ur.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ur.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.ur.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ar.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ar.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ar.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.mo.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.mo.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.mo.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ru.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ru.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ru.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ur.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ur.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ur.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ar.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ar.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ar.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.mo.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.mo.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.mo.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ru.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ru.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ru.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ur.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ur.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ur.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ar.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ar.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ar.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.mo.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.mo.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.mo.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ru.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ru.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ru.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ur.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ur.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ur.jpg differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ar.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ar.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ar.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.mo.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.mo.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.mo.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ru.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ru.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ru.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ur.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ur.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ur.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ar.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ar.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ar.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.mo.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.mo.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.mo.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ru.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ru.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ru.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ur.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ur.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.ur.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ar.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ar.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ar.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.mo.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.mo.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.mo.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ru.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ru.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ru.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ur.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ur.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ur.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ar.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ar.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ar.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.mo.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.mo.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.mo.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ru.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ru.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ru.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ur.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ur.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.ur.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ar.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ar.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ar.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.mo.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.mo.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.mo.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ru.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ru.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ru.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ur.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ur.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.ur.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ar.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ar.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ar.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.mo.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.mo.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.mo.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ru.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ru.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ru.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ur.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ur.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.ur.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ar.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ar.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ar.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.mo.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.mo.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.mo.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ru.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ru.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ru.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ur.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ur.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.ur.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ar.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ar.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ar.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.mo.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.mo.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.mo.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ru.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ru.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ru.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ur.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ur.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.ur.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ar.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ar.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ar.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.mo.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.mo.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.mo.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ru.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ru.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ru.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ur.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ur.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.ur.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ar.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ar.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ar.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.mo.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.mo.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.mo.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ru.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ru.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ru.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ur.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ur.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ur.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ar.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ar.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ar.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.mo.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.mo.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.mo.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ru.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ru.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ru.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ur.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ur.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.ur.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ar.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ar.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ar.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.mo.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.mo.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.mo.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ru.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ru.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ru.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ur.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ur.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ur.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ar.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ar.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ar.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.mo.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.mo.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.mo.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ru.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ru.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ru.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ur.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ur.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ur.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ar.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ar.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ar.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.mo.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.mo.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.mo.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ru.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ru.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ru.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ur.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ur.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ur.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ar.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ar.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ar.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.mo.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.mo.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.mo.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ru.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ru.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ru.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ur.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ur.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.ur.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ar.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ar.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ar.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.mo.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.mo.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.mo.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ru.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ru.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ru.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ur.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ur.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.ur.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ar.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ar.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ar.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.mo.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.mo.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.mo.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ru.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ru.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ru.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ur.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ur.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.ur.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ar.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ar.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ar.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.mo.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.mo.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.mo.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ru.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ru.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ru.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ur.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ur.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.ur.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ar.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ar.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ar.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.mo.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.mo.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.mo.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ru.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ru.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ru.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ur.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ur.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ur.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ar.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ar.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ar.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.mo.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.mo.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.mo.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ru.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ru.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ru.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ur.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ur.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.ur.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ar.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ar.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ar.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.mo.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.mo.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.mo.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ru.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ru.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ru.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ur.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ur.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ur.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ar.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ar.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ar.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.mo.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.mo.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.mo.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ru.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ru.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ru.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ur.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ur.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ur.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ar.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ar.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ar.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.mo.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.mo.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.mo.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ru.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ru.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ru.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ur.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ur.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ur.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ar.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ar.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ar.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.mo.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.mo.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.mo.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ru.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ru.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ru.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ur.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ur.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ur.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ar.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ar.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ar.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.mo.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.mo.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.mo.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ru.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ru.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ru.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ur.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ur.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ur.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ar.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ar.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ar.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.mo.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.mo.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.mo.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ru.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ru.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ru.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ur.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ur.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.ur.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ar.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ar.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ar.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.mo.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.mo.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.mo.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ru.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ru.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ru.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ur.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ur.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ur.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ar.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ar.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ar.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.mo.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.mo.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.mo.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ru.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ru.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ru.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ur.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ur.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ur.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ar.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ar.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ar.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.mo.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.mo.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.mo.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ru.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ru.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ru.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ur.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ur.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ur.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ar.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ar.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ar.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.mo.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.mo.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.mo.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ru.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ru.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ru.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ur.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ur.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.ur.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ar.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ar.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ar.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.mo.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.mo.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.mo.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ru.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ru.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ru.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ur.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ur.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ur.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ar.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ar.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ar.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.mo.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.mo.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.mo.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ru.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ru.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ru.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ur.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ur.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ur.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ar.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ar.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ar.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.mo.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.mo.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.mo.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ru.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ru.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ru.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ur.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ur.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.ur.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ar.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ar.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ar.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.mo.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.mo.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.mo.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ru.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ru.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ru.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ur.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ur.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.ur.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ar.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ar.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ar.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.mo.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.mo.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.mo.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ru.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ru.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ru.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ur.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ur.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ur.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ar.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ar.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ar.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.mo.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.mo.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.mo.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ru.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ru.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ru.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ur.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ur.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.ur.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ar.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ar.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ar.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.mo.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.mo.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.mo.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ru.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ru.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ru.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ur.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ur.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ur.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ar.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ar.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ar.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.mo.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.mo.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.mo.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ru.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ru.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ru.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ur.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ur.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.ur.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ar.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ar.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ar.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.mo.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.mo.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.mo.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ru.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ru.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ru.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ur.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ur.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ur.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ar.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ar.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ar.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.mo.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.mo.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.mo.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ru.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ru.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ru.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ur.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ur.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ur.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ar.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ar.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ar.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.mo.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.mo.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.mo.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ru.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ru.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ru.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ur.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ur.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ur.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ar.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ar.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ar.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.mo.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.mo.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.mo.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ru.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ru.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ru.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ur.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ur.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ur.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ar.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ar.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ar.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.mo.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.mo.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.mo.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ru.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ru.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ru.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ur.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ur.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ur.png differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.mo.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.mo.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.mo.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ru.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ru.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ru.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ur.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ur.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ur.jpg differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ar.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ar.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ar.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.mo.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.mo.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.mo.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ru.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ru.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ru.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ur.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ur.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.ur.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ar.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ar.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ar.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.mo.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.mo.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.mo.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ru.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ru.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ru.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ur.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ur.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ur.png differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ar.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ar.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ar.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.mo.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.mo.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.mo.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ru.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ru.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ru.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ur.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ur.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ur.jpg differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ar.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ar.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ar.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.mo.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.mo.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.mo.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ru.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ru.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ru.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ur.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ur.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ur.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ar.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ar.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ar.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.mo.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.mo.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.mo.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ru.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ru.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ru.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ur.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ur.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ur.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ar.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ar.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ar.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.mo.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.mo.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.mo.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ru.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ru.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ru.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ur.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ur.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.ur.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ar.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ar.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ar.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.mo.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.mo.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.mo.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ru.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ru.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ru.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ur.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ur.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.ur.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ar.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ar.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ar.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.mo.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.mo.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.mo.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ru.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ru.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ru.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ur.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ur.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.ur.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ar.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ar.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ar.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.mo.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.mo.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.mo.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ru.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ru.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ru.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ur.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ur.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.ur.png differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ar.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ar.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ar.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.mo.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.mo.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.mo.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ru.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ru.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ru.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ur.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ur.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.ur.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ar.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ar.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ar.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.mo.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.mo.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.mo.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ru.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ru.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ru.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ur.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ur.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ur.jpg differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ar.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ar.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ar.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.mo.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.mo.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.mo.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ru.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ru.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ru.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ur.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ur.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.ur.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ar.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ar.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ar.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.mo.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.mo.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.mo.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ru.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ru.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ru.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ur.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ur.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ur.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ar.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ar.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ar.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.mo.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.mo.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.mo.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ru.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ru.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ru.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ur.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ur.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ur.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ar.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ar.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ar.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.mo.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.mo.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.mo.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ru.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ru.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ru.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ur.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ur.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.ur.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ar.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ar.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ar.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.mo.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.mo.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.mo.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ru.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ru.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ru.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ur.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ur.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.ur.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ar.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ar.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.ar.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.mo.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.mo.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.mo.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ru.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ru.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.ru.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ur.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ur.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.ur.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ar.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ar.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ar.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.mo.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.mo.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.mo.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ru.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ru.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ru.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ur.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ur.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ur.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ar.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ar.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ar.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.mo.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.mo.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.mo.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ru.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ru.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ru.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ur.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ur.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.ur.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ar.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ar.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ar.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.mo.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.mo.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.mo.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ru.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ru.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ru.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ur.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ur.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ur.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ar.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ar.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ar.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.mo.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.mo.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.mo.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ru.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ru.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ru.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ur.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ur.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ur.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ar.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ar.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ar.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.mo.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.mo.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.mo.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ru.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ru.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ru.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ur.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ur.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.ur.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ar.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ar.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ar.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.mo.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.mo.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.mo.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ru.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ru.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ru.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ur.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ur.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ur.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ar.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ar.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ar.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.mo.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.mo.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.mo.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ru.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ru.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ru.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ur.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ur.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.ur.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ar.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ar.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ar.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.mo.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.mo.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.mo.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ru.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ru.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ru.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ur.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ur.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ur.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ar.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ar.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ar.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.mo.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.mo.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.mo.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ru.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ru.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ru.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ur.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ur.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ur.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ar.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ar.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ar.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.mo.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.mo.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.mo.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ru.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ru.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ru.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ur.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ur.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ur.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ar.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ar.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ar.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.mo.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.mo.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.mo.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ru.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ru.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ru.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ur.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ur.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ur.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ar.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ar.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ar.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.mo.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.mo.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.mo.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ru.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ru.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ru.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ur.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ur.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ur.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ar.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ar.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ar.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.mo.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.mo.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.mo.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ru.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ru.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ru.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ur.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ur.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ur.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ar.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ar.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ar.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.mo.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.mo.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.mo.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ru.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ru.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ru.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ur.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ur.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ur.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ar.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ar.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ar.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.mo.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.mo.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.mo.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ru.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ru.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ru.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ur.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ur.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ur.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ar.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ar.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ar.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.mo.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.mo.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.mo.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ru.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ru.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ru.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ur.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ur.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ur.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ar.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ar.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ar.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.mo.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.mo.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.mo.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ru.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ru.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ru.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ur.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ur.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ur.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ar.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ar.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ar.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.mo.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.mo.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.mo.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ru.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ru.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ru.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ur.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ur.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ur.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ar.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ar.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ar.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.mo.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.mo.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.mo.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ru.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ru.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ru.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ur.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ur.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ur.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ar.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ar.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ar.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.mo.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.mo.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.mo.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ru.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ru.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ru.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ur.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ur.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ur.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ar.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ar.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ar.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.mo.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.mo.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.mo.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ru.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ru.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ru.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ur.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ur.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.ur.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ar.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ar.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ar.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.mo.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.mo.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.mo.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ru.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ru.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ru.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ur.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ur.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.ur.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ar.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ar.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ar.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.mo.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.mo.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.mo.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ru.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ru.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ru.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ur.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ur.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.ur.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ar.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ar.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ar.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.mo.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.mo.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.mo.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ru.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ru.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ru.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ur.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ur.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.ur.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ar.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ar.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ar.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.mo.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.mo.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.mo.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ru.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ru.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ru.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ur.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ur.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.ur.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ar.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ar.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ar.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.mo.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.mo.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.mo.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ru.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ru.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ru.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ur.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ur.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ur.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ar.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ar.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ar.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.mo.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.mo.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.mo.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ru.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ru.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ru.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ur.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ur.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.ur.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ar.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ar.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ar.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.mo.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.mo.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.mo.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ru.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ru.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ru.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ur.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ur.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ur.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ar.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ar.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ar.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.mo.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.mo.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.mo.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ru.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ru.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ru.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ur.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ur.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ur.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ar.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ar.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ar.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.mo.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.mo.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.mo.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ru.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ru.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ru.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ur.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ur.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ur.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ar.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ar.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ar.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.mo.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.mo.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.mo.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ru.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ru.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ru.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ur.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ur.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.ur.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ar.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ar.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ar.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.mo.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.mo.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.mo.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ru.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ru.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ru.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ur.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ur.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.ur.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ar.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ar.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ar.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.mo.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.mo.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.mo.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ru.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ru.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ru.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ur.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ur.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ur.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ar.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ar.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ar.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.mo.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.mo.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.mo.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ru.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ru.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ru.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ur.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ur.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.ur.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ar.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ar.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ar.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.mo.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.mo.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.mo.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ru.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ru.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ru.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ur.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ur.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ur.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ar.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ar.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ar.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.mo.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.mo.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.mo.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ru.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ru.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ru.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ur.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ur.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ur.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ar.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ar.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ar.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.mo.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.mo.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.mo.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ru.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ru.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ru.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ur.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ur.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.ur.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ar.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ar.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ar.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.mo.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.mo.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.mo.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ru.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ru.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ru.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ur.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ur.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ur.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ar.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ar.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ar.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.mo.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.mo.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.mo.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ru.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ru.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ru.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ur.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ur.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ur.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ar.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ar.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ar.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.mo.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.mo.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.mo.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ru.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ru.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ru.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ur.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ur.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ur.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ar.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ar.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ar.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.mo.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.mo.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.mo.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ru.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ru.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ru.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ur.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ur.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ur.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ar.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ar.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ar.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.mo.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.mo.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.mo.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ru.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ru.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ru.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ur.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ur.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.ur.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ar.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ar.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ar.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.mo.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.mo.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.mo.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ru.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ru.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ru.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ur.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ur.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ur.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ar.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ar.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ar.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.mo.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.mo.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.mo.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ru.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ru.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ru.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ur.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ur.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ur.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ar.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ar.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ar.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.mo.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.mo.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.mo.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ru.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ru.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ru.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ur.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ur.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.ur.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ar.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ar.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ar.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.mo.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.mo.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.mo.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ru.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ru.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ru.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ur.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ur.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ur.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ar.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ar.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ar.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.mo.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.mo.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.mo.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ru.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ru.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ru.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ur.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ur.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.ur.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ar.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ar.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ar.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.mo.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.mo.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.mo.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ru.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ru.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ru.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ur.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ur.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.ur.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ar.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ar.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ar.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.mo.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.mo.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.mo.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ru.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ru.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ru.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ur.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ur.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.ur.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ar.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ar.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ar.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.mo.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.mo.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.mo.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ru.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ru.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ru.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ur.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ur.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.ur.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ar.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ar.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ar.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.mo.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.mo.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.mo.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ru.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ru.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ru.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ur.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ur.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.ur.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ar.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ar.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ar.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.mo.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.mo.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.mo.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ru.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ru.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ru.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ur.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ur.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.ur.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ar.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ar.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ar.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.mo.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.mo.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.mo.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ru.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ru.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ru.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ur.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ur.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.ur.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ar.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ar.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ar.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.mo.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.mo.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.mo.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ru.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ru.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ru.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ur.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ur.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.ur.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ar.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ar.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ar.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.mo.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.mo.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.mo.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ru.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ru.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ru.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ur.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ur.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ur.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ar.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ar.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ar.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.mo.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.mo.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.mo.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ru.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ru.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ru.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ur.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ur.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ur.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ar.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ar.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ar.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.mo.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.mo.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.mo.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ru.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ru.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ru.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ur.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ur.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.ur.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ar.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ar.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ar.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.mo.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.mo.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.mo.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ru.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ru.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ru.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ur.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ur.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.ur.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ar.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ar.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ar.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.mo.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.mo.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.mo.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ru.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ru.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ru.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ur.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ur.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.ur.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ar.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ar.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ar.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.mo.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.mo.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.mo.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ru.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ru.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ru.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ur.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ur.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.ur.png differ diff --git a/translations/ar/1-getting-started/README.md b/translations/ar/1-getting-started/README.md new file mode 100644 index 00000000..505b0433 --- /dev/null +++ b/translations/ar/1-getting-started/README.md @@ -0,0 +1,30 @@ + +# البدء مع إنترنت الأشياء + +في هذا القسم من المنهج، ستتعرف على إنترنت الأشياء، وستتعلم المفاهيم الأساسية بما في ذلك بناء أول مشروع "Hello World" لإنترنت الأشياء الخاص بك والاتصال بالسحابة. هذا المشروع عبارة عن ضوء ليلي يضيء عندما تنخفض مستويات الضوء التي يقيسها المستشعر. + +![الـ LED المتصل بـ WIO يضيء وينطفئ مع تغير مستوى الضوء](../../../images/wio-running-assignment-1-1.gif) + +## المواضيع + +1. [مقدمة إلى إنترنت الأشياء](lessons/1-introduction-to-iot/README.md) +1. [نظرة أعمق على إنترنت الأشياء](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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/1-introduction-to-iot/README.md b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/README.md new file mode 100644 index 00000000..94019230 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/README.md @@ -0,0 +1,242 @@ + +# مقدمة إلى إنترنت الأشياء + +![رسم تخطيطي للدرس](../../../../../translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.ar.jpg) + +> رسم تخطيطي بواسطة [نيتيا ناراسيمهان](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). تم تقديم الدرس في شكل فيديوهين - درس مدته ساعة واحدة، وساعة أخرى للإجابة على الأسئلة والتعمق في أجزاء من الدرس. + +[![الدرس الأول: مقدمة إلى إنترنت الأشياء](https://img.youtube.com/vi/bVFfcYh6UBw/0.jpg)](https://youtu.be/bVFfcYh6UBw) + +[![الدرس الأول: مقدمة إلى إنترنت الأشياء - ساعات المكتب](https://img.youtube.com/vi/YI772q5v3yI/0.jpg)](https://youtu.be/YI772q5v3yI) + +> 🎥 اضغط على الصور أعلاه لمشاهدة الفيديوهات + +## اختبار ما قبل المحاضرة + +[اختبار ما قبل المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/1) + +## المقدمة + +يغطي هذا الدرس بعض المواضيع التمهيدية حول إنترنت الأشياء، ويبدأ معك في إعداد الأجهزة الخاصة بك. + +في هذا الدرس سنتناول: + +* [ما هو "إنترنت الأشياء"؟](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [أجهزة إنترنت الأشياء](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [إعداد جهازك](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [تطبيقات إنترنت الأشياء](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [أمثلة على أجهزة إنترنت الأشياء من حولك](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +## ما هو "إنترنت الأشياء"؟ + +تم صياغة مصطلح "إنترنت الأشياء" بواسطة [كيفن أشتون](https://wikipedia.org/wiki/Kevin_Ashton) في عام 1999 للإشارة إلى ربط الإنترنت بالعالم المادي عبر أجهزة الاستشعار. منذ ذلك الحين، أصبح المصطلح يُستخدم لوصف أي جهاز يتفاعل مع العالم المادي من حوله، سواء بجمع البيانات من أجهزة الاستشعار أو توفير تفاعلات في العالم الحقيقي عبر المشغلات (أجهزة تقوم بشيء مثل تشغيل مفتاح أو إضاءة LED)، وعادةً ما تكون متصلة بأجهزة أخرى أو بالإنترنت. + +> **أجهزة الاستشعار** تجمع المعلومات من العالم، مثل قياس السرعة أو درجة الحرارة أو الموقع. +> +> **المشغلات** تحول الإشارات الكهربائية إلى تفاعلات في العالم الحقيقي مثل تشغيل مفتاح، إضاءة الأضواء، إصدار الأصوات، أو إرسال إشارات التحكم إلى أجهزة أخرى، على سبيل المثال، لتشغيل مقبس كهربائي. + +إنترنت الأشياء كمنطقة تقنية يتجاوز مجرد الأجهزة - فهو يشمل خدمات سحابية يمكنها معالجة بيانات الاستشعار أو إرسال طلبات إلى المشغلات المتصلة بأجهزة إنترنت الأشياء. كما يشمل الأجهزة التي لا تحتوي على اتصال بالإنترنت أو لا تحتاج إليه، والتي تُعرف غالبًا باسم الأجهزة الطرفية. هذه الأجهزة يمكنها معالجة بيانات الاستشعار والرد عليها بنفسها، عادةً باستخدام نماذج الذكاء الاصطناعي التي تم تدريبها في السحابة. + +إنترنت الأشياء هو مجال تقني سريع النمو. يُقدر أنه بحلول نهاية عام 2020، تم نشر 30 مليار جهاز إنترنت الأشياء متصل بالإنترنت. بالنظر إلى المستقبل، يُقدر أنه بحلول عام 2025، ستجمع أجهزة إنترنت الأشياء حوالي 80 زيتابايت من البيانات أو 80 تريليون جيجابايت. هذا كمية هائلة من البيانات! + +![رسم بياني يظهر عدد أجهزة إنترنت الأشياء النشطة بمرور الوقت، مع اتجاه تصاعدي من أقل من 5 مليارات في 2015 إلى أكثر من 30 مليار في 2025](../../../../../images/connected-iot-devices.svg) + +✅ قم ببعض البحث: كم من البيانات التي يتم إنشاؤها بواسطة أجهزة إنترنت الأشياء يتم استخدامها بالفعل، وكم منها يُهدر؟ لماذا يتم تجاهل الكثير من البيانات؟ + +هذه البيانات هي المفتاح لنجاح إنترنت الأشياء. لكي تكون مطورًا ناجحًا لإنترنت الأشياء، تحتاج إلى فهم البيانات التي تحتاج إلى جمعها، كيفية جمعها، كيفية اتخاذ القرارات بناءً عليها، وكيفية استخدام هذه القرارات للتفاعل مع العالم المادي إذا لزم الأمر. + +## أجهزة إنترنت الأشياء + +الحرف **T** في إنترنت الأشياء يشير إلى **الأشياء** - الأجهزة التي تتفاعل مع العالم المادي من حولها إما بجمع البيانات من أجهزة الاستشعار أو توفير تفاعلات في العالم الحقيقي عبر المشغلات. + +الأجهزة المستخدمة للإنتاج أو الاستخدام التجاري، مثل أجهزة تتبع اللياقة البدنية للمستهلكين أو وحدات التحكم في الآلات الصناعية، عادةً ما تكون مصممة خصيصًا. تستخدم لوحات دوائر مخصصة، وربما حتى معالجات مخصصة، مصممة لتلبية احتياجات مهمة معينة، سواء كان ذلك أن تكون صغيرة بما يكفي لتناسب المعصم، أو قوية بما يكفي للعمل في بيئة مصنع ذات درجات حرارة عالية أو إجهاد أو اهتزازات عالية. + +كمطور يتعلم عن إنترنت الأشياء أو ينشئ نموذجًا أوليًا لجهاز، ستحتاج إلى البدء بمجموعة أدوات للمطورين. هذه هي أجهزة إنترنت الأشياء متعددة الأغراض المصممة للاستخدام من قبل المطورين، غالبًا مع ميزات لن تجدها في جهاز الإنتاج، مثل مجموعة من الدبابيس الخارجية لتوصيل أجهزة الاستشعار أو المشغلات، أو أجهزة لدعم التصحيح، أو موارد إضافية قد تضيف تكلفة غير ضرورية عند القيام بتصنيع كبير. + +عادةً ما تقع هذه المجموعات في فئتين - المتحكمات الدقيقة وأجهزة الكمبيوتر ذات اللوحة الواحدة. سيتم تقديمها هنا، وسنخوض في تفاصيل أكثر في الدرس التالي. + +> 💁 يمكن اعتبار هاتفك أيضًا جهاز إنترنت الأشياء متعدد الأغراض، مع أجهزة استشعار ومشغلات مدمجة، حيث تستخدم التطبيقات المختلفة أجهزة الاستشعار والمشغلات بطرق مختلفة مع خدمات سحابية مختلفة. يمكنك حتى العثور على بعض دروس إنترنت الأشياء التي تستخدم تطبيق الهاتف كجهاز إنترنت الأشياء. + +### المتحكمات الدقيقة + +المتحكم الدقيق (ويُشار إليه أيضًا بـ MCU، اختصارًا لوحدة التحكم الدقيقة) هو جهاز كمبيوتر صغير يتكون من: + +🧠 وحدة أو أكثر من وحدات المعالجة المركزية (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.ar.png) + +> 💁 عند البحث على الإنترنت عن المتحكمات الدقيقة، كن حذرًا من البحث عن المصطلح **MCU** حيث سيعيد الكثير من النتائج المتعلقة بعالم مارفل السينمائي، وليس المتحكمات الدقيقة. + +المتحكمات الدقيقة مصممة ليتم برمجتها للقيام بعدد محدود من المهام المحددة جدًا، بدلاً من أن تكون أجهزة كمبيوتر متعددة الأغراض مثل أجهزة الكمبيوتر الشخصية أو أجهزة Mac. باستثناء سيناريوهات محددة جدًا، لا يمكنك توصيل شاشة، لوحة مفاتيح وفأرة واستخدامها للمهام العامة. + +عادةً ما تأتي مجموعات أدوات المطورين للمتحكمات الدقيقة مع أجهزة استشعار ومشغلات إضافية على اللوحة. معظم اللوحات تحتوي على واحد أو أكثر من مصابيح LED يمكنك برمجتها، إلى جانب أجهزة أخرى مثل مقابس قياسية لإضافة المزيد من أجهزة الاستشعار أو المشغلات باستخدام أنظمة الشركات المصنعة المختلفة أو أجهزة استشعار مدمجة (عادةً الأكثر شيوعًا مثل أجهزة استشعار درجة الحرارة). بعض المتحكمات الدقيقة تحتوي على اتصال لاسلكي مدمج مثل Bluetooth أو WiFi أو تحتوي على متحكمات دقيقة إضافية على اللوحة لإضافة هذا الاتصال. + +> 💁 عادةً ما يتم برمجة المتحكمات الدقيقة باستخدام لغة C/C++. + +### أجهزة الكمبيوتر ذات اللوحة الواحدة + +جهاز الكمبيوتر ذو اللوحة الواحدة هو جهاز حوسبة صغير يحتوي على جميع عناصر الكمبيوتر الكامل على لوحة صغيرة واحدة. هذه الأجهزة لها مواصفات قريبة من أجهزة الكمبيوتر المكتبية أو المحمولة، تعمل بنظام تشغيل كامل، لكنها صغيرة، تستهلك طاقة أقل، وأرخص بكثير. + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg) + +Raspberry Pi هو واحد من أكثر أجهزة الكمبيوتر ذات اللوحة الواحدة شهرة. + +مثل المتحكم الدقيق، تحتوي أجهزة الكمبيوتر ذات اللوحة الواحدة على وحدة معالجة مركزية، ذاكرة ودبابيس إدخال/إخراج، لكنها تحتوي على ميزات إضافية مثل شريحة رسومات للسماح بتوصيل الشاشات، مخرجات صوتية، ومنافذ USB لتوصيل لوحات المفاتيح، الفأرات والأجهزة القياسية الأخرى مثل كاميرات الويب أو التخزين الخارجي. يتم تخزين البرامج على بطاقات SD أو محركات الأقراص الصلبة إلى جانب نظام التشغيل، بدلاً من شريحة ذاكرة مدمجة في اللوحة. + +> 🎓 يمكنك التفكير في جهاز الكمبيوتر ذو اللوحة الواحدة كنسخة أصغر وأرخص من الكمبيوتر الشخصي أو Mac الذي تقرأ عليه هذا النص، مع إضافة دبابيس GPIO (إدخال/إخراج عام) للتفاعل مع أجهزة الاستشعار والمشغلات. + +أجهزة الكمبيوتر ذات اللوحة الواحدة هي أجهزة كمبيوتر كاملة الميزات، لذا يمكن برمجتها بأي لغة. عادةً ما يتم برمجة أجهزة إنترنت الأشياء باستخدام لغة Python. + +### خيارات الأجهزة لبقية الدروس + +تشمل جميع الدروس اللاحقة مهامًا باستخدام جهاز إنترنت الأشياء للتفاعل مع العالم المادي والتواصل مع السحابة. يدعم كل درس 3 خيارات للأجهزة - Arduino (باستخدام Seeed Studios Wio Terminal)، أو جهاز كمبيوتر ذو لوحة واحدة، سواء كان جهازًا فعليًا (Raspberry Pi 4) أو جهازًا افتراضيًا يعمل على جهاز الكمبيوتر الشخصي أو Mac الخاص بك. + +يمكنك قراءة المزيد عن الأجهزة المطلوبة لإكمال جميع المهام في [دليل الأجهزة](../../../hardware.md). + +> 💁 لا تحتاج إلى شراء أي أجهزة إنترنت الأشياء لإكمال المهام، يمكنك القيام بكل شيء باستخدام جهاز كمبيوتر ذو لوحة واحدة افتراضي. + +يعتمد اختيارك للأجهزة على ما هو متوفر لديك سواء في المنزل أو في مدرستك، وعلى لغة البرمجة التي تعرفها أو تخطط لتعلمها. كلا الخيارين للأجهزة سيستخدمان نفس نظام أجهزة الاستشعار، لذا إذا بدأت في مسار واحد، يمكنك التبديل إلى الآخر دون الحاجة إلى استبدال معظم المجموعة. سيكون الكمبيوتر ذو اللوحة الواحدة الافتراضي مكافئًا للتعلم على 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 إذا كنت متمرسًا في استخدام هذه الأداة، حيث لن يتم توفير التعليمات. + +### مجموعة أدوات المطورين لجهاز الكمبيوتر ذو اللوحة الواحدة + +إذا كنت مهتمًا بتعلم تطوير إنترنت الأشياء باستخدام أجهزة الكمبيوتر ذات اللوحة الواحدة، يمكنك إكمال المهام باستخدام Raspberry Pi، أو جهاز افتراضي يعمل على جهاز الكمبيوتر الشخصي أو 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، يمكنك تشغيل Pi باستخدام النسخة الكاملة من نظام تشغيل Raspberry Pi OS، والقيام بكل البرمجة مباشرة على Pi باستخدام [نسخة VS Code الخاصة بنظام تشغيل Raspberry Pi](https://code.visualstudio.com/docs/setup/raspberry-pi?WT.mc_id=academic-17441-jabenn)، أو تشغيل Pi كجهاز بدون شاشة والبرمجة من جهاز الكمبيوتر الشخصي أو Mac باستخدام VS Code مع [إضافة Remote SSH](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn) التي تتيح لك الاتصال بـ Pi وتحرير، تصحيح وتشغيل الكود كما لو كنت تبرمج عليه مباشرة. + +إذا كنت تستخدم الخيار الافتراضي للجهاز، ستقوم بالبرمجة مباشرة على جهاز الكمبيوتر الخاص بك. بدلاً من الوصول إلى أجهزة الاستشعار والمشغلات، ستستخدم أداة لمحاكاة هذه الأجهزة، حيث توفر قيم أجهزة الاستشعار التي يمكنك تحديدها، وتعرض نتائج المشغلات على الشاشة. + +## إعداد جهازك + +قبل أن تتمكن من البدء في برمجة جهاز إنترنت الأشياء الخاص بك، ستحتاج إلى القيام ببعض الإعدادات البسيطة. اتبع التعليمات ذات الصلة أدناه بناءً على الجهاز الذي ستستخدمه. +💁 إذا لم يكن لديك جهاز بعد، يمكنك الرجوع إلى [دليل الأجهزة](../../../hardware.md) للمساعدة في اتخاذ قرار بشأن الجهاز الذي ستستخدمه، وما هي الأجهزة الإضافية التي تحتاج إلى شرائها. لا تحتاج إلى شراء أجهزة، حيث يمكن تشغيل جميع المشاريع على أجهزة افتراضية. +تتضمن هذه التعليمات روابط لمواقع ويب تابعة لجهات خارجية من مصنعي الأجهزة أو الأدوات التي ستستخدمها. الهدف هو ضمان حصولك دائمًا على أحدث التعليمات للأدوات والأجهزة المختلفة. + +اعمل من خلال الدليل المناسب لإعداد جهازك وإكمال مشروع "Hello World". سيكون هذا هو الخطوة الأولى في إنشاء مصباح ليلي IoT على مدار 4 دروس في هذا الجزء التمهيدي. + +* [Arduino - Wio Terminal](wio-terminal.md) +* [Single-board computer - Raspberry Pi](pi.md) +* [Single-board computer - Virtual device](virtual-device.md) + +✅ ستستخدم VS Code لكل من Arduino وأجهزة الكمبيوتر أحادية اللوحة. إذا لم تستخدمه من قبل، اقرأ المزيد عنه على [موقع VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) + +## تطبيقات إنترنت الأشياء + +يغطي إنترنت الأشياء مجموعة واسعة من الاستخدامات عبر عدة مجموعات رئيسية: + +* إنترنت الأشياء للمستهلكين +* إنترنت الأشياء التجاري +* إنترنت الأشياء الصناعي +* إنترنت الأشياء للبنية التحتية + +✅ قم ببعض البحث: لكل مجال من المجالات الموضحة أدناه، ابحث عن مثال ملموس لم يتم ذكره في النص. + +### إنترنت الأشياء للمستهلكين + +يشير إنترنت الأشياء للمستهلكين إلى أجهزة إنترنت الأشياء التي يشتريها المستهلكون ويستخدمونها في المنزل. بعض هذه الأجهزة مفيدة للغاية، مثل مكبرات الصوت الذكية، أنظمة التدفئة الذكية، ومكانس الروبوت. بينما البعض الآخر قد يكون مشكوكًا في فائدته، مثل الصنابير التي يتم التحكم فيها بالصوت والتي قد تعني أنك لا تستطيع إيقافها لأن التحكم الصوتي لا يمكنه سماعك بسبب صوت الماء الجاري. + +تمكّن أجهزة إنترنت الأشياء للمستهلكين الناس من تحقيق المزيد في بيئتهم، خاصةً المليار شخص الذين يعانون من إعاقة. يمكن للمكانس الروبوتية توفير أرضيات نظيفة للأشخاص الذين يعانون من مشاكل في الحركة ولا يستطيعون التنظيف بأنفسهم، الأفران التي يتم التحكم فيها بالصوت تسمح للأشخاص الذين يعانون من ضعف الرؤية أو التحكم الحركي بتسخين أفرانهم باستخدام صوتهم فقط، وأجهزة مراقبة الصحة تمكن المرضى من مراقبة الحالات المزمنة بأنفسهم مع تحديثات أكثر انتظامًا وتفصيلًا عن حالتهم. أصبحت هذه الأجهزة منتشرة جدًا لدرجة أن حتى الأطفال الصغار يستخدمونها كجزء من حياتهم اليومية، على سبيل المثال، الطلاب الذين يتعلمون عن بُعد أثناء جائحة COVID يستخدمون أجهزة المنزل الذكية لتعيين مؤقتات لتتبع واجباتهم المدرسية أو تنبيهات لتذكيرهم بالاجتماعات الصفية القادمة. + +✅ ما هي أجهزة إنترنت الأشياء التي لديك في منزلك أو معك؟ + +### إنترنت الأشياء التجاري + +يغطي إنترنت الأشياء التجاري استخدام إنترنت الأشياء في مكان العمل. في بيئة المكتب، قد تكون هناك أجهزة استشعار للإشغال وكاشفات الحركة لإدارة الإضاءة والتدفئة بحيث يتم تشغيلها فقط عند الحاجة، مما يقلل من التكلفة وانبعاثات الكربون. في المصنع، يمكن لأجهزة إنترنت الأشياء مراقبة المخاطر مثل العمال الذين لا يرتدون خوذات الأمان أو الضوضاء التي وصلت إلى مستويات خطرة. في البيع بالتجزئة، يمكن لأجهزة إنترنت الأشياء قياس درجة حرارة التخزين البارد، وتنبيه صاحب المتجر إذا كانت الثلاجة أو المجمد خارج نطاق درجة الحرارة المطلوبة، أو يمكنها مراقبة العناصر على الرفوف لتوجيه الموظفين لإعادة تعبئة المنتجات التي تم بيعها. تعتمد صناعة النقل بشكل متزايد على إنترنت الأشياء لمراقبة مواقع المركبات، تتبع الأميال على الطرق لفرض رسوم استخدام الطرق، تتبع ساعات السائقين والامتثال لفترات الراحة، أو إخطار الموظفين عندما تقترب مركبة من مستودع للتحضير للتحميل أو التفريغ. + +✅ ما هي أجهزة إنترنت الأشياء التجارية الموجودة في مدرستك أو مكان عملك؟ + +### إنترنت الأشياء الصناعي (IIoT) + +إنترنت الأشياء الصناعي، أو IIoT، هو استخدام أجهزة إنترنت الأشياء للتحكم في الآلات وإدارتها على نطاق واسع. يغطي هذا مجموعة واسعة من الاستخدامات، من المصانع إلى الزراعة الرقمية. + +تستخدم المصانع أجهزة إنترنت الأشياء بطرق عديدة. يمكن مراقبة الآلات باستخدام أجهزة استشعار متعددة لتتبع أشياء مثل درجة الحرارة، الاهتزاز وسرعة الدوران. يمكن مراقبة هذه البيانات للسماح بإيقاف الآلة إذا خرجت عن حدود معينة - مثل ارتفاع درجة الحرارة وإيقافها على سبيل المثال. يمكن أيضًا جمع هذه البيانات وتحليلها بمرور الوقت لإجراء الصيانة التنبؤية، حيث تقوم نماذج الذكاء الاصطناعي بالنظر في البيانات التي تسبق الفشل، واستخدامها للتنبؤ بفشل آخر قبل حدوثه. + +الزراعة الرقمية مهمة إذا كان الكوكب سيطعم السكان المتزايدين، خاصةً بالنسبة لـ 2 مليار شخص في 500 مليون أسرة يعتمدون على [الزراعة المعيشية](https://wikipedia.org/wiki/Subsistence_agriculture). يمكن أن تتراوح الزراعة الرقمية من أجهزة استشعار منخفضة التكلفة إلى إعدادات تجارية ضخمة. يمكن للمزارع البدء بمراقبة درجات الحرارة واستخدام [أيام درجة النمو](https://wikipedia.org/wiki/Growing_degree-day) للتنبؤ بموعد جاهزية المحصول للحصاد. يمكنهم ربط مراقبة رطوبة التربة بأنظمة الري الآلية لتزويد نباتاتهم بالماء بقدر ما يحتاجون إليه، ولكن ليس أكثر لضمان عدم جفاف محاصيلهم دون إهدار الماء. يأخذ المزارعون الأمر إلى أبعد من ذلك باستخدام الطائرات بدون طيار، بيانات الأقمار الصناعية والذكاء الاصطناعي لمراقبة نمو المحاصيل، الأمراض وجودة التربة على مساحات شاسعة من الأراضي الزراعية. + +✅ ما هي أجهزة إنترنت الأشياء الأخرى التي يمكن أن تساعد المزارعين؟ + +### إنترنت الأشياء للبنية التحتية + +إنترنت الأشياء للبنية التحتية هو مراقبة وإدارة البنية التحتية المحلية والعالمية التي يستخدمها الناس يوميًا. + +[المدن الذكية](https://wikipedia.org/wiki/Smart_city) هي مناطق حضرية تستخدم أجهزة إنترنت الأشياء لجمع البيانات عن المدينة واستخدامها لتحسين كيفية تشغيل المدينة. عادةً ما تُدار هذه المدن من خلال تعاون بين الحكومات المحلية، الأكاديميين والشركات المحلية، حيث يتم تتبع وإدارة أشياء متنوعة مثل النقل، مواقف السيارات والتلوث. على سبيل المثال، في كوبنهاغن، الدنمارك، يعتبر تلوث الهواء مهمًا للسكان المحليين، لذا يتم قياسه واستخدام البيانات لتوفير معلومات عن أنظف مسارات ركوب الدراجات والجري. + +[شبكات الطاقة الذكية](https://wikipedia.org/wiki/Smart_grid) تسمح بتحليلات أفضل للطلب على الطاقة من خلال جمع بيانات الاستخدام على مستوى المنازل الفردية. يمكن أن توجه هذه البيانات القرارات على مستوى الدولة بما في ذلك مكان بناء محطات طاقة جديدة، وعلى المستوى الشخصي من خلال إعطاء المستخدمين رؤى حول مقدار الطاقة التي يستخدمونها، متى يستخدمونها، وحتى اقتراحات حول كيفية تقليل التكاليف، مثل شحن السيارات الكهربائية ليلاً. + +✅ إذا كان بإمكانك إضافة أجهزة إنترنت الأشياء لقياس أي شيء في المكان الذي تعيش فيه، فما الذي سيكون؟ + +## أمثلة على أجهزة إنترنت الأشياء التي قد تكون حولك + +ستندهش من عدد أجهزة إنترنت الأشياء التي لديك حولك. أكتب هذا من المنزل ولدي الأجهزة التالية متصلة بالإنترنت مع ميزات ذكية مثل التحكم عبر التطبيقات، التحكم الصوتي، أو القدرة على إرسال البيانات لي عبر هاتفي: + +* مكبرات صوت ذكية متعددة +* ثلاجة، غسالة صحون، فرن وميكروويف +* جهاز مراقبة الكهرباء للألواح الشمسية +* مقابس ذكية +* جرس باب بالفيديو وكاميرات أمنية +* منظم حرارة ذكي مع أجهزة استشعار ذكية متعددة للغرف +* فتاحة باب المرآب +* أنظمة الترفيه المنزلية وتلفزيونات يتم التحكم فيها بالصوت +* أضواء +* أجهزة تتبع اللياقة والصحة + +كل هذه الأنواع من الأجهزة تحتوي على أجهزة استشعار و/أو مشغلات وتتصل بالإنترنت. يمكنني معرفة ما إذا كان باب المرآب مفتوحًا من هاتفي، وطلب من مكبر الصوت الذكي إغلاقه لي. يمكنني حتى ضبطه على مؤقت بحيث إذا كان لا يزال مفتوحًا في الليل، سيتم إغلاقه تلقائيًا. عندما يرن جرس الباب، يمكنني رؤية من هناك عبر هاتفي أينما كنت في العالم، والتحدث معهم عبر مكبر صوت وميكروفون مدمجين في جرس الباب. يمكنني مراقبة نسبة السكر في الدم، معدل ضربات القلب وأنماط النوم، والبحث عن أنماط في البيانات لتحسين صحتي. يمكنني التحكم في الأضواء عبر السحابة، والجلوس في الظلام عندما ينقطع الاتصال بالإنترنت. + +--- + +## 🚀 التحدي + +قم بتعداد أكبر عدد ممكن من أجهزة إنترنت الأشياء الموجودة في منزلك، مدرستك أو مكان عملك - قد يكون هناك أكثر مما تعتقد! + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/2) + +## المراجعة والدراسة الذاتية + +اقرأ عن فوائد وإخفاقات مشاريع إنترنت الأشياء للمستهلكين. تحقق من مواقع الأخبار للحصول على مقالات حول متى حدثت مشاكل، مثل قضايا الخصوصية، مشاكل الأجهزة أو المشاكل الناتجة عن انقطاع الاتصال. + +بعض الأمثلة: + +* تحقق من حساب تويتر **[Internet of Sh*t](https://twitter.com/internetofshit)** *(تحذير: يحتوي على ألفاظ نابية)* للحصول على أمثلة جيدة عن إخفاقات مشاريع إنترنت الأشياء للمستهلكين. +* [c|net - ساعتي Apple أنقذت حياتي: 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/) *(تحذير: يتضمن محتوى غير مرغوب فيه)* + +## الواجب + +[تحقيق في مشروع إنترنت الأشياء](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/1-introduction-to-iot/assignment.md b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/assignment.md new file mode 100644 index 00000000..a785f7db --- /dev/null +++ b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/assignment.md @@ -0,0 +1,27 @@ + +# التحقيق في مشروع إنترنت الأشياء + +## التعليمات + +هناك العديد من مشاريع إنترنت الأشياء الكبيرة والصغيرة التي يتم تنفيذها عالميًا، بدءًا من المزارع الذكية إلى المدن الذكية، في مراقبة الرعاية الصحية، والنقل، واستخدام الأماكن العامة. + +ابحث على الإنترنت عن تفاصيل مشروع يثير اهتمامك، ويفضل أن يكون قريبًا من مكان إقامتك. اشرح الإيجابيات والسلبيات للمشروع، مثل الفوائد التي يقدمها، أي مشاكل يسببها، وكيف يتم أخذ الخصوصية بعين الاعتبار. + +## المعايير + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| شرح الإيجابيات والسلبيات | قدم شرحًا واضحًا للإيجابيات والسلبيات للمشروع | قدم شرحًا موجزًا للإيجابيات والسلبيات | لم يشرح الإيجابيات أو السلبيات | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/1-introduction-to-iot/pi.md b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/pi.md new file mode 100644 index 00000000..081a69b5 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/pi.md @@ -0,0 +1,286 @@ + +# راسبيري باي + +[راسبيري باي](https://raspberrypi.org) هو كمبيوتر صغير على لوحة واحدة. يمكنك إضافة أجهزة استشعار ومحركات باستخدام مجموعة واسعة من الأجهزة والنظم البيئية، وفي هذه الدروس ستستخدم نظامًا بيئيًا للأجهزة يسمى [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html). ستقوم ببرمجة راسبيري باي والوصول إلى أجهزة استشعار Grove باستخدام لغة بايثون. + +![راسبيري باي 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg) + +## الإعداد + +إذا كنت تستخدم راسبيري باي كجهاز إنترنت الأشياء الخاص بك، لديك خياران - يمكنك العمل من خلال جميع هذه الدروس والبرمجة مباشرة على راسبيري باي، أو يمكنك الاتصال به عن بُعد كجهاز "بدون شاشة" والبرمجة من جهاز الكمبيوتر الخاص بك. + +قبل أن تبدأ، تحتاج أيضًا إلى توصيل قبعة قاعدة Grove إلى راسبيري باي. + +### المهمة - الإعداد + +قم بتثبيت قبعة قاعدة Grove على راسبيري باي وقم بتكوين الجهاز. + +1. قم بتوصيل قبعة قاعدة Grove إلى راسبيري باي. المقبس الموجود على القبعة يتناسب مع جميع دبابيس GPIO على راسبيري باي، وينزلق بالكامل على الدبابيس ليجلس بثبات على القاعدة. يتم تثبيته فوق راسبيري باي، ويغطيه. + + ![تركيب قبعة Grove](../../../../../images/pi-grove-hat-fitting.gif) + +1. قرر كيف تريد برمجة راسبيري باي، وانتقل إلى القسم المناسب أدناه: + + * [العمل مباشرة على راسبيري باي](../../../../../1-getting-started/lessons/1-introduction-to-iot) + * [الوصول عن بُعد لبرمجة راسبيري باي](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +### العمل مباشرة على راسبيري باي + +إذا كنت ترغب في العمل مباشرة على راسبيري باي، يمكنك استخدام النسخة المكتبية من نظام تشغيل راسبيري باي وتثبيت جميع الأدوات التي تحتاجها. + +#### المهمة - العمل مباشرة على راسبيري باي + +قم بإعداد راسبيري باي للتطوير. + +1. اتبع التعليمات في [دليل إعداد راسبيري باي](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up) لإعداد راسبيري باي، وتوصيله بلوحة مفاتيح/فأرة/شاشة، وربطه بشبكة WiFi أو شبكة إيثرنت، وتحديث البرامج. + +لبرمجة راسبيري باي باستخدام أجهزة استشعار ومحركات Grove، ستحتاج إلى تثبيت محرر يسمح لك بكتابة كود الجهاز، بالإضافة إلى مكتبات وأدوات مختلفة تتفاعل مع أجهزة Grove. + +1. بمجرد إعادة تشغيل راسبيري باي، قم بتشغيل الطرفية بالنقر على أيقونة **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 لتثبيت حزم بايثون. + + واحدة من الميزات القوية لبايثون هي القدرة على تثبيت [حزم Pip](https://pypi.org) - وهي حزم من الكود مكتوبة من قبل أشخاص آخرين ومنشورة على الإنترنت. يمكنك تثبيت حزمة Pip على جهاز الكمبيوتر الخاص بك بأمر واحد، ثم استخدام تلك الحزمة في الكود الخاص بك. + + تحتاج حزم بايثون الخاصة بـ Seeed Grove إلى التثبيت من المصدر. هذه الأوامر ستقوم باستنساخ المستودع الذي يحتوي على الكود المصدري لهذه الحزمة، ثم تثبيته محليًا. + + > 💁 بشكل افتراضي، عندما تقوم بتثبيت حزمة، تكون متاحة في كل مكان على جهاز الكمبيوتر الخاص بك، وهذا يمكن أن يؤدي إلى مشاكل في إصدارات الحزم - مثل اعتماد تطبيق واحد على إصدار معين من الحزمة الذي يتعطل عند تثبيت إصدار جديد لتطبيق مختلف. لتجنب هذه المشكلة، يمكنك استخدام [بيئة افتراضية لبايثون](https://docs.python.org/3/library/venv.html)، وهي نسخة من بايثون في مجلد مخصص، وعندما تقوم بتثبيت حزم Pip يتم تثبيتها فقط في ذلك المجلد. لن تستخدم البيئات الافتراضية عند استخدام راسبيري باي. يقوم سكربت تثبيت Grove بتثبيت حزم بايثون الخاصة بـ Grove عالميًا، لذا إذا كنت ترغب في استخدام بيئة افتراضية، ستحتاج إلى إعداد البيئة الافتراضية ثم إعادة تثبيت حزم Grove يدويًا داخل تلك البيئة. من الأسهل استخدام الحزم العالمية، خاصةً لأن العديد من مطوري راسبيري باي يقومون بإعادة تهيئة بطاقة SD نظيفة لكل مشروع. + + أخيرًا، يتم تمكين واجهة I2C. + +1. أعد تشغيل راسبيري باي إما باستخدام القائمة أو تشغيل الأمر التالي في الطرفية: + + ```sh + sudo reboot + ``` + +1. بمجرد إعادة تشغيل راسبيري باي، أعد تشغيل الطرفية وقم بتشغيل الأمر التالي لتثبيت [Visual Studio Code (VS Code)](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) - وهو المحرر الذي ستستخدمه لكتابة كود الجهاز الخاص بك بلغة بايثون. + + ```sh + sudo apt install code + ``` + + بمجرد تثبيته، سيكون VS Code متاحًا من شريط القائمة العلوي. + + > 💁 يمكنك استخدام أي محرر أو بيئة تطوير متكاملة (IDE) لبايثون لهذه الدروس إذا كان لديك أداة مفضلة، ولكن الدروس ستقدم تعليمات بناءً على استخدام VS Code. + +1. قم بتثبيت Pylance. هذا هو امتداد لـ VS Code يوفر دعمًا للغة بايثون. راجع [وثائق امتداد Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) للحصول على تعليمات حول تثبيت هذا الامتداد في VS Code. + +### الوصول عن بُعد لبرمجة راسبيري باي + +بدلاً من البرمجة مباشرة على راسبيري باي، يمكن تشغيله كجهاز "بدون شاشة"، أي غير متصل بلوحة مفاتيح/فأرة/شاشة، وتكوينه وبرمجته من جهاز الكمبيوتر الخاص بك باستخدام Visual Studio Code. + +#### إعداد نظام تشغيل راسبيري باي + +لبرمجة الجهاز عن بُعد، يجب تثبيت نظام تشغيل راسبيري باي على بطاقة SD. + +##### المهمة - إعداد نظام تشغيل راسبيري باي + +قم بإعداد نظام تشغيل راسبيري باي "بدون شاشة". + +1. قم بتنزيل **Raspberry Pi Imager** من [صفحة برامج نظام تشغيل راسبيري باي](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.ar.png) + + > 💁 Raspberry Pi OS Lite هو إصدار من نظام تشغيل راسبيري باي لا يحتوي على واجهة المستخدم الرسومية أو الأدوات القائمة على واجهة المستخدم. هذه الأدوات ليست ضرورية لجهاز "بدون شاشة" وتجعل التثبيت أصغر ووقت التشغيل أسرع. + +1. اختر زر **CHOOSE STORAGE**، ثم اختر بطاقة SD الخاصة بك. + +1. قم بتشغيل **خيارات متقدمة** بالضغط على `Ctrl+Shift+X`. تتيح هذه الخيارات بعض التكوين المسبق لنظام تشغيل راسبيري باي قبل نسخه إلى بطاقة SD. + + 1. قم بتحديد مربع **Enable SSH**، وقم بتعيين كلمة مرور لمستخدم `pi`. هذه هي كلمة المرور التي ستستخدمها لتسجيل الدخول إلى راسبيري باي لاحقًا. + + 1. إذا كنت تخطط للاتصال براسبيري باي عبر WiFi، قم بتحديد مربع **Configure WiFi**، وأدخل SSID وكلمة مرور WiFi الخاصة بك، بالإضافة إلى اختيار بلد WiFi الخاص بك. لا تحتاج إلى القيام بذلك إذا كنت ستستخدم كابل إيثرنت. تأكد من أن الشبكة التي تتصل بها هي نفس الشبكة التي يتصل بها جهاز الكمبيوتر الخاص بك. + + 1. قم بتحديد مربع **Set locale settings**، وقم بتعيين بلدك ومنطقتك الزمنية. + + 1. اختر زر **SAVE**. + +1. اختر زر **WRITE** لكتابة نظام التشغيل إلى بطاقة SD. إذا كنت تستخدم macOS، سيُطلب منك إدخال كلمة المرور الخاصة بك لأن الأداة الأساسية التي تكتب صور الأقراص تحتاج إلى وصول مميز. + +سيتم كتابة نظام التشغيل إلى بطاقة SD، وبمجرد الانتهاء سيتم إخراج البطاقة بواسطة نظام التشغيل، وستتلقى إشعارًا. قم بإزالة بطاقة SD من جهاز الكمبيوتر الخاص بك، وأدخلها في راسبيري باي، وقم بتشغيل الجهاز وانتظر حوالي دقيقتين حتى يتم تشغيله بشكل صحيح. + +#### الاتصال براسبيري باي + +الخطوة التالية هي الوصول إلى راسبيري باي عن بُعد. يمكنك القيام بذلك باستخدام `ssh`، وهو متاح على macOS، Linux والإصدارات الحديثة من Windows. + +##### المهمة - الاتصال براسبيري باي + +الوصول إلى راسبيري باي عن بُعد. + +1. قم بتشغيل الطرفية أو موجه الأوامر، وأدخل الأمر التالي للاتصال براسبيري باي: + + ```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. يجب أن يتصل هذا براسبيري باي ويطلب كلمة المرور. + + القدرة على العثور على أجهزة الكمبيوتر على شبكتك باستخدام `.local` هي إضافة حديثة نسبيًا إلى Linux وWindows. إذا كنت تستخدم Linux أو Windows وواجهت أي أخطاء حول عدم العثور على اسم المضيف، ستحتاج إلى تثبيت برامج إضافية لتمكين الشبكات ZeroConf (المعروفة أيضًا باسم Bonjour من Apple): + + 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 الخاص براسبيري باي. راجع [وثائق عنوان IP الخاص براسبيري باي](https://www.raspberrypi.org/documentation/remote-access/ip-address.md) للحصول على تعليمات حول عدد من الطرق للحصول على عنوان IP. + +1. أدخل كلمة المرور التي قمت بتعيينها في خيارات Raspberry Pi Imager المتقدمة. + +#### تكوين البرامج على راسبيري باي + +بمجرد الاتصال براسبيري باي، تحتاج إلى التأكد من تحديث نظام التشغيل، وتثبيت مكتبات وأدوات مختلفة تتفاعل مع أجهزة Grove. + +##### المهمة - تكوين البرامج على راسبيري باي + +قم بتكوين البرامج المثبتة على راسبيري باي وتثبيت مكتبات Grove. + +1. من جلسة `ssh` الخاصة بك، قم بتشغيل الأمر التالي لتحديث ثم إعادة تشغيل راسبيري باي: + + ```sh + sudo apt update && sudo apt full-upgrade --yes && sudo reboot + ``` + + سيتم تحديث راسبيري باي وإعادة تشغيله. ستنتهي جلسة `ssh` عند إعادة تشغيل راسبيري باي، لذا اتركه لمدة حوالي 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 لتثبيت حزم بايثون. + + واحدة من الميزات القوية لبايثون هي القدرة على تثبيت [حزم Pip](https://pypi.org) - وهي حزم من الكود مكتوبة من قبل أشخاص آخرين ومنشورة على الإنترنت. يمكنك تثبيت حزمة Pip على جهاز الكمبيوتر الخاص بك بأمر واحد، ثم استخدام تلك الحزمة في الكود الخاص بك. + + تحتاج حزم بايثون الخاصة بـ Seeed Grove إلى التثبيت من المصدر. هذه الأوامر ستقوم باستنساخ المستودع الذي يحتوي على الكود المصدري لهذه الحزمة، ثم تثبيته محليًا. + + > 💁 بشكل افتراضي، عندما تقوم بتثبيت حزمة، تكون متاحة في كل مكان على جهاز الكمبيوتر الخاص بك، وهذا يمكن أن يؤدي إلى مشاكل في إصدارات الحزم - مثل اعتماد تطبيق واحد على إصدار معين من الحزمة الذي يتعطل عند تثبيت إصدار جديد لتطبيق مختلف. لتجنب هذه المشكلة، يمكنك استخدام [بيئة افتراضية لبايثون](https://docs.python.org/3/library/venv.html)، وهي نسخة من بايثون في مجلد مخصص، وعندما تقوم بتثبيت حزم Pip يتم تثبيتها فقط في ذلك المجلد. لن تستخدم البيئات الافتراضية عند استخدام راسبيري باي. يقوم سكربت تثبيت Grove بتثبيت حزم بايثون الخاصة بـ Grove عالميًا، لذا إذا كنت ترغب في استخدام بيئة افتراضية، ستحتاج إلى إعداد البيئة الافتراضية ثم إعادة تثبيت حزم Grove يدويًا داخل تلك البيئة. من الأسهل استخدام الحزم العالمية، خاصةً لأن العديد من مطوري راسبيري باي يقومون بإعادة تهيئة بطاقة SD نظيفة لكل مشروع. + + أخيرًا، يتم تمكين واجهة I2C. + +1. أعد تشغيل راسبيري باي عن طريق تشغيل الأمر التالي: + + ```sh + sudo reboot + ``` + + ستنتهي جلسة `ssh` عند إعادة تشغيل راسبيري باي. لا حاجة لإعادة الاتصال. + +#### تكوين VS Code للوصول عن بُعد + +بمجرد تكوين راسبيري باي، يمكنك الاتصال به باستخدام Visual Studio Code (VS Code) من جهاز الكمبيوتر الخاص بك - وهو محرر نصوص مجاني للمطورين ستستخدمه لكتابة كود الجهاز الخاص بك بلغة بايثون. + +##### المهمة - تكوين VS Code للوصول عن بُعد + +قم بتثبيت البرامج المطلوبة واتصل براسبيري باي عن بُعد. + +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 براسبيري باي. + +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) عن بُعد على راسبيري باي. + +## مرحبًا بالعالم +من التقليدي عند البدء بلغة برمجة جديدة أو تقنية جديدة إنشاء تطبيق "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. قم بتشغيل Terminal الخاص بـ 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.ar.png) + +1. افتح ملف `app.py` من مستكشف VS Code وأضف الكود التالي: + + ```python + print('Hello World!') + ``` + + وظيفة `print` تقوم بطباعة أي شيء يتم تمريره إليها في وحدة التحكم. + +1. من Terminal الخاص بـ VS Code، قم بتشغيل الأمر التالي لتشغيل تطبيق Python الخاص بك: + + ```sh + python app.py + ``` + + > 💁 قد تحتاج إلى استدعاء `python3` بشكل صريح لتشغيل هذا الكود إذا كان لديك Python 2 مثبتًا بالإضافة إلى Python 3 (الإصدار الأحدث). إذا كان Python 2 مثبتًا، فإن استدعاء `python` سيستخدم Python 2 بدلًا من Python 3. بشكل افتراضي، الإصدارات الأحدث من نظام تشغيل Raspberry Pi تحتوي فقط على 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" الخاص بك! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md new file mode 100644 index 00000000..117ecff7 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md @@ -0,0 +1,245 @@ + +# الكمبيوتر أحادي اللوحة الافتراضي + +بدلاً من شراء جهاز إنترنت الأشياء (IoT) مع المستشعرات والمحركات، يمكنك استخدام جهاز الكمبيوتر الخاص بك لمحاكاة أجهزة إنترنت الأشياء. يتيح لك مشروع [CounterFit](https://github.com/CounterFit-IoT/CounterFit) تشغيل تطبيق محلي يحاكي أجهزة إنترنت الأشياء مثل المستشعرات والمحركات، والوصول إلى هذه المستشعرات والمحركات من خلال كود 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. + + > 💁 يمكنك استخدام أي محرر أو بيئة تطوير متكاملة (IDE) لكتابة كود Python إذا كنت تفضل أداة معينة، ولكن الدروس ستعتمد على استخدام 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"` للتأكد من أن جميع الأدوات تم تكوينها بشكل صحيح. + +تطبيق "مرحبًا بالعالم" لأجهزة إنترنت الأشياء الافتراضية سيضمن أن لديك Python وVisual Studio Code مثبتين بشكل صحيح. كما سيتصل بـ CounterFit لأجهزة إنترنت الأشياء الافتراضية. لن يستخدم أي أجهزة، فقط سيتصل للتأكد من أن كل شيء يعمل. + +سيكون هذا التطبيق في مجلد يسمى `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 ولكنها متصلة بأجهزة إنترنت الأشياء الافتراضية. + + ```sh + pip install CounterFit + pip install counterfit-connection + pip install counterfit-shims-grove + ``` + + سيتم تثبيت هذه الحزم فقط في البيئة الافتراضية، ولن تكون متاحة خارجها. + +### كتابة الكود + +بمجرد أن تكون البيئة الافتراضية لـ Python جاهزة، يمكنك كتابة الكود لتطبيق "مرحبًا بالعالم". + +#### المهمة - كتابة الكود + +قم بإنشاء تطبيق 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 showing the selected virtual environment](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ar.png) + +1. إذا كانت طرفية VS Code تعمل بالفعل عند بدء تشغيل VS Code، فلن يتم تفعيل البيئة الافتراضية فيها. أسهل شيء يمكنك القيام به هو إنهاء الطرفية باستخدام زر **Kill the active terminal instance**: + + ![VS Code Kill the active terminal instance button](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ar.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 وأضف الكود التالي: + + ```python + print('Hello World!') + ``` + + تقوم وظيفة `print` بطباعة ما يتم تمريره إليها إلى وحدة التحكم. + +1. من طرفية VS Code، قم بتشغيل الأمر التالي لتشغيل تطبيق Python الخاص بك: + + ```sh + python app.py + ``` + + سيكون الإخراج كما يلي: + + ```output + (.venv) ➜ nightlight python app.py + Hello World! + ``` + +😀 لقد نجح تطبيق "مرحبًا بالعالم" الخاص بك! + +### توصيل "الأجهزة" + +كخطوة ثانية لتطبيق "مرحبًا بالعالم"، ستقوم بتشغيل تطبيق CounterFit وتوصيل الكود الخاص بك به. هذا هو المكافئ الافتراضي لتوصيل بعض أجهزة إنترنت الأشياء بلوحة تطوير. + +#### المهمة - توصيل "الأجهزة" + +1. من طرفية VS Code، قم بتشغيل تطبيق CounterFit باستخدام الأمر التالي: + + ```sh + counterfit + ``` + + سيبدأ التطبيق في التشغيل ويفتح في متصفح الويب الخاص بك: + + ![The Counter Fit app running in a browser](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.ar.png) + + سيتم تصنيفه كـ *Disconnected*، مع إطفاء LED في الزاوية العلوية اليمنى. + +1. أضف الكود التالي إلى أعلى ملف `app.py`: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + + يقوم هذا الكود باستيراد فئة `CounterFitConnection` من وحدة `counterfit_connection`، والتي تأتي من حزمة `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 Create a new integrated terminal button](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.ar.png) + +1. في هذه الطرفية الجديدة، قم بتشغيل ملف `app.py` كما كان من قبل. ستتغير حالة CounterFit إلى **Connected** وسيضيء LED. + + ![Counter Fit showing as connected](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.ar.png) + +> 💁 يمكنك العثور على هذا الكود في مجلد [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device). + +😀 لقد نجح الاتصال بالأجهزة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md b/translations/ar/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md new file mode 100644 index 00000000..2ef946ec --- /dev/null +++ b/translations/ar/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.ar.png) + +## الإعداد + +لاستخدام Wio Terminal، ستحتاج إلى تثبيت بعض البرامج المجانية على جهاز الكمبيوتر الخاص بك. كما ستحتاج إلى تحديث البرنامج الثابت (firmware) الخاص بـ Wio Terminal قبل أن تتمكن من توصيله بشبكة WiFi. + +### المهمة - الإعداد + +قم بتثبيت البرامج المطلوبة وتحديث البرنامج الثابت. + +1. قم بتثبيت Visual Studio Code (VS Code). هذا هو المحرر الذي ستستخدمه لكتابة كود الجهاز بلغة C/C++. راجع [وثائق VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) للحصول على تعليمات التثبيت. + + > 💁 IDE آخر شائع لتطوير Arduino هو [Arduino IDE](https://www.arduino.cc/en/software). إذا كنت بالفعل على دراية بهذه الأداة، يمكنك استخدامها بدلاً من VS Code وPlatformIO، ولكن الدروس ستعتمد على استخدام VS Code. + +1. قم بتثبيت إضافة PlatformIO لـ VS Code. هذه الإضافة تدعم برمجة المتحكمات الدقيقة بلغة C/C++. راجع [وثائق إضافة PlatformIO](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=platformio.platformio-ide) للحصول على تعليمات التثبيت. تعتمد هذه الإضافة على إضافة 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. اتبع التعليمات في [وثائق Wio Terminal Wiki WiFi Overview](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/) لإعداد Wio Terminal وتحديث البرنامج الثابت. + +## Hello World + +من التقليدي عند البدء باستخدام لغة برمجة أو تقنية جديدة إنشاء تطبيق "Hello World" - وهو تطبيق صغير يعرض نصًا مثل `"Hello World"` للتأكد من أن جميع الأدوات تم إعدادها بشكل صحيح. + +تطبيق 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.ar.png) + + اختر هذا العنصر من القائمة، ثم اختر *PIO Home -> Open*. + + ![خيار فتح PlatformIO](../../../../../translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.ar.png) + +1. من شاشة الترحيب، اختر زر **+ New Project**. + + ![زر مشروع جديد](../../../../../translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.ar.png) + +1. قم بتكوين المشروع في *معالج المشروع*: + + 1. قم بتسمية مشروعك `nightlight`. + + 1. من قائمة *Board* المنسدلة، اكتب `WIO` لتصفية اللوحات، واختر *Seeeduino Wio Terminal*. + + 1. اترك خيار *Framework* كما هو على *Arduino*. + + 1. إما أن تترك خيار *Use default location* محددًا، أو قم بإلغاء تحديده واختر موقعًا لمشروعك. + + 1. اختر زر **Finish**. + + ![معالج المشروع المكتمل](../../../../../translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.ar.png) + + سيقوم PlatformIO بتنزيل المكونات التي يحتاجها لتجميع الكود الخاص بـ Wio Terminal وإنشاء مشروعك. قد يستغرق هذا بضع دقائق. + +### استكشاف مشروع PlatformIO + +سيعرض مستكشف VS Code عددًا من الملفات والمجلدات التي أنشأها معالج PlatformIO. + +#### المجلدات + +* `.pio` - يحتوي هذا المجلد على بيانات مؤقتة يحتاجها PlatformIO مثل المكتبات أو الكود المترجم. يتم إعادة إنشائه تلقائيًا إذا تم حذفه، ولا تحتاج إلى إضافته إلى التحكم في الكود المصدري إذا كنت تشارك مشروعك على مواقع مثل GitHub. +* `.vscode` - يحتوي هذا المجلد على التكوين المستخدم بواسطة PlatformIO وVS Code. يتم إعادة إنشائه تلقائيًا إذا تم حذفه، ولا تحتاج إلى إضافته إلى التحكم في الكود المصدري إذا كنت تشارك مشروعك على مواقع مثل GitHub. +* `include` - هذا المجلد مخصص لملفات الرأس الخارجية المطلوبة عند إضافة مكتبات إضافية إلى الكود الخاص بك. لن تستخدم هذا المجلد في أي من هذه الدروس. +* `lib` - هذا المجلد مخصص للمكتبات الخارجية التي تريد استدعاءها من الكود الخاص بك. لن تستخدم هذا المجلد في أي من هذه الدروس. +* `src` - يحتوي هذا المجلد على الكود المصدري الرئيسي لتطبيقك. في البداية، سيحتوي على ملف واحد - `main.cpp`. +* `test` - هذا المجلد هو المكان الذي ستضع فيه أي اختبارات وحدة للكود الخاص بك. + +#### الملفات + +* `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: + } + ``` + + عند بدء تشغيل الجهاز، سيقوم إطار عمل 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` متعددة بحيث يمكن تجميع الكود الخاص بك لألواح متعددة. + + القيم الأخرى تتطابق مع التكوين من معالج المشروع: + + * `platform = atmelsam` يحدد الأجهزة التي يستخدمها Wio Terminal (وحدة تحكم دقيقة تعتمد على ATSAMD51). + * `board = seeed_wio_terminal` يحدد نوع لوحة المتحكم الدقيقة (Wio Terminal). + * `framework = arduino` يحدد أن هذا المشروع يستخدم إطار عمل Arduino. + +### كتابة تطبيق Hello World + +أنت الآن جاهز لكتابة تطبيق Hello World. + +#### المهمة - كتابة تطبيق Hello World + +اكتب تطبيق Hello World. + +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` هو [معدل البود](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.ar.png) + + سيقوم PlatformIO تلقائيًا ببناء الكود إذا لزم الأمر قبل التحميل. + + 1. سيتم تجميع الكود وتحميله إلى Wio Terminal. + + > 💁 إذا كنت تستخدم macOS، ستظهر إشعار حول *DISK NOT EJECTED PROPERLY*. يحدث هذا لأن Wio Terminal يتم تركيبه كقرص كجزء من عملية الفلاش، ويتم فصله عند كتابة الكود المترجم إلى الجهاز. يمكنك تجاهل هذا الإشعار. + + ⚠️ إذا واجهت أخطاء حول عدم توفر منفذ التحميل، تأكد أولاً من أن Wio Terminal متصل بجهاز الكمبيوتر الخاص بك، ومشغل باستخدام المفتاح الموجود على الجانب الأيسر من الشاشة، ومضبوط على وضع التحميل. يجب أن يكون الضوء الأخضر في الأسفل مضاءً، والضوء الأزرق يومض ببطء. إذا استمرت المشكلة، اسحب مفتاح التشغيل/الإيقاف مرتين بسرعة مرة أخرى لإجبار Wio Terminal على وضع التحميل وحاول التحميل مرة أخرى. + +يحتوي PlatformIO على مراقب تسلسلي يمكنه مراقبة البيانات المرسلة عبر كابل USB من Wio Terminal. يتيح لك ذلك مراقبة البيانات المرسلة بواسطة الأمر `Serial.println("Hello World");`. + +1. افتح لوحة الأوامر في VS Code. + +1. اكتب `PlatformIO Serial` للبحث عن خيار المراقب التسلسلي، واختر *PlatformIO: Serial Monitor*. + + ![خيار مراقب PlatformIO التسلسلي في لوحة الأوامر](../../../../../translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.ar.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). + +😀 لقد نجحت في تشغيل برنامج "Hello World"! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/2-deeper-dive/README.md b/translations/ar/1-getting-started/lessons/2-deeper-dive/README.md new file mode 100644 index 00000000..96ae24bc --- /dev/null +++ b/translations/ar/1-getting-started/lessons/2-deeper-dive/README.md @@ -0,0 +1,277 @@ + +# نظرة أعمق على إنترنت الأشياء + +![رسم توضيحي لهذه الدرس](../../../../../translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.ar.jpg) + +> رسم توضيحي من [نيتيا ناراسيمهان](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: نظرة أعمق على إنترنت الأشياء](https://img.youtube.com/vi/t0SySWw3z9M/0.jpg)](https://youtu.be/t0SySWw3z9M) + +[![الدرس 2: نظرة أعمق على إنترنت الأشياء - ساعة الأسئلة](https://img.youtube.com/vi/tTZYf9EST1E/0.jpg)](https://youtu.be/tTZYf9EST1E) + +> 🎥 انقر على الصور أعلاه لمشاهدة الفيديوهات + +## اختبار ما قبل المحاضرة + +[اختبار ما قبل المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3) + +## المقدمة + +يتعمق هذا الدرس في بعض المفاهيم التي تم تناولها في الدرس السابق. + +في هذا الدرس سنتناول: + +* [مكونات تطبيق إنترنت الأشياء](../../../../../1-getting-started/lessons/2-deeper-dive) +* [نظرة أعمق على المتحكمات الدقيقة](../../../../../1-getting-started/lessons/2-deeper-dive) +* [نظرة أعمق على الحواسيب أحادية اللوحة](../../../../../1-getting-started/lessons/2-deeper-dive) + +## مكونات تطبيق إنترنت الأشياء + +يتكون تطبيق إنترنت الأشياء من مكونين رئيسيين: *الإنترنت* و *الجهاز*. دعونا نلقي نظرة على هذين المكونين بمزيد من التفصيل. + +### الجهاز + +![راسبيري باي 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg) + +يشير الجزء الخاص بـ **الجهاز** في إنترنت الأشياء إلى جهاز يمكنه التفاعل مع العالم المادي. عادةً ما تكون هذه الأجهزة صغيرة الحجم ومنخفضة التكلفة، تعمل بسرعات منخفضة وتستهلك طاقة قليلة - على سبيل المثال، متحكمات دقيقة بسيطة تحتوي على كيلوبايتات من ذاكرة الوصول العشوائي (RAM) (مقارنةً بالجيجابايتات في أجهزة الكمبيوتر) وتعمل بسرعة بضع مئات من الميجاهرتز (مقارنةً بالجيجاهرتز في أجهزة الكمبيوتر)، لكنها تستهلك أحيانًا طاقة قليلة جدًا بحيث يمكنها العمل لأسابيع أو شهور أو حتى سنوات باستخدام البطاريات. + +تتفاعل هذه الأجهزة مع العالم المادي إما باستخدام مستشعرات لجمع البيانات من البيئة المحيطة أو عن طريق التحكم في المخرجات أو المشغلات لإحداث تغييرات مادية. المثال النموذجي على ذلك هو منظم الحرارة الذكي - جهاز يحتوي على مستشعر درجة حرارة، ووسيلة لتحديد درجة الحرارة المطلوبة مثل قرص أو شاشة تعمل باللمس، واتصال بنظام تدفئة أو تبريد يمكن تشغيله عندما تكون درجة الحرارة المكتشفة خارج النطاق المطلوب. يكتشف مستشعر درجة الحرارة أن الغرفة باردة جدًا، ويقوم المشغل بتشغيل التدفئة. + +![رسم بياني يظهر درجة الحرارة وقرصًا كمدخلات لجهاز إنترنت الأشياء، والتحكم في المدفأة كمخرج](../../../../../translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.ar.png) + +هناك مجموعة كبيرة من الأجهزة التي يمكن أن تعمل كأجهزة إنترنت الأشياء، بدءًا من الأجهزة المخصصة التي تستشعر شيئًا واحدًا، إلى الأجهزة متعددة الأغراض، وحتى هاتفك الذكي! يمكن للهاتف الذكي استخدام المستشعرات لاكتشاف العالم من حوله، والمشغلات للتفاعل مع العالم - على سبيل المثال باستخدام مستشعر GPS لاكتشاف موقعك ومكبر صوت لإعطائك تعليمات التنقل إلى وجهة. + +✅ فكر في أنظمة أخرى حولك تقرأ البيانات من مستشعر وتستخدمها لاتخاذ قرارات. مثال على ذلك هو منظم الحرارة في الفرن. هل يمكنك العثور على المزيد؟ + +### الإنترنت + +يتكون جانب **الإنترنت** في تطبيق إنترنت الأشياء من تطبيقات يمكن للجهاز الاتصال بها لإرسال واستقبال البيانات، بالإضافة إلى تطبيقات أخرى يمكنها معالجة البيانات من جهاز إنترنت الأشياء والمساعدة في اتخاذ قرارات بشأن الطلبات التي يتم إرسالها إلى مشغلات الجهاز. + +إحدى التكوينات النموذجية هي وجود نوع من الخدمات السحابية التي يتصل بها جهاز إنترنت الأشياء، حيث تتولى هذه الخدمة السحابية أمورًا مثل الأمان، بالإضافة إلى استقبال الرسائل من جهاز إنترنت الأشياء وإرسال الرسائل مرة أخرى إلى الجهاز. تتصل هذه الخدمة السحابية بعد ذلك بتطبيقات أخرى يمكنها معالجة أو تخزين بيانات المستشعر، أو استخدام بيانات المستشعر مع بيانات من أنظمة أخرى لاتخاذ قرارات. + +لا تتصل الأجهزة دائمًا بالإنترنت مباشرةً عبر WiFi أو الاتصالات السلكية. تستخدم بعض الأجهزة شبكات متشابكة للتواصل مع بعضها البعض عبر تقنيات مثل البلوتوث، متصلة عبر جهاز محور يحتوي على اتصال بالإنترنت. + +في مثال منظم الحرارة الذكي، يتصل المنظم باستخدام WiFi المنزلي بخدمة سحابية تعمل في السحابة. يرسل بيانات درجة الحرارة إلى هذه الخدمة السحابية، ومن هناك يتم كتابتها إلى قاعدة بيانات من نوع ما مما يسمح لصاحب المنزل بالتحقق من درجات الحرارة الحالية والسابقة باستخدام تطبيق الهاتف. ستعرف خدمة أخرى في السحابة درجة الحرارة التي يريدها صاحب المنزل، وترسل رسائل مرة أخرى إلى جهاز إنترنت الأشياء عبر الخدمة السحابية لإخبار نظام التدفئة بالتشغيل أو الإيقاف. + +![رسم بياني يظهر درجة الحرارة وقرصًا كمدخلات لجهاز إنترنت الأشياء، الجهاز مع اتصال ثنائي الاتجاه بالسحابة، والتي بدورها لديها اتصال ثنائي الاتجاه مع الهاتف، والتحكم في المدفأة كمخرج من جهاز إنترنت الأشياء](../../../../../translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.ar.png) + +يمكن أن يكون الإصدار الأكثر ذكاءً يستخدم الذكاء الاصطناعي في السحابة مع بيانات من مستشعرات أخرى متصلة بأجهزة إنترنت الأشياء الأخرى مثل مستشعرات الإشغال التي تكتشف الغرف المستخدمة، بالإضافة إلى بيانات مثل الطقس وحتى تقويمك، لاتخاذ قرارات حول كيفية ضبط درجة الحرارة بطريقة ذكية. على سبيل المثال، يمكنه إيقاف التدفئة إذا قرأ من تقويمك أنك في إجازة، أو إيقاف التدفئة على أساس كل غرفة على حدة بناءً على الغرف التي تستخدمها، متعلمًا من البيانات ليصبح أكثر دقة بمرور الوقت. + +![رسم بياني يظهر مستشعرات درجة حرارة متعددة وقرصًا كمدخلات لجهاز إنترنت الأشياء، الجهاز مع اتصال ثنائي الاتجاه بالسحابة، والتي بدورها لديها اتصال ثنائي الاتجاه مع الهاتف، والتقويم وخدمة الطقس، والتحكم في المدفأة كمخرج من جهاز إنترنت الأشياء](../../../../../translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.ar.png) + +✅ ما هي البيانات الأخرى التي يمكن أن تساعد في جعل منظم الحرارة المتصل بالإنترنت أكثر ذكاءً؟ + +### إنترنت الأشياء على الحافة + +على الرغم من أن الحرف I في IoT يشير إلى الإنترنت، إلا أن هذه الأجهزة لا تحتاج دائمًا إلى الاتصال بالإنترنت. في بعض الحالات، يمكن للأجهزة الاتصال بأجهزة "الحافة" - وهي أجهزة بوابة تعمل على شبكتك المحلية مما يعني أنه يمكنك معالجة البيانات دون إجراء اتصال عبر الإنترنت. يمكن أن يكون هذا أسرع عندما يكون لديك الكثير من البيانات أو اتصال إنترنت بطيء، كما يسمح لك بالعمل دون اتصال حيث لا يكون الاتصال بالإنترنت ممكنًا مثل السفن أو في مناطق الكوارث عند الاستجابة لأزمة إنسانية، ويسمح لك بالحفاظ على خصوصية البيانات. تحتوي بعض الأجهزة على كود معالجة تم إنشاؤه باستخدام أدوات السحابة ويتم تشغيله محليًا لجمع البيانات والاستجابة لها دون استخدام اتصال بالإنترنت لاتخاذ قرار. + +أحد الأمثلة على ذلك هو جهاز المنزل الذكي مثل Apple HomePod أو Amazon Alexa أو Google Home، والذي يستمع إلى صوتك باستخدام نماذج الذكاء الاصطناعي المدربة في السحابة، ولكنها تعمل محليًا على الجهاز. تستيقظ هذه الأجهزة عند سماع كلمة أو عبارة معينة، وترسل صوتك فقط عبر الإنترنت للمعالجة بعد ذلك. يتوقف الجهاز عن إرسال الصوت عند نقطة مناسبة مثل اكتشاف وقفة في حديثك. كل ما تقوله قبل إيقاظ الجهاز بالكلمة المفتاحية، وكل ما تقوله بعد أن يتوقف الجهاز عن الاستماع لن يتم إرساله عبر الإنترنت إلى مزود الجهاز، وبالتالي سيظل خاصًا. + +✅ فكر في سيناريوهات أخرى تكون فيها الخصوصية مهمة بحيث يكون من الأفضل معالجة البيانات على الحافة بدلاً من السحابة. كتلميح - فكر في أجهزة إنترنت الأشياء التي تحتوي على كاميرات أو أجهزة تصوير أخرى. + +### أمان إنترنت الأشياء + +مع أي اتصال بالإنترنت، يعتبر الأمان أمرًا بالغ الأهمية. هناك نكتة قديمة تقول إن "الحرف S في IoT يشير إلى الأمان" - لا يوجد حرف "S" في 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) وأجهزة المراقبة المنزلية الأخرى. + +> 💁 أحيانًا تعمل أجهزة إنترنت الأشياء وأجهزة الحافة على شبكة معزولة تمامًا عن الإنترنت للحفاظ على البيانات خاصة وآمنة. يُعرف هذا بـ [الفصل الهوائي](https://wikipedia.org/wiki/Air_gap_(networking)). + +## نظرة أعمق على المتحكمات الدقيقة + +في الدرس السابق، قدمنا المتحكمات الدقيقة. دعونا الآن نلقي نظرة أعمق عليها. + +### وحدة المعالجة المركزية (CPU) + +وحدة المعالجة المركزية هي "العقل" الخاص بالمتحكم الدقيق. إنها المعالج الذي يشغل الكود الخاص بك ويمكنه إرسال البيانات إلى الأجهزة المتصلة واستقبالها منها. تحتوي وحدات المعالجة المركزية على نواة واحدة أو أكثر - وهي في الأساس وحدات معالجة مركزية متعددة يمكنها العمل معًا لتشغيل الكود الخاص بك. + +تعتمد وحدات المعالجة المركزية على ساعة تعمل بملايين أو مليارات النبضات في الثانية. كل نبضة، أو دورة، تنظم الإجراءات التي يمكن لوحدة المعالجة المركزية اتخاذها. مع كل نبضة، يمكن لوحدة المعالجة المركزية تنفيذ تعليمات من برنامج، مثل استرداد البيانات من جهاز خارجي أو إجراء عملية حسابية. تسمح هذه الدورة المنتظمة بإكمال جميع الإجراءات قبل معالجة التعليمات التالية. + +كلما زادت سرعة دورة الساعة، زادت التعليمات التي يمكن معالجتها في الثانية، وبالتالي زادت سرعة وحدة المعالجة المركزية. تقاس سرعة وحدة المعالجة المركزية بـ [الهرتز (Hz)](https://wikipedia.org/wiki/Hertz)، وهي وحدة قياسية حيث يعني 1 هرتز دورة واحدة أو نبضة واحدة في الثانية. + +> 🎓 غالبًا ما تُعطى سرعات وحدة المعالجة المركزية بالميجاهرتز أو الجيجاهرتز. 1 ميجاهرتز تعني مليون هرتز، و1 جيجاهرتز تعني مليار هرتز. + +> 💁 تنفذ وحدات المعالجة المركزية البرامج باستخدام [دورة الجلب-الترجمة-التنفيذ](https://wikipedia.org/wiki/Instruction_cycle). لكل نبضة ساعة، تقوم وحدة المعالجة المركزية بجلب التعليمات التالية من الذاكرة، وترجمتها، ثم تنفيذها مثل استخدام وحدة الحساب والمنطق (ALU) لإضافة رقمين. تستغرق بعض التعليمات عدة نبضات للتنفيذ، لذا ستعمل الدورة التالية عند النبضة التالية بعد اكتمال التعليمات. + +![دورة الجلب-الترجمة-التنفيذ تظهر الجلب كتعليمات من البرنامج المخزن في ذاكرة الوصول العشوائي، ثم الترجمة والتنفيذ على وحدة المعالجة المركزية](../../../../../translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.ar.png) + +تعمل المتحكمات الدقيقة بسرعات أقل بكثير من أجهزة الكمبيوتر المكتبية أو المحمولة، أو حتى معظم الهواتف الذكية. على سبيل المثال، يحتوي Wio Terminal على وحدة معالجة مركزية تعمل بسرعة 120 ميجاهرتز أو 120,000,000 دورة في الثانية. + +✅ يحتوي جهاز كمبيوتر أو ماك متوسط على وحدة معالجة مركزية متعددة النوى تعمل بسرعات متعددة الجيجاهرتز، مما يعني أن الساعة تنبض مليارات المرات في الثانية. ابحث عن سرعة الساعة لجهاز الكمبيوتر الخاص بك وقارن عدد المرات التي تكون أسرع من Wio Terminal. + +كل دورة ساعة تستهلك طاقة وتولد حرارة. كلما زادت سرعة النبضات، زاد استهلاك الطاقة وزادت الحرارة الناتجة. تحتوي أجهزة الكمبيوتر على مبردات ومراوح لإزالة الحرارة، وبدونها ستسخن وتغلق في غضون ثوانٍ. غالبًا ما لا تحتوي المتحكمات الدقيقة على أي منهما لأنها تعمل بدرجة حرارة أقل وبالتالي أبطأ بكثير. تعمل أجهزة الكمبيوتر بالطاقة الرئيسية أو البطاريات الكبيرة لبضع ساعات، بينما يمكن للمتحكمات الدقيقة العمل لأيام أو شهور أو حتى سنوات باستخدام بطاريات صغيرة. يمكن للمتحكمات الدقيقة أيضًا أن تحتوي على نوى تعمل بسرعات مختلفة، حيث تتحول إلى نوى أبطأ منخفضة الطاقة عندما يكون الطلب على وحدة المعالجة المركزية منخفضًا لتقليل استهلاك الطاقة. + +> 💁 بعض أجهزة الكمبيوتر وأجهزة ماك تتبنى نفس المزيج من النوى السريعة عالية الطاقة والنوى الأبطأ منخفضة الطاقة، حيث تتحول لتوفير البطارية. على سبيل المثال، يمكن لشريحة M1 في أحدث أجهزة الكمبيوتر المحمولة من Apple التبديل بين 4 نوى أداء و4 نوى كفاءة لتحسين عمر البطارية أو السرعة حسب المهمة التي يتم تشغيلها. + +✅ قم ببعض البحث: اقرأ عن وحدات المعالجة المركزية في [مقالة ويكيبيديا عن وحدة المعالجة المركزية](https://wikipedia.org/wiki/Central_processing_unit) + +#### المهمة + +قم بالتحقيق في Wio Terminal. + +إذا كنت تستخدم Wio Terminal لهذه الدروس، حاول العثور على وحدة المعالجة المركزية. ابحث عن قسم *نظرة عامة على الأجهزة* في [صفحة منتج Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) للحصول على صورة للأجزاء الداخلية، وحاول العثور على وحدة المعالجة المركزية من خلال النافذة البلاستيكية الشفافة في الخلف. + +### الذاكرة + +عادةً ما تحتوي المتحكمات الدقيقة على نوعين من الذاكرة - ذاكرة البرنامج وذاكرة الوصول العشوائي (RAM). + +ذاكرة البرنامج غير متطايرة، مما يعني أن ما يتم كتابته عليها يبقى حتى عند انقطاع الطاقة عن الجهاز. هذه هي الذاكرة التي تخزن كود البرنامج الخاص بك. + +ذاكرة الوصول العشوائي (RAM) هي الذاكرة التي يستخدمها البرنامج أثناء التشغيل، وتحتوي على المتغيرات التي يخصصها البرنامج والبيانات التي يتم جمعها من الأجهزة الطرفية. ذاكرة الوصول العشوائي متطا +🎓 ذاكرة البرنامج تخزن الكود الخاص بك وتبقى حتى عند انقطاع الطاقة. +🎓 يتم استخدام ذاكرة الوصول العشوائي (RAM) لتشغيل برنامجك ويتم إعادة ضبطها عند انقطاع التيار الكهربائي + +مثل وحدة المعالجة المركزية (CPU)، فإن الذاكرة في المتحكمات الدقيقة أصغر بكثير مقارنة بجهاز كمبيوتر شخصي أو جهاز Mac. قد يحتوي جهاز كمبيوتر عادي على 8 جيجابايت (GB) من ذاكرة الوصول العشوائي، أي 8,000,000,000 بايت، حيث يكفي كل بايت لتخزين حرف واحد أو رقم من 0 إلى 255. بينما يحتوي المتحكم الدقيق عادةً على كيلوبايتات (KB) فقط من ذاكرة الوصول العشوائي، حيث أن الكيلوبايت يساوي 1,000 بايت. يحتوي جهاز Wio Terminal المذكور أعلاه على 192 كيلوبايت من ذاكرة الوصول العشوائي، أي 192,000 بايت - أقل بأكثر من 40,000 مرة من جهاز كمبيوتر عادي! + +يوضح الرسم البياني أدناه الفرق النسبي في الحجم بين 192 كيلوبايت و8 جيجابايت - النقطة الصغيرة في المركز تمثل 192 كيلوبايت. + +![مقارنة بين 192 كيلوبايت و8 جيجابايت - أكثر من 40,000 مرة أكبر](../../../../../translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.ar.png) + +تخزين البرامج أيضًا أصغر مقارنة بجهاز كمبيوتر. قد يحتوي جهاز كمبيوتر عادي على قرص صلب بسعة 500 جيجابايت لتخزين البرامج، بينما قد يحتوي المتحكم الدقيق على كيلوبايتات فقط أو ربما بضع ميغابايت (MB) من التخزين (1 ميغابايت = 1,000 كيلوبايت، أو 1,000,000 بايت). يحتوي جهاز Wio Terminal على 4 ميغابايت من تخزين البرامج. + +✅ قم بإجراء بحث صغير: ما هي سعة ذاكرة الوصول العشوائي والتخزين في الكمبيوتر الذي تستخدمه الآن؟ كيف تقارن هذه السعة مع المتحكم الدقيق؟ + +### الإدخال/الإخراج + +تحتاج المتحكمات الدقيقة إلى وصلات إدخال وإخراج (I/O) لقراءة البيانات من المستشعرات وإرسال إشارات التحكم إلى المشغلات. تحتوي عادةً على عدد من دبابيس الإدخال/الإخراج العامة (GPIO). يمكن تكوين هذه الدبابيس برمجيًا لتكون إدخالًا (أي تستقبل إشارة) أو إخراجًا (ترسل إشارة). + +🧠⬅️ تُستخدم دبابيس الإدخال لقراءة القيم من المستشعرات + +🧠➡️ ترسل دبابيس الإخراج تعليمات إلى المشغلات + +✅ ستتعلم المزيد عن هذا في درس لاحق. + +#### المهمة + +قم بالتحقيق في جهاز Wio Terminal. + +إذا كنت تستخدم جهاز Wio Terminal لهذه الدروس، ابحث عن دبابيس GPIO. ابحث عن قسم *مخطط الدبابيس* في [صفحة منتج Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) لتتعرف على وظيفة كل دبوس. يأتي جهاز Wio Terminal مع ملصق يمكنك تثبيته على الجزء الخلفي يحتوي على أرقام الدبابيس، لذا قم بإضافته الآن إذا لم تكن قد فعلت ذلك بالفعل. + +### الحجم الفيزيائي + +عادةً ما تكون المتحكمات الدقيقة صغيرة الحجم، حيث أن أصغرها، مثل [Freescale Kinetis KL03 MCU](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/) صغير بما يكفي ليتسع في تجويف كرة الجولف. فقط وحدة المعالجة المركزية في جهاز كمبيوتر يمكن أن تكون بحجم 40 ملم × 40 ملم، وهذا لا يشمل المشتتات الحرارية والمراوح اللازمة لضمان تشغيل وحدة المعالجة المركزية لأكثر من بضع ثوانٍ دون ارتفاع درجة الحرارة، مما يجعلها أكبر بكثير من متحكم دقيق كامل. مجموعة تطوير Wio Terminal التي تحتوي على متحكم دقيق، غلاف، شاشة، ومجموعة من الوصلات والمكونات ليست أكبر بكثير من وحدة المعالجة المركزية Intel i9 العارية، وأصغر بكثير من وحدة المعالجة المركزية مع المشتت الحراري والمروحة! + +| الجهاز | الحجم | +| ------------------------------- | --------------------- | +| Freescale Kinetis KL03 | 1.6 ملم × 2 ملم × 1 ملم | +| Wio Terminal | 72 ملم × 57 ملم × 12 ملم | +| Intel i9 CPU، مشتت حراري ومروحة | 136 ملم × 145 ملم × 103 ملم | + +### الأطر وأنظمة التشغيل + +نظرًا لسرعتها المنخفضة وحجم ذاكرتها، لا تقوم المتحكمات الدقيقة بتشغيل نظام تشغيل (OS) بالمعنى التقليدي كما في أجهزة الكمبيوتر المكتبية. يحتاج نظام التشغيل الذي يجعل جهاز الكمبيوتر يعمل (مثل Windows أو Linux أو macOS) إلى الكثير من الذاكرة وقوة المعالجة لتشغيل مهام غير ضرورية تمامًا للمتكاملات الدقيقة. تذكر أن المتحكمات الدقيقة عادةً ما تتم برمجتها لأداء مهمة أو أكثر محددة جدًا، على عكس أجهزة الكمبيوتر العامة مثل أجهزة الكمبيوتر الشخصية أو أجهزة Mac التي تحتاج إلى دعم واجهة مستخدم، تشغيل الموسيقى أو الأفلام، توفير أدوات لكتابة المستندات أو البرمجة، تشغيل الألعاب، أو تصفح الإنترنت. + +لبرمجة متحكم دقيق بدون نظام تشغيل، تحتاج إلى بعض الأدوات التي تتيح لك بناء الكود الخاص بك بطريقة يمكن للمتكامل تشغيلها، باستخدام واجهات برمجة التطبيقات (APIs) التي يمكنها التحدث إلى أي أجهزة طرفية. كل متحكم دقيق مختلف، لذلك عادةً ما تدعم الشركات المصنعة أطر عمل قياسية تتيح لك اتباع "وصفة" قياسية لبناء الكود الخاص بك وتشغيله على أي متحكم دقيق يدعم هذا الإطار. + +يمكنك برمجة المتحكمات الدقيقة باستخدام نظام تشغيل - يُشار إليه غالبًا باسم نظام تشغيل الوقت الحقيقي (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) + +#### أردوينو + +![شعار أردوينو](../../../../../images/arduino-logo.svg) + +[أردوينو](https://www.arduino.cc) هو على الأرجح الإطار الأكثر شهرة للمتكاملات الدقيقة، خاصة بين الطلاب والهواة وصناع المشاريع. أردوينو هو منصة إلكترونية مفتوحة المصدر تجمع بين البرمجيات والأجهزة. يمكنك شراء لوحات متوافقة مع أردوينو من الشركة نفسها أو من شركات تصنيع أخرى، ثم البرمجة باستخدام إطار عمل أردوينو. + +تُبرمج لوحات أردوينو باستخدام لغة C أو C++. استخدام C/C++ يسمح بكتابة كود صغير الحجم وسريع التنفيذ، وهو أمر ضروري على جهاز محدود مثل المتحكم الدقيق. يُشار إلى جوهر تطبيق أردوينو باسم "سكيتش" وهو كود C/C++ يحتوي على وظيفتين - `setup` و`loop`. عند تشغيل اللوحة، يقوم كود إطار عمل أردوينو بتشغيل وظيفة `setup` مرة واحدة، ثم يقوم بتشغيل وظيفة `loop` مرارًا وتكرارًا بشكل مستمر حتى يتم إيقاف تشغيل الطاقة. + +تكتب كود الإعداد الخاص بك في وظيفة `setup`، مثل الاتصال بشبكة WiFi وخدمات السحابة أو تهيئة الدبابيس للإدخال والإخراج. يحتوي كود الحلقة الخاص بك على كود المعالجة، مثل قراءة البيانات من مستشعر وإرسال القيمة إلى السحابة. عادةً ما تضيف تأخيرًا في كل حلقة، على سبيل المثال، إذا كنت تريد إرسال بيانات المستشعر كل 10 ثوانٍ فقط، تضيف تأخيرًا لمدة 10 ثوانٍ في نهاية الحلقة حتى يتمكن المتحكم الدقيق من النوم، مما يوفر الطاقة، ثم تشغيل الحلقة مرة أخرى عند الحاجة بعد 10 ثوانٍ. + +![سكيتش أردوينو يقوم بتشغيل الإعداد أولاً، ثم تشغيل الحلقة بشكل متكرر](../../../../../translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.ar.png) + +✅ تُعرف هذه البنية البرمجية باسم *حلقة الأحداث* أو *حلقة الرسائل*. تستخدم العديد من التطبيقات هذا النمط في الخلفية وهو المعيار لمعظم تطبيقات سطح المكتب التي تعمل على أنظمة تشغيل مثل Windows أو macOS أو Linux. تستمع وظيفة `loop` للرسائل من مكونات واجهة المستخدم مثل الأزرار، أو الأجهزة مثل لوحة المفاتيح، وتستجيب لها. يمكنك قراءة المزيد في [مقالة عن حلقة الأحداث](https://wikipedia.org/wiki/Event_loop). + +يوفر أردوينو مكتبات قياسية للتفاعل مع المتحكمات الدقيقة ودبابيس الإدخال/الإخراج، مع تطبيقات مختلفة تحت الغطاء لتشغيلها على متحكمات دقيقة مختلفة. على سبيل المثال، وظيفة [`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` من الدبوس المعطى، بغض النظر عن اللوحة التي يتم تشغيل الكود عليها. تعني هذه المكتبات القياسية أن كود أردوينو المكتوب للوحة واحدة يمكن إعادة تجميعه لأي لوحة أردوينو أخرى وسيعمل، بشرط أن تكون الدبابيس متشابهة وتدعم اللوحات نفس الميزات. + +هناك نظام بيئي واسع من مكتبات أردوينو التابعة لجهات خارجية يتيح لك إضافة ميزات إضافية إلى مشاريع أردوينو الخاصة بك، مثل استخدام المستشعرات والمشغلات أو الاتصال بخدمات إنترنت الأشياء السحابية. + +##### المهمة + +قم بالتحقيق في جهاز Wio Terminal. + +إذا كنت تستخدم جهاز Wio Terminal لهذه الدروس، أعد قراءة الكود الذي كتبته في الدرس السابق. ابحث عن وظيفتي `setup` و`loop`. راقب الإخراج التسلسلي لوظيفة `loop` التي يتم استدعاؤها بشكل متكرر. حاول إضافة كود إلى وظيفة `setup` لكتابة شيء إلى المنفذ التسلسلي ولاحظ أن هذا الكود يتم استدعاؤه مرة واحدة فقط في كل مرة يتم فيها إعادة تشغيل الجهاز. حاول إعادة تشغيل جهازك باستخدام مفتاح الطاقة الجانبي لتظهر أن هذا الكود يتم استدعاؤه في كل مرة يتم فيها إعادة تشغيل الجهاز. + +## نظرة أعمق على الحواسيب أحادية اللوحة + +في الدرس السابق، قدمنا الحواسيب أحادية اللوحة. دعونا الآن نلقي نظرة أعمق عليها. + +### راسبيري باي + +![شعار راسبيري باي](../../../../../translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.ar.png) + +[مؤسسة راسبيري باي](https://www.raspberrypi.org) هي مؤسسة خيرية من المملكة المتحدة تأسست في عام 2009 لتعزيز دراسة علوم الكمبيوتر، خاصة على مستوى المدارس. كجزء من هذه المهمة، طوروا حاسوبًا أحادي اللوحة يسمى راسبيري باي. تتوفر أجهزة راسبيري باي حاليًا في 3 أنواع - إصدار كامل الحجم، وإصدار أصغر يسمى Pi Zero، ووحدة حوسبة يمكن تضمينها في جهاز إنترنت الأشياء النهائي الخاص بك. + +![راسبيري باي 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.ar.jpg) + +أحدث إصدار من راسبيري باي بالحجم الكامل هو راسبيري باي 4B. يحتوي هذا الجهاز على وحدة معالجة مركزية رباعية النواة (4 أنوية) تعمل بسرعة 1.5 جيجاهرتز، وذاكرة وصول عشوائي بسعة 2 أو 4 أو 8 جيجابايت، وإيثرنت جيجابت، وWiFi، ومنفذين HDMI يدعمان شاشات 4K، ومنفذ إخراج صوت وفيديو مركب، ومنافذ USB (2 USB 2.0، و2 USB 3.0)، و40 دبوس GPIO، وموصل كاميرا لوحدة كاميرا راسبيري باي، وفتحة بطاقة SD. كل هذا على لوحة بحجم 88 ملم × 58 ملم × 19.5 ملم ويتم تشغيلها بواسطة مصدر طاقة USB-C بقوة 3 أمبير. تبدأ أسعارها من 35 دولارًا أمريكيًا، وهي أرخص بكثير من جهاز كمبيوتر شخصي أو جهاز Mac. + +> 💁 يوجد أيضًا Pi400، وهو جهاز كمبيوتر مدمج بالكامل مع Pi4 داخل لوحة مفاتيح. + +![راسبيري باي زيرو](../../../../../translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.ar.jpg) + +يعتبر Pi Zero أصغر حجمًا وأقل استهلاكًا للطاقة. يحتوي على وحدة معالجة مركزية أحادية النواة بسرعة 1 جيجاهرتز، وذاكرة وصول عشوائي بسعة 512 ميجابايت، وWiFi (في طراز Zero W)، ومنفذ HDMI واحد، ومنفذ micro-USB، و40 دبوس GPIO، وموصل كاميرا لوحدة كاميرا راسبيري باي، وفتحة بطاقة SD. يبلغ حجمه 65 ملم × 30 ملم × 5 ملم، ويستهلك طاقة قليلة جدًا. سعر Zero هو 5 دولارات أمريكية، بينما سعر إصدار W مع WiFi هو 10 دولارات أمريكية. + +> 🎓 وحدات المعالجة المركزية في كلا الجهازين هي معالجات ARM، على عكس معالجات Intel/AMD x86 أو x64 التي تجدها في معظم أجهزة الكمبيوتر الشخصية وأجهزة Mac. هذه المعالجات مشابهة لتلك الموجودة في بعض المتحكمات الدقيقة، وكذلك في معظم الهواتف المحمولة، وجهاز Microsoft Surface X، وأجهزة Mac الجديدة التي تعتمد على Apple Silicon. + +تعمل جميع إصدارات راسبيري باي بنسخة من نظام Debian Linux تسمى Raspberry Pi OS. يتوفر هذا النظام كنسخة خفيفة بدون واجهة رسومية، وهو مثالي للمشاريع "بدون شاشة"، أو كنسخة كاملة مع بيئة سطح مكتب كاملة، بما في ذلك متصفح ويب، وتطبيقات مكتبية، وأدوات برمجة، وألعاب. نظرًا لأن النظام هو نسخة من Debian Linux، يمكنك تثبيت أي تطبيق أو أداة تعمل على Debian وتم بناؤها لمعالج ARM داخل Pi. + +#### المهمة + +قم بالتحقيق في جهاز راسبيري باي. + +إذا كنت تستخدم جهاز راسبيري باي لهذه الدروس، اقرأ عن المكونات المختلفة للأجهزة الموجودة على اللوحة. + +* يمكنك العثور على تفاصيل حول المعالجات المستخدمة على [صفحة توثيق أجهزة راسبيري باي](https://www.raspberrypi.org/documentation/hardware/raspberrypi/). اقرأ عن المعالج المستخدم في الجهاز الذي تستخدمه. +* حدد موقع دبابيس GPIO. اقرأ المزيد عنها في [توثيق GPIO الخاص براسبيري باي](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md). استخدم [دليل استخدام دبابيس GPIO](https://www.raspberrypi.org/documentation/usage/gpio/README.md) لتحديد الدبابيس المختلفة على جهازك. + +### برمجة الحواسيب أحادية اللوحة + +الحواسيب أحادية اللوحة هي حواسيب كاملة تعمل بنظام تشغيل كامل. هذا يعني أن هناك مجموعة واسعة من لغات البرمجة، والأطر، والأدوات التي يمكنك استخدامها لبرمجتها، على عكس المتحكمات الدقيقة التي تعتمد على دعم اللوحة في أطر مثل أردوينو. تحتوي معظم لغات البرمجة على مكتبات يمكنها الوصول إلى دبابيس GPIO لإرسال واستقبال البيانات من المستشعرات والمشغلات. + +✅ ما هي لغات البرمجة التي تعرفها؟ هل تدعمها أنظمة Linux؟ + +اللغة الأكثر شيوعًا لبناء تطبيقات إنترنت الأشياء على راسبيري باي هي Python. هناك نظام بيئي ضخم من الأجهزة المصممة خصيصًا لـ Pi، ومعظمها يتضمن الكود اللازم لاستخدامها كمكتبات Python. بعض هذه الأنظمة تعتمد على "القبعات" - سميت بذلك لأنها توضع فوق Pi مثل القبعة وتتصل بمقبس كبير مع 40 دبوس GPIO. توفر هذه القبعات قدرات إضافية، مثل الشاشات، والمستشعرات، والسيارات التي يتم التحكم فيها عن بُعد، أو المحولات التي تتيح لك توصيل المستشعرات باستخدام كابلات موحدة. +### استخدام الحواسيب أحادية اللوحة في نشرات إنترنت الأشياء الاحترافية + +تُستخدم الحواسيب أحادية اللوحة في نشرات إنترنت الأشياء الاحترافية، وليس فقط كأدوات تطوير. فهي توفر طريقة قوية للتحكم في الأجهزة وتشغيل المهام المعقدة مثل تشغيل نماذج التعلم الآلي. على سبيل المثال، هناك [وحدة Raspberry Pi 4 compute](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/) التي توفر كل قوة Raspberry Pi 4 ولكن في شكل مضغوط وأرخص بدون معظم المنافذ، ومصممة لتُدمج في الأجهزة المخصصة. + +--- + +## 🚀 التحدي + +كان التحدي في الدرس الأخير هو سرد أكبر عدد ممكن من أجهزة إنترنت الأشياء الموجودة في منزلك أو مدرستك أو مكان عملك. بالنسبة لكل جهاز في هذه القائمة، هل تعتقد أنه يعتمد على المتحكمات الدقيقة أم الحواسيب أحادية اللوحة، أم ربما مزيج من الاثنين؟ + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](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. +* تعرف على المزيد حول بعض المفاهيم والاختصارات في [مقال "ما هي وحدة المعالجة المركزية، وحدة المعالجة الدقيقة، وحدة التحكم الدقيقة، ووحدة معالجة الرسومات؟" في مجلة الهندسة الكهربائية](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/). + +✅ استخدم هذه الأدلة، إلى جانب التكاليف الموضحة من خلال الروابط في [دليل الأجهزة](../../../hardware.md) لتقرر أي منصة أجهزة تريد استخدامها، أو إذا كنت تفضل استخدام جهاز افتراضي. + +## الواجب + +[قارن بين المتحكمات الدقيقة والحواسيب أحادية اللوحة](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/2-deeper-dive/assignment.md b/translations/ar/1-getting-started/lessons/2-deeper-dive/assignment.md new file mode 100644 index 00000000..a6468427 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/2-deeper-dive/assignment.md @@ -0,0 +1,26 @@ + +# مقارنة ومقارنة بين المتحكمات الدقيقة وأجهزة الكمبيوتر أحادية اللوحة + +## التعليمات + +تناولت هذه الدرس المتحكمات الدقيقة وأجهزة الكمبيوتر أحادية اللوحة. قم بإنشاء جدول يقارن بينهما ويبرز الفروقات، واذكر على الأقل سببين لاستخدام المتحكمات الدقيقة بدلاً من أجهزة الكمبيوتر أحادية اللوحة، وسببين على الأقل لاستخدام أجهزة الكمبيوتر أحادية اللوحة بدلاً من المتحكمات الدقيقة. + +## المعايير + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| إنشاء جدول يقارن بين المتحكمات الدقيقة وأجهزة الكمبيوتر أحادية اللوحة | تم إنشاء قائمة تحتوي على عناصر متعددة تقارن وتبرز الفروقات بشكل صحيح | تم إنشاء قائمة تحتوي على عدد قليل من العناصر | تم إنشاء عنصر واحد فقط أو لم يتم إنشاء أي عناصر للمقارنة وإبراز الفروقات | +| أسباب لاستخدام أحدهما بدلاً من الآخر | تم تقديم سببين أو أكثر لاستخدام المتحكمات الدقيقة، وسببين أو أكثر لاستخدام أجهزة الكمبيوتر أحادية اللوحة | تم تقديم 1-2 سبب لاستخدام المتحكمات الدقيقة، و1-2 سبب لاستخدام أجهزة الكمبيوتر أحادية اللوحة | لم يتم تقديم سبب واحد أو أكثر لاستخدام المتحكمات الدقيقة أو أجهزة الكمبيوتر أحادية اللوحة | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/README.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/README.md new file mode 100644 index 00000000..b38867ac --- /dev/null +++ b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/README.md @@ -0,0 +1,230 @@ + +# التفاعل مع العالم المادي باستخدام المستشعرات والمحركات + +![نظرة عامة على الدرس في شكل رسم تخطيطي](../../../../../translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ar.jpg) + +> رسم تخطيطي بواسطة [نيتيا ناراسيمهان](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). تم تقديم الدرس في شكل فيديوهين - درس مدته ساعة واحدة، وساعة أخرى للإجابة على الأسئلة والتعمق في أجزاء من الدرس. + +[![الدرس 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) + +## المقدمة + +يقدم هذا الدرس اثنين من المفاهيم المهمة لجهاز إنترنت الأشياء الخاص بك - المستشعرات والمحركات. ستتعامل معهما عمليًا، حيث ستضيف مستشعر ضوء إلى مشروع إنترنت الأشياء الخاص بك، ثم تضيف 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) + +## ما هي المستشعرات؟ + +المستشعرات هي أجهزة مادية تستشعر العالم المادي - أي أنها تقيس خاصية أو أكثر من حولها وترسل المعلومات إلى جهاز إنترنت الأشياء. تغطي المستشعرات مجموعة واسعة من الأجهزة نظرًا لوجود العديد من الأشياء التي يمكن قياسها، بدءًا من الخصائص الطبيعية مثل درجة حرارة الهواء إلى التفاعلات الفيزيائية مثل الحركة. + +بعض المستشعرات الشائعة تشمل: + +* مستشعرات الحرارة - تقيس درجة حرارة الهواء أو درجة حرارة ما يتم غمرها فيه. بالنسبة للهواة والمطورين، غالبًا ما يتم دمجها مع ضغط الهواء والرطوبة في مستشعر واحد. +* الأزرار - تستشعر عندما يتم الضغط عليها. +* مستشعرات الضوء - تكتشف مستويات الضوء ويمكن أن تكون لألوان محددة، أو الضوء فوق البنفسجي، أو الضوء تحت الأحمر، أو الضوء المرئي العام. +* الكاميرات - تستشعر تمثيلًا بصريًا للعالم من خلال التقاط صورة أو بث فيديو. +* مقياس التسارع - يستشعر الحركة في اتجاهات متعددة. +* الميكروفونات - تستشعر الصوت، سواء مستويات الصوت العامة أو الصوت الاتجاهي. + +✅ قم ببعض البحث. ما هي المستشعرات الموجودة في هاتفك؟ + +جميع المستشعرات لديها شيء مشترك - فهي تحول ما تستشعره إلى إشارة كهربائية يمكن لجهاز إنترنت الأشياء تفسيرها. يعتمد تفسير هذه الإشارة الكهربائية على المستشعر، وكذلك على بروتوكول الاتصال المستخدم للتواصل مع جهاز إنترنت الأشياء. + +## استخدام مستشعر + +اتبع الدليل المناسب أدناه لإضافة مستشعر إلى جهاز إنترنت الأشياء الخاص بك: + +* [Arduino - Wio Terminal](wio-terminal-sensor.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi](pi-sensor.md) +* [كمبيوتر أحادي اللوحة - جهاز افتراضي](virtual-device-sensor.md) + +## أنواع المستشعرات + +المستشعرات إما تناظرية أو رقمية. + +### المستشعرات التناظرية + +بعض المستشعرات الأساسية هي مستشعرات تناظرية. هذه المستشعرات تستقبل جهدًا كهربائيًا من جهاز إنترنت الأشياء، وتقوم مكونات المستشعر بتعديل هذا الجهد، ويتم قياس الجهد الذي يعود من المستشعر للحصول على قيمة المستشعر. + +> 🎓 الجهد هو مقياس لمدى قوة الدفع لنقل الكهرباء من مكان إلى آخر، مثل من الطرف الموجب للبطارية إلى الطرف السالب. على سبيل المثال، البطارية القياسية AA هي 1.5V (V هو رمز الفولت) ويمكنها دفع الكهرباء بقوة 1.5V من طرفها الموجب إلى طرفها السالب. تتطلب الأجهزة الكهربائية المختلفة جهودًا مختلفة للعمل، على سبيل المثال، يمكن أن يضيء LED بجهد بين 2-3V، ولكن المصباح الكهربائي 100W يحتاج إلى 240V. يمكنك قراءة المزيد عن الجهد على [صفحة الجهد في ويكيبيديا](https://wikipedia.org/wiki/Voltage). + +أحد الأمثلة على ذلك هو المقياس المتغير (potentiometer). هذا عبارة عن قرص يمكن تدويره بين موضعين ويتم قياس الدوران بواسطة المستشعر. + +![مقياس متغير مضبوط على نقطة وسطية يتم إرسال 5 فولت إليه ويعيد 3.8 فولت](../../../../../translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ar.png) + +جهاز إنترنت الأشياء سيرسل إشارة كهربائية إلى المقياس المتغير بجهد معين، مثل 5 فولت (5V). عندما يتم ضبط المقياس المتغير، فإنه يغير الجهد الذي يخرج من الجانب الآخر. تخيل أن لديك مقياس متغير مُصنف كقرص يتراوح من 0 إلى [11](https://wikipedia.org/wiki/Up_to_eleven)، مثل مقبض الصوت في مكبر الصوت. عندما يكون المقياس المتغير في وضع الإيقاف الكامل (0)، فإن 0V (0 فولت) ستخرج. عندما يكون في وضع التشغيل الكامل (11)، فإن 5V (5 فولت) ستخرج. + +> 🎓 هذا تبسيط مفرط، ويمكنك قراءة المزيد عن المقياس المتغير والمقاومات المتغيرة على [صفحة المقياس المتغير في ويكيبيديا](https://wikipedia.org/wiki/Potentiometer). + +الجهد الذي يخرج من المستشعر يتم قراءته بواسطة جهاز إنترنت الأشياء، ويمكن للجهاز الاستجابة له. بناءً على المستشعر، يمكن أن يكون هذا الجهد قيمة عشوائية أو يمكن أن يتوافق مع وحدة قياسية. على سبيل المثال، مستشعر درجة الحرارة التناظري القائم على [المقاوم الحراري](https://wikipedia.org/wiki/Thermistor) يغير مقاومته بناءً على درجة الحرارة. يمكن بعد ذلك تحويل الجهد الناتج إلى درجة حرارة بالكلفن، وبالمثل إلى °C أو °F، من خلال حسابات في الكود. + +✅ ماذا تعتقد سيحدث إذا أعاد المستشعر جهدًا أعلى مما تم إرساله (على سبيل المثال قادم من مصدر طاقة خارجي)؟ ⛔️ لا تختبر ذلك. + +#### التحويل من التناظري إلى الرقمي + +أجهزة إنترنت الأشياء رقمية - لا يمكنها العمل مع القيم التناظرية، فهي تعمل فقط مع 0 و 1. هذا يعني أن قيم المستشعر التناظرية تحتاج إلى تحويل إلى إشارة رقمية قبل أن تتم معالجتها. تحتوي العديد من أجهزة إنترنت الأشياء على محولات من التناظري إلى الرقمي (ADCs) لتحويل المدخلات التناظرية إلى تمثيلات رقمية لقيمها. يمكن للمستشعرات أيضًا العمل مع ADCs عبر لوحة موصل. على سبيل المثال، في نظام Seeed Grove مع Raspberry Pi، تتصل المستشعرات التناظرية بمنافذ محددة على "قبعة" مثبتة على Pi متصلة بدبابيس GPIO الخاصة بـ Pi، وهذه القبعة تحتوي على ADC لتحويل الجهد إلى إشارة رقمية يمكن إرسالها عبر دبابيس GPIO الخاصة بـ Pi. + +تخيل أن لديك مستشعر ضوء تناظري متصل بجهاز إنترنت الأشياء الذي يعمل بجهد 3.3V ويعيد قيمة 1V. هذا 1V لا يعني شيئًا في العالم الرقمي، لذا يحتاج إلى تحويل. سيتم تحويل الجهد إلى قيمة تناظرية باستخدام مقياس يعتمد على الجهاز والمستشعر. أحد الأمثلة هو مستشعر الضوء Seeed Grove الذي يخرج قيمًا من 0 إلى 1,023. بالنسبة لهذا المستشعر الذي يعمل بجهد 3.3V، فإن خرج 1V سيكون قيمة 300. جهاز إنترنت الأشياء لا يمكنه التعامل مع 300 كقيمة تناظرية، لذا سيتم تحويل القيمة إلى `0000000100101100`، التمثيل الثنائي لـ 300 بواسطة قبعة Grove. سيتم بعد ذلك معالجتها بواسطة جهاز إنترنت الأشياء. + +✅ إذا كنت لا تعرف الثنائي، فقم ببعض البحث لتتعلم كيف يتم تمثيل الأرقام بواسطة 0 و 1. [درس مقدمة إلى الثنائي من BBC Bitesize](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1) هو مكان رائع للبدء. + +من منظور البرمجة، يتم التعامل مع كل هذا عادةً بواسطة المكتبات التي تأتي مع المستشعرات، لذا لا تحتاج إلى القلق بشأن هذا التحويل بنفسك. بالنسبة لمستشعر الضوء Grove، يمكنك استخدام مكتبة Python واستدعاء الخاصية `light`، أو استخدام مكتبة Arduino واستدعاء `analogRead` للحصول على قيمة 300. + +### المستشعرات الرقمية + +المستشعرات الرقمية، مثل المستشعرات التناظرية، تكتشف العالم من حولها باستخدام تغييرات في الجهد الكهربائي. الفرق هو أنها تخرج إشارة رقمية، إما عن طريق قياس حالتين فقط أو باستخدام ADC مدمج. المستشعرات الرقمية أصبحت أكثر شيوعًا لتجنب الحاجة إلى استخدام ADC سواء في لوحة الموصل أو على جهاز إنترنت الأشياء نفسه. + +أبسط مستشعر رقمي هو زر أو مفتاح. هذا مستشعر بحالتين، تشغيل أو إيقاف. + +![زر يتم إرسال 5 فولت إليه. عندما لا يتم الضغط عليه يعيد 0 فولت، وعندما يتم الضغط عليه يعيد 5 فولت](../../../../../translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ar.png) + +يمكن لدبابيس أجهزة إنترنت الأشياء مثل دبابيس 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 + +المستشعرات الرقمية الأكثر تقدمًا تقرأ القيم التناظرية، ثم تحولها باستخدام ADCs مدمجة إلى إشارات رقمية. على سبيل المثال، مستشعر درجة الحرارة الرقمي سيستخدم أيضًا مزدوج حراري بنفس طريقة المستشعر التناظري، وسيقيس التغيير في الجهد الناتج عن مقاومة المزدوج الحراري عند درجة الحرارة الحالية. بدلاً من إعادة قيمة تناظرية والاعتماد على الجهاز أو لوحة الموصل لتحويلها إلى إشارة رقمية، سيقوم ADC المدمج في المستشعر بتحويل القيمة وإرسالها كسلسلة من 0 و 1 إلى جهاز إنترنت الأشياء. يتم إرسال هذه 0 و 1 بنفس طريقة الإشارة الرقمية للزر مع 1 كجهد كامل و 0 كـ 0V. + +![مستشعر درجة حرارة رقمي يحول قراءة تناظرية إلى بيانات ثنائية مع 0 كـ 0 فولت و 1 كـ 5 فولت قبل إرسالها إلى جهاز إنترنت الأشياء](../../../../../translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ar.png) + +إرسال البيانات الرقمية يسمح للمستشعرات بأن تصبح أكثر تعقيدًا وترسل بيانات أكثر تفصيلًا، حتى بيانات مشفرة للمستشعرات الآمنة. أحد الأمثلة هو الكاميرا. هذه مستشعر يلتقط صورة ويرسلها كبيانات رقمية تحتوي على تلك الصورة، عادةً في صيغة مضغوطة مثل JPEG، ليتم قراءتها بواسطة جهاز إنترنت الأشياء. يمكنها حتى بث الفيديو عن طريق التقاط الصور وإرسال إما الصورة الكاملة إطارًا بإطار أو بث فيديو مضغوط. + +## ما هي المحركات؟ + +المحركات هي عكس المستشعرات - فهي تحول الإشارة الكهربائية من جهاز إنترنت الأشياء الخاص بك إلى تفاعل مع العالم المادي مثل إصدار الضوء أو الصوت، أو تحريك محرك. + +بعض المحركات الشائعة تشمل: + +* LED - يصدر الضوء عند تشغيله +* مكبر الصوت - يصدر الصوت بناءً على الإشارة المرسلة إليه، من صفارة بسيطة إلى مكبر صوت يمكنه تشغيل الموسيقى +* محرك خطوة - يحول الإشارة إلى مقدار محدد من الدوران، مثل تدوير قرص 90° +* المرحل - مفاتيح يمكن تشغيلها أو إيقافها بواسطة إشارة كهربائية. تسمح بجهد صغير من جهاز إنترنت الأشياء لتشغيل جهود أكبر. +* الشاشات - محركات أكثر تعقيدًا تعرض المعلومات على شاشة متعددة القطاعات. تتنوع الشاشات من شاشات LED بسيطة إلى شاشات فيديو عالية الدقة. + +✅ قم ببعض البحث. ما هي المحركات الموجودة في هاتفك؟ + +## استخدام محرك + +اتبع الدليل المناسب أدناه لإضافة محرك إلى جهاز إنترنت الأشياء الخاص بك، يتم التحكم فيه بواسطة المستشعر، لبناء ضوء ليلي إنترنت الأشياء. سيقوم بجمع مستويات الضوء من مستشعر الضوء، واستخدام محرك في شكل LED لإصدار الضوء عندما يكون مستوى الضوء المكتشف منخفضًا جدًا. + +![مخطط تدفق المهمة يظهر مستويات الضوء التي يتم قراءتها وفحصها، والتحكم في LED](../../../../../translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ar.png) + +* [Arduino - Wio Terminal](wio-terminal-actuator.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi](pi-actuator.md) +* [كمبيوتر أحادي اللوحة - جهاز افتراضي](virtual-device-actuator.md) + +## أنواع المحركات + +مثل المستشعرات، المحركات إما تناظرية أو رقمية. + +### المحركات التناظرية + +المحركات التناظرية تأخذ إشارة تناظرية وتحولها إلى نوع من التفاعل، حيث يتغير التفاعل بناءً على الجهد المقدم. + +أحد الأمثلة هو الضوء القابل للتعتيم، مثل تلك الموجودة في منزلك. كمية الجهد المقدم للضوء تحدد مدى سطوعه. +![ضوء خافت عند جهد منخفض وأكثر سطوعًا عند جهد أعلى](../../../../../translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ar.png) + +كما هو الحال مع المستشعرات، تعمل أجهزة إنترنت الأشياء الفعلية بالإشارات الرقمية وليس التناظرية. هذا يعني أنه لإرسال إشارة تناظرية، يحتاج جهاز إنترنت الأشياء إلى محول رقمي إلى تناظري (DAC)، إما على جهاز إنترنت الأشياء مباشرةً أو على لوحة توصيل. يقوم هذا المحول بتحويل الإشارات الرقمية (0 و 1) من جهاز إنترنت الأشياء إلى جهد تناظري يمكن للمشغل استخدامه. + +✅ ماذا تعتقد سيحدث إذا أرسل جهاز إنترنت الأشياء جهدًا أعلى مما يمكن للمشغل التعامل معه؟ +⛔️ لا تختبر ذلك. + +#### تعديل عرض النبضة + +خيار آخر لتحويل الإشارات الرقمية من جهاز إنترنت الأشياء إلى إشارة تناظرية هو تعديل عرض النبضة. يتضمن ذلك إرسال العديد من النبضات الرقمية القصيرة التي تعمل كما لو كانت إشارة تناظرية. + +على سبيل المثال، يمكنك استخدام PWM للتحكم في سرعة المحرك. + +تخيل أنك تتحكم في محرك يعمل بجهد 5 فولت. ترسل نبضة قصيرة إلى المحرك، وتقوم بتبديل الجهد إلى مرتفع (5 فولت) لمدة جزء من الثانية (0.02 ثانية). خلال هذه الفترة يمكن للمحرك أن يدور عُشر دورة، أو 36 درجة. ثم تتوقف الإشارة لمدة جزء من الثانية (0.02 ثانية)، وترسل إشارة منخفضة (0 فولت). كل دورة تشغيل ثم إيقاف تستغرق 0.04 ثانية. ثم تتكرر الدورة. + +![تعديل عرض النبضة دوران محرك بسرعة 150 دورة في الدقيقة](../../../../../translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ar.png) + +هذا يعني أنه في ثانية واحدة لديك 25 نبضة بجهد 5 فولت لمدة 0.02 ثانية تدور المحرك، يتبعها توقف لمدة 0.02 ثانية بجهد 0 فولت لا يدور المحرك خلالها. كل نبضة تدور المحرك عُشر دورة، مما يعني أن المحرك يكمل 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.ar.png) + +يمكنك تغيير سرعة المحرك عن طريق تغيير حجم النبضات. على سبيل المثال، مع نفس المحرك يمكنك الحفاظ على نفس وقت الدورة البالغ 0.04 ثانية، مع تقليل نبضة التشغيل إلى النصف لتصبح 0.01 ثانية، وزيادة نبضة الإيقاف إلى 0.03 ثانية. لديك نفس عدد النبضات في الثانية (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 لتحويل الإشارات التناظرية إلى إشارات رقمية. + +> 🎓 يمكنك قراءة المزيد عن تعديل عرض النبضة على [صفحة تعديل عرض النبضة على ويكيبيديا](https://wikipedia.org/wiki/Pulse-width_modulation). + +### المشغلات الرقمية + +المشغلات الرقمية، مثل المستشعرات الرقمية، إما أن تكون لها حالتان يتم التحكم فيهما بواسطة جهد مرتفع أو منخفض، أو تحتوي على DAC مدمج يمكنه تحويل الإشارة الرقمية إلى إشارة تناظرية. + +أحد المشغلات الرقمية البسيطة هو LED. عندما يرسل الجهاز إشارة رقمية بقيمة 1، يتم إرسال جهد مرتفع يضيء LED. وعندما يتم إرسال إشارة رقمية بقيمة 0، ينخفض الجهد إلى 0 فولت وينطفئ LED. + +![LED مطفأ عند 0 فولت ومضاء عند 5 فولت](../../../../../translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ar.png) + +✅ ما هي المشغلات الأخرى ذات الحالتين البسيطة التي يمكنك التفكير فيها؟ أحد الأمثلة هو الملف اللولبي، وهو مغناطيس كهربائي يمكن تنشيطه للقيام بأشياء مثل تحريك مزلاج الباب لقفل/فتح الباب. + +المشغلات الرقمية الأكثر تقدمًا، مثل الشاشات، تتطلب إرسال البيانات الرقمية بتنسيقات معينة. عادةً ما تأتي مع مكتبات تسهل إرسال البيانات الصحيحة للتحكم بها. + +--- + +## 🚀 التحدي + +التحدي في الدرسين الأخيرين كان سرد أكبر عدد ممكن من أجهزة إنترنت الأشياء الموجودة في منزلك أو مدرستك أو مكان عملك وتحديد ما إذا كانت مبنية حول وحدات تحكم دقيقة أو أجهزة كمبيوتر أحادية اللوحة، أو حتى مزيج من الاثنين. + +بالنسبة لكل جهاز قمت بسرده، ما هي المستشعرات والمشغلات المتصلة به؟ ما هو الغرض من كل مستشعر ومشغل متصل بهذه الأجهزة؟ + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](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/) +* اقرأ عن LEDs على [صفحة LED على ويكيبيديا](https://wikipedia.org/wiki/Light-emitting_diode) + +## الواجب + +[بحث حول المستشعرات والمشغلات](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/assignment.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/assignment.md new file mode 100644 index 00000000..d37d436c --- /dev/null +++ b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/assignment.md @@ -0,0 +1,31 @@ + +# بحث حول المستشعرات والمحركات + +## التعليمات + +تناولت هذه الدرس المستشعرات والمحركات. قم بالبحث ووصف مستشعر واحد ومحرك واحد يمكن استخدامهما مع مجموعة تطوير إنترنت الأشياء، بما في ذلك: + +* ما الذي يقوم به +* الإلكترونيات/الأجهزة المستخدمة داخله +* هل هو تناظري أم رقمي +* ما هي الوحدات ومدى المدخلات أو القياسات + +## معايير التقييم + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------- | ------- | --------------- | +| وصف مستشعر | تم وصف مستشعر مع تفاصيل لجميع الأقسام الأربعة المذكورة أعلاه. | تم وصف مستشعر، ولكن تم تقديم تفاصيل لـ 2-3 أقسام فقط من الأقسام المذكورة أعلاه. | تم وصف مستشعر، ولكن تم تقديم تفاصيل لقسم واحد فقط من الأقسام المذكورة أعلاه. | +| وصف محرك | تم وصف محرك مع تفاصيل لجميع الأقسام الأربعة المذكورة أعلاه. | تم وصف محرك، ولكن تم تقديم تفاصيل لـ 2-3 أقسام فقط من الأقسام المذكورة أعلاه. | تم وصف محرك، ولكن تم تقديم تفاصيل لقسم واحد فقط من الأقسام المذكورة أعلاه. | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md new file mode 100644 index 00000000..76aad05b --- /dev/null +++ b/translations/ar/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 على 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 + +قم بتوصيل الـ LED. + +![مصباح Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ar.png) + +1. اختر مصباح LED المفضل لديك وأدخل الأرجل في الفتحتين الموجودتين على وحدة الـ LED. + + مصابيح LED هي صمامات باعثة للضوء، والصمامات هي أجهزة إلكترونية تسمح بمرور التيار في اتجاه واحد فقط. هذا يعني أن الـ LED يجب أن يتم توصيله بالطريقة الصحيحة، وإلا فلن يعمل. + + إحدى أرجل الـ LED هي الطرف الموجب، والأخرى هي الطرف السالب. الـ LED ليس دائريًا تمامًا وله جانب مسطح قليلاً. الجانب المسطح قليلاً هو الطرف السالب. عند توصيل الـ LED بالوحدة، تأكد من أن الطرف الموجود بجانب الجانب المستدير متصل بالمقبس المميز بعلامة **+** على الجزء الخارجي من الوحدة، وأن الجانب المسطح متصل بالمقبس الأقرب إلى منتصف الوحدة. + +1. تحتوي وحدة الـ LED على زر دوار يسمح لك بالتحكم في السطوع. قم بتدويره إلى أقصى حد في البداية عن طريق لفه عكس اتجاه عقارب الساعة باستخدام مفك براغي صغير من نوع Phillips. + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على وحدة الـ LED. لن يدخل إلا في اتجاه واحد. + +1. مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الرقمي المميز بعلامة **D5** على قبعة Grove Base المثبتة على Pi. هذا المقبس هو الثاني من اليسار، في صف المقابس بجانب دبابيس GPIO. + +![مصباح Grove LED متصل بالمقبس D5](../../../../../translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.ar.png) + +## برمجة المصباح الليلي + +يمكن الآن برمجة المصباح الليلي باستخدام مستشعر الضوء Grove ومصباح LED Grove. + +### المهمة - برمجة المصباح الليلي + +قم ببرمجة المصباح الليلي. + +1. قم بتشغيل Raspberry 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` من مكتبات Python الخاصة بـ Grove. تحتوي هذه المكتبة على كود للتفاعل مع مصباح LED من نوع Grove. + +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. من نافذة Terminal في 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). + +😀 لقد نجحت في برمجة المصباح الليلي! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md new file mode 100644 index 00000000..435c4884 --- /dev/null +++ b/translations/ar/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 على Raspberry Pi. + +### توصيل مستشعر الضوء + +مستشعر الضوء من نوع Grove المستخدم للكشف عن مستويات الضوء يحتاج إلى الاتصال بـ Raspberry Pi. + +#### المهمة - توصيل مستشعر الضوء + +قم بتوصيل مستشعر الضوء + +![مستشعر الضوء من نوع Grove](../../../../../translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على وحدة مستشعر الضوء. يمكن إدخاله في اتجاه واحد فقط. + +1. مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس التناظري المسمى **A0** على قبعة قاعدة Grove المثبتة على Pi. هذا المقبس هو الثاني من اليمين، في صف المقابس بجانب دبابيس GPIO. + +![مستشعر الضوء من نوع Grove متصل بالمقبس A0](../../../../../translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.ar.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` من مكتبات Python الخاصة بـ Grove. تحتوي هذه المكتبة على تعليمات برمجية للتفاعل مع مستشعر الضوء من نوع 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. أضف فترة توقف قصيرة لمدة ثانية واحدة في نهاية الحلقة حيث لا تحتاج مستويات الضوء إلى الفحص بشكل مستمر. التوقف يقلل من استهلاك الطاقة للجهاز. + + ```python + time.sleep(1) + ``` + +1. من نافذة Terminal في 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). + +😀 إضافة مستشعر إلى برنامج الضوء الليلي الخاص بك كانت ناجحة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md new file mode 100644 index 00000000..86f673f1 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md @@ -0,0 +1,124 @@ + +# بناء ضوء ليلي - أجهزة إنترنت الأشياء الافتراضية + +في هذا الجزء من الدرس، ستضيف مصباح LED إلى جهاز إنترنت الأشياء الافتراضي الخاص بك وتستخدمه لإنشاء ضوء ليلي. + +## الأجهزة الافتراضية + +يحتاج الضوء الليلي إلى مشغل واحد يتم إنشاؤه في تطبيق CounterFit. + +المشغل هو **مصباح LED**. في جهاز إنترنت الأشياء الفعلي، سيكون [الصمام الثنائي الباعث للضوء](https://wikipedia.org/wiki/Light-emitting_diode) الذي ينبعث منه الضوء عند مرور التيار الكهربائي من خلاله. هذا المشغل الرقمي له حالتان، تشغيل وإيقاف. إرسال قيمة 1 يشغل المصباح، وإرسال قيمة 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. في مربع *إنشاء مشغل* في لوحة *المشغل*، انقر على القائمة المنسدلة *نوع المشغل* واختر *LED*. + + 1. قم بتعيين *Pin* إلى *5*. + + 1. اختر زر **إضافة** لإنشاء مصباح LED على Pin 5. + + ![إعدادات مصباح LED](../../../../../translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.ar.png) + + سيتم إنشاء مصباح LED وسيظهر في قائمة المشغلات. + + ![مصباح LED تم إنشاؤه](../../../../../translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.ar.png) + + بمجرد إنشاء مصباح LED، يمكنك تغيير اللون باستخدام منتقي *اللون*. اختر زر **تعيين** لتغيير اللون بعد تحديده. + +### برمجة الضوء الليلي + +يمكن الآن برمجة الضوء الليلي باستخدام مستشعر الضوء ومصباح 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** - وهو Pin في CounterFit Grove الذي يتصل به مصباح 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. قم بتغيير إعدادات *القيمة* أو *العشوائية* لتغيير مستوى الضوء فوق وتحت 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). + +😀 لقد نجحت في برمجة الضوء الليلي الخاص بك! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md new file mode 100644 index 00000000..6c91d4e2 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md @@ -0,0 +1,124 @@ + +# بناء مصباح ليلي - جهاز إنترنت الأشياء الافتراضي + +في هذا الجزء من الدرس، ستضيف مستشعر ضوء إلى جهاز إنترنت الأشياء الافتراضي الخاص بك. + +## الأجهزة الافتراضية + +يحتاج المصباح الليلي إلى مستشعر واحد يتم إنشاؤه في تطبيق CounterFit. + +المستشعر هو **مستشعر ضوء**. في جهاز إنترنت الأشياء الفعلي، سيكون [فوتوديود](https://wikipedia.org/wiki/Photodiode) يحول الضوء إلى إشارة كهربائية. مستشعرات الضوء هي مستشعرات تناظرية ترسل قيمة عددية تشير إلى كمية الضوء النسبية، والتي لا تتوافق مع أي وحدة قياس قياسية مثل [لوكس](https://wikipedia.org/wiki/Lux). + +### إضافة المستشعرات إلى CounterFit + +لاستخدام مستشعر ضوء افتراضي، تحتاج إلى إضافته إلى تطبيق CounterFit. + +#### المهمة - إضافة المستشعرات إلى CounterFit + +أضف مستشعر الضوء إلى تطبيق CounterFit. + +1. تأكد من أن تطبيق CounterFit يعمل من الجزء السابق من هذا التمرين. إذا لم يكن كذلك، قم بتشغيله. + +1. قم بإنشاء مستشعر ضوء: + + 1. في مربع *إنشاء مستشعر* في لوحة *المستشعرات*، افتح قائمة *نوع المستشعر* وحدد *ضوء*. + + 1. اترك خيار *الوحدات* مضبوطًا على *بدون وحدات*. + + 1. تأكد من أن *الدبوس* مضبوط على *0*. + + 1. اضغط على زر **إضافة** لإنشاء مستشعر الضوء على الدبوس 0. + + ![إعدادات مستشعر الضوء](../../../../../translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.ar.png) + + سيتم إنشاء مستشعر الضوء وسيظهر في قائمة المستشعرات. + + ![تم إنشاء مستشعر الضوء](../../../../../translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.ar.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` باستيراد وحدة `time` في بايثون التي ستُستخدم لاحقًا في هذا التمرين. + + يقوم السطر `from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor` باستيراد `GroveLightSensor` من مكتبات 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، قم بتشغيل الأمر التالي لتشغيل تطبيق بايثون الخاص بك: + + ```sh + python3 app.py + ``` + + سيتم إخراج قيم الضوء إلى وحدة التحكم. في البداية، ستكون هذه القيمة 0. + +1. من تطبيق CounterFit، قم بتغيير قيمة مستشعر الضوء التي سيتم قراءتها بواسطة التطبيق. يمكنك القيام بذلك بإحدى طريقتين: + + * أدخل رقمًا في مربع *القيمة* الخاص بمستشعر الضوء، ثم اضغط على زر **تعيين**. الرقم الذي تدخله سيكون القيمة التي يعيدها المستشعر. + + * قم بتحديد مربع *عشوائي*، وأدخل قيمة *الحد الأدنى* و *الحد الأقصى*، ثم اضغط على زر **تعيين**. في كل مرة يقرأ فيها المستشعر قيمة، سيقرأ رقمًا عشوائيًا بين *الحد الأدنى* و *الحد الأقصى*. + + القيم التي تقوم بتعيينها ستظهر في وحدة التحكم. قم بتغيير *القيمة* أو إعدادات *العشوائي* لجعل القيمة تتغير. + + ```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). + +😀 لقد نجح برنامج المصباح الليلي الخاص بك! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md new file mode 100644 index 00000000..ec04bce6 --- /dev/null +++ b/translations/ar/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 كوحدة تحتوي على مجموعة من الـ LEDs، مما يتيح لك اختيار اللون. + +#### المهمة - توصيل الـ LED + +قم بتوصيل الـ LED. + +![صورة لـ Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.ar.png) + +1. اختر الـ LED المفضل لديك وأدخل الأرجل في الثقبين الموجودين على وحدة الـ LED. + + الـ LEDs هي صمامات ثنائية باعثة للضوء، والصمامات الثنائية هي أجهزة إلكترونية يمكنها حمل التيار في اتجاه واحد فقط. هذا يعني أن الـ LED يجب أن يتم توصيله بالطريقة الصحيحة، وإلا فلن يعمل. + + إحدى أرجل الـ LED هي الطرف الموجب، والأخرى هي الطرف السالب. الـ LED ليس دائريًا تمامًا، وهو مسطح قليلاً من جانب واحد. الجانب المسطح قليلاً هو الطرف السالب. عند توصيل الـ LED بالوحدة، تأكد من أن الطرف الموجود بجانب الجانب المستدير متصل بالمقبس المميز بعلامة **+** على الجزء الخارجي من الوحدة، وأن الجانب المسطح متصل بالمقبس الأقرب إلى منتصف الوحدة. + +1. تحتوي وحدة الـ LED على زر دوار يسمح لك بالتحكم في السطوع. قم بتدويره بالكامل في البداية عن طريق لفه عكس اتجاه عقارب الساعة إلى أقصى حد باستخدام مفك براغي صغير برأس فيليبس. + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على وحدة الـ LED. لن يدخل إلا في اتجاه واحد. + +1. مع فصل جهاز Wio Terminal عن الكمبيوتر أو أي مصدر طاقة آخر، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الموجود على الجانب الأيمن من جهاز Wio Terminal أثناء النظر إلى الشاشة. هذا هو المقبس الأبعد عن زر الطاقة. + + > 💁 يمكن استخدام المقبس الموجود على الجانب الأيمن من Grove مع المستشعرات والمشغلات التناظرية أو الرقمية. المقبس الموجود على الجانب الأيسر مخصص فقط للمستشعرات والمشغلات الرقمية. + +![الـ Grove LED متصل بالمقبس الأيمن](../../../../../translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.ar.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 هي 0 فولت، والقيمة HIGH هي أقصى جهد للجهاز. بالنسبة لجهاز Wio Terminal، الجهد العالي هو 3.3 فولت. + +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). + +😀 لقد نجحت في برمجة الضوء الليلي! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md b/translations/ar/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md new file mode 100644 index 00000000..3f5d14ce --- /dev/null +++ b/translations/ar/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 و1023 تشير إلى كمية الضوء النسبية، والتي لا تتوافق مع أي وحدة قياس قياسية مثل [اللكس](https://wikipedia.org/wiki/Lux). + +مستشعر الضوء مدمج في Wio Terminal ويمكن رؤيته من خلال النافذة البلاستيكية الشفافة الموجودة في الخلف. + +![مستشعر الضوء في الجزء الخلفي من Wio Terminal](../../../../../translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.ar.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 و1023 من مستشعر الضوء المدمج. يتم إرسال هذه القيمة بعد ذلك إلى المنفذ التسلسلي بحيث يمكنك قراءتها في Serial Monitor عند تشغيل هذا الكود. `Serial.print` يكتب النص بدون سطر جديد في النهاية، لذا سيبدأ كل سطر بـ `Light value:` وينتهي بالقيمة الفعلية للضوء. + +1. أضف تأخيرًا صغيرًا لمدة ثانية واحدة (1000 مللي ثانية) في نهاية دالة `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). + +😀 إضافة مستشعر إلى برنامج الضوء الليلي الخاص بك كانت ناجحة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/README.md b/translations/ar/1-getting-started/lessons/4-connect-internet/README.md new file mode 100644 index 00000000..bece0255 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/4-connect-internet/README.md @@ -0,0 +1,466 @@ + +# قم بتوصيل جهازك بالإنترنت + +![رسم توضيحي لهذا الدرس](../../../../../translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.ar.jpg) + +> رسم توضيحي بواسطة [نيتيا ناراسيمهان](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). تم تقديم الدرس في شكل فيديوهين - درس مدته ساعة واحدة، وساعة أخرى للإجابة على الأسئلة والتعمق في أجزاء من الدرس. + +[![الدرس 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 يشير إلى **الإنترنت** - الاتصال السحابي والخدمات التي تمكن العديد من ميزات أجهزة إنترنت الأشياء، بدءًا من جمع القياسات من المستشعرات المتصلة بالجهاز، إلى إرسال الرسائل للتحكم في المشغلات. عادةً ما تتصل أجهزة إنترنت الأشياء بخدمة سحابية واحدة باستخدام بروتوكول اتصال قياسي، وتكون هذه الخدمة متصلة ببقية تطبيق إنترنت الأشياء الخاص بك، بدءًا من خدمات الذكاء الاصطناعي لاتخاذ قرارات ذكية بناءً على بياناتك، إلى تطبيقات الويب للتحكم أو الإبلاغ. + +> 🎓 البيانات التي يتم جمعها من المستشعرات وإرسالها إلى السحابة تُسمى القياسات عن بُعد (Telemetry). + +يمكن لأجهزة إنترنت الأشياء استقبال رسائل من السحابة. غالبًا ما تحتوي هذه الرسائل على أوامر - أي تعليمات لتنفيذ إجراء إما داخليًا (مثل إعادة التشغيل أو تحديث البرنامج الثابت)، أو باستخدام مشغل (مثل تشغيل الضوء). + +يقدم هذا الدرس بعض بروتوكولات الاتصال التي يمكن لأجهزة إنترنت الأشياء استخدامها للاتصال بالسحابة، وأنواع البيانات التي قد ترسلها أو تستقبلها. ستتعامل أيضًا مع هذه البروتوكولات عمليًا، حيث ستضيف التحكم عبر الإنترنت إلى مصباحك الليلي، وتنقل منطق التحكم في LED إلى كود "الخادم" الذي يعمل محليًا. + +في هذا الدرس سنتناول: + +* [بروتوكولات الاتصال](../../../../../1-getting-started/lessons/4-connect-internet) +* [نقل القياسات عن بُعد عبر الرسائل (MQTT)](../../../../../1-getting-started/lessons/4-connect-internet) +* [القياسات عن بُعد](../../../../../1-getting-started/lessons/4-connect-internet) +* [الأوامر](../../../../../1-getting-started/lessons/4-connect-internet) + +## بروتوكولات الاتصال + +هناك عدد من بروتوكولات الاتصال الشائعة التي تستخدمها أجهزة إنترنت الأشياء للتواصل مع الإنترنت. الأكثر شيوعًا تعتمد على الرسائل بنظام النشر/الاشتراك عبر وسيط معين. تتصل أجهزة إنترنت الأشياء بالوسيط وتنشر القياسات عن بُعد وتُشترك في الأوامر. كما تتصل الخدمات السحابية بالوسيط وتُشترك في جميع رسائل القياسات عن بُعد وتنشر الأوامر إما لأجهزة معينة أو لمجموعات من الأجهزة. + +![أجهزة إنترنت الأشياء تتصل بوسيط وتنشر القياسات عن بُعد وتُشترك في الأوامر. الخدمات السحابية تتصل بالوسيط وتُشترك في جميع القياسات وترسل الأوامر إلى أجهزة معينة.](../../../../../translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.ar.png) + +MQTT هو البروتوكول الأكثر شيوعًا لأجهزة إنترنت الأشياء ويتم تناوله في هذا الدرس. تشمل البروتوكولات الأخرى AMQP وHTTP/HTTPS. + +## نقل القياسات عن بُعد عبر الرسائل (MQTT) + +[MQTT](http://mqtt.org) هو بروتوكول رسائل مفتوح وخفيف الوزن يمكنه إرسال الرسائل بين الأجهزة. تم تصميمه في عام 1999 لمراقبة خطوط أنابيب النفط، قبل أن يتم إصداره كمعيار مفتوح بعد 15 عامًا بواسطة IBM. + +يحتوي MQTT على وسيط واحد وعدة عملاء. يتصل جميع العملاء بالوسيط، ويقوم الوسيط بتوجيه الرسائل إلى العملاء المعنيين. يتم توجيه الرسائل باستخدام مواضيع مسماة، بدلاً من إرسالها مباشرة إلى عميل معين. يمكن للعميل النشر في موضوع معين، وأي عملاء يشتركون في هذا الموضوع سيتلقون الرسالة. + +![جهاز إنترنت الأشياء ينشر القياسات عن بُعد في موضوع /telemetry، وخدمة السحابة تشترك في هذا الموضوع](../../../../../translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.ar.png) + +✅ قم ببعض البحث. إذا كان لديك العديد من أجهزة إنترنت الأشياء، كيف يمكنك ضمان أن وسيط MQTT يمكنه التعامل مع جميع الرسائل؟ + +### قم بتوصيل جهاز إنترنت الأشياء الخاص بك بـ MQTT + +الجزء الأول من إضافة التحكم عبر الإنترنت إلى مصباحك الليلي هو توصيله بوسيط MQTT. + +#### المهمة + +قم بتوصيل جهازك بوسيط MQTT. + +في هذا الجزء من الدرس، ستقوم بتوصيل مصباحك الليلي بالإنترنت للسماح بالتحكم فيه عن بُعد. لاحقًا في هذا الدرس، سيرسل جهاز إنترنت الأشياء الخاص بك رسالة قياسات عن بُعد عبر 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.ar.png) + +اتبع الخطوة المناسبة أدناه لتوصيل جهازك بوسيط MQTT: + +* [Arduino - Wio Terminal](wio-terminal-mqtt.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi/جهاز إنترنت الأشياء الافتراضي](single-board-computer-mqtt.md) + +### نظرة أعمق على MQTT + +يمكن أن تحتوي المواضيع على تسلسل هرمي، ويمكن للعملاء الاشتراك في مستويات مختلفة من التسلسل باستخدام الرموز العامة. على سبيل المثال، يمكنك إرسال رسائل قياسات درجة الحرارة إلى موضوع `/telemetry/temperature` ورسائل الرطوبة إلى موضوع `/telemetry/humidity`، ثم في تطبيق السحابة الخاص بك الاشتراك في موضوع `/telemetry/*` لتلقي كل من رسائل درجة الحرارة والرطوبة. + +يمكن إرسال الرسائل بجودة خدمة (QoS)، والتي تحدد ضمان استلام الرسالة. + +* مرة واحدة فقط - يتم إرسال الرسالة مرة واحدة فقط ولا يتخذ العميل والوسيط أي خطوات إضافية لتأكيد التسليم (إرسال ونسيان). +* مرة واحدة على الأقل - يتم إعادة محاولة إرسال الرسالة بواسطة المرسل عدة مرات حتى يتم استلام التأكيد (تسليم مؤكد). +* مرة واحدة فقط - يتفق المرسل والمستقبل على عملية مصافحة من مستويين لضمان استلام نسخة واحدة فقط من الرسالة (تسليم مضمون). + +✅ ما هي الحالات التي قد تتطلب رسالة تسليم مضمون بدلاً من رسالة إرسال ونسيان؟ + +على الرغم من أن الاسم هو Message Queueing (MQTT)، إلا أنه لا يدعم فعليًا قوائم الانتظار للرسائل. هذا يعني أنه إذا انقطع اتصال العميل ثم أعيد الاتصال، فلن يتلقى الرسائل التي تم إرسالها أثناء الانقطاع، باستثناء تلك الرسائل التي بدأ بالفعل في معالجتها باستخدام عملية QoS. يمكن أن تحتوي الرسائل على علامة محتفظ بها. إذا تم تعيين هذه العلامة، سيقوم وسيط MQTT بتخزين آخر رسالة تم إرسالها على موضوع بهذه العلامة، وإرسالها إلى أي عملاء يشتركون لاحقًا في الموضوع. بهذه الطريقة، سيحصل العملاء دائمًا على أحدث رسالة. + +يدعم MQTT أيضًا وظيفة الحفاظ على الاتصال التي تتحقق من استمرار الاتصال خلال الفجوات الطويلة بين الرسائل. + +> 🦟 [Mosquitto من مؤسسة Eclipse](https://mosquitto.org) يوفر وسيط MQTT مجاني يمكنك تشغيله بنفسك لتجربة MQTT، بالإضافة إلى وسيط MQTT عام يمكنك استخدامه لاختبار الكود الخاص بك، مستضاف على [test.mosquitto.org](https://test.mosquitto.org). + +يمكن أن تكون اتصالات MQTT عامة ومفتوحة، أو مشفرة ومؤمنة باستخدام أسماء المستخدمين وكلمات المرور، أو الشهادات. + +> 💁 يتواصل MQTT عبر TCP/IP، نفس بروتوكول الشبكة الأساسي مثل HTTP، ولكن على منفذ مختلف. يمكنك أيضًا استخدام MQTT عبر WebSockets للتواصل مع تطبيقات الويب التي تعمل في المتصفح، أو في الحالات التي تمنع فيها الجدران النارية أو قواعد الشبكة الأخرى اتصالات MQTT القياسية. + +## القياسات عن بُعد + +كلمة القياسات عن بُعد مشتقة من جذور يونانية تعني القياس عن بُعد. القياسات عن بُعد هي عملية جمع البيانات من المستشعرات وإرسالها إلى السحابة. + +> 💁 أحد أقدم أجهزة القياسات عن بُعد تم اختراعه في فرنسا عام 1874 وأرسل بيانات الطقس وعمق الثلوج في الوقت الفعلي من جبل مونت بلانك إلى باريس. استخدم أسلاكًا مادية حيث لم تكن التقنيات اللاسلكية متاحة في ذلك الوقت. + +لننظر مرة أخرى إلى مثال منظم الحرارة الذكي من الدرس الأول. + +![منظم حرارة متصل بالإنترنت يستخدم مستشعرات متعددة في الغرف](../../../../../translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.ar.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` لتحديد الغرفة التي يوجد بها | + +يمكن للخدمة السحابية بعد ذلك استخدام بيانات القياسات عن بُعد لاتخاذ قرارات حول الأوامر التي يجب إرسالها للتحكم في التدفئة. + +### إرسال القياسات عن بُعد من جهاز إنترنت الأشياء الخاص بك + +الجزء التالي في إضافة التحكم عبر الإنترنت إلى مصباحك الليلي هو إرسال مستوى الضوء كقياسات عن بُعد إلى وسيط MQTT على موضوع القياسات عن بُعد. + +#### المهمة - إرسال القياسات عن بُعد من جهاز إنترنت الأشياء الخاص بك + +أرسل مستوى الضوء كقياسات عن بُعد إلى وسيط MQTT. + +يتم إرسال البيانات مشفرة بصيغة JSON - اختصار لـ JavaScript Object Notation، وهو معيار لتشفير البيانات في نص باستخدام أزواج المفتاح/القيمة. + +✅ إذا لم تكن قد تعاملت مع JSON من قبل، يمكنك معرفة المزيد عنه من خلال [وثائق JSON.org](https://www.json.org/). + +اتبع الخطوة المناسبة أدناه لإرسال القياسات عن بُعد من جهازك إلى وسيط MQTT: + +* [Arduino - Wio Terminal](wio-terminal-telemetry.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi/جهاز إنترنت الأشياء الافتراضي](single-board-computer-telemetry.md) + +### استقبال القياسات عن بُعد من وسيط MQTT + +لا فائدة من إرسال القياسات عن بُعد إذا لم يكن هناك شيء يستمع لها. يحتاج مستوى الضوء إلى شيء يستمع له لمعالجة البيانات. الكود "الخادم" هو نوع الكود الذي ستقوم بنشره على خدمة سحابية كجزء من تطبيق إنترنت الأشياء الأكبر، ولكن هنا ستقوم بتشغيل هذا الكود محليًا على جهاز الكمبيوتر الخاص بك (أو على Raspberry Pi إذا كنت تعمل مباشرة عليه). يتكون كود الخادم من تطبيق Python يستمع لرسائل القياسات عن بُعد عبر MQTT مع مستويات الضوء. لاحقًا في هذا الدرس ستجعله يرد برسالة أمر تحتوي على تعليمات لتشغيل أو إطفاء LED. + +✅ قم ببعض البحث: ماذا يحدث لرسائل MQTT إذا لم يكن هناك مستمع؟ + +#### تثبيت Python وVS Code + +إذا لم يكن لديك Python وVS Code مثبتين محليًا، ستحتاج إلى تثبيتهما لكتابة كود الخادم. إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، أو تعمل على 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. +💁 يمكنك استخدام أي محرر أو بيئة تطوير متكاملة (IDE) خاصة بلغة بايثون إذا كنت تفضل أداة معينة، ولكن الدروس ستقدم التعليمات بناءً على استخدام VS Code. +1. قم بتثبيت إضافة Pylance لـ VS Code. هذه الإضافة توفر دعمًا للغة Python في VS Code. راجع [وثائق إضافة 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 وقم بتثبيت حزم pip الخاصة بـ MQTT. + +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 + ``` + + سيتم تثبيت هذه الحزمة فقط في البيئة الافتراضية، ولن تكون متاحة خارجها. + +#### كتابة كود الخادم + +يمكن الآن كتابة كود الخادم باستخدام 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 showing the selected virtual environment](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.ar.png) + +1. إذا كانت الطرفية في VS Code تعمل بالفعل عند بدء تشغيل VS Code، فلن يتم تفعيل البيئة الافتراضية فيها. أسهل شيء يمكنك فعله هو إغلاق الطرفية باستخدام زر **Kill the active terminal instance**: + + ![VS Code Kill the active terminal instance button](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.ar.png) + +1. قم بتشغيل طرفية جديدة في VS Code عن طريق اختيار *Terminal -> New Terminal*، أو الضغط على `` CTRL+` ``. ستقوم الطرفية الجديدة بتحميل البيئة الافتراضية، مع ظهور استدعاء التفعيل في الطرفية. كما سيظهر اسم البيئة الافتراضية (`.venv`) في الموجه: + + ```output + ➜ nightlight-server source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. افتح ملف `app.py` من مستكشف VS Code وأضف الكود التالي: + + ```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). + +### كم مرة يجب إرسال القياسات؟ + +أحد الاعتبارات المهمة مع القياسات هو عدد مرات قياس البيانات وإرسالها؟ الإجابة هي - يعتمد ذلك. إذا قمت بالقياس بشكل متكرر، يمكنك الاستجابة بشكل أسرع للتغيرات في القياسات، ولكنك ستستهلك المزيد من الطاقة، والمزيد من عرض النطاق الترددي، وتولد المزيد من البيانات، وتحتاج إلى المزيد من موارد السحابة لمعالجتها. تحتاج إلى القياس بشكل كافٍ، ولكن ليس بشكل مفرط. + +بالنسبة للثرموستات، قد يكون القياس كل بضع دقائق أكثر من كافٍ لأن درجات الحرارة لا تتغير كثيرًا. إذا قمت بالقياس مرة واحدة فقط في اليوم، فقد ينتهي بك الأمر بتدفئة منزلك لدرجات حرارة الليل في منتصف يوم مشمس، بينما إذا قمت بالقياس كل ثانية، فستحصل على آلاف القياسات المكررة غير الضرورية التي ستستهلك سرعة الإنترنت وعرض النطاق الترددي للمستخدم (مشكلة للأشخاص الذين لديهم خطط عرض نطاق ترددي محدودة)، وتستهلك المزيد من الطاقة، مما قد يكون مشكلة للأجهزة التي تعمل بالبطاريات مثل المستشعرات البعيدة، وتزيد من تكلفة موارد الحوسبة السحابية لمعالجتها وتخزينها. + +إذا كنت تراقب البيانات حول قطعة من الآلات في مصنع، والتي إذا تعطلت قد تسبب أضرارًا كارثية وخسائر بملايين الدولارات، فقد يكون من الضروري القياس عدة مرات في الثانية. من الأفضل إهدار عرض النطاق الترددي بدلاً من تفويت قياسات تشير إلى أن الآلة تحتاج إلى التوقف والإصلاح قبل أن تتعطل. + +> 💁 في هذه الحالة، قد تفكر في وجود جهاز طرفي لمعالجة القياسات أولاً لتقليل الاعتماد على الإنترنت. + +### فقدان الاتصال + +يمكن أن تكون اتصالات الإنترنت غير موثوقة، مع انقطاعات شائعة. ماذا يجب أن يفعل جهاز IoT في هذه الظروف - هل يجب أن يفقد البيانات، أم يجب أن يخزنها حتى يتم استعادة الاتصال؟ مرة أخرى، الإجابة هي يعتمد. + +بالنسبة للثرموستات، يمكن فقدان البيانات بمجرد أخذ قياس جديد لدرجة الحرارة. نظام التدفئة لا يهتم بأن درجة الحرارة كانت 20.5°C قبل 20 دقيقة إذا كانت الآن 19°C، فالدرجة الحالية هي التي تحدد ما إذا كان يجب تشغيل التدفئة أم لا. + +بالنسبة للآلات، قد ترغب في الاحتفاظ بالبيانات، خاصة إذا كانت تستخدم للبحث عن الاتجاهات. هناك نماذج تعلم الآلة التي يمكنها اكتشاف الشذوذات في تدفقات البيانات من خلال النظر إلى البيانات من فترة زمنية محددة (مثل الساعة الأخيرة) واكتشاف البيانات الشاذة. يتم استخدام هذا غالبًا للصيانة التنبؤية، حيث يتم البحث عن مؤشرات على أن شيئًا ما قد يتعطل قريبًا حتى تتمكن من إصلاحه أو استبداله قبل حدوث ذلك. قد ترغب في إرسال كل جزء من القياسات الخاصة بآلة ليتم معالجتها لاكتشاف الشذوذات، لذلك بمجرد أن يتمكن جهاز IoT من إعادة الاتصال، سيرسل جميع القياسات التي تم إنشاؤها أثناء انقطاع الإنترنت. + +يجب على مصممي أجهزة IoT أيضًا التفكير فيما إذا كان يمكن استخدام جهاز IoT أثناء انقطاع الإنترنت أو فقدان الإشارة بسبب الموقع. يجب أن يكون الثرموستات الذكي قادرًا على اتخاذ بعض القرارات المحدودة للتحكم في التدفئة إذا لم يتمكن من إرسال القياسات إلى السحابة بسبب انقطاع. + +[![تعطل سيارة فيراري لأن شخصًا ما حاول تحديثها تحت الأرض حيث لا يوجد استقبال خلوي](../../../../../translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.ar.png)](https://twitter.com/internetofshit/status/1315736960082808832) + +لـ MQTT للتعامل مع فقدان الاتصال، يجب أن يكون كود الجهاز والخادم مسؤولاً عن ضمان تسليم الرسائل إذا لزم الأمر، على سبيل المثال من خلال طلب أن يتم الرد على جميع الرسائل المرسلة برسائل إضافية على موضوع رد، وإذا لم يتم ذلك، يتم وضعها في قائمة انتظار يدويًا ليتم إعادة تشغيلها لاحقًا. + +## الأوامر + +الأوامر هي رسائل يتم إرسالها من السحابة إلى الجهاز، تطلب منه القيام بشيء ما. في معظم الأحيان، يتضمن ذلك إعطاء نوع من الإخراج عبر مشغل، ولكن يمكن أن يكون تعليمات للجهاز نفسه، مثل إعادة التشغيل، أو جمع قياسات إضافية وإعادتها كاستجابة للأمر. + +![ثرموستات متصل بالإنترنت يتلقى أمرًا لتشغيل التدفئة](../../../../../translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.ar.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) +* [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-commands.md) + +بمجرد كتابة هذا الكود وتشغيله، جرب تغيير مستويات الضوء. شاهد الإخراج من الخادم والجهاز، وشاهد الـ LED أثناء تغيير مستويات الضوء. + +### فقدان الاتصال + +ماذا يجب أن تفعل خدمة السحابة إذا احتاجت إلى إرسال أمر إلى جهاز IoT غير متصل؟ مرة أخرى، الإجابة هي يعتمد. + +إذا كان الأمر الأخير يلغي أمرًا سابقًا، فيمكن تجاهل الأوامر السابقة. إذا أرسلت خدمة السحابة أمرًا لتشغيل التدفئة، ثم أرسلت أمرًا لإيقافها، فيمكن تجاهل أمر التشغيل وعدم إعادة إرساله. + +إذا كان يجب معالجة الأوامر بترتيب معين، مثل تحريك ذراع روبوت للأعلى، ثم إغلاق ماسك، فيجب إرسالها بالترتيب بمجرد استعادة الاتصال. + +✅ كيف يمكن لكود الجهاز أو الخادم ضمان إرسال الأوامر ومعالجتها دائمًا بترتيب صحيح عبر MQTT إذا لزم الأمر؟ + +--- + +## 🚀 التحدي + +كان التحدي في الدروس الثلاثة الأخيرة هو سرد أكبر عدد ممكن من أجهزة IoT الموجودة في منزلك، مدرستك، أو مكان عملك وتحديد ما إذا كانت مبنية حول متحكمات دقيقة أو حواسيب أحادية اللوحة، أو حتى مزيج من الاثنين، والتفكير في المستشعرات والمشغلات التي تستخدمها. +بالنسبة لهذه الأجهزة، فكر في الرسائل التي قد ترسلها أو تستقبلها. ما هي البيانات التي ترسلها؟ ما هي الرسائل أو الأوامر التي قد تستقبلها؟ هل تعتقد أنها آمنة؟ + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8) + +## المراجعة والدراسة الذاتية + +اقرأ المزيد عن MQTT على [صفحة ويكيبيديا الخاصة بـ MQTT](https://wikipedia.org/wiki/MQTT). + +حاول تشغيل خادم MQTT بنفسك باستخدام [Mosquitto](https://www.mosquitto.org) وقم بالاتصال به من جهاز إنترنت الأشياء الخاص بك ومن كود الخادم. + +> 💁 نصيحة - بشكل افتراضي، لا يسمح 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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/assignment.md b/translations/ar/1-getting-started/lessons/4-connect-internet/assignment.md new file mode 100644 index 00000000..4989f6a3 --- /dev/null +++ b/translations/ar/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 ويغطي واحدًا فقط من استهلاك الطاقة، الأمان، واستمرارية الرسائل. | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md b/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md new file mode 100644 index 00000000..3ff47d65 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md @@ -0,0 +1,67 @@ + +# التحكم في ضوء الليل عبر الإنترنت - الأجهزة الافتراضية لإنترنت الأشياء و Raspberry Pi + +في هذا الجزء من الدرس، ستقوم بالاشتراك في الأوامر المرسلة من وسيط MQTT إلى جهاز Raspberry Pi الخاص بك أو جهاز إنترنت الأشياء الافتراضي. + +## الاشتراك في الأوامر + +الخطوة التالية هي الاشتراك في الأوامر المرسلة من وسيط MQTT والاستجابة لها. + +### المهمة + +اشترك في الأوامر. + +1. افتح مشروع ضوء الليل في VS Code. + +1. إذا كنت تستخدم جهاز إنترنت أشياء افتراضي، تأكد من أن الطرفية تعمل في البيئة الافتراضية. إذا كنت تستخدم 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. قم بتشغيل الكود بنفس الطريقة التي شغّلت بها الكود في الجزء السابق من المهمة. إذا كنت تستخدم جهاز إنترنت أشياء افتراضي، فتأكد من أن تطبيق 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. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md b/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md new file mode 100644 index 00000000..70c9c680 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md @@ -0,0 +1,93 @@ + +# التحكم في ضوء الليل عبر الإنترنت - أجهزة إنترنت الأشياء الافتراضية و Raspberry Pi + +يحتاج جهاز إنترنت الأشياء إلى برمجة للتواصل مع *test.mosquitto.org* باستخدام MQTT لإرسال قيم القياس عن بعد مع قراءة مستشعر الضوء، وتلقي الأوامر للتحكم في LED. + +في هذا الجزء من الدرس، ستقوم بتوصيل Raspberry Pi أو جهاز إنترنت الأشياء الافتراضي الخاص بك بوسيط MQTT. + +## تثبيت حزمة عميل MQTT + +للتواصل مع وسيط MQTT، تحتاج إلى تثبيت مكتبة MQTT باستخدام حزمة pip، سواء على Raspberry Pi الخاص بك أو في البيئة الافتراضية إذا كنت تستخدم جهازًا افتراضيًا. + +### المهمة + +تثبيت حزمة pip + +1. افتح مشروع ضوء الليل في VS Code. + +1. إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، تأكد من أن الطرفية تعمل في البيئة الافتراضية. إذا كنت تستخدم Raspberry Pi، فلن تحتاج إلى استخدام البيئة الافتراضية. + +1. قم بتشغيل الأمر التالي لتثبيت حزمة pip الخاصة بـ MQTT: + + ```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. قم بتشغيل الكود بنفس الطريقة التي قمت بها بتشغيل الكود من الجزء السابق من التمرين. إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، فتأكد من تشغيل تطبيق 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. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md b/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md new file mode 100644 index 00000000..b2dc3726 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md @@ -0,0 +1,74 @@ + +# التحكم في ضوء الليل عبر الإنترنت - الأجهزة الافتراضية لإنترنت الأشياء و Raspberry Pi + +في هذا الجزء من الدرس، ستقوم بإرسال بيانات التتبع (telemetry) الخاصة بمستويات الإضاءة من جهاز Raspberry Pi أو جهاز إنترنت الأشياء الافتراضي إلى وسيط MQTT. + +## نشر بيانات التتبع + +الخطوة التالية هي إنشاء مستند JSON يحتوي على بيانات التتبع وإرساله إلى وسيط MQTT. + +### المهمة + +نشر بيانات التتبع إلى وسيط MQTT. + +1. افتح مشروع ضوء الليل في VS Code. + +1. إذا كنت تستخدم جهاز إنترنت أشياء افتراضي، تأكد من أن الطرفية تعمل ضمن البيئة الافتراضية. إذا كنت تستخدم Raspberry Pi، فلن تحتاج إلى استخدام بيئة افتراضية. + +1. أضف الاستيراد التالي إلى أعلى ملف `app.py`: + + ```python + import json + ``` + + تُستخدم مكتبة `json` لترميز بيانات التتبع كمستند JSON. + +1. أضف السطر التالي بعد تعريف `client_name`: + + ```python + client_telemetry_topic = id + '/telemetry' + ``` + + `client_telemetry_topic` هو الموضوع (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. قم بتشغيل الكود بنفس الطريقة التي شغّلت بها الكود في الجزء السابق من المهمة. إذا كنت تستخدم جهاز إنترنت أشياء افتراضي، فتأكد من أن تطبيق 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). + +😀 لقد قمت بنجاح بإرسال بيانات التتبع من جهازك. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md b/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md new file mode 100644 index 00000000..4ae2d514 --- /dev/null +++ b/translations/ar/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` كدالة رد النداء التي سيتم استدعاؤها عند استلام رسالة من وسيط MQTT. + + > 💁 يتم استدعاء معالج `clientCallback` لجميع المواضيع التي تم الاشتراك فيها. إذا قمت لاحقًا بكتابة كود يستمع إلى مواضيع متعددة، يمكنك الحصول على الموضوع الذي أُرسلت الرسالة إليه من خلال معامل `topic` الذي يتم تمريره إلى دالة رد النداء. + +1. قم برفع الكود إلى جهاز Wio Terminal الخاص بك، واستخدم Serial Monitor لرؤية مستويات الضوء التي يتم إرسالها إلى وسيط MQTT. + +1. قم بضبط مستويات الضوء التي يتم اكتشافها بواسطة جهازك الفعلي أو الافتراضي. سترى الرسائل التي يتم استلامها والأوامر التي يتم إرسالها في الطرفية. ستلاحظ أيضًا تشغيل وإطفاء الـ LED بناءً على مستوى الضوء. + +> 💁 يمكنك العثور على هذا الكود في مجلد [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal). + +😀 لقد قمت ببرمجة جهازك بنجاح للاستجابة للأوامر المرسلة من وسيط MQTT. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md b/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md new file mode 100644 index 00000000..9c15d524 --- /dev/null +++ b/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md @@ -0,0 +1,251 @@ + +# التحكم في ضوء الليل عبر الإنترنت - Wio Terminal + +يحتاج جهاز إنترنت الأشياء إلى البرمجة للتواصل مع *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، بشرط أن يحتوي الجهاز على أي أجهزة محددة تحتاجها تلك المكتبة. بعض المكتبات، مثل مكتبات 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)، وهو عميل MQTT لـ Arduino. + +## الاتصال بشبكة WiFi + +يمكن الآن توصيل Wio Terminal بشبكة WiFi. + +### المهمة - الاتصال بشبكة WiFi + +قم بتوصيل Wio Terminal بشبكة WiFi. + +1. أنشئ ملفًا جديدًا في مجلد `src` يسمى `config.h`. يمكنك القيام بذلك عن طريق تحديد مجلد `src`، أو ملف `main.cpp` بداخله، واختيار زر **ملف جديد** من المستكشف. يظهر هذا الزر فقط عندما يكون المؤشر فوق المستكشف. + + ![زر الملف الجديد](../../../../../translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.ar.png) + +1. أضف الكود التالي إلى هذا الملف لتعريف الثوابت الخاصة ببيانات اعتماد شبكة WiFi: + + ```cpp + #pragma once + + #include + + using namespace std; + + // WiFi credentials + const char *SSID = ""; + const char *PASSWORD = ""; + ``` + + استبدل `` باسم شبكة WiFi الخاصة بك. استبدل `` بكلمة مرور شبكة WiFi الخاصة بك. + +1. افتح ملف `main.cpp`. + +1. أضف توجيهات `#include` التالية إلى أعلى الملف: + + ```cpp + #include + #include + #include + + #include "config.h" + ``` + + هذا يتضمن ملفات الرأس للمكتبات التي أضفتها سابقًا، بالإضافة إلى ملف رأس التكوين. هذه الملفات الرأس ضرورية لإخبار PlatformIO بجلب الكود من المكتبات. بدون تضمين هذه الملفات الرأس بشكل صريح، لن يتم تجميع بعض الكود وستظهر أخطاء في المترجم. + +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، ويحاول الاتصال باستخدام اسم الشبكة وكلمة المرور من ملف رأس التكوين. + +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 وتعيد الاتصال إذا لم يكن متصلًا. تقوم بالتكرار طوال الوقت الذي لا يكون فيه متصلًا وتحاول الاتصال باستخدام اسم العميل الفريد المحدد في ملف رأس التكوين. + + إذا فشل الاتصال، فإنه يعيد المحاولة بعد 5 ثوانٍ. + +1. أضف الكود التالي أسفل وظيفة `reconnectMQTTClient`: + + ```cpp + void createMQTTClient() + { + client.setServer(BROKER.c_str(), 1883); + reconnectMQTTClient(); + } + ``` + + يقوم هذا الكود بتعيين خادم MQTT للعميل، بالإضافة إلى إعداد رد الاتصال عند استلام رسالة. ثم يحاول الاتصال بالخادم. + +1. قم باستدعاء وظيفة `createMQTTClient` في وظيفة `setup` بعد اتصال WiFi. + +1. استبدل وظيفة `loop` بالكامل بما يلي: + + ```cpp + void loop() + { + reconnectMQTTClient(); + client.loop(); + + delay(2000); + } + ``` + + يبدأ هذا الكود بإعادة الاتصال بخادم MQTT. يمكن قطع هذه الاتصالات بسهولة، لذا من المفيد التحقق بانتظام وإعادة الاتصال إذا لزم الأمر. ثم يستدعي طريقة `loop` على عميل MQTT لمعالجة أي رسائل واردة على الموضوع المشترك فيه. هذا التطبيق أحادي الخيط، لذا لا يمكن استقبال الرسائل على خيط خلفي، وبالتالي يجب تخصيص وقت على الخيط الرئيسي لمعالجة أي رسائل تنتظر على اتصال الشبكة. + + أخيرًا، يضمن تأخير لمدة ثانيتين عدم إرسال مستويات الضوء بشكل متكرر جدًا ويقلل من استهلاك الطاقة للجهاز. + +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. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md b/translations/ar/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md new file mode 100644 index 00000000..99e7618b --- /dev/null +++ b/translations/ar/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 JSON. + +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). + +😀 لقد قمت بنجاح بإرسال بيانات التتبع من جهازك. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/README.md b/translations/ar/2-farm/README.md new file mode 100644 index 00000000..03ebd95a --- /dev/null +++ b/translations/ar/2-farm/README.md @@ -0,0 +1,34 @@ + +# الزراعة باستخدام إنترنت الأشياء + +مع تزايد عدد السكان، يزداد الطلب على الزراعة. مساحة الأراضي المتاحة لا تتغير، لكن المناخ يتغير - مما يضيف المزيد من التحديات للمزارعين، خاصةً ملياري [المزارعين المعتمدين على الكفاف](https://wikipedia.org/wiki/Subsistence_agriculture) الذين يعتمدون على ما يزرعونه لتأمين غذائهم وإطعام عائلاتهم. يمكن لإنترنت الأشياء أن يساعد المزارعين على اتخاذ قرارات أكثر ذكاءً بشأن ما يزرعونه ومتى يحصدونه، وزيادة الإنتاجية، وتقليل كمية العمل اليدوي، واكتشاف الآفات والتعامل معها. + +في هذه الدروس الستة، ستتعلم كيفية تطبيق إنترنت الأشياء لتحسين وأتمتة الزراعة. + +> 💁 ستستخدم هذه الدروس بعض الموارد السحابية. إذا لم تكمل جميع الدروس في هذا المشروع، تأكد من [تنظيف مشروعك](../clean-up.md). + +## المواضيع + +1. [التنبؤ بنمو النباتات باستخدام إنترنت الأشياء](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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/README.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/README.md new file mode 100644 index 00000000..2bde8eec --- /dev/null +++ b/translations/ar/2-farm/lessons/1-predict-plant-growth/README.md @@ -0,0 +1,284 @@ + +# توقع نمو النباتات باستخدام إنترنت الأشياء + +![نظرة عامة على الدرس](../../../../../translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ar.jpg) + +> رسم توضيحي بواسطة [نيتيا ناراسيمهان](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.ar.png) + +الرسم البياني أعلاه يظهر مثالاً على معدل النمو مقابل درجة الحرارة. حتى درجة الحرارة الأساسية، لا يوجد نمو. معدل النمو يزيد حتى يصل إلى درجة الحرارة المثلى، ثم ينخفض بعد الوصول إلى هذه الذروة. + +شكل هذا الرسم البياني يختلف من نوع نبات إلى آخر. بعض النباتات لديها انخفاض حاد بعد المثلى، وبعضها لديها زيادات أبطأ من الأساسية إلى المثلى. + +> 💁 لكي يحصل المزارع على أفضل نمو، يحتاج إلى معرفة القيم الثلاث لدرجات الحرارة وفهم شكل الرسوم البيانية للنباتات التي يزرعها. + +إذا كان لدى المزارع القدرة على التحكم في درجة الحرارة، على سبيل المثال في دفيئة تجارية، يمكنه تحسين الظروف لنباتاته. دفيئة تجارية تزرع الطماطم على سبيل المثال ستضبط درجة الحرارة إلى حوالي 25 درجة مئوية خلال النهار و20 درجة مئوية ليلاً للحصول على أسرع نمو. + +> 🍅 الجمع بين هذه درجات الحرارة مع الإضاءة الصناعية، الأسمدة، والتحكم في مستويات ثاني أكسيد الكربون يعني أن المزارعين التجاريين يمكنهم الزراعة والحصاد طوال العام. + +## قياس درجة الحرارة المحيطة + +يمكن استخدام مستشعرات درجة الحرارة مع أجهزة إنترنت الأشياء لقياس درجة الحرارة المحيطة. + +### المهمة - قياس درجة الحرارة + +قم بتنفيذ الدليل المناسب لمراقبة درجات الحرارة باستخدام جهاز إنترنت الأشياء الخاص بك: + +* [Arduino - Wio Terminal](wio-terminal-temp.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi](pi-temp.md) +* [كمبيوتر أحادي اللوحة - جهاز افتراضي](virtual-device-temp.md) + +## أيام درجة النمو + +أيام درجة النمو (المعروفة أيضاً بوحدات درجة النمو) هي طريقة لقياس نمو النباتات بناءً على درجة الحرارة. بافتراض أن النبات لديه ما يكفي من الماء، المغذيات، وثاني أكسيد الكربون، فإن درجة الحرارة تحدد معدل النمو. + +أيام درجة النمو، أو GDD، تُحسب يومياً كمتوسط درجة الحرارة بالدرجة المئوية لليوم فوق درجة الحرارة الأساسية للنبات. كل نبات يحتاج إلى عدد معين من GDD للنمو، الإزهار، أو إنتاج ونضج المحصول. كلما زادت GDD يومياً، زاد معدل نمو النبات. + +> 🇺🇸 بالنسبة للأمريكيين، يمكن أيضاً حساب أيام درجة النمو باستخدام الفهرنهايت. 5 GDD (بالدرجة المئوية) تعادل 9 GDD (بالفهرنهايت). + +الصيغة الكاملة لحساب GDD معقدة قليلاً، ولكن هناك معادلة مبسطة تُستخدم غالباً كتقريب جيد: + +![GDD = T max + T min divided by 2, all minus T base](../../../../../translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ar.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 divided by 2, all minus 10, giving an answer of 4](../../../../../translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ar.png) + +حصلت الذرة على 4 GDD في ذلك اليوم. بافتراض نوع من الذرة يحتاج إلى 800 GDD للنضج، ستحتاج إلى 796 GDD إضافية للوصول إلى النضج. + +✅ قم ببعض البحث. بالنسبة لأي نباتات لديك في حديقتك، مدرستك، أو الحديقة المحلية، حاول العثور على عدد GDD المطلوب للوصول إلى النضج أو إنتاج المحاصيل. + +## حساب GDD باستخدام بيانات مستشعر درجة الحرارة + +النباتات لا تنمو في تواريخ ثابتة - على سبيل المثال لا يمكنك زراعة بذرة ومعرفة أن النبات سيحمل الثمار بالضبط بعد 100 يوم. بدلاً من ذلك، كمزارع يمكنك الحصول على فكرة تقريبية عن المدة التي يستغرقها النبات للنمو، ثم تقوم بفحص يومي لمعرفة متى تكون المحاصيل جاهزة. + +هذا له تأثير كبير على العمالة في المزارع الكبيرة، ويعرض المزارع لخطر تفويت المحاصيل التي تكون جاهزة بشكل غير متوقع مبكراً. من خلال قياس درجات الحرارة، يمكن للمزارع حساب GDD التي حصل عليها النبات، مما يسمح له بالفحص فقط عندما يكون قريباً من النضج المتوقع. + +من خلال جمع بيانات درجة الحرارة باستخدام جهاز إنترنت الأشياء، يمكن للمزارع أن يتم إعلامه تلقائياً عندما تكون النباتات قريبة من النضج. النموذج النموذجي لهذا هو أن تقوم أجهزة إنترنت الأشياء بقياس درجة الحرارة، ثم نشر هذه البيانات عبر الإنترنت باستخدام شيء مثل MQTT. يقوم الكود الخادم بعد ذلك بالاستماع إلى هذه البيانات وحفظها في مكان ما، مثل قاعدة بيانات. هذا يعني أن البيانات يمكن تحليلها لاحقاً، مثل وظيفة ليلية لحساب GDD لليوم، جمع إجمالي GDD لكل محصول حتى الآن، وتنبيه إذا كان النبات قريباً من النضج. + +![يتم إرسال بيانات القياس إلى الخادم ثم حفظها في قاعدة بيانات](../../../../../translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ar.png) + +يمكن للكود الخادم أيضاً تعزيز البيانات بإضافة معلومات إضافية. على سبيل المثال، يمكن لجهاز إنترنت الأشياء نشر معرف للإشارة إلى الجهاز، ويمكن للكود الخادم استخدام هذا للبحث عن موقع الجهاز، وما هي المحاصيل التي يراقبها. يمكنه أيضاً إضافة بيانات أساسية مثل الوقت الحالي حيث أن بعض أجهزة إنترنت الأشياء لا تحتوي على الأجهزة اللازمة لتتبع الوقت بدقة، أو تتطلب كوداً إضافياً لقراءة الوقت الحالي عبر الإنترنت. + +✅ لماذا تعتقد أن الحقول المختلفة قد تكون لها درجات حرارة مختلفة؟ + +### المهمة - نشر معلومات درجة الحرارة + +قم بتنفيذ الدليل المناسب لنشر بيانات درجة الحرارة عبر MQTT باستخدام جهاز إنترنت الأشياء الخاص بك حتى يمكن تحليلها لاحقاً: + +* [Arduino - Wio Terminal](wio-terminal-temp-publish.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi/جهاز إنترنت الأشياء الافتراضي](single-board-computer-temp-publish.md) + +### المهمة - التقاط وتخزين معلومات درجة الحرارة + +بمجرد أن يقوم جهاز إنترنت الأشياء بنشر القياسات، يمكن كتابة الكود الخادم للاشتراك في هذه البيانات وتخزينها. بدلاً من حفظها في قاعدة بيانات، سيقوم الكود الخادم بحفظها في ملف قيم مفصولة بفواصل (CSV). ملفات CSV تخزن البيانات كصفوف من القيم كنص، مع فصل كل قيمة بفاصلة، وكل سجل في سطر جديد. إنها طريقة ملائمة، قابلة للقراءة البشرية ومدعومة جيداً لحفظ البيانات كملف. + +سيحتوي ملف CSV على عمودين - *التاريخ* و *درجة الحرارة*. يتم تعيين عمود *التاريخ* كالتاريخ والوقت الحالي الذي تم استلام الرسالة فيه بواسطة الخادم، و *درجة الحرارة* تأتي من رسالة القياس. + +1. كرر الخطوات في الدرس 4 لإنشاء كود خادم للاشتراك في القياسات. لا تحتاج إلى إضافة كود لنشر الأوامر. + + الخطوات لهذا هي: + + * تكوين وتفعيل بيئة Python الافتراضية + + * تثبيت حزمة paho-mqtt باستخدام pip + + * كتابة الكود للاستماع إلى رسائل 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 موجوداً بالفعل. إذا لم يكن موجوداً، يتم إنشاؤه مع رؤوس الأعمدة في الصف الأول. + +1. أضف الكود التالي إلى نهاية وظيفة `handle_telemetry`: + + ```python + with open(temperature_file_name, mode='a') as temperature_file: + temperature_writer = csv.DictWriter(temperature_file, fieldnames=fieldnames) + temperature_writer.writerow({'date' : datetime.now().astimezone().replace(microsecond=0).isoformat(), 'temperature' : payload['temperature']}) + ``` +هذا الكود يفتح ملف CSV، ثم يضيف صفًا جديدًا في النهاية. يحتوي الصف على التاريخ والوقت الحاليين بتنسيق قابل للقراءة البشرية، متبوعًا بدرجة الحرارة المستلمة من جهاز إنترنت الأشياء. يتم تخزين البيانات بتنسيق [ISO 8601](https://wikipedia.org/wiki/ISO_8601) مع المنطقة الزمنية، ولكن بدون أجزاء من الثانية. + +1. قم بتشغيل هذا الكود بنفس الطريقة كما في السابق، مع التأكد من أن جهاز إنترنت الأشياء الخاص بك يرسل البيانات. سيتم إنشاء ملف 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. + + +> 💁 إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، قم بتحديد مربع الاختيار العشوائي واضبط نطاقًا لتجنب الحصول على نفس درجة الحرارة في كل مرة يتم فيها إرجاع قيمة درجة الحرارة. + ![حدد مربع الاختيار العشوائي واضبط نطاقًا](../../../../../translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ar.png) + + > 💁 إذا كنت تريد تشغيل هذا ليوم كامل، فعليك التأكد من أن الكمبيوتر الذي يعمل عليه كود الخادم لن يدخل في وضع السكون، إما عن طريق تغيير إعدادات الطاقة، أو تشغيل شيء مثل [هذا السكربت بلغة بايثون للحفاظ على النظام نشطًا](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.ar.png) + +* 25 + 12 = 37 +* 37 / 2 = 18.5 +* 18.5 - 10 = 8.5 + +لذلك، حصلت الفراولة على **8.5** GDD. تحتاج الفراولة إلى حوالي 250 GDD لتثمر، لذا لا يزال هناك وقت. + +--- + +## 🚀 التحدي + +النباتات تحتاج إلى أكثر من الحرارة لتنمو. ما الأشياء الأخرى التي تحتاجها؟ + +بالنسبة لهذه الأشياء، ابحث إذا كانت هناك أجهزة استشعار يمكنها قياسها. ماذا عن المشغلات للتحكم في هذه المستويات؟ كيف يمكنك تجميع جهاز أو أكثر من أجهزة إنترنت الأشياء لتحسين نمو النباتات؟ + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/10) + +## المراجعة والدراسة الذاتية + +* اقرأ المزيد عن الزراعة الرقمية في [صفحة ويكيبيديا للزراعة الرقمية](https://wikipedia.org/wiki/Digital_agriculture). اقرأ أيضًا المزيد عن الزراعة الدقيقة في [صفحة ويكيبيديا للزراعة الدقيقة](https://wikipedia.org/wiki/Precision_agriculture). +* حساب أيام درجة النمو الكامل أكثر تعقيدًا من الحساب المبسط المذكور هنا. اقرأ المزيد عن المعادلة الأكثر تعقيدًا وكيفية التعامل مع درجات الحرارة التي تقل عن الأساس في [صفحة ويكيبيديا لأيام درجة النمو](https://wikipedia.org/wiki/Growing_degree-day). +* قد يكون الطعام نادرًا في المستقبل إذا استمررنا في استخدام نفس طرق الزراعة. تعرف على المزيد حول تقنيات الزراعة عالية التقنية في هذا [الفيديو عن مزارع المستقبل عالية التقنية على يوتيوب](https://www.youtube.com/watch?v=KIEOuKD9KX8). + +## الواجب + +[تصور بيانات GDD باستخدام Jupyter Notebook](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/assignment.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/assignment.md new file mode 100644 index 00000000..8a805628 --- /dev/null +++ b/translations/ar/2-farm/lessons/1-predict-plant-growth/assignment.md @@ -0,0 +1,57 @@ + +# تصور بيانات GDD باستخدام Jupyter Notebook + +## التعليمات + +في هذا الدرس، قمت بجمع بيانات GDD باستخدام مستشعر إنترنت الأشياء. للحصول على بيانات GDD جيدة، تحتاج إلى جمع البيانات لعدة أيام. لمساعدتك في تصور بيانات درجة الحرارة وحساب GDD، يمكنك استخدام أدوات مثل [Jupyter Notebooks](https://jupyter.org) لتحليل البيانات. + +ابدأ بجمع البيانات لعدة أيام. ستحتاج إلى التأكد من تشغيل كود الخادم طوال الوقت الذي يعمل فيه جهاز إنترنت الأشياء الخاص بك، إما عن طريق ضبط إعدادات إدارة الطاقة أو تشغيل شيء مثل [هذا السكربت Python للحفاظ على النظام نشطًا](https://github.com/jaqsparow/keep-system-active). + +بمجرد أن تحصل على بيانات درجة الحرارة، يمكنك استخدام Jupyter Notebook الموجود في هذا المستودع لتصورها وحساب GDD. تجمع Jupyter Notebooks بين الكود والتعليمات في كتل تسمى *الخلايا*، غالبًا ما يكون الكود مكتوبًا بلغة Python. يمكنك قراءة التعليمات، ثم تشغيل كل كتلة من الكود، كتلة تلو الأخرى. يمكنك أيضًا تعديل الكود. في هذا الدفتر على سبيل المثال، يمكنك تعديل درجة الحرارة الأساسية المستخدمة لحساب GDD لنباتك. + +1. قم بإنشاء مجلد يسمى `gdd-calculation` + +1. قم بتنزيل ملف [gdd.ipynb](./code-notebook/gdd.ipynb) ونسخه إلى مجلد `gdd-calculation`. + +1. انسخ ملف `temperature.csv` الذي تم إنشاؤه بواسطة خادم MQTT. + +1. قم بإنشاء بيئة افتراضية جديدة بلغة Python داخل مجلد `gdd-calculation`. + +1. قم بتثبيت بعض حزم pip الخاصة بـ Jupyter Notebooks، بالإضافة إلى المكتبات اللازمة لإدارة البيانات ورسمها: + + ```sh + pip install --upgrade pip + pip install pandas + pip install matplotlib + pip install jupyter + ``` + +1. قم بتشغيل الدفتر في Jupyter: + + ```sh + jupyter notebook gdd.ipynb + ``` + + سيبدأ Jupyter ويقوم بفتح الدفتر في متصفحك. اعمل من خلال التعليمات الموجودة في الدفتر لتصور درجات الحرارة التي تم قياسها، وحساب أيام درجة النمو. + + ![دفتر Jupyter](../../../../../translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.ar.png) + +## التقييم + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| جمع البيانات | جمع بيانات يومين كاملين على الأقل | جمع بيانات يوم كامل على الأقل | جمع بعض البيانات | +| حساب GDD | تشغيل الدفتر بنجاح وحساب GDD | تشغيل الدفتر بنجاح | غير قادر على تشغيل الدفتر | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb b/translations/ar/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb new file mode 100644 index 00000000..3fa28ac8 --- /dev/null +++ b/translations/ar/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", + "* قم بتشغيل جميع الخلايا باستخدام زر **▶︎ تشغيل** الموجود أعلاه. سيقوم ذلك بتشغيل الخلية المحددة، ثم الانتقال إلى الخلية التالية.\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تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [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-27T01:05:50+00:00", + "source_file": "2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb", + "language_code": "ar" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/pi-temp.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/pi-temp.md new file mode 100644 index 00000000..6db7bfd6 --- /dev/null +++ b/translations/ar/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.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر الرطوبة ودرجة الحرارة. يمكن إدخاله في اتجاه واحد فقط. + +1. مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الرقمي المسمى **D5** على قبعة Grove Base المثبتة على Raspberry Pi. هذا المقبس هو الثاني من اليسار في صف المقابس بجانب دبابيس GPIO. + +![مستشعر درجة الحرارة من نوع Grove متصل بالمقبس A0](../../../../../translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.ar.png) + +## برمجة مستشعر درجة الحرارة + +يمكن الآن برمجة الجهاز لاستخدام مستشعر درجة الحرارة المتصل. + +### المهمة + +برمج الجهاز. + +1. قم بتشغيل Raspberry Pi وانتظر حتى يتم الإقلاع. + +1. افتح VS Code، إما مباشرة على Raspberry Pi، أو قم بالاتصال باستخدام إضافة Remote SSH. + + > ⚠️ يمكنك الرجوع إلى [التعليمات الخاصة بإعداد وتشغيل VS Code في الدرس الأول إذا لزم الأمر](../../../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، قم بتشغيل الأمر التالي لتثبيت هذه الحزمة على Raspberry 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. + + > ✅ تذكر، جميع المقابس لها أرقام دبابيس فريدة. الدبابيس 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. أضف فترة انتظار قصيرة مدتها عشر ثوانٍ في نهاية الحلقة لتقليل استهلاك الطاقة، حيث لا تحتاج إلى التحقق من مستويات درجة الحرارة باستمرار. + + ```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). + +😀 لقد نجحت في برمجة مستشعر درجة الحرارة الخاص بك! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md new file mode 100644 index 00000000..bcbf5b2c --- /dev/null +++ b/translations/ar/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md @@ -0,0 +1,71 @@ + +# نشر درجة الحرارة - الأجهزة الافتراضية لإنترنت الأشياء و Raspberry Pi + +في هذا الجزء من الدرس، ستقوم بنشر قيم درجة الحرارة التي يكتشفها Raspberry Pi أو جهاز إنترنت الأشياء الافتراضي عبر MQTT حتى يمكن استخدامها لاحقًا لحساب GDD. + +## نشر درجة الحرارة + +بمجرد قراءة درجة الحرارة، يمكن نشرها عبر MQTT إلى كود "الخادم" الذي سيقرأ القيم ويخزنها لتكون جاهزة للاستخدام في حساب GDD. + +### المهمة - نشر درجة الحرارة + +برمج الجهاز لنشر بيانات درجة الحرارة. + +1. افتح مشروع تطبيق `temperature-sensor` إذا لم يكن مفتوحًا بالفعل. + +1. كرر الخطوات التي قمت بها في الدرس الرابع للاتصال بـ 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) من الدرس الرابع إذا لزم الأمر. + +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 × (60 ثانية في الدقيقة) تعطي تأخيرًا لمدة 10 دقائق. + +1. قم بتشغيل الكود بنفس الطريقة التي قمت بها في الجزء السابق من المهمة. إذا كنت تستخدم جهاز إنترنت أشياء افتراضي، فتأكد من تشغيل تطبيق 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). + +😀 لقد قمت بنجاح بنشر درجة الحرارة كبيانات من جهازك. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md new file mode 100644 index 00000000..661b26bb --- /dev/null +++ b/translations/ar/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md @@ -0,0 +1,154 @@ + +# قياس درجة الحرارة - أجهزة إنترنت الأشياء الافتراضية + +في هذا الجزء من الدرس، ستضيف مستشعر درجة حرارة إلى جهاز إنترنت الأشياء الافتراضي الخاص بك. + +## الأجهزة الافتراضية + +سيستخدم جهاز إنترنت الأشياء الافتراضي مستشعرًا محاكيًا للرطوبة ودرجة الحرارة من نوع Grove Digital. هذا يجعل هذا المختبر مشابهًا لاستخدام Raspberry Pi مع مستشعر DHT11 الفعلي. + +يجمع المستشعر بين **مستشعر درجة الحرارة** و**مستشعر الرطوبة**، ولكن في هذا المختبر، ستستخدم فقط مكون مستشعر درجة الحرارة. في جهاز إنترنت الأشياء الفعلي، سيكون مستشعر درجة الحرارة عبارة عن [ثيرميستور](https://wikipedia.org/wiki/Thermistor) يقيس درجة الحرارة عن طريق استشعار التغير في المقاومة مع تغير درجة الحرارة. عادةً ما تكون مستشعرات درجة الحرارة مستشعرات رقمية تقوم داخليًا بتحويل المقاومة المقاسة إلى درجة حرارة بوحدات مئوية (أو كلفن، أو فهرنهايت). + +### إضافة المستشعرات إلى CounterFit + +لاستخدام مستشعر افتراضي للرطوبة ودرجة الحرارة، تحتاج إلى إضافة المستشعرين إلى تطبيق CounterFit. + +#### المهمة - إضافة المستشعرات إلى CounterFit + +أضف مستشعرات الرطوبة ودرجة الحرارة إلى تطبيق CounterFit. + +1. قم بإنشاء تطبيق Python جديد على جهاز الكمبيوتر الخاص بك في مجلد يسمى `temperature-sensor` يحتوي على ملف واحد يسمى `app.py` وبيئة افتراضية لـ Python، وأضف حزم CounterFit pip. + + > ⚠️ يمكنك الرجوع إلى [التعليمات لإنشاء وإعداد مشروع CounterFit Python في الدرس الأول إذا لزم الأمر](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. قم بتثبيت حزمة Pip إضافية لتثبيت واجهة CounterFit لمستشعر DHT11. تأكد من تثبيتها من خلال الطرفية مع تفعيل البيئة الافتراضية. + + ```sh + pip install counterfit-shims-seeed-python-dht + ``` + +1. تأكد من تشغيل تطبيق الويب CounterFit. + +1. قم بإنشاء مستشعر رطوبة: + + 1. في مربع *إنشاء مستشعر* في لوحة *المستشعرات*، انقر على القائمة المنسدلة *نوع المستشعر* واختر *رطوبة*. + + 1. اترك *الوحدات* مضبوطة على *النسبة المئوية*. + + 1. تأكد من أن *الدبوس* مضبوط على *5*. + + 1. انقر على زر **إضافة** لإنشاء مستشعر الرطوبة على الدبوس 5. + + ![إعدادات مستشعر الرطوبة](../../../../../translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.ar.png) + + سيتم إنشاء مستشعر الرطوبة وسيظهر في قائمة المستشعرات. + + ![تم إنشاء مستشعر الرطوبة](../../../../../translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.ar.png) + +1. قم بإنشاء مستشعر درجة حرارة: + + 1. في مربع *إنشاء مستشعر* في لوحة *المستشعرات*، انقر على القائمة المنسدلة *نوع المستشعر* واختر *درجة حرارة*. + + 1. اترك *الوحدات* مضبوطة على *درجة مئوية*. + + 1. تأكد من أن *الدبوس* مضبوط على *6*. + + 1. انقر على زر **إضافة** لإنشاء مستشعر درجة الحرارة على الدبوس 6. + + ![إعدادات مستشعر درجة الحرارة](../../../../../translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.ar.png) + + سيتم إنشاء مستشعر درجة الحرارة وسيظهر في قائمة المستشعرات. + + ![تم إنشاء مستشعر درجة الحرارة](../../../../../translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.ar.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 باستخدام واجهة من وحدة `counterfit_shims_seeed_python_dht`. + +1. أضف الكود التالي بعد الكود أعلاه لإنشاء نسخة من الفئة التي تدير مستشعر الرطوبة ودرجة الحرارة الافتراضي: + + ```python + sensor = DHT("11", 5) + ``` + + يقوم هذا بتعريف نسخة من فئة `DHT` التي تدير مستشعر **الرطوبة** و**درجة الحرارة** الرقمي الافتراضي. المعامل الأول يخبر الكود بأن المستشعر المستخدم هو مستشعر افتراضي من نوع *DHT11*. المعامل الثاني يخبر الكود بأن المستشعر متصل بالمنفذ `5`. + + > 💁 يقوم CounterFit بمحاكاة هذا المستشعر المدمج للرطوبة ودرجة الحرارة عن طريق الاتصال بمستشعرين، مستشعر رطوبة على الدبوس المحدد عند إنشاء فئة `DHT`، ومستشعر درجة حرارة يعمل على الدبوس التالي. إذا كان مستشعر الرطوبة على الدبوس 5، فإن الواجهة تتوقع أن يكون مستشعر درجة الحرارة على الدبوس 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، قم بتغيير قيمة مستشعر درجة الحرارة التي سيتم قراءتها بواسطة التطبيق. يمكنك القيام بذلك بطريقتين: + + * أدخل رقمًا في مربع *القيمة* الخاص بمستشعر درجة الحرارة، ثم انقر على زر **تعيين**. الرقم الذي تدخله سيكون القيمة التي يعيدها المستشعر. + + * قم بتحديد مربع *عشوائي*، وأدخل قيمتي *الحد الأدنى* و*الحد الأقصى*، ثم انقر على زر **تعيين**. في كل مرة يقرأ المستشعر قيمة، سيقرأ رقمًا عشوائيًا بين *الحد الأدنى* و*الحد الأقصى*. + + يجب أن ترى القيم التي قمت بتعيينها تظهر في وحدة التحكم. قم بتغيير *القيمة* أو إعدادات *العشوائية* لرؤية التغيير في القيم. + + ```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). + +😀 لقد نجحت في برمجة تطبيق مستشعر درجة الحرارة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md new file mode 100644 index 00000000..5d579339 --- /dev/null +++ b/translations/ar/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. كرر الخطوات التي قمت بها في الدرس الرابع للاتصال بـ 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) من الدرس الرابع إذا لزم الأمر. + +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,000 مللي ثانية في الثانية، 60 ثانية في الدقيقة، لذا 10 × (60 ثانية في الدقيقة) × (1000 مللي ثانية في الثانية) يعطي تأخيرًا لمدة 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). + +😀 لقد نجحت في نشر درجة الحرارة كبيانات من جهازك. + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md b/translations/ar/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md new file mode 100644 index 00000000..8e8d644e --- /dev/null +++ b/translations/ar/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)، وهو مقاوم تقل مقاومته مع زيادة درجة الحرارة. + +هذا مستشعر رقمي، لذا يحتوي على محول تناظري إلى رقمي (ADC) مدمج لإنشاء إشارة رقمية تحتوي على بيانات درجة الحرارة والرطوبة التي يمكن لوحدة التحكم الدقيقة قراءتها. + +### توصيل مستشعر درجة الحرارة + +يمكن توصيل مستشعر درجة الحرارة Grove بمنفذ رقمي في Wio Terminal. + +#### المهمة - توصيل مستشعر درجة الحرارة + +قم بتوصيل مستشعر درجة الحرارة. + +![مستشعر درجة الحرارة Grove](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر الرطوبة ودرجة الحرارة. لن يدخل إلا في اتجاه واحد. + +1. مع فصل Wio Terminal عن جهاز الكمبيوتر أو أي مصدر طاقة آخر، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الموجود على الجانب الأيمن من Wio Terminal أثناء النظر إلى الشاشة. هذا هو المقبس الأبعد عن زر الطاقة. + +![مستشعر درجة الحرارة Grove متصل بالمقبس الأيمن](../../../../../translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.ar.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 إلى ملف `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`، وهو المقبس الموجود على الجانب الأيمن من 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); + } + ``` + + يقوم هذا الكود بتعريف مصفوفة فارغة تحتوي على عددين عشريين، ويمررها إلى استدعاء `readTempAndHumidity` على مثيل `DHT`. يقوم هذا الاستدعاء بملء المصفوفة بقيمتين - يتم وضع الرطوبة في العنصر 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). + +😀 لقد نجحت في برمجة مستشعر درجة الحرارة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/2-detect-soil-moisture/README.md b/translations/ar/2-farm/lessons/2-detect-soil-moisture/README.md new file mode 100644 index 00000000..37a2de72 --- /dev/null +++ b/translations/ar/2-farm/lessons/2-detect-soil-moisture/README.md @@ -0,0 +1,173 @@ + +C، المعروف بـ *I-squared-C*، هو بروتوكول متعدد المتحكمات ومتعدد الأجهزة الطرفية، حيث يمكن لأي جهاز متصل أن يعمل كمتحكم أو جهاز طرفي يتواصل عبر ناقل I²C (وهو نظام اتصال ينقل البيانات). يتم إرسال البيانات كحزم موجهة، تحتوي كل حزمة على عنوان الجهاز المتصل الذي يُقصد إرسال البيانات إليه. + +> 💁 كان يُشار إلى هذا النموذج سابقًا بمصطلحات "الماستر/العبد"، ولكن يتم التخلي عن هذه المصطلحات بسبب ارتباطها بالعبودية. لقد تبنت [جمعية الأجهزة مفتوحة المصدر مصطلحات المتحكم/الجهاز الطرفي](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/)، ولكن قد تصادف إشارات إلى المصطلحات القديمة. + +الأجهزة لديها عنوان يتم استخدامه عند الاتصال بناقل I²C، وعادةً ما يكون هذا العنوان مبرمجًا مسبقًا على الجهاز. على سبيل المثال، كل نوع من أجهزة الاستشعار Grove من Seeed لديه نفس العنوان، لذا فإن جميع أجهزة استشعار الضوء لديها نفس العنوان، وجميع الأزرار لديها عنوان مختلف عن عنوان أجهزة استشعار الضوء. بعض الأجهزة توفر طرقًا لتغيير العنوان، مثل تغيير إعدادات الجمبر أو لحام دبابيس معًا. + +I²C يحتوي على ناقل يتكون من سلكين رئيسيين، بالإضافة إلى سلكين للطاقة: + +| السلك | الاسم | الوصف | +| ---- | --------- | ----------- | +| SDA | البيانات التسلسلية | هذا السلك يُستخدم لإرسال البيانات بين الأجهزة. | +| SCL | ساعة التسلسل | هذا السلك يُرسل إشارة الساعة بمعدل يتم تحديده بواسطة المتحكم. | +| VCC | جامع الجهد المشترك | مصدر الطاقة للأجهزة. يتم توصيله بأسلاك SDA وSCL لتوفير طاقتها عبر مقاوم رفع يقوم بإيقاف الإشارة عندما لا يكون هناك جهاز يعمل كمتحكم. | +| GND | الأرض | يوفر أرضية مشتركة للدائرة الكهربائية. | + +![ناقل I2C مع 3 أجهزة متصلة بأسلاك SDA وSCL، تشترك في سلك أرضي مشترك](../../../../../translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.ar.png) + +لإرسال البيانات، يقوم أحد الأجهزة بإصدار شرط البدء للإشارة إلى أنه جاهز لإرسال البيانات. بعد ذلك يصبح الجهاز متحكمًا. يقوم المتحكم بإرسال عنوان الجهاز الذي يريد التواصل معه، بالإضافة إلى ما إذا كان يريد قراءة أو كتابة البيانات. بعد نقل البيانات، يقوم المتحكم بإرسال شرط التوقف للإشارة إلى أنه انتهى. بعد ذلك يمكن لجهاز آخر أن يصبح المتحكم ويرسل أو يستقبل البيانات. + +### بروتوكولات الاتصال بين الأجهزة + +#### I2C + +I2C هو بروتوكول اتصال شائع يستخدم للتواصل بين الأجهزة الإلكترونية. يتميز بسرعته المحدودة، حيث يعمل بثلاثة أوضاع بسرعات ثابتة. أسرع وضع هو وضع السرعة العالية بسرعة قصوى تصل إلى 3.4 ميجابت في الثانية، ولكن عدد قليل من الأجهزة يدعم هذه السرعة. على سبيل المثال، Raspberry Pi يقتصر على الوضع السريع بسرعة 400 كيلوبت في الثانية. الوضع القياسي يعمل بسرعة 100 كيلوبت في الثانية. + +> 💁 إذا كنت تستخدم Raspberry Pi مع قبعة Grove Base كجهاز IoT الخاص بك، ستجد عدة مقابس I2C على اللوحة يمكنك استخدامها للتواصل مع مستشعرات I2C. كما أن مستشعرات Grove التناظرية تستخدم I2C مع محول ADC لإرسال القيم التناظرية كبيانات رقمية، لذا فإن مستشعر الضوء الذي استخدمته يحاكي دبوسًا تناظريًا، حيث يتم إرسال القيمة عبر I2C لأن Raspberry Pi يدعم فقط الدبابيس الرقمية. + +### جهاز الاستقبال والإرسال غير المتزامن العام (UART) + +UART يعتمد على دوائر مادية تسمح لجهازين بالتواصل. كل جهاز يحتوي على دبوسين للتواصل - الإرسال (Tx) والاستقبال (Rx)، حيث يتم توصيل دبوس Tx للجهاز الأول بدبوس Rx للجهاز الثاني، والعكس صحيح. هذا يسمح بإرسال البيانات في كلا الاتجاهين. + +* الجهاز 1 يرسل البيانات من دبوس Tx الخاص به، والتي يتم استقبالها بواسطة الجهاز 2 على دبوس Rx الخاص به. +* الجهاز 1 يستقبل البيانات على دبوس Rx الخاص به التي يتم إرسالها بواسطة الجهاز 2 من دبوس Tx الخاص به. + +![UART مع توصيل دبوس Tx على شريحة واحدة بدبوس Rx على أخرى، والعكس صحيح](../../../../../translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.ar.png) + +> 🎓 يتم إرسال البيانات بتتابع بت واحد في كل مرة، وهذا يُعرف بالاتصال التسلسلي. معظم أنظمة التشغيل ووحدات التحكم الدقيقة تحتوي على *منافذ تسلسلية*، وهي اتصالات يمكنها إرسال واستقبال البيانات التسلسلية المتاحة لبرمجتك. + +أجهزة UART لديها [معدل بود](https://wikipedia.org/wiki/Symbol_rate) (المعروف أيضًا بمعدل الرموز)، وهو السرعة التي يتم بها إرسال واستقبال البيانات بالبتات في الثانية. معدل بود شائع هو 9,600، مما يعني إرسال 9,600 بت (0 و1) من البيانات كل ثانية. + +UART يستخدم بتات البداية والنهاية - حيث يرسل بت بداية للإشارة إلى أنه على وشك إرسال بايت (8 بتات) من البيانات، ثم بت نهاية بعد إرسال الـ 8 بتات. + +سرعة UART تعتمد على الأجهزة، ولكن حتى أسرع التطبيقات لا تتجاوز 6.5 ميجابت في الثانية. + +يمكنك استخدام UART عبر دبابيس GPIO - يمكنك تعيين دبوس كـ Tx وآخر كـ Rx، ثم توصيلهما بجهاز آخر. + +> 💁 إذا كنت تستخدم Raspberry Pi مع قبعة Grove Base كجهاز IoT الخاص بك، ستجد مقبس UART على اللوحة يمكنك استخدامه للتواصل مع المستشعرات التي تستخدم بروتوكول UART. + +### واجهة المحيط التسلسلي (SPI) + +SPI مصمم للتواصل عبر مسافات قصيرة، مثل التواصل بين وحدة تحكم دقيقة وجهاز تخزين مثل ذاكرة الفلاش. يعتمد على نموذج وحدة التحكم/الأجهزة الطرفية مع وحدة تحكم واحدة (عادةً معالج جهاز IoT) تتفاعل مع أجهزة طرفية متعددة. تتحكم وحدة التحكم في كل شيء عن طريق اختيار جهاز طرفي وإرسال أو طلب البيانات. + +> 💁 مثل I2C، المصطلحات وحدة التحكم والأجهزة الطرفية هي تغييرات حديثة، لذا قد ترى المصطلحات القديمة لا تزال مستخدمة. + +وحدات التحكم SPI تستخدم 3 أسلاك، بالإضافة إلى سلك إضافي لكل جهاز طرفي. الأجهزة الطرفية تستخدم 4 أسلاك. هذه الأسلاك هي: + +| السلك | الاسم | الوصف | +| ---- | --------- | ----------- | +| COPI | خرج وحدة التحكم، دخل الجهاز الطرفي | هذا السلك لإرسال البيانات من وحدة التحكم إلى الجهاز الطرفي. | +| CIPO | دخل وحدة التحكم، خرج الجهاز الطرفي | هذا السلك لإرسال البيانات من الجهاز الطرفي إلى وحدة التحكم. | +| SCLK | الساعة التسلسلية | هذا السلك يرسل إشارة الساعة بمعدل تحدده وحدة التحكم. | +| CS | اختيار الشريحة | وحدة التحكم لديها عدة أسلاك، واحد لكل جهاز طرفي، وكل سلك يتصل بسلك CS على الجهاز الطرفي المقابل. | + +![SPI مع وحدة تحكم وجهازين طرفيين](../../../../../translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.ar.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. + +✅ هل لديك أي مستشعرات بلوتوث على شخصك، في منزلك أو في مدرستك؟ قد تشمل هذه المستشعرات مستشعرات درجة الحرارة، مستشعرات الإشغال، أجهزة تتبع الأجهزة وأجهزة اللياقة. + +طريقة شائعة لربط الأجهزة التجارية هي 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) + +## معايرة المستشعر + +تعتمد المستشعرات على قياس الخصائص الكهربائية مثل المقاومة أو السعة. + +> 🎓 المقاومة، التي تُقاس بالأوم (Ω)، هي مقدار المعارضة التي تواجهها التيار الكهربائي أثناء مروره عبر مادة ما. عندما يتم تطبيق جهد على مادة، فإن كمية التيار التي تمر تعتمد على مقاومة المادة. يمكنك قراءة المزيد على [صفحة المقاومة الكهربائية على ويكيبيديا](https://wikipedia.org/wiki/Electrical_resistance_and_conductance). + +> 🎓 السعة، التي تُقاس بالفاراد (F)، هي قدرة مكون أو دائرة على جمع وتخزين الطاقة الكهربائية. يمكنك قراءة المزيد عن السعة على [صفحة السعة على ويكيبيديا](https://wikipedia.org/wiki/Capacitance). + +هذه القياسات ليست دائمًا مفيدة - تخيل مستشعر درجة حرارة يعطيك قياسًا بقيمة 22.5KΩ! بدلاً من ذلك، يجب تحويل القيمة المقاسة إلى وحدة مفيدة من خلال المعايرة - أي مطابقة القيم المقاسة مع الكمية المقاسة للسماح بتحويل القياسات الجديدة إلى الوحدة الصحيحة. + +بعض المستشعرات تأتي معايرة مسبقًا. على سبيل المثال، مستشعر درجة الحرارة الذي استخدمته في الدرس السابق كان معايرًا بالفعل بحيث يمكنه إرجاع قياس درجة الحرارة بوحدة °C. في المصنع، يتم تعريض أول مستشعر تم إنشاؤه لمجموعة من درجات الحرارة المعروفة ويتم قياس المقاومة. يتم استخدام هذه البيانات لإنشاء معادلة يمكنها تحويل القيمة المقاسة بوحدة Ω (وحدة المقاومة) إلى °C. + +> 💁 المعادلة المستخدمة لحساب المقاومة من درجة الحرارة تُعرف بـ [معادلة Steinhart–Hart](https://wikipedia.org/wiki/Steinhart–Hart_equation). + +### معايرة مستشعر رطوبة التربة + +يتم قياس رطوبة التربة باستخدام محتوى الماء الجاذبي أو الحجمي. + +* الجاذبي هو وزن الماء في وحدة وزن التربة، ويُقاس بعدد الكيلوجرامات من الماء لكل كيلوجرام من التربة الجافة. +* الحجمي هو حجم الماء في وحدة حجم التربة، ويُقاس بعدد الأمتار المكعبة من الماء لكل متر مكعب من التربة الجافة. + +> 🇺🇸 بالنسبة للأمريكيين، يمكن قياس هذه الوحدات بالرطل بدلاً من الكيلوجرام أو بالقدم المكعب بدلاً من المتر المكعب. + +مستشعرات رطوبة التربة تقيس المقاومة الكهربائية أو السعة - وهذا لا يختلف فقط حسب رطوبة التربة، ولكن أيضًا حسب نوع التربة لأن مكونات التربة يمكن أن تغير خصائصها الكهربائية. من الأفضل معايرة المستشعرات - أي أخذ قراءات من المستشعر ومقارنتها بالقياسات التي تم الحصول عليها باستخدام نهج علمي أكثر. على سبيل المثال، يمكن لمختبر حساب رطوبة التربة الجاذبية باستخدام عينات من حقل معين تُؤخذ عدة مرات في السنة، ويمكن استخدام هذه الأرقام لمعايرة المستشعر، مما يطابق قراءة المستشعر مع رطوبة التربة الجاذبية. + +![رسم بياني للجهد مقابل محتوى رطوبة التربة](../../../../../translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.ar.png) + +الرسم البياني أعلاه يوضح كيفية معايرة مستشعر. يتم تسجيل الجهد لعينة تربة يتم قياسها بعد ذلك في مختبر بمقارنة الوزن الرطب بالوزن الجاف (عن طريق قياس الوزن الرطب، ثم التجفيف في فرن وقياس الوزن الجاف). بمجرد أخذ عدة قراءات، يمكن رسمها على رسم بياني وتحديد خط يناسب النقاط. يمكن استخدام هذا الخط لتحويل قراءات مستشعر رطوبة التربة التي يتم أخذها بواسطة جهاز IoT إلى قياسات فعلية لرطوبة التربة. + +💁 بالنسبة لمستشعرات رطوبة التربة المقاومة، يزداد الجهد مع زيادة رطوبة التربة. بالنسبة لمستشعرات رطوبة التربة السعوية، ينخفض الجهد مع زيادة رطوبة التربة، لذا فإن الرسوم البيانية لهذه المستشعرات ستنحدر للأسفل بدلاً من الأعلى. + +![قيمة رطوبة التربة مستنتجة من الرسم البياني](../../../../../translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.ar.png) + +الرسم البياني أعلاه يظهر قراءة جهد من مستشعر رطوبة التربة، ومن خلال تتبع ذلك إلى الخط على الرسم البياني، يمكن حساب رطوبة التربة الفعلية. + +هذا النهج يعني أن المزارع يحتاج فقط إلى الحصول على عدد قليل من القياسات المخبرية لحقل معين، ثم يمكنه استخدام أجهزة IoT لقياس رطوبة التربة - مما يسرع بشكل كبير من وقت أخذ القياسات. + +--- + +## 🚀 تحدي + +مستشعرات رطوبة التربة المقاومة والسعوية لها عدد من الاختلافات. ما هي هذه الاختلافات، وأي نوع (إن وجد) هو الأفضل للمزارع لاستخدامه؟ هل يتغير هذا الجواب بين الدول النامية والمتقدمة؟ + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12) + +## المراجعة والدراسة الذاتية + +اقرأ عن الأجهزة والبروتوكولات المستخدمة بواسطة المستشعرات والمحركات: + +* [صفحة GPIO على ويكيبيديا](https://wikipedia.org/wiki/General-purpose_input/output) +* [صفحة UART على ويكيبيديا](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) +* [صفحة SPI على ويكيبيديا](https://wikipedia.org/wiki/Serial_Peripheral_Interface) +* [صفحة I2C على ويكيبيديا](https://wikipedia.org/wiki/I²C) +* [صفحة Zigbee على ويكيبيديا](https://wikipedia.org/wiki/Zigbee) + +## الواجب + +[عاير مستشعرك](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/2-detect-soil-moisture/assignment.md b/translations/ar/2-farm/lessons/2-detect-soil-moisture/assignment.md new file mode 100644 index 00000000..17ca9ae3 --- /dev/null +++ b/translations/ar/2-farm/lessons/2-detect-soil-moisture/assignment.md @@ -0,0 +1,63 @@ + +# معايرة المستشعر الخاص بك + +## التعليمات + +في هذا الدرس، قمت بجمع قراءات مستشعر رطوبة التربة، والتي تقاس كقيم من 0 إلى 1023. لتحويل هذه القيم إلى قراءات فعلية لرطوبة التربة، تحتاج إلى معايرة المستشعر الخاص بك. يمكنك القيام بذلك عن طريق أخذ قراءات من عينات التربة، ثم حساب محتوى رطوبة التربة الجاذبية من هذه العينات. + +ستحتاج إلى تكرار هذه الخطوات عدة مرات للحصول على القراءات المطلوبة، مع مستويات مختلفة من رطوبة التربة في كل مرة. + +1. قم بأخذ قراءة لرطوبة التربة باستخدام مستشعر رطوبة التربة. قم بتسجيل هذه القراءة. + +1. خذ عينة من التربة وقم بوزنها. قم بتسجيل هذا الوزن. + +1. قم بتجفيف التربة - فرن دافئ بدرجة حرارة 110°C (230°F) لبضع ساعات هو الطريقة الأفضل، يمكنك القيام بذلك تحت أشعة الشمس، أو وضعها في مكان دافئ وجاف حتى تصبح التربة جافة تمامًا. يجب أن تكون التربة مسحوقة وخفيفة. + + > 💁 في المختبر للحصول على نتائج أكثر دقة، يمكنك تجفيف التربة في فرن لمدة 48-72 ساعة. إذا كانت هناك أفران تجفيف في مدرستك، حاول استخدامها للتجفيف لفترة أطول. كلما طالت مدة التجفيف، كانت العينة أكثر جفافًا وكانت النتائج أكثر دقة. + +1. قم بوزن التربة مرة أخرى. + + > 🔥 إذا قمت بتجفيفها في فرن، تأكد من أنها قد بردت أولاً! + +يتم حساب رطوبة التربة الجاذبية كالتالي: + +![نسبة رطوبة التربة هي وزن التربة الرطبة ناقص وزن التربة الجافة، مقسومًا على وزن التربة الجافة، مضروبًا في 100](../../../../../translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.ar.png) + +* W +- وزن التربة الرطبة +* W +- وزن التربة الجافة + +على سبيل المثال، لديك عينة تربة وزنها 212 جرام وهي رطبة، و197 جرام وهي جافة. + +![الحساب مكتمل](../../../../../translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.ar.png) + +* W = 212g +* W = 197g +* 212 - 197 = 15 +* 15 / 197 = 0.076 +* 0.076 * 100 = 7.6% + +في هذا المثال، تحتوي التربة على نسبة رطوبة جاذبية تبلغ 7.6%. + +بمجرد أن تحصل على القراءات لثلاث عينات على الأقل، قم برسم مخطط لنسبة رطوبة التربة مقابل قراءة مستشعر رطوبة التربة وأضف خطًا يناسب النقاط. يمكنك بعد ذلك استخدام هذا الخط لحساب محتوى رطوبة التربة الجاذبية لأي قراءة مستشعر عن طريق قراءة القيمة من الخط. + +## التقييم + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | --------- | -------- | ----------------- | +| جمع بيانات المعايرة | جمع 3 عينات معايرة على الأقل | جمع عينتين معايرة على الأقل | جمع عينة معايرة واحدة فقط | +| إجراء قراءة معايرة | رسم مخطط المعايرة بنجاح وإجراء قراءة من المستشعر وتحويلها إلى محتوى رطوبة التربة الجاذبية | رسم مخطط المعايرة بنجاح | غير قادر على رسم المخطط | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md b/translations/ar/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md new file mode 100644 index 00000000..469b3959 --- /dev/null +++ b/translations/ar/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)، الذي يقيس رطوبة التربة عن طريق الكشف عن السعة الكهربائية للتربة، وهي خاصية تتغير مع تغير رطوبة التربة. مع زيادة رطوبة التربة، ينخفض الجهد الكهربائي. + +هذا المستشعر هو مستشعر تناظري، لذا يستخدم دبوسًا تناظريًا، ومحول ADC بدقة 10 بت في قبعة Grove Base Hat على Raspberry Pi لتحويل الجهد إلى إشارة رقمية تتراوح بين 1-1,023. يتم إرسال هذه الإشارة بعد ذلك عبر GPIO pins على Raspberry Pi. + +### توصيل مستشعر رطوبة التربة + +يمكن توصيل مستشعر رطوبة التربة Grove بـ Raspberry Pi. + +#### المهمة - توصيل مستشعر رطوبة التربة + +قم بتوصيل مستشعر رطوبة التربة. + +![مستشعر رطوبة التربة من نوع Grove](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر رطوبة التربة. لن يدخل إلا في اتجاه واحد. + +1. مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس التناظري المسمى **A0** على قبعة Grove Base المثبتة على Raspberry Pi. هذا المقبس هو الثاني من اليمين، في صف المقابس بجانب دبابيس GPIO. + +![مستشعر رطوبة التربة متصل بالمقبس A0](../../../../../translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.ar.png) + +1. أدخل مستشعر رطوبة التربة في التربة. يحتوي المستشعر على "خط أعلى موضع" - وهو خط أبيض عبر المستشعر. أدخل المستشعر حتى هذا الخط ولكن لا تتجاوزه. + +![مستشعر رطوبة التربة في التربة](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ar.png) + +## برمجة مستشعر رطوبة التربة + +يمكن الآن برمجة Raspberry Pi لاستخدام مستشعر رطوبة التربة المتصل. + +### المهمة - برمجة مستشعر رطوبة التربة + +قم ببرمجة الجهاز. + +1. قم بتشغيل Raspberry Pi وانتظر حتى يتم الإقلاع. + +1. قم بتشغيل VS Code، إما مباشرة على Raspberry Pi، أو قم بالاتصال باستخدام إضافة Remote SSH. + + > ⚠️ يمكنك الرجوع إلى [التعليمات الخاصة بإعداد وتشغيل VS Code في درس Nightlight - الدرس الأول إذا لزم الأمر](../../../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. أضف حلقة لا نهائية تقرأ من هذا المحول التناظري إلى الرقمي على دبوس 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). + +😀 لقد نجحت في برمجة مستشعر رطوبة التربة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md b/translations/ar/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md new file mode 100644 index 00000000..56ce0a96 --- /dev/null +++ b/translations/ar/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md @@ -0,0 +1,123 @@ + +# قياس رطوبة التربة - أجهزة إنترنت الأشياء الافتراضية + +في هذا الجزء من الدرس، ستضيف مستشعر رطوبة التربة السعوي إلى جهاز إنترنت الأشياء الافتراضي الخاص بك، وتقرأ القيم منه. + +## الأجهزة الافتراضية + +سيستخدم جهاز إنترنت الأشياء الافتراضي مستشعر رطوبة التربة السعوي المحاكي من نوع Grove. هذا يجعل هذا المختبر مشابهًا لاستخدام Raspberry Pi مع مستشعر رطوبة التربة السعوي الفعلي. + +في جهاز إنترنت الأشياء الفعلي، سيكون مستشعر رطوبة التربة مستشعرًا سعويًا يقيس رطوبة التربة عن طريق الكشف عن السعة الكهربائية للتربة، وهي خاصية تتغير مع تغير رطوبة التربة. مع زيادة رطوبة التربة، ينخفض الجهد الكهربائي. + +هذا المستشعر هو مستشعر تناظري، لذا يستخدم محول تناظري رقمي محاكي بدقة 10 بت للإبلاغ عن قيمة تتراوح بين 1 و1023. + +### إضافة مستشعر رطوبة التربة إلى CounterFit + +لاستخدام مستشعر رطوبة التربة الافتراضي، تحتاج إلى إضافته إلى تطبيق CounterFit. + +#### المهمة - إضافة مستشعر رطوبة التربة إلى CounterFit + +أضف مستشعر رطوبة التربة إلى تطبيق CounterFit. + +1. قم بإنشاء تطبيق Python جديد على جهاز الكمبيوتر الخاص بك في مجلد يسمى `soil-moisture-sensor` مع ملف واحد يسمى `app.py` وبيئة Python افتراضية، وأضف حزم CounterFit باستخدام pip. + + > ⚠️ يمكنك الرجوع إلى [التعليمات لإنشاء وإعداد مشروع CounterFit Python في الدرس الأول إذا لزم الأمر](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. تأكد من تشغيل تطبيق الويب CounterFit. + +1. قم بإنشاء مستشعر رطوبة التربة: + + 1. في مربع *إنشاء مستشعر* في لوحة *المستشعرات*، افتح القائمة المنسدلة *نوع المستشعر* واختر *رطوبة التربة*. + + 1. اترك *الوحدات* مضبوطة على *NoUnits*. + + 1. تأكد من أن *الدبوس* مضبوط على *0*. + + 1. اختر زر **إضافة** لإنشاء مستشعر *رطوبة التربة* على الدبوس 0. + + ![إعدادات مستشعر رطوبة التربة](../../../../../translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.ar.png) + + سيتم إنشاء مستشعر رطوبة التربة وسيظهر في قائمة المستشعرات. + + ![تم إنشاء مستشعر رطوبة التربة](../../../../../translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.ar.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. أضف حلقة لا نهائية تقرأ من هذا المحول التناظري الرقمي على الدبوس 0 وتكتب النتيجة إلى وحدة التحكم. يمكن لهذه الحلقة أن تتوقف لمدة 10 ثوانٍ بين القراءات. + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. من تطبيق CounterFit، قم بتغيير قيمة مستشعر رطوبة التربة التي سيتم قراءتها بواسطة التطبيق. يمكنك القيام بذلك بطريقتين: + + * أدخل رقمًا في مربع *القيمة* الخاص بمستشعر رطوبة التربة، ثم اختر زر **تعيين**. الرقم الذي تدخله سيكون القيمة التي يعيدها المستشعر. + + * قم بتحديد مربع *عشوائي*، وأدخل قيمة *الحد الأدنى* و *الحد الأقصى*، ثم اختر زر **تعيين**. في كل مرة يقرأ المستشعر قيمة، سيقرأ رقمًا عشوائيًا بين *الحد الأدنى* و *الحد الأقصى*. + +1. قم بتشغيل تطبيق Python. سترى قياسات رطوبة التربة مكتوبة في وحدة التحكم. قم بتغيير إعدادات *القيمة* أو *العشوائي* لرؤية تغير القيمة. + + ```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) المجلد. + +😀 لقد نجحت في برمجة تطبيق مستشعر رطوبة التربة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md b/translations/ar/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md new file mode 100644 index 00000000..81d005e5 --- /dev/null +++ b/translations/ar/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.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر رطوبة التربة. يمكن إدخاله في اتجاه واحد فقط. + +1. مع فصل Wio Terminal عن الكمبيوتر أو مصدر الطاقة الآخر، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الموجود على الجانب الأيمن من Wio Terminal كما يظهر على الشاشة. هذا هو المقبس الأبعد عن زر الطاقة. + +![مستشعر رطوبة التربة Grove متصل بالمقبس الأيمن](../../../../../translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.ar.png) + +1. أدخل مستشعر رطوبة التربة في التربة. يحتوي على "خط أعلى موضع" - خط أبيض عبر المستشعر. أدخل المستشعر حتى هذا الخط ولكن لا تتجاوزه. + +![مستشعر رطوبة التربة Grove في التربة](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.ar.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). + +😀 لقد نجحت في برمجة مستشعر رطوبة التربة! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/3-automated-plant-watering/README.md b/translations/ar/2-farm/lessons/3-automated-plant-watering/README.md new file mode 100644 index 00000000..63b105b4 --- /dev/null +++ b/translations/ar/2-farm/lessons/3-automated-plant-watering/README.md @@ -0,0 +1,314 @@ + +# الريّ الآلي للنباتات + +![نظرة عامة على هذا الدرس](../../../../../translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.ar.jpg) + +> رسم توضيحي بواسطة [نيتيا ناراسيمهان](https://github.com/nitya). اضغط على الصورة للحصول على نسخة أكبر. + +تم تدريس هذا الدرس كجزء من [مشروع إنترنت الأشياء للمبتدئين - سلسلة الزراعة الرقمية](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) من [مايكروسوفت ريآكتور](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![ريّ النباتات باستخدام إنترنت الأشياء](https://img.youtube.com/vi/g9FfZwv9R58/0.jpg)](https://youtu.be/g9FfZwv9R58) + +## اختبار ما قبل المحاضرة + +[اختبار ما قبل المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13) + +## المقدمة + +في الدرس السابق، تعلمت كيفية مراقبة رطوبة التربة. في هذا الدرس، ستتعلم كيفية بناء المكونات الأساسية لنظام ريّ آلي يستجيب لرطوبة التربة. ستتعلم أيضًا عن التوقيت - كيف يمكن أن تستغرق المستشعرات وقتًا للاستجابة للتغيرات، وكيف يمكن للمشغلات أن تستغرق وقتًا لتغيير الخصائص التي تقيسها المستشعرات. + +في هذا الدرس سنغطي: + +* [التحكم في الأجهزة ذات الطاقة العالية باستخدام جهاز إنترنت الأشياء منخفض الطاقة](../../../../../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) + +## التحكم في الأجهزة ذات الطاقة العالية باستخدام جهاز إنترنت الأشياء منخفض الطاقة + +تستخدم أجهزة إنترنت الأشياء جهدًا منخفضًا. بينما يكون هذا كافيًا للمستشعرات والمشغلات منخفضة الطاقة مثل مصابيح LED، إلا أنه منخفض جدًا للتحكم في الأجهزة الأكبر، مثل مضخة المياه المستخدمة في الريّ. حتى المضخات الصغيرة التي يمكن استخدامها للنباتات المنزلية تسحب تيارًا كبيرًا جدًا بالنسبة لمجموعة تطوير إنترنت الأشياء، مما قد يؤدي إلى تلف اللوحة. + +> 🎓 التيار، الذي يُقاس بالأمبير (A)، هو كمية الكهرباء التي تتحرك عبر الدائرة. الجهد يوفر الدفع، والتيار هو مقدار الدفع. يمكنك قراءة المزيد عن التيار في [صفحة التيار الكهربائي على ويكيبيديا](https://wikipedia.org/wiki/Electric_current). + +الحل هو توصيل المضخة بمصدر طاقة خارجي واستخدام مشغل لتشغيل المضخة، مشابه لكيفية تشغيل الضوء باستخدام مفتاح. يتطلب الأمر كمية صغيرة جدًا من الطاقة (على شكل طاقة في جسمك) لتحريك إصبعك لتشغيل المفتاح، وهذا يربط الضوء بالكهرباء الرئيسية التي تعمل بجهد 110 فولت/240 فولت. + +![مفتاح الضوء يشغل الطاقة للضوء](../../../../../translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.ar.png) + +> 🎓 [الكهرباء الرئيسية](https://wikipedia.org/wiki/Mains_electricity) تشير إلى الكهرباء التي يتم توصيلها إلى المنازل والأعمال عبر البنية التحتية الوطنية في العديد من أنحاء العالم. + +✅ يمكن لأجهزة إنترنت الأشياء عادةً توفير 3.3 فولت أو 5 فولت، بأقل من 1 أمبير (1A) من التيار. قارن هذا بالكهرباء الرئيسية التي تكون غالبًا عند 230 فولت (120 فولت في أمريكا الشمالية و100 فولت في اليابان)، ويمكنها توفير الطاقة للأجهزة التي تسحب 30 أمبير. + +هناك عدد من المشغلات التي يمكنها القيام بذلك، بما في ذلك الأجهزة الميكانيكية التي يمكن تثبيتها على المفاتيح الموجودة لتقليد حركة الإصبع لتشغيلها. الأكثر شيوعًا هو الريليه. + +### الريليه + +الريليه هو مفتاح كهروميكانيكي يحول الإشارة الكهربائية إلى حركة ميكانيكية تقوم بتشغيل المفتاح. جوهر الريليه هو المغناطيس الكهربائي. + +> 🎓 [المغناطيسات الكهربائية](https://wikipedia.org/wiki/Electromagnet) هي مغناطيسات يتم إنشاؤها عن طريق تمرير الكهرباء عبر ملف من الأسلاك. عندما يتم تشغيل الكهرباء، يصبح الملف ممغنطًا. عندما يتم إيقاف الكهرباء، يفقد الملف مغناطيسيته. + +![عندما يكون في وضع التشغيل، يخلق المغناطيس الكهربائي مجالًا مغناطيسيًا، مما يشغل المفتاح لدائرة الإخراج](../../../../../translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.ar.png) + +في الريليه، تقوم دائرة التحكم بتشغيل المغناطيس الكهربائي. عندما يكون المغناطيس الكهربائي في وضع التشغيل، فإنه يسحب ذراعًا يحرك مفتاحًا، مما يغلق زوجًا من التلامسات ويكمل دائرة الإخراج. + +![عندما يكون في وضع الإيقاف، لا يخلق المغناطيس الكهربائي مجالًا مغناطيسيًا، مما يوقف المفتاح لدائرة الإخراج](../../../../../translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.ar.png) + +عندما تكون دائرة التحكم في وضع الإيقاف، يتم إيقاف تشغيل المغناطيس الكهربائي، مما يحرر الذراع ويفتح التلامسات، مما يوقف دائرة الإخراج. الريليه هو مشغل رقمي - إشارة عالية إلى الريليه تشغله، وإشارة منخفضة توقفه. + +يمكن استخدام دائرة الإخراج لتشغيل أجهزة إضافية، مثل نظام الريّ. يمكن لجهاز إنترنت الأشياء تشغيل الريليه، مما يكمل دائرة الإخراج التي تشغل نظام الريّ، ويتم ريّ النباتات. يمكن لجهاز إنترنت الأشياء بعد ذلك إيقاف تشغيل الريليه، مما يقطع الطاقة عن نظام الريّ، ويوقف الماء. + +![ريليه يشغل مضخة ترسل الماء إلى النبات](../../../../../images/strawberry-pump.gif) + +في الفيديو أعلاه، يتم تشغيل الريليه. يضيء مصباح LED على الريليه للإشارة إلى أنه في وضع التشغيل (تحتوي بعض لوحات الريليه على مصابيح LED للإشارة إلى ما إذا كان الريليه في وضع التشغيل أو الإيقاف)، ويتم إرسال الطاقة إلى المضخة، مما يشغلها ويضخ الماء إلى النبات. + +> 💁 يمكن أيضًا استخدام الريليه للتبديل بين دائرتي إخراج بدلاً من تشغيل واحدة وإيقافها. عندما يتحرك الذراع، فإنه يحرك مفتاحًا من إكمال دائرة إخراج واحدة إلى إكمال دائرة إخراج مختلفة، عادةً بمشاركة اتصال طاقة مشترك أو اتصال أرضي مشترك. + +✅ قم ببعض البحث: هناك أنواع متعددة من الريليه، مع اختلافات مثل ما إذا كانت دائرة التحكم تشغل الريليه أو توقفه عند تطبيق الطاقة، أو وجود دوائر إخراج متعددة. اكتشف هذه الأنواع المختلفة. + +عندما يتحرك الذراع، يمكنك عادةً سماع صوت واضح للنقر عند الاتصال بالمغناطيس الكهربائي. + +> 💁 يمكن توصيل الريليه بحيث يؤدي إنشاء الاتصال فعليًا إلى قطع الطاقة عن الريليه، مما يوقف تشغيله، والذي يرسل بعد ذلك الطاقة إلى الريليه لتشغيله مرة أخرى، وهكذا. هذا يعني أن الريليه سينقر بسرعة كبيرة مما يخلق صوت طنين. هذه هي الطريقة التي عملت بها بعض الأجراس الكهربائية الأولى المستخدمة في أجراس الأبواب. + +### طاقة الريليه + +لا يحتاج المغناطيس الكهربائي إلى الكثير من الطاقة للتفعيل وسحب الذراع، يمكن التحكم فيه باستخدام خرج 3.3 فولت أو 5 فولت من مجموعة تطوير إنترنت الأشياء. يمكن لدائرة الإخراج أن تحمل طاقة أكبر بكثير، اعتمادًا على الريليه، بما في ذلك الجهد الرئيسي أو حتى مستويات طاقة أعلى للاستخدام الصناعي. بهذه الطريقة يمكن لمجموعة تطوير إنترنت الأشياء التحكم في نظام الريّ، من مضخة صغيرة لنبات واحد، وصولًا إلى نظام صناعي ضخم لمزرعة تجارية كاملة. + +![ريليه Grove مع دائرة التحكم، دائرة الإخراج والريليه موضحة](../../../../../translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.ar.png) + +الصورة أعلاه تظهر ريليه Grove. دائرة التحكم تتصل بجهاز إنترنت الأشياء وتقوم بتشغيل الريليه أو إيقافه باستخدام 3.3 فولت أو 5 فولت. دائرة الإخراج تحتوي على طرفين، يمكن لأي منهما أن يكون الطاقة أو الأرض. دائرة الإخراج يمكنها التعامل مع ما يصل إلى 250 فولت عند 10 أمبير، وهو ما يكفي لمجموعة من الأجهزة التي تعمل بالطاقة الرئيسية. يمكنك الحصول على ريليه يمكنه التعامل مع مستويات طاقة أعلى. + +![مضخة موصولة عبر ريليه](../../../../../translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.ar.png) + +في الصورة أعلاه، يتم توفير الطاقة لمضخة عبر ريليه. هناك سلك أحمر يربط الطرف +5 فولت من مصدر طاقة USB بأحد أطراف دائرة الإخراج للريليه، وسلك أحمر آخر يربط الطرف الآخر لدائرة الإخراج بالمضخة. سلك أسود يربط المضخة بالأرض على مصدر طاقة USB. عندما يتم تشغيل الريليه، فإنه يكمل الدائرة، ويرسل 5 فولت إلى المضخة، مما يشغل المضخة. + +## التحكم في الريليه + +يمكنك التحكم في الريليه من مجموعة تطوير إنترنت الأشياء الخاصة بك. + +### المهمة - التحكم في الريليه + +قم بتنفيذ الدليل المناسب للتحكم في الريليه باستخدام جهاز إنترنت الأشياء الخاص بك: + +* [Arduino - Wio Terminal](wio-terminal-relay.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi](pi-relay.md) +* [كمبيوتر أحادي اللوحة - جهاز افتراضي](virtual-device-relay.md) + +## التحكم في نباتك عبر MQTT + +حتى الآن يتم التحكم في الريليه بواسطة جهاز إنترنت الأشياء مباشرة بناءً على قراءة واحدة لرطوبة التربة. في نظام الريّ التجاري، يتم مركزية منطق التحكم، مما يسمح له باتخاذ قرارات الريّ باستخدام بيانات من مستشعرات متعددة، والسماح بتغيير أي إعدادات في مكان واحد. لمحاكاة ذلك، يمكنك التحكم في الريليه عبر 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، بنفس المنطق الذي أضفته لجهاز إنترنت الأشياء سابقًا. + + > ⚠️ يمكنك الرجوع إلى [التعليمات للاستجابة للأوامر من 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) folder. + +تأكد من تشغيل الكود على جهازك والخادم المحلي، واختبره عن طريق تغيير مستويات رطوبة التربة، إما عن طريق تغيير القيم المرسلة بواسطة المستشعر الافتراضي، أو عن طريق تغيير مستويات الرطوبة في التربة بإضافة الماء أو إزالة المستشعر من التربة. + +## توقيت المستشعرات والمشغلات + +في الدرس الثالث، قمت ببناء ضوء ليلي - مصباح LED يضيء بمجرد اكتشاف مستوى منخفض من الضوء بواسطة مستشعر الضوء. مستشعر الضوء اكتشف تغيرًا في مستويات الضوء على الفور، وكان الجهاز قادرًا على الاستجابة بسرعة، فقط محدودًا بطول التأخير في وظيفة `loop` أو حلقة `while True:`. كمطور إنترنت الأشياء، لا يمكنك دائمًا الاعتماد على مثل هذه الحلقة السريعة. + +### توقيت رطوبة التربة + +إذا قمت بالدرس الأخير حول رطوبة التربة باستخدام مستشعر فعلي، ربما لاحظت أنه استغرق بضع ثوانٍ حتى تنخفض قراءة رطوبة التربة بعد ريّ النبات. هذا ليس لأن المستشعر بطيء، ولكن لأن الماء يستغرق وقتًا للتغلغل في التربة. +💁 إذا قمت بري التربة بالقرب من المستشعر، قد تكون لاحظت انخفاض القراءة بسرعة ثم عودتها للارتفاع - يحدث هذا بسبب انتشار الماء بالقرب من المستشعر في باقي التربة، مما يقلل من رطوبة التربة حول المستشعر. +![قياس رطوبة التربة بقيمة 658 لا يتغير أثناء الري، ولكنه ينخفض إلى 320 بعد الري عندما يتشبع الماء في التربة](../../../../../translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.ar.png) + +في الرسم البياني أعلاه، يظهر قياس رطوبة التربة بقيمة 658. يتم ري النبات، لكن هذه القيمة لا تتغير فورًا لأن الماء لم يصل بعد إلى المستشعر. يمكن أن ينتهي الري حتى قبل أن يصل الماء إلى المستشعر وتنخفض القيمة لتعكس مستوى الرطوبة الجديد. + +إذا كنت تكتب كودًا للتحكم في نظام الري باستخدام مرحل بناءً على مستويات رطوبة التربة، فستحتاج إلى أخذ هذا التأخير في الاعتبار وبناء توقيت أكثر ذكاءً في جهاز إنترنت الأشياء الخاص بك. + +✅ خذ لحظة للتفكير في كيفية القيام بذلك. + +### التحكم في توقيت المستشعر والمشغل + +تخيل أنك مكلف ببناء نظام ري لمزرعة. بناءً على نوع التربة، تم تحديد أن مستوى الرطوبة المثالي للنباتات المزروعة يتطابق مع قراءة جهد تناظري بين 400-450. + +يمكنك برمجة الجهاز بنفس طريقة المصباح الليلي - طوال الوقت الذي يقرأ فيه المستشعر قيمة أعلى من 450، قم بتشغيل المرحل لتشغيل المضخة. المشكلة هي أن الماء يستغرق وقتًا للوصول من المضخة عبر التربة إلى المستشعر. سيتوقف المستشعر عن الماء عندما يكتشف مستوى 450، لكن مستوى الماء سيستمر في الانخفاض مع استمرار تشبع الماء في التربة. النتيجة النهائية هي هدر الماء وخطر تلف الجذور. + +✅ تذكر - الكثير من الماء يمكن أن يكون سيئًا للنباتات مثل القليل منه، ويهدر موردًا ثمينًا. + +الحل الأفضل هو فهم أن هناك تأخيرًا بين تشغيل المشغل وتغير الخاصية التي يقرأها المستشعر. هذا يعني أنه لا يجب فقط أن ينتظر المستشعر لفترة قبل قياس القيمة مرة أخرى، ولكن يجب أن يتوقف المشغل لفترة قبل أخذ قياس المستشعر التالي. + +كم من الوقت يجب أن يكون المرحل قيد التشغيل في كل مرة؟ من الأفضل أن تكون حذرًا وتشغيل المرحل لفترة قصيرة فقط، ثم الانتظار حتى يتشبع الماء، ثم إعادة التحقق من مستويات الرطوبة. بعد كل شيء، يمكنك دائمًا تشغيله مرة أخرى لإضافة المزيد من الماء، لكن لا يمكنك إزالة الماء من التربة. + +> 💁 هذا النوع من التحكم في التوقيت محدد جدًا لجهاز إنترنت الأشياء الذي تقوم ببنائه، والخاصية التي تقيسها، والمستشعرات والمشغلات المستخدمة. + +![نبات الفراولة متصل بالماء عبر مضخة، والمضخة متصلة بمرحل. المرحل ومستشعر رطوبة التربة في النبات كلاهما متصل بـ Raspberry Pi](../../../../../translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.ar.png) + +على سبيل المثال، لدي نبات فراولة مع مستشعر رطوبة التربة ومضخة يتم التحكم فيها بواسطة مرحل. لقد لاحظت أنه عندما أضيف الماء يستغرق حوالي 20 ثانية حتى تستقر قراءة رطوبة التربة. هذا يعني أنني بحاجة إلى إيقاف المرحل والانتظار لمدة 20 ثانية قبل التحقق من مستويات الرطوبة. أفضل أن يكون هناك القليل من الماء بدلاً من الكثير - يمكنني دائمًا تشغيل المضخة مرة أخرى، لكن لا يمكنني إزالة الماء من النبات. + +![الخطوة 1: أخذ القياس. الخطوة 2: إضافة الماء. الخطوة 3: الانتظار حتى يتشبع الماء في التربة. الخطوة 4: إعادة أخذ القياس](../../../../../translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.ar.png) + +هذا يعني أن أفضل عملية ستكون دورة ري تشبه: + +* تشغيل المضخة لمدة 5 ثوانٍ +* الانتظار لمدة 20 ثانية +* التحقق من رطوبة التربة +* إذا كان المستوى لا يزال أعلى مما أحتاجه، كرر الخطوات أعلاه + +قد تكون 5 ثوانٍ طويلة جدًا بالنسبة للمضخة، خاصة إذا كانت مستويات الرطوبة أعلى قليلاً فقط من المستوى المطلوب. أفضل طريقة لمعرفة التوقيت المناسب هي تجربته، ثم التعديل عندما تحصل على بيانات المستشعر، مع حلقة تغذية راجعة مستمرة. يمكن أن يؤدي ذلك حتى إلى توقيت أكثر دقة، مثل تشغيل المضخة لمدة ثانية واحدة لكل 100 أعلى من مستوى رطوبة التربة المطلوب، بدلاً من 5 ثوانٍ ثابتة. + +✅ قم ببعض البحث: هل هناك اعتبارات توقيت أخرى؟ هل يمكن ري النبات في أي وقت تكون فيه رطوبة التربة منخفضة جدًا، أم أن هناك أوقات معينة من اليوم تكون جيدة أو سيئة لري النباتات؟ + +> 💁 يمكن أيضًا أخذ توقعات الطقس في الاعتبار عند التحكم في أنظمة الري الآلية للنمو الخارجي. إذا كان من المتوقع هطول الأمطار، يمكن تأجيل الري حتى انتهاء المطر. في تلك المرحلة قد تكون التربة رطبة بما يكفي بحيث لا تحتاج إلى الري، وهو أكثر كفاءة من هدر الماء بالري قبل المطر مباشرة. + +## إضافة توقيت إلى خادم التحكم بالنباتات + +يمكن تعديل كود الخادم لإضافة التحكم حول توقيت دورة الري، والانتظار حتى تتغير مستويات رطوبة التربة. منطق الخادم للتحكم في توقيت المرحل هو: + +1. استلام رسالة القياس عن بعد +1. التحقق من مستوى رطوبة التربة +1. إذا كان المستوى مناسبًا، لا تفعل شيئًا. إذا كانت القراءة مرتفعة جدًا (مما يعني أن رطوبة التربة منخفضة جدًا)، فقم بما يلي: + 1. إرسال أمر لتشغيل المرحل + 1. الانتظار لمدة 5 ثوانٍ + 1. إرسال أمر لإيقاف المرحل + 1. الانتظار لمدة 20 ثانية حتى تستقر مستويات رطوبة التربة + +دورة الري، العملية من استلام رسالة القياس عن بعد إلى أن تكون جاهزًا لمعالجة مستويات رطوبة التربة مرة أخرى، تستغرق حوالي 25 ثانية. نحن نرسل مستويات رطوبة التربة كل 10 ثوانٍ، لذا هناك تداخل حيث يتم استلام رسالة بينما ينتظر الخادم استقرار مستويات رطوبة التربة، مما قد يبدأ دورة ري أخرى. + +هناك خياران للتعامل مع هذا: + +* تغيير كود جهاز إنترنت الأشياء لإرسال القياس عن بعد كل دقيقة فقط، بهذه الطريقة ستكتمل دورة الري قبل إرسال الرسالة التالية +* إلغاء الاشتراك من القياس عن بعد أثناء دورة الري + +الخيار الأول ليس دائمًا حلاً جيدًا للمزارع الكبيرة. قد يرغب المزارع في التقاط مستويات رطوبة التربة أثناء ري التربة لتحليلها لاحقًا، على سبيل المثال ليكون على دراية بتدفق الماء في مناطق مختلفة من المزرعة لتوجيه الري بشكل أكثر دقة. الخيار الثاني أفضل - الكود يتجاهل القياس عن بعد عندما لا يمكن استخدامه، لكن القياس عن بعد لا يزال موجودًا لخدمات أخرى قد تشترك فيه. + +> 💁 بيانات إنترنت الأشياء لا يتم إرسالها من جهاز واحد إلى خدمة واحدة فقط، بل يمكن للعديد من الأجهزة إرسال البيانات إلى وسيط، ويمكن للعديد من الخدمات الاستماع إلى البيانات من الوسيط. على سبيل المثال، يمكن لخدمة واحدة الاستماع إلى بيانات رطوبة التربة وتخزينها في قاعدة بيانات لتحليلها لاحقًا. يمكن لخدمة أخرى أيضًا الاستماع إلى نفس القياس عن بعد للتحكم في نظام الري. + +### المهمة - إضافة توقيت إلى خادم التحكم بالنباتات + +قم بتحديث كود الخادم لتشغيل المرحل لمدة 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. تأكد من تشغيل جهاز إنترنت الأشياء الخاص بك، ثم قم بتشغيل هذا الكود. قم بتغيير مستويات رطوبة التربة ولاحظ ما يحدث للمرحل - يجب أن يعمل لمدة 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). تأكد من أن الطاقة إلى أو من المضخة متصلة عبر المرحل. + +--- + +## 🚀 التحدي + +هل يمكنك التفكير في أي أجهزة إنترنت الأشياء أو أجهزة كهربائية أخرى تواجه مشكلة مشابهة حيث يستغرق الأمر وقتًا حتى تصل نتائج المشغل إلى المستشعر؟ ربما لديك بعض منها في منزلك أو مدرستك. + +* ما الخصائص التي تقيسها؟ +* كم من الوقت يستغرق تغير الخاصية بعد استخدام المشغل؟ +* هل من المقبول أن تتغير الخاصية بعد القيمة المطلوبة؟ +* كيف يمكن إعادتها إلى القيمة المطلوبة إذا لزم الأمر؟ + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14) + +## المراجعة والدراسة الذاتية + +* اقرأ المزيد عن المرحلات بما في ذلك استخدامها التاريخي في تبادل الهواتف على [صفحة ويكيبيديا عن المرحلات](https://wikipedia.org/wiki/Relay). + +## الواجب + +[بناء دورة ري أكثر كفاءة](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/3-automated-plant-watering/assignment.md b/translations/ar/2-farm/lessons/3-automated-plant-watering/assignment.md new file mode 100644 index 00000000..8593ac62 --- /dev/null +++ b/translations/ar/2-farm/lessons/3-automated-plant-watering/assignment.md @@ -0,0 +1,54 @@ + +# بناء دورة ري أكثر كفاءة + +## التعليمات + +تناولت هذه الدرس كيفية التحكم في المرحل باستخدام بيانات المستشعر، ويمكن لهذا المرحل بدوره التحكم في مضخة لنظام الري. بالنسبة لمساحة محددة من التربة، فإن تشغيل المضخة لفترة زمنية ثابتة يجب أن يكون له نفس التأثير دائمًا على رطوبة التربة. هذا يعني أنه يمكنك الحصول على فكرة عن عدد الثواني اللازمة للري التي تتوافق مع انخفاض معين في قراءة رطوبة التربة. باستخدام هذه البيانات، يمكنك بناء نظام ري أكثر تحكمًا. + +في هذا التمرين، ستقوم بحساب المدة التي يجب أن تعمل فيها المضخة لتحقيق زيادة معينة في رطوبة التربة. + +> ⚠️ إذا كنت تستخدم أجهزة إنترنت الأشياء الافتراضية، يمكنك اتباع هذه العملية، ولكن قم بمحاكاة النتائج عن طريق زيادة قراءة رطوبة التربة يدويًا بمقدار ثابت لكل ثانية تكون فيها المضخة قيد التشغيل. + +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. استخدم هذه البيانات لتحسين كفاءة كود الخادم الخاص بك، بحيث تعمل المضخة للمدة المطلوبة للوصول إلى مستوى الرطوبة المطلوب. + +## المعايير + +| المعيار | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | --------- | -------- | ----------------- | +| قياس بيانات رطوبة التربة | قادر على التقاط قراءات متعددة بعد إضافة كميات ثابتة من الماء | قادر على التقاط بعض القراءات مع كميات ثابتة من الماء | يمكنه التقاط قراءة واحدة أو اثنتين فقط، أو غير قادر على استخدام كميات ثابتة من الماء | +| معايرة كود الخادم | قادر على حساب متوسط الانخفاض في قراءة رطوبة التربة وتحديث كود الخادم لاستخدام هذا المتوسط | قادر على حساب متوسط الانخفاض، ولكنه غير قادر على تحديث كود الخادم، أو غير قادر على حساب المتوسط بشكل صحيح ولكنه يستخدم هذه القيمة لتحديث كود الخادم بشكل صحيح | غير قادر على حساب المتوسط أو تحديث كود الخادم | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/3-automated-plant-watering/pi-relay.md b/translations/ar/2-farm/lessons/3-automated-plant-watering/pi-relay.md new file mode 100644 index 00000000..bc36974c --- /dev/null +++ b/translations/ar/2-farm/lessons/3-automated-plant-watering/pi-relay.md @@ -0,0 +1,123 @@ + +# التحكم في الريليه - Raspberry Pi + +في هذا الجزء من الدرس، ستضيف ريليه إلى Raspberry Pi بالإضافة إلى مستشعر رطوبة التربة، وستتحكم فيه بناءً على مستوى رطوبة التربة. + +## الأجهزة + +يحتاج Raspberry Pi إلى ريليه. + +الريليه الذي ستستخدمه هو [Grove relay](https://www.seeedstudio.com/Grove-Relay.html)، وهو ريليه مفتوح عادةً (مما يعني أن دائرة الإخراج تكون مفتوحة أو غير متصلة عندما لا يتم إرسال إشارة إلى الريليه) ويمكنه التعامل مع دوائر الإخراج حتى 250V و10A. + +هذا جهاز رقمي، لذا يتم توصيله بدبوس رقمي على قبعة Grove Base. + +### توصيل الريليه + +يمكن توصيل ريليه Grove بـ Raspberry Pi. + +#### المهمة + +قم بتوصيل الريليه. + +![ريليه Grove](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على الريليه. لن يدخل إلا بطريقة واحدة. + +1. مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الرقمي المسمى **D5** على قبعة Grove Base المثبتة على Pi. هذا المقبس هو الثاني من اليسار، في صف المقابس بجانب دبابيس GPIO. اترك مستشعر رطوبة التربة متصلاً بالمقبس **A0**. + +![ريليه Grove متصل بمقبس D5 ومستشعر رطوبة التربة متصل بمقبس A0](../../../../../translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.ar.png) + +1. أدخل مستشعر رطوبة التربة في التربة، إذا لم يكن بالفعل من الدرس السابق. + +## برمجة الريليه + +يمكن الآن برمجة Raspberry Pi لاستخدام الريليه المتصل. + +### المهمة + +قم ببرمجة الجهاز. + +1. قم بتشغيل Pi وانتظر حتى يتم الإقلاع. + +1. افتح مشروع `soil-moisture-sensor` من الدرس السابق في VS Code إذا لم يكن مفتوحًا بالفعل. ستقوم بإضافة إلى هذا المشروع. + +1. أضف الكود التالي إلى ملف `app.py` أسفل الواردات الحالية: + + ```python + from grove.grove_relay import GroveRelay + ``` + + هذا البيان يستورد `GroveRelay` من مكتبات Python الخاصة بـ Grove للتفاعل مع ريليه 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). + +😀 لقد نجحت في برمجة مستشعر رطوبة التربة للتحكم في الريليه! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md b/translations/ar/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md new file mode 100644 index 00000000..08729dfe --- /dev/null +++ b/translations/ar/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md @@ -0,0 +1,127 @@ + +# التحكم في المرحل - أجهزة إنترنت الأشياء الافتراضية + +في هذا الجزء من الدرس، ستضيف مرحلًا إلى جهاز إنترنت الأشياء الافتراضي الخاص بك بالإضافة إلى مستشعر رطوبة التربة، وستتحكم فيه بناءً على مستوى رطوبة التربة. + +## الأجهزة الافتراضية + +سيستخدم جهاز إنترنت الأشياء الافتراضي مرحلًا محاكيًا من نوع Grove. هذا يجعل هذا المختبر مشابهًا لاستخدام Raspberry Pi مع مرحل Grove فعلي. + +في جهاز إنترنت الأشياء الفعلي، سيكون المرحل من النوع المفتوح عادةً (أي أن دائرة الخرج تكون مفتوحة أو غير متصلة عندما لا يتم إرسال إشارة إلى المرحل). يمكن لمثل هذا المرحل التعامل مع دوائر الخرج حتى 250 فولت و10 أمبير. + +### إضافة المرحل إلى 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.ar.png) + + سيتم إنشاء المرحل وسيظهر في قائمة المشغلات. + + ![المرحل الذي تم إنشاؤه](../../../../../translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.ar.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) + ``` + + يقوم هذا بإنشاء مرحل باستخدام Pin **5**، وهو نفس الـ Pin الذي قمت بتوصيل المرحل به. + +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). + +😀 لقد نجحت في إنشاء برنامج يتحكم في مرحل باستخدام مستشعر رطوبة التربة الافتراضي! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md b/translations/ar/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md new file mode 100644 index 00000000..8f6b9572 --- /dev/null +++ b/translations/ar/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)، وهو مرحل مفتوح عادةً (مما يعني أن دائرة الخرج تكون مفتوحة أو غير متصلة عندما لا يتم إرسال إشارة إلى المرحل) ويمكنه التعامل مع دوائر الخرج حتى 250 فولت و10 أمبير. + +هذا جهاز تحكم رقمي، لذا يتم توصيله بدبابيس رقمية على Wio Terminal. المنفذ المشترك بين التناظري والرقمي قيد الاستخدام بالفعل مع مستشعر رطوبة التربة، لذا يتم توصيل هذا المرحل بالمنفذ الآخر، وهو منفذ مشترك بين التناظري والرقمي. + +### توصيل المرحل + +يمكن توصيل مرحل Grove بمنفذ Wio Terminal الرقمي. + +#### المهمة + +قم بتوصيل المرحل. + +![مرحل Grove](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على المرحل. لن يدخل إلا بطريقة واحدة. + +1. مع فصل Wio Terminal عن الكمبيوتر أو مصدر الطاقة الآخر، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الموجود على الجانب الأيسر من Wio Terminal أثناء النظر إلى الشاشة. اترك مستشعر رطوبة التربة متصلًا بالمقبس الموجود على الجانب الأيمن. + +![مرحل Grove متصل بالمقبس الأيسر، ومستشعر رطوبة التربة متصل بالمقبس الأيمن](../../../../../translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.ar.png) + +1. أدخل مستشعر رطوبة التربة في التربة، إذا لم يكن موجودًا بالفعل من الدرس السابق. + +## برمجة المرحل + +يمكن الآن برمجة Wio Terminal لاستخدام المرحل المتصل. + +### المهمة + +برمج الجهاز. + +1. افتح مشروع `soil-moisture-sensor` من الدرس السابق في VS Code إذا لم يكن مفتوحًا بالفعل. ستقوم بإضافة المزيد إلى هذا المشروع. + +2. لا توجد مكتبة لهذا الجهاز - إنه جهاز تحكم رقمي يتم التحكم فيه بإشارة عالية أو منخفضة. لتشغيله، ترسل إشارة عالية إلى الدبوس (3.3 فولت)، ولإيقافه ترسل إشارة منخفضة (0 فولت). يمكنك القيام بذلك باستخدام وظيفة Arduino المدمجة [`digitalWrite`](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/). ابدأ بإضافة ما يلي إلى أسفل دالة `setup` لإعداد المنفذ المشترك بين التناظري والرقمي كدبوس إخراج لإرسال الجهد إلى المرحل: + + ```cpp + pinMode(PIN_WIRE_SCL, OUTPUT); + ``` + + `PIN_WIRE_SCL` هو رقم المنفذ للمنفذ المشترك بين التناظري والرقمي. + +1. لاختبار ما إذا كان المرحل يعمل، أضف ما يلي إلى دالة `loop`، أسفل آخر `delay`: + + ```cpp + digitalWrite(PIN_WIRE_SCL, HIGH); + delay(500); + digitalWrite(PIN_WIRE_SCL, LOW); + ``` + + يقوم الكود بإرسال إشارة عالية إلى الدبوس المتصل بالمرحل لتشغيله، ثم ينتظر 500 مللي ثانية (نصف ثانية)، ثم يرسل إشارة منخفضة لإيقاف المرحل. + +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). + +😀 لقد نجحت في برمجة مستشعر رطوبة التربة للتحكم في المرحل! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md new file mode 100644 index 00000000..9db2c5e7 --- /dev/null +++ b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md @@ -0,0 +1,451 @@ + +# انقل نباتك إلى السحابة + +![رسم توضيحي لهذه الدرس](../../../../../translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.ar.jpg) + +> رسم توضيحي بواسطة [نيتيا ناراسيمهان](https://github.com/nitya). انقر على الصورة للحصول على نسخة أكبر. + +تم تقديم هذا الدرس كجزء من [مشروع إنترنت الأشياء للمبتدئين - سلسلة الزراعة الرقمية](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 والتحكم في مرحل باستخدام كود خادم يعمل محليًا. هذا يشكل جوهر نظام الري الآلي المتصل بالإنترنت، والذي يُستخدم من النباتات الفردية في المنازل إلى المزارع التجارية. + +تواصل جهاز إنترنت الأشياء مع وسيط MQTT عام كطريقة لتوضيح المبادئ، ولكن هذه ليست الطريقة الأكثر موثوقية أو أمانًا. في هذا الدرس، ستتعلم عن السحابة وقدرات إنترنت الأشياء التي توفرها خدمات السحابة العامة. كما ستتعلم كيفية نقل نباتك إلى إحدى هذه الخدمات السحابية بدلاً من وسيط MQTT العام. + +في هذا الدرس سنتناول: + +* [ما هي السحابة؟](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [إنشاء اشتراك سحابي](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [خدمات إنترنت الأشياء السحابية](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [إنشاء خدمة إنترنت الأشياء في السحابة](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [التواصل مع IoT Hub](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [توصيل جهازك بخدمة إنترنت الأشياء](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) + +## ما هي السحابة؟ + +قبل ظهور السحابة، عندما كانت الشركات ترغب في تقديم خدمات لموظفيها (مثل قواعد البيانات أو تخزين الملفات) أو للجمهور (مثل المواقع الإلكترونية)، كانت تبني وتدير مركز بيانات. قد يكون هذا المركز غرفة تحتوي على عدد قليل من الحواسيب أو مبنى يحتوي على العديد منها. وكانت الشركة تدير كل شيء، بما في ذلك: + +* شراء الحواسيب +* صيانة الأجهزة +* الطاقة والتبريد +* الشبكات +* الأمان، بما في ذلك تأمين المبنى وتأمين البرمجيات على الحواسيب +* تثبيت البرمجيات وتحديثها + +كان هذا مكلفًا للغاية، ويتطلب مجموعة واسعة من الموظفين المهرة، وكان بطيئًا في التغيير عند الحاجة. على سبيل المثال، إذا احتاج متجر إلكتروني إلى التخطيط لموسم عطلات مزدحم، كان عليه التخطيط قبل أشهر لشراء المزيد من الأجهزة، وتكوينها، وتثبيت البرمجيات اللازمة لتشغيل عملية البيع. وبعد انتهاء موسم العطلات وانخفاض المبيعات، كانت الأجهزة التي تم شراؤها تظل غير مستخدمة حتى الموسم المزدحم التالي. + +✅ هل تعتقد أن هذا يسمح للشركات بالتحرك بسرعة؟ إذا أصبح متجر ملابس إلكتروني مشهورًا فجأة بسبب ارتداء أحد المشاهير لملابسهم، هل سيكون بإمكانهم زيادة قدرتهم الحاسوبية بسرعة كافية لدعم التدفق المفاجئ للطلبات؟ + +### حاسوب شخص آخر + +غالبًا ما يُشار إلى السحابة مازحًا بأنها "حاسوب شخص آخر". كانت الفكرة الأولية بسيطة - بدلاً من شراء الحواسيب، يمكنك استئجار حاسوب شخص آخر. يقوم مزود خدمات السحابة بإدارة مراكز بيانات ضخمة. يكونون مسؤولين عن شراء وتثبيت الأجهزة، وإدارة الطاقة والتبريد، والشبكات، وأمان المباني، وتحديثات الأجهزة والبرمجيات، وكل شيء. كعميل، يمكنك استئجار الحواسيب التي تحتاجها، واستئجار المزيد عند زيادة الطلب، ثم تقليل العدد عند انخفاض الطلب. تنتشر مراكز البيانات السحابية هذه في جميع أنحاء العالم. + +![مركز بيانات سحابي من مايكروسوفت](../../../../../translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.ar.png) +![توسعة مخططة لمركز بيانات سحابي من مايكروسوفت](../../../../../translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.ar.png) + +يمكن أن تكون هذه المراكز بمساحة عدة كيلومترات مربعة. الصور أعلاه تم التقاطها قبل بضع سنوات في مركز بيانات سحابي من مايكروسوفت، وتُظهر الحجم الأولي، إلى جانب توسعة مخططة. المنطقة المخصصة للتوسعة تزيد عن 5 كيلومترات مربعة. + +> 💁 تتطلب هذه المراكز كميات كبيرة من الطاقة لدرجة أن بعضها يمتلك محطات طاقة خاصة به. وبسبب حجمها ومستوى الاستثمار من مزودي السحابة، تكون عادة صديقة للبيئة. فهي أكثر كفاءة من عدد كبير من مراكز البيانات الصغيرة، وتعمل في الغالب على الطاقة المتجددة، ويعمل مزودو السحابة بجد لتقليل النفايات، وخفض استهلاك المياه، وإعادة زراعة الغابات لتعويض تلك التي تم قطعها لتوفير مساحة لبناء مراكز البيانات. يمكنك قراءة المزيد عن كيفية عمل أحد مزودي السحابة على الاستدامة على [موقع استدامة Azure](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn). + +✅ قم ببعض البحث: اقرأ عن السحابات الرئيسية مثل [Azure من مايكروسوفت](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) أو [GCP من جوجل](https://cloud.google.com). كم عدد مراكز البيانات التي لديهم، وأين تقع في العالم؟ + +استخدام السحابة يقلل التكاليف على الشركات، ويسمح لها بالتركيز على ما تفعله بشكل أفضل، مع ترك خبرة الحوسبة السحابية في أيدي المزود. لم تعد الشركات بحاجة إلى استئجار أو شراء مساحة في مراكز البيانات، أو دفع تكاليف الاتصال والطاقة لمزودين مختلفين، أو توظيف خبراء. بدلاً من ذلك، يمكنهم دفع فاتورة شهرية واحدة لمزود السحابة لتولي كل شيء. + +يمكن لمزود السحابة بعد ذلك استخدام اقتصاديات الحجم لتقليل التكاليف، وشراء الحواسيب بالجملة بأسعار أقل، والاستثمار في الأدوات لتقليل عبء العمل الخاص بالصيانة، وحتى تصميم وبناء أجهزتهم الخاصة لتحسين عروض السحابة. + +### مايكروسوفت أزور + +Azure هي السحابة المخصصة للمطورين من مايكروسوفت، وهي السحابة التي ستستخدمها في هذه الدروس. الفيديو أدناه يقدم نظرة عامة قصيرة عن Azure: + +[![فيديو نظرة عامة على Azure](../../../../../translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.ar.png)](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn) + +## إنشاء اشتراك سحابي + +لاستخدام الخدمات في السحابة، ستحتاج إلى الاشتراك مع مزود سحابي. في هذا الدرس، ستقوم بالتسجيل للحصول على اشتراك في مايكروسوفت أزور. إذا كان لديك بالفعل اشتراك في Azure، يمكنك تخطي هذه المهمة. التفاصيل الموضحة هنا صحيحة وقت كتابة هذا النص، ولكن قد تتغير. + +> 💁 إذا كنت تصل إلى هذه الدروس من خلال مدرستك، قد يكون لديك بالفعل اشتراك في Azure متاح لك. تحقق مع معلمك. + +هناك نوعان مختلفان من الاشتراكات المجانية في Azure التي يمكنك التسجيل فيها: + +* **Azure للطلاب** - هذا اشتراك مصمم للطلاب الذين تبلغ أعمارهم 18 عامًا أو أكثر. لا تحتاج إلى بطاقة ائتمان للتسجيل، وتستخدم بريدك الإلكتروني المدرسي للتحقق من أنك طالب. عند التسجيل، تحصل على 100 دولار أمريكي لاستخدامها في موارد السحابة، بالإضافة إلى خدمات مجانية بما في ذلك نسخة مجانية من خدمة إنترنت الأشياء. يستمر هذا لمدة 12 شهرًا، ويمكنك تجديده كل عام طالما كنت طالبًا. + +* **اشتراك Azure المجاني** - هذا اشتراك لأي شخص ليس طالبًا. ستحتاج إلى بطاقة ائتمان للتسجيل، ولكن لن يتم خصم أي مبلغ من بطاقتك، حيث تُستخدم فقط للتحقق من أنك إنسان حقيقي، وليس روبوتًا. تحصل على 200 دولار من الرصيد لاستخدامها في أول 30 يومًا على أي خدمة، بالإضافة إلى مستويات مجانية من خدمات Azure. بمجرد استنفاد رصيدك، لن يتم خصم أي مبلغ من بطاقتك إلا إذا قمت بتحويل الاشتراك إلى اشتراك مدفوع حسب الاستخدام. + +> 💁 تقدم مايكروسوفت أيضًا اشتراك Azure للطلاب المبتدئين للطلاب الذين تقل أعمارهم عن 18 عامًا، ولكن في وقت كتابة هذا النص، لا يدعم هذا الاشتراك أي خدمات إنترنت الأشياء. + +### المهمة - التسجيل للحصول على اشتراك سحابي مجاني + +إذا كنت طالبًا يبلغ من العمر 18 عامًا أو أكثر، يمكنك التسجيل للحصول على اشتراك Azure للطلاب. ستحتاج إلى التحقق باستخدام بريدك الإلكتروني المدرسي. يمكنك القيام بذلك بإحدى طريقتين: + +* التسجيل للحصول على حزمة مطور الطلاب من GitHub على [education.github.com/pack](https://education.github.com/pack). تمنحك هذه الحزمة الوصول إلى مجموعة من الأدوات والعروض، بما في ذلك GitHub وMicrosoft Azure. بمجرد التسجيل في حزمة المطور، يمكنك تفعيل عرض 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) + +## خدمات إنترنت الأشياء السحابية + +وسيط MQTT العام الذي كنت تستخدمه هو أداة رائعة عند التعلم، ولكنه يحتوي على عدد من العيوب كأداة للاستخدام في بيئة تجارية: + +* الموثوقية - إنه خدمة مجانية بدون ضمانات، ويمكن إيقافها في أي وقت +* الأمان - إنه عام، مما يعني أن أي شخص يمكنه الاستماع إلى بياناتك أو إرسال أوامر للتحكم في أجهزتك +* الأداء - مصمم فقط لعدد قليل من الرسائل التجريبية، لذلك لن يتحمل عددًا كبيرًا من الرسائل +* الاكتشاف - لا توجد طريقة لمعرفة الأجهزة المتصلة + +خدمات إنترنت الأشياء السحابية تحل هذه المشكلات. يتم صيانتها بواسطة مزودي السحابة الكبار الذين يستثمرون بكثافة في الموثوقية ويكونون على استعداد لإصلاح أي مشكلات قد تنشأ. لديهم أمان مدمج لمنع المتسللين من قراءة بياناتك أو إرسال أوامر خبيثة. كما أنها عالية الأداء، قادرة على التعامل مع ملايين الرسائل يوميًا، مستفيدة من السحابة للتوسع حسب الحاجة. + +> 💁 على الرغم من أنك تدفع مقابل هذه المزايا برسوم شهرية، فإن معظم مزودي السحابة يقدمون نسخة مجانية من خدمات إنترنت الأشياء الخاصة بهم مع عدد محدود من الرسائل يوميًا أو الأجهزة التي يمكنها الاتصال. هذه النسخة المجانية عادة ما تكون أكثر من كافية للمطور لتعلم الخدمة. في هذا الدرس، ستستخدم النسخة المجانية. + +تتصل أجهزة إنترنت الأشياء بخدمة سحابية إما باستخدام SDK خاص بالجهاز (مكتبة توفر كودًا للعمل مع ميزات الخدمة)، أو مباشرة عبر بروتوكول اتصال مثل MQTT أو HTTP. عادةً ما يكون استخدام SDK هو الطريق الأسهل لأنه يتولى كل شيء نيابة عنك، مثل معرفة المواضيع التي يجب النشر أو الاشتراك فيها، وكيفية التعامل مع الأمان. + +![الأجهزة تتصل بالخدمة باستخدام SDK خاص بالجهاز. الكود الخادم يتصل أيضًا بالخدمة عبر SDK](../../../../../translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.ar.png) + +يتواصل جهازك بعد ذلك مع أجزاء أخرى من تطبيقك عبر هذه الخدمة - مشابهة للطريقة التي أرسلت بها البيانات واستقبلت الأوامر عبر MQTT. يتم ذلك عادةً باستخدام SDK خاص بالخدمة أو مكتبة مشابهة. تصل الرسائل من جهازك إلى الخدمة حيث يمكن لأجزاء أخرى من تطبيقك قراءتها، ويمكن إرسال الرسائل مرة أخرى إلى جهازك. + +![الأجهزة التي لا تمتلك مفتاحًا سريًا صالحًا لا يمكنها الاتصال بخدمة إنترنت الأشياء](../../../../../translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.ar.png) + +تقوم هذه الخدمات بتنفيذ الأمان من خلال معرفة جميع الأجهزة التي يمكنها الاتصال وإرسال البيانات، إما عن طريق تسجيل الأجهزة مسبقًا مع الخدمة، أو من خلال إعطاء الأجهزة مفاتيح سرية أو شهادات يمكنها استخدامها لتسجيل نفسها مع الخدمة عند الاتصال لأول مرة. الأجهزة غير المعروفة لا يمكنها الاتصال، وإذا حاولت، ترفض الخدمة الاتصال وتتجاهل الرسائل المرسلة منها. + +✅ قم ببعض البحث: ما هو الجانب السلبي لوجود خدمة إنترنت الأشياء مفتوحة حيث يمكن لأي جهاز أو كود الاتصال؟ هل يمكنك العثور على أمثلة محددة لمتسللين استغلوا هذا؟ + +يمكن لأجزاء أخرى من تطبيقك الاتصال بخدمة إنترنت الأشياء ومعرفة جميع الأجهزة المتصلة أو المسجلة، والتواصل معها مباشرة بشكل فردي أو جماعي. +💁 خدمات إنترنت الأشياء (IoT) توفر أيضًا قدرات إضافية، كما أن مزودي الخدمات السحابية يقدمون خدمات وتطبيقات إضافية يمكن ربطها بالخدمة. على سبيل المثال، إذا كنت ترغب في تخزين جميع رسائل القياس عن بُعد التي ترسلها جميع الأجهزة في قاعدة بيانات، فعادةً ما يتطلب الأمر بضع نقرات فقط في أداة إعدادات مزود الخدمة السحابية لربط الخدمة بقاعدة البيانات وبث البيانات إليها. +## إنشاء خدمة إنترنت الأشياء (IoT) في السحابة + +الآن بعد أن أصبح لديك اشتراك في Azure، يمكنك التسجيل للحصول على خدمة إنترنت الأشياء. خدمة إنترنت الأشياء من Microsoft تُسمى Azure IoT Hub. + +![شعار Azure IoT Hub](../../../../../translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.ar.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، الآلات الافتراضية، قواعد البيانات، أو خدمات الذكاء الاصطناعي، تُعرف باسم **الموارد**. كل مورد يجب أن يكون داخل **مجموعة موارد**، وهي مجموعة منطقية تحتوي على مورد واحد أو أكثر. + +> 💁 استخدام مجموعات الموارد يعني أنه يمكنك إدارة خدمات متعددة دفعة واحدة. على سبيل المثال، بمجرد الانتهاء من جميع الدروس لهذا المشروع، يمكنك حذف مجموعة الموارد، وسيتم حذف جميع الموارد الموجودة فيها تلقائيًا. + +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 بواسطة كود التطبيق الخاص بك. + + > 🎓 في الخلفية، يستخدم 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، ومعلومات أمان مثل مفتاح سري. يتم تمريرها إلى SDKs للاتصال بالخدمة. + +> ⚠️ يجب الحفاظ على سرية سلاسل الاتصال! سيتم تناول الأمان بمزيد من التفاصيل في درس مستقبلي. + +### المهمة - تسجيل جهاز 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 لـ 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 time](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) + +## المراجعة والدراسة الذاتية + +SDK الخاص بـ IoT Hub مفتوح المصدر لكل من 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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md new file mode 100644 index 00000000..9b4f84cc --- /dev/null +++ b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md @@ -0,0 +1,33 @@ + +# تعرف على خدمات السحابة + +## التعليمات + +السحابات، مثل Azure من Microsoft، تقدم أكثر من مجرد استئجار الحوسبة. الأنواع الرئيسية من العروض السحابية تشمل: + +* البنية التحتية كخدمة (IaaS) +* المنصة كخدمة (PaaS) +* بدون خادم (Serverless) +* البرمجيات كخدمة (SaaS) + +تعرف على هذه الأنواع المختلفة من العروض، واشرح ما هي وكيف تختلف عن بعضها البعض. اشرح أي من هذه العروض ذات صلة بمطوري إنترنت الأشياء (IoT). + +## معايير التقييم + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| شرح العروض السحابية المختلفة | قدم تفسيرات واضحة لجميع الأنواع الأربعة من العروض | تمكن من شرح 3 أنواع من العروض | تمكن فقط من شرح نوع أو نوعين من العروض | +| شرح العروض ذات الصلة بإنترنت الأشياء | قدم شرحًا عن العروض ذات الصلة بمطوري إنترنت الأشياء ولماذا | قدم شرحًا عن العروض ذات الصلة بمطوري إنترنت الأشياء ولكن دون توضيح السبب | لم يتمكن من شرح العروض ذات الصلة بمطوري إنترنت الأشياء | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md new file mode 100644 index 00000000..c4b493a8 --- /dev/null +++ b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md @@ -0,0 +1,130 @@ + +# ربط جهاز إنترنت الأشياء بالسحابة - جهاز إنترنت الأشياء الافتراضي و Raspberry Pi + +في هذا الجزء من الدرس، ستقوم بربط جهاز إنترنت الأشياء الافتراضي الخاص بك أو Raspberry Pi بمركز إنترنت الأشياء الخاص بك، لإرسال البيانات واستقبال الأوامر. + +## ربط جهازك بمركز إنترنت الأشياء + +الخطوة التالية هي ربط جهازك بمركز إنترنت الأشياء. + +### المهمة - الربط بمركز إنترنت الأشياء + +1. افتح مجلد `soil-moisture-sensor` في VS Code. تأكد من تشغيل البيئة الافتراضية في الطرفية إذا كنت تستخدم جهاز إنترنت أشياء افتراضي. + +1. قم بتثبيت بعض حزم Pip الإضافية: + + ```sh + pip3 install azure-iot-device + ``` + + مكتبة `azure-iot-device` تُستخدم للتواصل مع مركز إنترنت الأشياء الخاص بك. + +1. أضف الواردات التالية إلى أعلى ملف `app.py`، أسفل الواردات الموجودة: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse + ``` + + هذا الكود يستورد SDK للتواصل مع مركز إنترنت الأشياء الخاص بك. + +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. أسفل هذا الكود، أضف التالي لإنشاء كائن عميل جهاز يمكنه التواصل مع مركز إنترنت الأشياء، وربطه: + + ```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 + ``` + +## إرسال البيانات + +الآن بعد أن تم ربط جهازك، يمكنك إرسال البيانات إلى مركز إنترنت الأشياء بدلاً من وسيط MQTT. + +### المهمة - إرسال البيانات + +1. أضف الكود التالي داخل حلقة `while True`، قبل السطر الخاص بالنوم: + + ```python + message = Message(json.dumps({ 'soil_moisture': soil_moisture })) + device_client.send_message(message) + ``` + + هذا الكود ينشئ رسالة `Message` لمركز إنترنت الأشياء تحتوي على قراءة رطوبة التربة كـ JSON، ثم يرسلها إلى مركز إنترنت الأشياء كرسالة من الجهاز إلى السحابة. + +## التعامل مع الأوامر + +يحتاج جهازك إلى التعامل مع أمر من كود الخادم للتحكم في المرحل. يتم إرسال هذا كطلب طريقة مباشرة. + +## المهمة - التعامل مع طلب طريقة مباشرة + +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`، سيتم استدعاؤها عند استدعاء طريقة مباشرة من قبل مركز إنترنت الأشياء. كل طريقة مباشرة لها اسم، ويتوقع هذا الكود طريقة تسمى `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، ويرسلها مرة أخرى إلى مركز إنترنت الأشياء. + +1. أضف الكود التالي أسفل تعريف هذه الوظيفة: + + ```python + device_client.on_method_request_received = handle_method_request + ``` + + هذا الكود يخبر عميل مركز إنترنت الأشياء باستدعاء وظيفة `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). + +😀 برنامج مستشعر رطوبة التربة الخاص بك متصل بمركز إنترنت الأشياء! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md new file mode 100644 index 00000000..7357136e --- /dev/null +++ b/translations/ar/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md @@ -0,0 +1,306 @@ + +# قم بتوصيل جهاز إنترنت الأشياء الخاص بك بالسحابة - 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 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 على رمز مميز يعتمد على الوقت. هذا يعني أن جهاز إنترنت الأشياء يحتاج إلى معرفة الوقت الحالي. على عكس أنظمة التشغيل مثل 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، يعمل هذا الكود على خيط واحد لذا يحتاج إلى وقت لمعالجة الرسائل التي يتم إرسالها من وإلى IoT Hub. أضف ما يلي إلى أعلى وظيفة `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 من سلسلة يتم تمريرها كمعامل، ويرسلها إلى 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` ومؤخرًا لمدة 100 مللي ثانية في كل مرة. سيقوم بذلك بقدر ما هو مطلوب للتأخير للمدة الزمنية المحددة في معامل `delay_time`. هذا يعني أن الجهاز ينتظر بحد أقصى 100 مللي ثانية لمعالجة طلبات الطريقة المباشرة. + +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! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/5-migrate-application-to-the-cloud/README.md b/translations/ar/2-farm/lessons/5-migrate-application-to-the-cloud/README.md new file mode 100644 index 00000000..3ec601b9 --- /dev/null +++ b/translations/ar/2-farm/lessons/5-migrate-application-to-the-cloud/README.md @@ -0,0 +1,623 @@ + +# نقل منطق تطبيقك إلى السحابة + +![رسم توضيحي لهذه الدرس](../../../../../translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.ar.jpg) + +> رسم توضيحي من [نيتيا ناراسيمهان](https://github.com/nitya). انقر على الصورة لعرض نسخة أكبر. + +تم تقديم هذا الدرس كجزء من [مشروع إنترنت الأشياء للمبتدئين - سلسلة الزراعة الرقمية](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) من [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). + +[![تحكم في جهاز إنترنت الأشياء الخاص بك باستخدام كود بدون خادم](https://img.youtube.com/vi/VVZDcs5u1_I/0.jpg)](https://youtu.be/VVZDcs5u1_I) + +## اختبار ما قبل المحاضرة + +[اختبار ما قبل المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/17) + +## المقدمة + +في الدرس السابق، تعلمت كيفية توصيل جهاز مراقبة رطوبة التربة الخاص بالنباتات والتحكم في المرحل بخدمة إنترنت الأشياء المستندة إلى السحابة. الخطوة التالية هي نقل الكود الخادمي الذي يتحكم في توقيت المرحل إلى السحابة. في هذا الدرس، ستتعلم كيفية القيام بذلك باستخدام الوظائف بدون خادم. + +في هذا الدرس سنتناول: + +* [ما هي الوظائف بدون خادم؟](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [إنشاء تطبيق بدون خادم](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [إنشاء مشغل حدث IoT Hub](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [إرسال طلبات الطرق المباشرة من الكود بدون خادم](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [نشر الكود بدون خادم إلى السحابة](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) + +## ما هي الوظائف بدون خادم؟ + +الوظائف بدون خادم، أو الحوسبة بدون خادم، تتضمن إنشاء كتل صغيرة من الكود يتم تشغيلها في السحابة استجابة لأنواع مختلفة من الأحداث. عندما يحدث الحدث، يتم تشغيل الكود الخاص بك ويتم تمرير بيانات حول الحدث إليه. يمكن أن تأتي هذه الأحداث من أشياء متعددة، بما في ذلك طلبات الويب، الرسائل الموضوعة في قائمة انتظار، تغييرات البيانات في قاعدة بيانات، أو الرسائل المرسلة إلى خدمة إنترنت الأشياء من أجهزة إنترنت الأشياء. + +![الأحداث المرسلة من خدمة إنترنت الأشياء إلى خدمة بدون خادم، تتم معالجتها جميعًا في نفس الوقت بواسطة وظائف متعددة](../../../../../translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.ar.png) + +> 💁 إذا كنت قد استخدمت مشغلات قواعد البيانات من قبل، يمكنك التفكير في هذا على أنه نفس الشيء، حيث يتم تشغيل الكود بواسطة حدث مثل إدخال صف. + +![عندما يتم إرسال العديد من الأحداث في نفس الوقت، تقوم الخدمة بدون خادم بالتوسع لتشغيلها جميعًا في نفس الوقت](../../../../../translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.ar.png) + +يتم تشغيل الكود الخاص بك فقط عندما يحدث الحدث، ولا يتم الاحتفاظ بالكود الخاص بك قيد التشغيل في أوقات أخرى. عندما يحدث الحدث، يتم تحميل الكود الخاص بك وتشغيله. هذا يجعل الوظائف بدون خادم قابلة للتوسع بشكل كبير - إذا حدثت العديد من الأحداث في نفس الوقت، يمكن لموفر السحابة تشغيل الوظيفة الخاصة بك بقدر ما تحتاج في نفس الوقت عبر أي خوادم متاحة لديهم. الجانب السلبي لهذا هو أنه إذا كنت بحاجة إلى مشاركة المعلومات بين الأحداث، يجب عليك حفظها في مكان ما مثل قاعدة بيانات بدلاً من تخزينها في الذاكرة. + +يتم كتابة الكود الخاص بك كدالة تأخذ تفاصيل حول الحدث كمعامل. يمكنك استخدام مجموعة واسعة من لغات البرمجة لكتابة هذه الوظائف بدون خادم. + +> 🎓 تُعرف الوظائف بدون خادم أيضًا باسم "الوظائف كخدمة" (FaaS) حيث يتم تنفيذ كل مشغل حدث كدالة في الكود. + +على الرغم من الاسم، فإن الوظائف بدون خادم تستخدم بالفعل خوادم. التسمية تعني أنك كمطور لا تهتم بالخوادم اللازمة لتشغيل الكود الخاص بك، كل ما تهتم به هو أن الكود الخاص بك يتم تشغيله استجابة لحدث. يوفر موفر السحابة *بيئة تشغيل بدون خادم* تدير تخصيص الخوادم، الشبكات، التخزين، وحدة المعالجة المركزية، الذاكرة وكل شيء آخر مطلوب لتشغيل الكود الخاص بك. هذا النموذج يعني أنك لا تدفع لكل خادم للخدمة، حيث لا يوجد خادم. بدلاً من ذلك، تدفع مقابل الوقت الذي يتم فيه تشغيل الكود الخاص بك، وكمية الذاكرة المستخدمة. + +> 💰 الوظائف بدون خادم هي واحدة من أرخص الطرق لتشغيل الكود في السحابة. على سبيل المثال، في وقت كتابة هذا النص، يسمح أحد موفري السحابة لجميع الوظائف بدون خادم الخاصة بك بالتنفيذ مليون مرة شهريًا قبل أن يبدأوا في فرض رسوم عليك، وبعد ذلك يفرضون 0.20 دولار أمريكي لكل مليون تنفيذ. عندما لا يتم تشغيل الكود الخاص بك، لا تدفع شيئًا. + +كمطور إنترنت الأشياء، فإن نموذج الوظائف بدون خادم مثالي. يمكنك كتابة دالة يتم استدعاؤها استجابة للرسائل المرسلة من أي جهاز إنترنت الأشياء متصل بخدمة إنترنت الأشياء المستضافة في السحابة. الكود الخاص بك سيتعامل مع جميع الرسائل المرسلة، ولكنه سيعمل فقط عند الحاجة. + +✅ ألقِ نظرة على الكود الذي كتبته ككود خادمي يستمع للرسائل عبر MQTT. كيف يمكن أن يعمل هذا في السحابة باستخدام الوظائف بدون خادم؟ كيف تعتقد أن الكود قد يحتاج إلى التغيير لدعم الحوسبة بدون خادم؟ + +> 💁 نموذج الوظائف بدون خادم ينتقل إلى خدمات سحابية أخرى بالإضافة إلى تشغيل الكود. على سبيل المثال، قواعد البيانات بدون خادم متوفرة في السحابة باستخدام نموذج تسعير بدون خادم حيث تدفع لكل طلب يتم إجراؤه ضد قاعدة البيانات، مثل استعلام أو إدخال، عادةً باستخدام تسعير يعتمد على مقدار العمل المطلوب لخدمة الطلب. على سبيل المثال، استعلام بسيط عن صف واحد باستخدام مفتاح أساسي سيكلف أقل من عملية معقدة تنضم إلى العديد من الجداول وتعيد آلاف الصفوف. + +## إنشاء تطبيق بدون خادم + +خدمة الحوسبة بدون خادم من مايكروسوفت تُعرف باسم Azure Functions. + +![شعار Azure Functions](../../../../../translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.ar.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، أو جهاز كمبيوتر يعمل بنظام Linux بدلاً من ذلك. + +إحدى الميزات الرائعة لـ Azure Functions هي أنه يمكنك تشغيلها محليًا. نفس بيئة التشغيل المستخدمة في السحابة يمكن تشغيلها على جهاز الكمبيوتر الخاص بك، مما يسمح لك بكتابة كود يستجيب لرسائل إنترنت الأشياء وتشغيله محليًا. يمكنك حتى تصحيح الكود الخاص بك أثناء معالجة الأحداث. بمجرد أن تكون راضيًا عن الكود الخاص بك، يمكن نشره إلى السحابة. + +أدوات 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). + +2. قم بتثبيت إضافة Azure Functions لـ VS Code. توفر هذه الإضافة دعمًا لإنشاء وتصحيح ونشر وظائف Azure. راجع [وثائق إضافة Azure Functions](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-azuretools.vscode-azurefunctions) للحصول على تعليمات حول تثبيت هذه الإضافة في VS Code. + +عندما تقوم بنشر تطبيق Azure Functions الخاص بك إلى السحابة، فإنه يحتاج إلى استخدام كمية صغيرة من التخزين السحابي لتخزين أشياء مثل ملفات التطبيق وملفات السجل. عندما تقوم بتشغيل تطبيق الوظائف الخاص بك محليًا، لا يزال يتعين عليك الاتصال بالتخزين السحابي، ولكن بدلاً من استخدام التخزين السحابي الفعلي، يمكنك استخدام محاكي تخزين يسمى [Azurite](https://github.com/Azure/Azurite). يعمل هذا المحاكي محليًا ولكنه يتصرف مثل التخزين السحابي. + +> 🎓 في Azure، التخزين الذي تستخدمه Azure Functions هو حساب تخزين Azure. يمكن لهذه الحسابات تخزين الملفات، الكتل، البيانات في الجداول أو البيانات في قوائم الانتظار. يمكنك مشاركة حساب تخزين واحد بين العديد من التطبيقات، مثل تطبيق وظائف وتطبيق ويب. + +1. Azurite هو تطبيق Node.js، لذا ستحتاج إلى تثبيت Node.js. يمكنك العثور على تعليمات التنزيل والتثبيت على [موقع Node.js](https://nodejs.org/). إذا كنت تستخدم جهاز Mac، يمكنك أيضًا تثبيته من [Homebrew](https://formulae.brew.sh/formula/node). + +2. قم بتثبيت Azurite باستخدام الأمر التالي (`npm` هو أداة يتم تثبيتها عند تثبيت Node.js): + + ```sh + npm install -g azurite + ``` + +3. قم بإنشاء مجلد يسمى `azurite` ليستخدمه Azurite لتخزين البيانات: + + ```sh + mkdir azurite + ``` + +4. قم بتشغيل 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 + ``` + +2. قم بإنشاء بيئة افتراضية لـ Python داخل هذا المجلد: + + ```sh + python3 -m venv .venv + ``` + +3. قم بتفعيل البيئة الافتراضية: + + * على 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`، يجب عليك دائمًا تشغيل أمر التفعيل وأي أوامر لتثبيت الحزم أو تشغيل الكود من المجلد الذي كنت فيه عند إنشاء البيئة الافتراضية. + +4. قم بتشغيل الأمر التالي لإنشاء تطبيق وظائف داخل هذا المجلد: + + ```sh + func init --worker-runtime python soil-moisture-trigger + ``` + + سيؤدي هذا إلى إنشاء ثلاثة ملفات داخل المجلد الحالي: + + * `host.json` - هذا المستند JSON يحتوي على إعدادات تطبيق الوظائف الخاص بك. لن تحتاج إلى تعديل هذه الإعدادات. + * `local.settings.json` - هذا المستند JSON يحتوي على الإعدادات التي سيستخدمها التطبيق عند التشغيل محليًا، مثل سلاسل الاتصال بـ IoT Hub. هذه الإعدادات محلية فقط، ولا ينبغي إضافتها إلى التحكم في الشيفرة المصدرية. عندما تقوم بنشر التطبيق إلى السحابة، لن يتم نشر هذه الإعدادات، بدلاً من ذلك سيتم تحميل الإعدادات الخاصة بك من إعدادات التطبيق. سيتم تغطية هذا لاحقًا في هذا الدرس. + * `requirements.txt` - هذا هو [ملف متطلبات Pip](https://pip.p +> ⚠️ إذا ظهرت لك إشعار جدار الحماية، امنح الوصول لأن تطبيق `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.ar.png) + + اختر **Yes** من هذا الإشعار. + +1. تأكد من أن البيئة الافتراضية لـ Python تعمل في الطرفية داخل VS Code. قم بإنهائها وأعد تشغيلها إذا لزم الأمر. + +## إنشاء مشغل حدث IoT Hub + +تطبيق Functions هو الإطار الخارجي لكودك الخالي من الخوادم. للرد على أحداث IoT Hub، يمكنك إضافة مشغل IoT Hub إلى هذا التطبيق. يحتاج هذا المشغل إلى الاتصال بتدفق الرسائل المرسلة إلى IoT Hub والرد عليها. للحصول على هذا التدفق من الرسائل، يجب أن يتصل المشغل بنقطة النهاية المتوافقة مع Event Hub الخاصة بـ IoT Hub. + +يعتمد IoT Hub على خدمة Azure أخرى تُسمى Azure Event Hubs. Event Hubs هي خدمة تتيح إرسال واستقبال الرسائل، بينما يضيف IoT Hub ميزات إضافية للأجهزة المتصلة بالإنترنت. طريقة الاتصال لقراءة الرسائل من 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، يجب أن يستخدم مفتاحًا سريًا يضمن أن الأجهزة المصرح لها فقط يمكنها الاتصال. ينطبق نفس الأمر عند الاتصال لقراءة الرسائل، حيث سيحتاج كودك إلى سلسلة اتصال تحتوي على مفتاح سري، بالإضافة إلى تفاصيل IoT Hub. + +> 💁 سلسلة الاتصال الافتراضية التي تحصل عليها تحتوي على أذونات **iothubowner**، مما يمنح أي كود يستخدمها أذونات كاملة على IoT Hub. من الأفضل أن تتصل بأقل مستوى من الأذونات المطلوبة. سيتم تغطية هذا في الدرس التالي. + +بمجرد أن يتصل المشغل، سيتم استدعاء الكود داخل الوظيفة لكل رسالة يتم إرسالها إلى IoT Hub، بغض النظر عن الجهاز الذي أرسلها. سيتم تمرير الرسالة إلى المشغل كمعامل. + +### المهمة - الحصول على سلسلة اتصال نقطة النهاية المتوافقة مع Event Hub + +1. من الطرفية في VS Code، قم بتشغيل الأمر التالي للحصول على سلسلة الاتصال لنقطة النهاية المتوافقة مع Event Hub الخاصة بـ 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 على 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`. الربط هو المصطلح المستخدم لوصف الاتصال بين Azure Functions والخدمات الأخرى في Azure. تحتوي هذه الوظيفة على ربط إدخال إلى Event Hub - حيث تتصل بـ Event Hub وتتلقى البيانات. + + > 💁 يمكنك أيضًا الحصول على روابط إخراج بحيث يتم إرسال مخرجات الوظيفة إلى خدمة أخرى. على سبيل المثال، يمكنك إضافة ربط إخراج إلى قاعدة بيانات وإرجاع حدث IoT Hub من الوظيفة، وسيتم إدخاله تلقائيًا في قاعدة البيانات. + + ✅ قم ببعض البحث: اقرأ عن الروابط في [وثائق مفاهيم المشغلات والروابط في Azure Functions](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python). + + يتضمن قسم `bindings` تكوين الربط. القيم ذات الأهمية هي: + + * `"type": "eventHubTrigger"` - يشير هذا إلى أن الوظيفة تحتاج إلى الاستماع إلى الأحداث من Event Hub + * `"name": "events"` - هذا هو اسم المعامل المستخدم لأحداث Event Hub. يتطابق هذا مع اسم المعامل في وظيفة `main` في كود Python. + * `"direction": "in"` - هذا هو ربط إدخال، حيث تأتي البيانات من Event Hub إلى الوظيفة + * `"connection": ""` - يحدد هذا اسم الإعداد لقراءة سلسلة الاتصال منه. عند التشغيل محليًا، سيقرأ هذا الإعداد من ملف `local.settings.json`. + + > 💁 لا يمكن تخزين سلسلة الاتصال في ملف `function.json`، بل يجب قراءتها من الإعدادات. هذا لمنعك من كشف سلسلة الاتصال عن طريق الخطأ. + +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", + ``` + + > 💁 تذكر - يجب أن تشير هذه القيمة إلى الإعداد، وليس أن تحتوي على سلسلة الاتصال الفعلية. + +1. تحتوي سلسلة الاتصال على قيمة `eventHubName`، لذا يجب مسح القيمة الخاصة بها في ملف `function.json`. قم بتحديث هذه القيمة إلى سلسلة فارغة: + + ```json + "eventHubName": "", + ``` + +### المهمة - تشغيل مشغل الحدث + +1. تأكد من أنك لا تقوم بتشغيل مراقب أحداث IoT Hub. إذا كان هذا يعمل في نفس الوقت مع تطبيق Functions، فلن يتمكن تطبيق Functions من الاتصال واستهلاك الأحداث. + + > 💁 يمكن لتطبيقات متعددة الاتصال بنقاط نهاية IoT Hub باستخدام *مجموعات مستهلكين* مختلفة. سيتم تغطية هذه في درس لاحق. + +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. الآن تحتاج إلى إرسال أوامر إلى جهاز IoT. يتم ذلك باستخدام اتصال مختلف بـ IoT Hub عبر *مدير السجل*. مدير السجل هو أداة تتيح لك رؤية الأجهزة المسجلة مع IoT Hub، والتواصل مع تلك الأجهزة عن طريق إرسال رسائل من السحابة إلى الجهاز، أو طلبات طريقة مباشرة، أو تحديث التوأم الرقمي للجهاز. يمكنك أيضًا استخدامه لتسجيل أو تحديث أو حذف أجهزة IoT من IoT Hub. + +للاتصال بمدير السجل، تحتاج إلى سلسلة اتصال. + +### المهمة - الحصول على سلسلة اتصال مدير السجل + +1. للحصول على سلسلة الاتصال، قم بتشغيل الأمر التالي: + + ```sh + az iot hub connection-string show --policy-name service \ + --output table \ + --hub-name + ``` + + استبدل `` باسم IoT Hub الذي استخدمته. + + يتم طلب سلسلة الاتصال لسياسة *ServiceConnect* باستخدام المعامل `--policy-name service`. عند طلب سلسلة اتصال، يمكنك تحديد الأذونات التي ستسمح بها سلسلة الاتصال هذه. سياسة 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 الخاص بمدير السجل عبر حزمة 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 + ``` + + هذا يستورد بعض مكتبات النظام، بالإضافة إلى المكتبات للتفاعل مع مدير السجل وإرسال طلبات الطريقة المباشرة. + +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. + + ثم يحصل على معرف الجهاز من التعليقات التوضيحية المرسلة مع الرسالة. يحتوي محتوى الحدث على الرسالة المرسلة كتليمتر، بينما يحتوي القاموس `iothub_metadata` على الخصائص التي يحددها IoT Hub مثل معرف الجهاز المرسل، ووقت إرسال الرسالة. + + يتم بعد ذلك تسجيل هذه المعلومات. سترى هذا التسجيل في الطرفية عند تشغيل تطبيق Functions محليًا. + +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!') + ``` + + يخبر هذا الكود مدير السجل بإرسال طلب الطريقة المباشرة إلى الجهاز الذي أرسل البيانات. + + > 💁 في الإصدارات السابقة من التطبيق التي أنشأتها في الدروس السابقة باستخدام MQTT، كانت أوامر التحكم في الترحيل تُرسل إلى جميع الأجهزة. كان الكود يفترض أن لديك جهازًا واحدًا فقط. هذا الإصدار من الكود يرسل طلب الطريقة إلى جهاز واحد فقط، لذا سيعمل إذا كان لديك إعدادات متعددة لأجهزة استشعار الرطوبة والترحيل، حيث يتم إرسال طلب الطريقة المباشرة إلى الجهاز الصحيح. + +1. قم بتشغيل تطبيق Functions، وتأكد من أن جهاز IoT الخاص بك يرسل البيانات. سترى الرسائل يتم معالجتها وطلبات الطريقة المباشرة يتم إرسالها. قم بتحريك مستشعر رطوبة التربة داخل وخارج التربة لترى القيم تتغير والترحيل يعمل ويتوقف. + +> 💁 يمكنك العثور على هذا الكود في مجلد [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions). + +## نشر الكود بدون خادم إلى السحابة + +الكود يعمل الآن محليًا، والخطوة التالية هي نشر تطبيق Functions إلى السحابة. + +### المهمة - إنشاء موارد السحابة + +يحتاج تطبيق Functions الخاص بك إلى أن يتم نشره إلى مورد Functions App في Azure، داخل مجموعة الموارد التي أنشأتها لـ IoT Hub. ستحتاج أيضًا إلى إنشاء حساب تخزين في Azure ليحل محل المحاكي الذي يعمل محليًا. + +1. قم بتشغيل الأمر التالي لإنشاء حساب تخزين: + + ```sh + az storage account create --resource-group soil-moisture-sensor \ + --sku Standard_LRS \ + --name + ``` + + استبدل `` باسم لحساب التخزين الخاص بك. يجب أن يكون هذا الاسم فريدًا عالميًا لأنه يشكل جزءًا من عنوان URL المستخدم للوصول إلى حساب التخزين. يمكنك استخدام الأحرف الصغيرة والأرقام فقط لهذا الاسم، ولا يُسمح بأي أحرف أخرى، وهو محدود بـ 24 حرفًا. استخدم شيئًا مثل `sms` وأضف معرفًا فريدًا في النهاية، مثل بعض الكلمات العشوائية أو اسمك. + + الخيار `--sku Standard_LRS` يحدد فئة التسعير، حيث يتم اختيار أقل تكلفة لحساب عام. لا توجد فئة مجانية للتخزين، وتدفع مقابل ما تستخدمه. التكاليف منخفضة نسبيًا، حيث أن أغلى تخزين أقل من 0.05 دولار أمريكي شهريًا لكل جيجابايت مخزن. + + ✅ اقرأ المزيد عن التسعير على [صفحة تسعير حساب تخزين Azure](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn) + +1. قم بتشغيل الأمر التالي لإنشاء تطبيق Functions: + + ```sh + az functionapp create --resource-group soil-moisture-sensor \ + --runtime python \ + --functions-version 3 \ + --os-type Linux \ + --consumption-plan-location \ + --storage-account \ + --name + ``` + + استبدل `` بالموقع الذي استخدمته عند إنشاء مجموعة الموارد في الدرس السابق. + + استبدل `` باسم حساب التخزين الذي أنشأته في الخطوة السابقة. + + استبدل `` باسم فريد لتطبيق Functions الخاص بك. يجب أن يكون هذا الاسم فريدًا عالميًا لأنه يشكل جزءًا من عنوان URL الذي يمكن استخدامه للوصول إلى تطبيق Functions. استخدم شيئًا مثل `soil-moisture-sensor-` وأضف معرفًا فريدًا في النهاية، مثل بعض الكلمات العشوائية أو اسمك. + + الخيار `--functions-version 3` يحدد إصدار Azure Functions الذي سيتم استخدامه. الإصدار 3 هو أحدث إصدار. + + الخيار `--os-type Linux` يخبر بيئة تشغيل Functions باستخدام Linux كنظام تشغيل لاستضافة هذه الوظائف. يمكن استضافة الوظائف على Linux أو Windows، اعتمادًا على لغة البرمجة المستخدمة. تطبيقات Python مدعومة فقط على Linux. + +### المهمة - تحميل إعدادات التطبيق + +عندما قمت بتطوير تطبيق Functions الخاص بك، قمت بتخزين بعض الإعدادات في ملف `local.settings.json` لسلاسل الاتصال الخاصة بـ IoT Hub. يجب كتابة هذه الإعدادات إلى إعدادات التطبيق في تطبيق Functions في Azure حتى يتمكن الكود من استخدامها. + +> 🎓 ملف `local.settings.json` مخصص لإعدادات التطوير المحلي فقط، ولا يجب أن يتم إدخاله في التحكم في مصدر الكود، مثل GitHub. عند النشر إلى السحابة، يتم استخدام إعدادات التطبيق. إعدادات التطبيق هي أزواج مفتاح/قيمة مستضافة في السحابة ويتم قراءتها من المتغيرات البيئية إما في الكود الخاص بك أو بواسطة بيئة التشغيل عند توصيل الكود بـ IoT Hub. + +1. قم بتشغيل الأمر التالي لتعيين إعداد `IOT_HUB_CONNECTION_STRING` في إعدادات تطبيق Functions: + + ```sh + az functionapp config appsettings set --resource-group soil-moisture-sensor \ + --name \ + --settings "IOT_HUB_CONNECTION_STRING=" + ``` + + استبدل `` بالاسم الذي استخدمته لتطبيق Functions الخاص بك. + + استبدل `` بالقيمة الخاصة بـ `IOT_HUB_CONNECTION_STRING` من ملف `local.settings.json` الخاص بك. + +1. كرر الخطوة أعلاه، ولكن قم بتعيين قيمة `REGISTRY_MANAGER_CONNECTION_STRING` إلى القيمة المقابلة من ملف `local.settings.json` الخاص بك. + +عند تشغيل هذه الأوامر، ستظهر قائمة بجميع إعدادات التطبيق لتطبيق الوظائف. يمكنك استخدام هذه القائمة للتحقق من أن القيم تم تعيينها بشكل صحيح. + +> 💁 سترى قيمة تم تعيينها بالفعل لـ `AzureWebJobsStorage`. في ملف `local.settings.json` الخاص بك، تم تعيين هذه القيمة لاستخدام محاكي التخزين المحلي. عند إنشاء تطبيق Functions، يتم تمرير حساب التخزين كمعامل، ويتم تعيينه تلقائيًا في هذا الإعداد. + +### المهمة - نشر تطبيق Functions الخاص بك إلى السحابة + +الآن بعد أن أصبح تطبيق Functions جاهزًا، يمكن نشر الكود الخاص بك. + +1. قم بتشغيل الأمر التالي من نافذة VS Code لنشر تطبيق Functions الخاص بك: + + ```sh + func azure functionapp publish + ``` + + استبدل `` بالاسم الذي استخدمته لتطبيق Functions الخاص بك. + +سيتم تجميع الكود وإرساله إلى تطبيق Functions، حيث سيتم نشره وتشغيله. سيكون هناك الكثير من المخرجات في وحدة التحكم، تنتهي بتأكيد النشر وقائمة الوظائف المنشورة. في هذه الحالة، ستحتوي القائمة فقط على المشغل. + +```output +Deployment successful. +Remote build succeeded! +Syncing triggers... +Functions in soil-moisture-sensor: + iot-hub-trigger - [eventHubTrigger] +``` + +تأكد من أن جهاز IoT الخاص بك يعمل. قم بتغيير مستويات الرطوبة عن طريق ضبط رطوبة التربة أو تحريك المستشعر داخل وخارج التربة. سترى الترحيل يعمل ويتوقف مع تغير رطوبة التربة. + +--- + +## 🚀 التحدي + +في الدرس السابق، قمت بإدارة توقيت الترحيل عن طريق إلغاء الاشتراك من رسائل MQTT أثناء تشغيل الترحيل، ولمدة قصيرة بعد إيقافه. لا يمكنك استخدام هذه الطريقة هنا - لا يمكنك إلغاء الاشتراك من مشغل IoT Hub الخاص بك. + +فكر في طرق مختلفة يمكنك استخدامها للتعامل مع هذا في تطبيق Functions الخاص بك. + +## اختبار ما بعد المحاضرة + +[اختبار ما بعد المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18) + +## المراجعة والدراسة الذاتية + +* اقرأ عن الحوسبة بدون خادم على [صفحة الحوسبة بدون خادم على ويكيبيديا](https://wikipedia.org/wiki/Serverless_computing) +* اقرأ عن استخدام الحوسبة بدون خادم في Azure بما في ذلك المزيد من الأمثلة في [مدونة Azure: الحوسبة بدون خادم لاحتياجات IoT الخاصة بك](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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md b/translations/ar/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md new file mode 100644 index 00000000..9bdd7923 --- /dev/null +++ b/translations/ar/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md @@ -0,0 +1,70 @@ + +# إضافة التحكم اليدوي في المرحل + +## التعليمات + +يمكن تشغيل الكود الخالي من الخوادم بواسطة العديد من الأشياء المختلفة، بما في ذلك طلبات HTTP. يمكنك استخدام مشغلات HTTP لإضافة تجاوز يدوي للتحكم في المرحل، مما يسمح لشخص ما بتشغيل المرحل أو إيقافه من خلال طلب ويب. + +في هذا التمرين، تحتاج إلى إضافة مشغلين HTTP إلى تطبيق Functions الخاص بك لتشغيل المرحل وإيقافه، مع إعادة استخدام ما تعلمته من هذا الدرس لإرسال الأوامر إلى الجهاز. + +بعض التلميحات: + +* يمكنك إضافة مشغل HTTP إلى تطبيق Functions الحالي الخاص بك باستخدام الأمر التالي: + + ```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 الخاص بك محليًا، سترى عنوان 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 في متصفحك واضغط على `return`، أو `Ctrl+click` (`Cmd+click` على macOS) على الرابط في نافذة الطرفية في VS Code لفتحه في متصفحك الافتراضي. سيؤدي هذا إلى تشغيل المشغل. + + > 💁 لاحظ أن عنوان URL يحتوي على `/api` - يتم وضع مشغلات HTTP افتراضيًا في النطاق الفرعي `api`. + +* عند نشر تطبيق Functions، سيكون عنوان URL الخاص بمشغل HTTP: + + `https://.azurewebsites.net/api/` + + حيث `` هو اسم تطبيق Functions الخاص بك، و `` هو اسم المشغل الخاص بك. + +## المعايير + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| إنشاء مشغلات HTTP | تم إنشاء مشغلين لتشغيل المرحل وإيقافه بأسماء مناسبة | تم إنشاء مشغل واحد باسم مناسب | لم يتمكن من إنشاء أي مشغلات | +| التحكم في المرحل من خلال مشغلات HTTP | تم توصيل كلا المشغلين بـ IoT Hub والتحكم في المرحل بشكل صحيح | تم توصيل مشغل واحد بـ IoT Hub والتحكم في المرحل بشكل صحيح | لم يتمكن من توصيل المشغلات بـ IoT Hub | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/6-keep-your-plant-secure/README.md b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/README.md new file mode 100644 index 00000000..823d97ca --- /dev/null +++ b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/README.md @@ -0,0 +1,245 @@ + +# حافظ على أمان جهازك النباتي + +![رسم توضيحي لهذا الدرس](../../../../../translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.ar.jpg) + +> رسم توضيحي بواسطة [نيتيا ناراسيمهان](https://github.com/nitya). انقر على الصورة للحصول على نسخة أكبر. + +## اختبار ما قبل المحاضرة + +[اختبار ما قبل المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/19) + +## المقدمة + +في الدروس السابقة، قمت بإنشاء جهاز إنترنت الأشياء لمراقبة التربة وربطه بالسحابة. ولكن ماذا لو تمكن قراصنة يعملون لصالح مزارع منافس من السيطرة على أجهزة إنترنت الأشياء الخاصة بك؟ ماذا لو أرسلوا قراءات عالية لرطوبة التربة بحيث لا يتم ري نباتاتك أبدًا، أو قاموا بتشغيل نظام الري الخاص بك طوال الوقت مما يؤدي إلى قتل نباتاتك بسبب الإفراط في الري وتكبدك خسائر مالية كبيرة في فاتورة المياه؟ + +في هذا الدرس، ستتعلم كيفية تأمين أجهزة إنترنت الأشياء. وبما أن هذا هو الدرس الأخير في هذا المشروع، ستتعلم أيضًا كيفية تنظيف موارد السحابة الخاصة بك لتقليل أي تكاليف محتملة. + +في هذا الدرس سنتناول: + +* [لماذا تحتاج إلى تأمين أجهزة إنترنت الأشياء؟](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [التشفير](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [تأمين أجهزة إنترنت الأشياء الخاصة بك](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [إنشاء واستخدام شهادة X.509](../../../../../2-farm/lessons/6-keep-your-plant-secure) + +> 🗑 هذا هو الدرس الأخير في هذا المشروع، لذا بعد إكمال هذا الدرس والتكليف، لا تنس تنظيف خدمات السحابة الخاصة بك. ستحتاج إلى هذه الخدمات لإكمال التكليف، لذا تأكد من إكماله أولاً. +> +> ارجع إلى [دليل تنظيف المشروع](../../../clean-up.md) إذا لزم الأمر للحصول على تعليمات حول كيفية القيام بذلك. + +## لماذا تحتاج إلى تأمين أجهزة إنترنت الأشياء؟ + +يتعلق أمان إنترنت الأشياء بضمان أن الأجهزة المتوقعة فقط هي التي يمكنها الاتصال بخدمة إنترنت الأشياء السحابية الخاصة بك وإرسال البيانات إليها، وأن الخدمة السحابية الخاصة بك فقط هي التي يمكنها إرسال الأوامر إلى أجهزتك. يمكن أن تكون بيانات إنترنت الأشياء شخصية أيضًا، بما في ذلك بيانات طبية أو حساسة، لذا يجب أن تأخذ تطبيقاتك بأكملها الأمان بعين الاعتبار لمنع تسرب هذه البيانات. + +إذا لم يكن تطبيق إنترنت الأشياء الخاص بك آمنًا، فهناك عدد من المخاطر: + +* يمكن لجهاز مزيف إرسال بيانات غير صحيحة، مما يؤدي إلى استجابة غير صحيحة من التطبيق. على سبيل المثال، يمكنهم إرسال قراءات عالية مستمرة لرطوبة التربة، مما يعني أن نظام الري الخاص بك لن يعمل أبدًا، وستموت نباتاتك بسبب نقص الماء. +* يمكن للمستخدمين غير المصرح لهم قراءة بيانات من أجهزة إنترنت الأشياء، بما في ذلك بيانات شخصية أو حساسة للأعمال. +* يمكن للقراصنة إرسال أوامر للتحكم في جهاز بطريقة قد تسبب ضررًا للجهاز أو الأجهزة المتصلة. +* من خلال الاتصال بجهاز إنترنت الأشياء، يمكن للقراصنة استخدامه للوصول إلى شبكات إضافية والحصول على وصول إلى أنظمة خاصة. +* يمكن للمستخدمين الضارين الوصول إلى بيانات شخصية واستخدامها للابتزاز. + +هذه سيناريوهات واقعية تحدث طوال الوقت. تم ذكر بعض الأمثلة في الدروس السابقة، ولكن إليك المزيد: + +* في عام 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 هجوم حجب الخدمة ضد Dyn، وهو مزود خدمة إنترنت، مما أدى إلى تعطيل أجزاء كبيرة من الإنترنت. استخدم هذا البوت نت برامج ضارة للاتصال بأجهزة إنترنت الأشياء مثل أجهزة تسجيل الفيديو والكاميرات التي تستخدم أسماء مستخدمين وكلمات مرور افتراضية، ومن هناك أطلق الهجوم. [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/). + +✅ قم بإجراء بحث: ابحث عن المزيد من أمثلة اختراقات إنترنت الأشياء وتسريبات بياناتها، خاصة مع الأجهزة الشخصية مثل فرش الأسنان أو الموازين المتصلة بالإنترنت. فكر في تأثير هذه الاختراقات على الضحايا أو العملاء. + +> 💁 الأمان موضوع ضخم، وهذا الدرس سيتناول فقط بعض الأساسيات المتعلقة بتوصيل جهازك بالسحابة. هناك مواضيع أخرى لن يتم تغطيتها مثل مراقبة تغييرات البيانات أثناء النقل، اختراق الأجهزة مباشرة، أو تغييرات تكوين الأجهزة. يعتبر اختراق إنترنت الأشياء تهديدًا كبيرًا، لذا تم تطوير أدوات مثل [Azure Defender for IoT](https://azure.microsoft.com/services/azure-defender-for-iot/?WT.mc_id=academic-17441-jabenn). هذه الأدوات تشبه برامج مكافحة الفيروسات وأدوات الأمان التي قد تكون لديك على جهاز الكمبيوتر الخاص بك، لكنها مصممة للأجهزة الصغيرة منخفضة الطاقة. + +## التشفير + +عندما يتصل جهاز بخدمة إنترنت الأشياء، فإنه يستخدم معرفًا لتحديد هويته. المشكلة هي أن هذا المعرف يمكن نسخه - يمكن للقراصنة إعداد جهاز ضار يستخدم نفس المعرف كجهاز حقيقي ولكنه يرسل بيانات مزيفة. + +![يمكن لكل من الأجهزة الصالحة والضارة استخدام نفس المعرف لإرسال البيانات](../../../../../translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.ar.png) + +الحل هو تحويل البيانات المرسلة إلى صيغة مشفرة باستخدام قيمة معينة معروفة فقط للجهاز والسحابة. تُعرف هذه العملية باسم *التشفير*، وتُسمى القيمة المستخدمة لتشفير البيانات *مفتاح التشفير*. + +![إذا تم استخدام التشفير، فسيتم قبول الرسائل المشفرة فقط، وسيتم رفض الرسائل الأخرى](../../../../../translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.ar.png) + +يمكن لخدمة السحابة بعد ذلك تحويل البيانات مرة أخرى إلى صيغة قابلة للقراءة باستخدام عملية تُعرف باسم *فك التشفير*، باستخدام نفس مفتاح التشفير أو *مفتاح فك التشفير*. إذا لم تتمكن الرسالة المشفرة من فك تشفيرها باستخدام المفتاح، فهذا يعني أن الجهاز قد تم اختراقه وسيتم رفض الرسالة. + +تُعرف التقنية المستخدمة للتشفير وفك التشفير باسم *علم التشفير*. + +### التشفير القديم + +كانت أقدم أنواع التشفير هي شفرات الاستبدال، التي تعود إلى 3,500 عام. تتضمن شفرات الاستبدال استبدال حرف بآخر. على سبيل المثال، تتضمن [شفرة قيصر](https://wikipedia.org/wiki/Caesar_cipher) تحريك الحروف في الأبجدية بمقدار معين، مع معرفة المرسل والمستلم فقط بعدد الحروف التي يجب تحريكها. + +أخذت [شفرة فيجينير](https://wikipedia.org/wiki/Vigenère_cipher) هذا المفهوم إلى مستوى أعلى باستخدام كلمات لتشفير النص، بحيث يتم تحريك كل حرف في النص الأصلي بمقدار مختلف بدلاً من تحريك جميع الحروف بنفس العدد. + +تم استخدام التشفير لأغراض متنوعة، مثل حماية وصفة طلاء الفخار في بلاد ما بين النهرين القديمة، وكتابة رسائل حب سرية في الهند، أو الحفاظ على سرية التعاويذ السحرية في مصر القديمة. + +### التشفير الحديث + +التشفير الحديث أكثر تقدمًا، مما يجعله أصعب في الكسر مقارنة بالطرق القديمة. يستخدم التشفير الحديث رياضيات معقدة لتشفير البيانات مع عدد كبير جدًا من المفاتيح المحتملة، مما يجعل الهجمات بالقوة الغاشمة غير ممكنة. + +يُستخدم التشفير بطرق عديدة للاتصالات الآمنة. إذا كنت تقرأ هذه الصفحة على GitHub، قد تلاحظ أن عنوان الموقع يبدأ بـ *HTTPS*، مما يعني أن الاتصال بين متصفحك وخوادم GitHub مشفر. إذا تمكن شخص ما من قراءة حركة الإنترنت بين متصفحك وGitHub، فلن يتمكن من قراءة البيانات لأنها مشفرة. قد يقوم جهاز الكمبيوتر الخاص بك أيضًا بتشفير جميع البيانات على القرص الصلب، بحيث إذا تم سرقته، لن يتمكن أحد من قراءة بياناتك دون كلمة المرور الخاصة بك. + +> 🎓 HTTPS تعني بروتوكول نقل النص التشعبي **الآمن** + +للأسف، ليس كل شيء آمنًا. بعض الأجهزة لا تحتوي على أي أمان، والبعض الآخر مؤمن بمفاتيح سهلة الكسر، أو حتى جميع الأجهزة من نفس النوع تستخدم نفس المفتاح. هناك تقارير عن أجهزة إنترنت أشياء شخصية جدًا تحتوي جميعها على نفس كلمة المرور للاتصال بها عبر WiFi أو Bluetooth. إذا كان بإمكانك الاتصال بجهازك الخاص، يمكنك الاتصال بجهاز شخص آخر. وبمجرد الاتصال، يمكنك الوصول إلى بيانات خاصة جدًا أو التحكم في جهازهم. + +> 💁 على الرغم من تعقيد التشفير الحديث والادعاءات بأن كسر التشفير قد يستغرق مليارات السنين، فإن ظهور الحوسبة الكمومية قد أدى إلى إمكانية كسر جميع أنواع التشفير المعروفة في وقت قصير جدًا! + +### المفاتيح المتماثلة وغير المتماثلة + +يأتي التشفير في نوعين - متماثل وغير متماثل. + +**التشفير المتماثل** يستخدم نفس المفتاح لتشفير وفك تشفير البيانات. يحتاج كل من المرسل والمستلم إلى معرفة نفس المفتاح. هذا النوع أقل أمانًا، حيث يجب مشاركة المفتاح بطريقة ما. لكي يرسل المرسل رسالة مشفرة إلى المستلم، قد يضطر المرسل أولاً إلى إرسال المفتاح إلى المستلم. + +![التشفير المتماثل يستخدم نفس المفتاح لتشفير وفك تشفير الرسالة](../../../../../translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.ar.png) + +إذا تم سرقة المفتاح أثناء النقل، أو تم اختراق المرسل أو المستلم وتم العثور على المفتاح، يمكن كسر التشفير. + +![التشفير المتماثل آمن فقط إذا لم يحصل القراصنة على المفتاح - إذا حصلوا عليه يمكنهم اعتراض وفك تشفير الرسالة](../../../../../translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.ar.png) + +**التشفير غير المتماثل** يستخدم مفتاحين - مفتاح تشفير ومفتاح فك تشفير، يُعرفان باسم زوج المفتاح العام/الخاص. يُستخدم المفتاح العام لتشفير الرسالة، ولكنه لا يمكن استخدامه لفك تشفيرها، بينما يُستخدم المفتاح الخاص لفك تشفير الرسالة ولكنه لا يمكن استخدامه لتشفيرها. + +![التشفير غير المتماثل يستخدم مفتاحًا مختلفًا للتشفير وفك التشفير. يتم إرسال مفتاح التشفير إلى أي مرسل للرسائل حتى يتمكن من تشفير الرسالة قبل إرسالها إلى المستلم الذي يمتلك المفاتيح](../../../../../translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.ar.png) + +يشارك المستلم مفتاحه العام، ويستخدمه المرسل لتشفير الرسالة. بمجرد إرسال الرسالة، يقوم المستلم بفك تشفيرها باستخدام مفتاحه الخاص. التشفير غير المتماثل أكثر أمانًا لأن المفتاح الخاص يظل خاصًا بالمستلم ولا يتم مشاركته أبدًا. يمكن لأي شخص الحصول على المفتاح العام لأنه يمكن استخدامه فقط لتشفير الرسائل. + +التشفير المتماثل أسرع من التشفير غير المتماثل، بينما التشفير غير المتماثل أكثر أمانًا. تستخدم بعض الأنظمة كلا النوعين - باستخدام التشفير غير المتماثل لتشفير ومشاركة المفتاح المتماثل، ثم استخدام المفتاح المتماثل لتشفير جميع البيانات. يجعل هذا مشاركة المفتاح المتماثل بين المرسل والمستلم أكثر أمانًا، وأسرع عند تشفير وفك تشفير البيانات. + +## تأمين أجهزة إنترنت الأشياء الخاصة بك + +يمكن تأمين أجهزة إنترنت الأشياء باستخدام التشفير المتماثل أو غير المتماثل. التشفير المتماثل أسهل، ولكنه أقل أمانًا. + +### المفاتيح المتماثلة + +عند إعداد جهاز إنترنت الأشياء الخاص بك للتفاعل مع 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` من سلسلة الاتصال عند توصيل جهاز إنترنت الأشياء الخاص بك؟ جرب ذلك. + +عندما يحاول الجهاز الاتصال لأول مرة، فإنه يرسل توقيع وصول مشترك (SAS) يتكون من عنوان URL الخاص بـ IoT Hub، ووقت انتهاء صلاحية التوقيع (عادةً يوم واحد من الوقت الحالي)، وتوقيع. يتكون هذا التوقيع من عنوان URL ووقت انتهاء الصلاحية مشفرين باستخدام المفتاح المتماثل من سلسلة الاتصال. + +يقوم IoT Hub بفك تشفير هذا التوقيع باستخدام المفتاح المتماثل، وإذا تطابق القيمة المفككة مع عنوان URL ووقت انتهاء الصلاحية، يُسمح للجهاز بالاتصال. كما يتحقق من أن الوقت الحالي قبل وقت انتهاء الصلاحية، لمنع جهاز ضار من التقاط توقيع SAS لجهاز حقيقي واستخدامه. + +هذه طريقة أنيقة للتحقق من أن المرسل هو الجهاز الصحيح. من خلال إرسال بعض البيانات المعروفة في شكل مفكك ومشفر، يمكن للخادم التحقق من الجهاز عن طريق التأكد من أنه عند فك تشفير البيانات المشفرة، تتطابق النتيجة مع النسخة المفككة التي تم إرسالها. إذا تطابقت، فهذا يعني أن المرسل والمستلم لديهما نفس مفتاح التشفير المتماثل. +💁 نظرًا لانتهاء صلاحية الوقت، يحتاج جهاز إنترنت الأشياء الخاص بك إلى معرفة الوقت بدقة، وعادةً ما يتم قراءته من خادم [NTP](https://wikipedia.org/wiki/Network_Time_Protocol). إذا لم يكن الوقت دقيقًا، ستفشل عملية الاتصال. +بعد الاتصال، سيتم تشفير جميع البيانات المرسلة إلى IoT Hub من الجهاز أو إلى الجهاز من IoT Hub باستخدام مفتاح الوصول المشترك. + +✅ ما الذي تعتقد أنه سيحدث إذا شاركت أجهزة متعددة نفس سلسلة الاتصال؟ + +> 💁 من الممارسات الأمنية السيئة تخزين هذا المفتاح في الكود. إذا حصل أحد المخترقين على الكود المصدري الخاص بك، يمكنه الحصول على المفتاح. كما أن الأمر يصبح أكثر صعوبة عند إصدار الكود حيث ستحتاج إلى إعادة تجميعه بمفتاح محدث لكل جهاز. من الأفضل تحميل هذا المفتاح من وحدة أمان الأجهزة - وهي شريحة في جهاز IoT تخزن القيم المشفرة التي يمكن قراءتها بواسطة الكود الخاص بك. +> +> عند تعلم IoT، غالبًا ما يكون من الأسهل وضع المفتاح في الكود، كما فعلت في درس سابق، ولكن يجب التأكد من أن هذا المفتاح لا يتم إدخاله في التحكم العام بالكود المصدري. + +الأجهزة لديها مفتاحان، وسلسلتان اتصال متطابقتان. يتيح ذلك تدوير المفاتيح - أي التبديل من مفتاح إلى آخر إذا تم اختراق المفتاح الأول، وإعادة توليد المفتاح الأول. + +### شهادات 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.ar.png) + +ميزة كبيرة لاستخدام شهادات X.509 هي أنه يمكن مشاركتها بين الأجهزة. يمكنك إنشاء شهادة واحدة، تحميلها إلى IoT Hub، واستخدامها لجميع أجهزتك. كل جهاز يحتاج فقط إلى معرفة المفتاح الخاص لفك تشفير الرسائل التي يتلقاها من IoT Hub. + +الشهادة التي يستخدمها جهازك لتشفير الرسائل التي يرسلها إلى IoT Hub يتم نشرها بواسطة Microsoft. إنها نفس الشهادة التي تستخدمها العديد من خدمات Azure، وأحيانًا تكون مدمجة في SDKs. + +> 💁 تذكر، المفتاح العام هو فقط - عام. يمكن استخدام المفتاح العام لـ 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` لتمييزه عن هوية الجهاز التي أنشأتها في الدرس السابق. سيقوم هذا الأمر أيضًا بإنشاء ملفين في الدليل الحالي: + + * `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 مثل مجموعات الموارد وIoT Hubs. إحدى الطرق هي [Azure Portal](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) - واجهة ويب توفر لك واجهة رسومية لإدارة خدمات Azure الخاصة بك. + +توجه إلى [portal.azure.com](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) واستكشف البوابة. حاول إنشاء IoT Hub باستخدام البوابة، ثم قم بحذفه. + +**تلميح** - عند إنشاء الخدمات عبر البوابة، لا تحتاج إلى إنشاء مجموعة موارد مسبقًا، يمكن إنشاؤها أثناء إنشاء الخدمة. تأكد من حذفها عند الانتهاء! + +يمكنك العثور على الكثير من الوثائق، الدروس، والأدلة حول 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) + +## المراجعة والدراسة الذاتية + +* اقرأ عن تاريخ التشفير في [صفحة تاريخ التشفير على ويكيبيديا](https://wikipedia.org/wiki/History_of_cryptography). +* اقرأ عن شهادات X.509 في [صفحة X.509 على ويكيبيديا](https://wikipedia.org/wiki/X.509). + +## الواجب + +[قم ببناء جهاز IoT جديد](assignment.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/6-keep-your-plant-secure/assignment.md b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/assignment.md new file mode 100644 index 00000000..cdd507e6 --- /dev/null +++ b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/assignment.md @@ -0,0 +1,29 @@ + +# بناء جهاز إنترنت الأشياء جديد + +## التعليمات + +على مدار الدروس الستة الماضية، تعلمت عن الزراعة الرقمية وكيفية استخدام أجهزة إنترنت الأشياء لجمع البيانات للتنبؤ بنمو النباتات، وأتمتة الري بناءً على قراءات رطوبة التربة. + +استخدم ما تعلمته لبناء جهاز إنترنت الأشياء جديد باستخدام مستشعر ومشغل من اختيارك. أرسل البيانات إلى IoT Hub، واستخدمها للتحكم في المشغل عبر كود بدون خادم. يمكنك استخدام مستشعر ومشغل سبق أن استخدمتهما في هذا المشروع أو المشروع السابق، أو إذا كان لديك أجهزة أخرى، جرب شيئًا جديدًا. + +## معايير التقييم + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| برمجة جهاز إنترنت الأشياء لاستخدام مستشعر ومشغل | تمت برمجة جهاز إنترنت الأشياء يعمل مع مستشعر ومشغل | تمت برمجة جهاز إنترنت الأشياء يعمل مع مستشعر أو مشغل | لم يتمكن من برمجة جهاز إنترنت الأشياء لاستخدام مستشعر أو مشغل | +| توصيل جهاز إنترنت الأشياء بـ IoT Hub | تم نشر IoT Hub بنجاح وإرسال البيانات إليه واستقبال الأوامر منه | تم نشر IoT Hub بنجاح وإما إرسال البيانات إليه أو استقبال الأوامر منه | لم يتمكن من نشر IoT Hub أو التواصل معه من جهاز إنترنت الأشياء | +| التحكم في المشغل باستخدام كود بدون خادم | تم نشر Azure Function للتحكم في الجهاز بناءً على أحداث البيانات | تم نشر Azure Function بناءً على أحداث البيانات ولكن لم يتمكن من التحكم في المشغل | لم يتمكن من نشر Azure Function | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md new file mode 100644 index 00000000..2117f6d7 --- /dev/null +++ b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md @@ -0,0 +1,71 @@ + +# استخدام شهادة X.509 في كود جهازك - الأجهزة الافتراضية لإنترنت الأشياء و Raspberry Pi + +في هذا الجزء من الدرس، ستقوم بتوصيل جهاز إنترنت الأشياء الافتراضي الخاص بك أو Raspberry Pi بمركز إنترنت الأشياء الخاص بك باستخدام شهادة X.509. + +## توصيل جهازك بمركز إنترنت الأشياء + +الخطوة التالية هي توصيل جهازك بمركز إنترنت الأشياء باستخدام شهادات X.509. + +### المهمة - الاتصال بمركز إنترنت الأشياء + +1. انسخ ملفات المفتاح والشهادة إلى المجلد الذي يحتوي على كود جهاز إنترنت الأشياء الخاص بك. إذا كنت تستخدم Raspberry Pi عبر VS Code Remote SSH وقمت بإنشاء المفاتيح على جهاز الكمبيوتر أو Mac الخاص بك، يمكنك سحب وإفلات الملفات في المستكشف داخل VS Code لنسخها. + +1. افتح ملف `app.py` + +1. للاتصال باستخدام شهادة X.509، ستحتاج إلى اسم المضيف لمركز إنترنت الأشياء وشهادة X.509. ابدأ بإنشاء متغير يحتوي على اسم المضيف عن طريق إضافة الكود التالي قبل إنشاء عميل الجهاز: + + ```python + host_name = "" + ``` + + استبدل `` باسم المضيف الخاص بمركز إنترنت الأشياء الخاص بك. يمكنك الحصول عليه من قسم `HostName` في `connection_string`. سيكون اسم مركز إنترنت الأشياء الخاص بك وينتهي بـ `.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. قم بتشغيل الكود الخاص بك. راقب الرسائل المرسلة إلى مركز إنترنت الأشياء، وأرسل طلبات الطرق المباشرة كما فعلت سابقًا. سترى الجهاز يتصل ويرسل قراءات رطوبة التربة، بالإضافة إلى استقبال طلبات الطرق المباشرة. + +> 💁 يمكنك العثور على هذا الكود في المجلد [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). + +😀 برنامج مستشعر رطوبة التربة الخاص بك متصل بمركز إنترنت الأشياء باستخدام شهادة X.509! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md b/translations/ar/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md new file mode 100644 index 00000000..2522d083 --- /dev/null +++ b/translations/ar/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، يمكنك الرجوع إلى [تعليمات الجهاز الافتراضي لإنترنت الأشياء باستخدام Python SDK](single-board-computer-x509.md) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/README.md b/translations/ar/3-transport/README.md new file mode 100644 index 00000000..9371a474 --- /dev/null +++ b/translations/ar/3-transport/README.md @@ -0,0 +1,38 @@ + +# النقل من المزرعة إلى المصنع - استخدام إنترنت الأشياء لتتبع شحنات الطعام + +يزرع العديد من المزارعين الطعام للبيع - إما أنهم مزارعون تجاريون يبيعون كل ما يزرعونه، أو مزارعون يعتمدون على الكفاف ويبيعون فائض إنتاجهم لشراء الضروريات. بطريقة ما، يجب أن يصل الطعام من المزرعة إلى المستهلك، وعادةً ما يعتمد ذلك على النقل بالجملة من المزارع إلى المراكز أو مصانع المعالجة، ثم إلى المتاجر. على سبيل المثال، يقوم مزارع الطماطم بحصاد الطماطم، وتعبئتها في صناديق، وتحميل الصناديق في شاحنة ثم تسليمها إلى مصنع المعالجة. يتم بعد ذلك فرز الطماطم، ومن هناك يتم تسليمها إلى المستهلكين على شكل طعام معالج، أو مبيعات التجزئة، أو تُستهلك في المطاعم. + +يمكن لإنترنت الأشياء أن يساعد في هذه السلسلة من التوريد من خلال تتبع الطعام أثناء النقل - ضمان أن السائقين يذهبون إلى الأماكن الصحيحة، مراقبة مواقع المركبات، والحصول على تنبيهات عند وصول المركبات حتى يتم تفريغ الطعام وتجهيزه للمعالجة بأسرع وقت ممكن. + +> 🎓 *سلسلة التوريد* هي تسلسل الأنشطة اللازمة لصنع وتسليم شيء ما. على سبيل المثال، في زراعة الطماطم تشمل البذور، التربة، توفير الأسمدة والمياه، زراعة الطماطم، تسليم الطماطم إلى مركز مركزي، نقلها إلى مركز محلي للسوبرماركت، نقلها إلى السوبرماركت الفردي، عرضها للبيع، ثم بيعها للمستهلك وأخذها إلى المنزل لتناولها. كل خطوة تشبه الروابط في سلسلة. + +> 🎓 الجزء الخاص بالنقل في سلسلة التوريد يُعرف بـ *اللوجستيات*. + +في هذه الدروس الأربعة، ستتعلم كيفية تطبيق إنترنت الأشياء لتحسين سلسلة التوريد من خلال مراقبة الطعام أثناء تحميله على شاحنة (افتراضية)، والتي يتم تتبعها أثناء انتقالها إلى وجهتها. ستتعلم عن تتبع نظام تحديد المواقع (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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/README.md b/translations/ar/3-transport/lessons/1-location-tracking/README.md new file mode 100644 index 00000000..594d88a0 --- /dev/null +++ b/translations/ar/3-transport/lessons/1-location-tracking/README.md @@ -0,0 +1,216 @@ + +# تتبع المواقع + +![رسم توضيحي لهذه الدرس](../../../../../translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.ar.jpg) + +> رسم توضيحي من [نيتيا ناراسيمهان](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) + +> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو + +إضافة أجهزة إنترنت الأشياء يمكن أن تحسن بشكل كبير سلسلة التوريد الخاصة بك، مما يتيح لك إدارة مواقع العناصر، وتخطيط النقل والتعامل مع البضائع بشكل أفضل، والاستجابة بسرعة أكبر للمشاكل. + +عند إدارة أسطول من المركبات مثل الشاحنات، من المفيد معرفة موقع كل مركبة في وقت معين. يمكن تجهيز المركبات بأجهزة استشعار GPS ترسل موقعها إلى أنظمة إنترنت الأشياء، مما يسمح للمالكين بتحديد موقعها، ومعرفة المسار الذي سلكته، ومعرفة وقت وصولها إلى وجهتها. تعمل معظم المركبات خارج نطاق تغطية WiFi، لذا تستخدم شبكات الهاتف المحمول لإرسال هذا النوع من البيانات. أحيانًا يتم تضمين مستشعر GPS في أجهزة إنترنت الأشياء الأكثر تعقيدًا مثل سجلات القيادة الإلكترونية. تتبع هذه الأجهزة مدة بقاء الشاحنة في حالة تنقل لضمان امتثال السائقين للقوانين المحلية المتعلقة بساعات العمل. + +في هذا الدرس، ستتعلم كيفية تتبع موقع المركبات باستخدام مستشعر نظام تحديد المواقع العالمي (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) + +## المركبات المتصلة + +إنترنت الأشياء يغير طريقة نقل البضائع من خلال إنشاء أساطيل من *المركبات المتصلة*. هذه المركبات متصلة بأنظمة تكنولوجيا المعلومات المركزية التي تقدم معلومات عن موقعها وبيانات استشعار أخرى. وجود أسطول من المركبات المتصلة يوفر مجموعة واسعة من الفوائد: + +* تتبع الموقع - يمكنك تحديد موقع المركبة في أي وقت، مما يتيح لك: + + * تلقي تنبيهات عند اقتراب المركبة من وجهتها لتحضير الطاقم للتفريغ. + * تحديد موقع المركبات المسروقة. + * دمج بيانات الموقع والمسار مع مشاكل المرور لإعادة توجيه المركبات أثناء الرحلة. + * الامتثال للضرائب. بعض الدول تفرض رسومًا على المركبات بناءً على المسافة المقطوعة على الطرق العامة (مثل [RUC في نيوزيلندا](https://www.nzta.govt.nz/vehicles/licensing-rego/road-user-charges/))، لذا فإن معرفة متى تكون المركبة على الطرق العامة مقابل الطرق الخاصة يجعل من السهل حساب الضرائب المستحقة. + * معرفة مكان إرسال فرق الصيانة في حالة حدوث عطل. + +* بيانات السائق - القدرة على ضمان التزام السائقين بحدود السرعة، والانعطاف بسرعات مناسبة، والفرملة بكفاءة، والقيادة بأمان. يمكن أيضًا تجهيز المركبات المتصلة بكاميرات لتسجيل الحوادث. يمكن ربط ذلك بالتأمين، مما يوفر أسعارًا مخفضة للسائقين الجيدين. + +* الامتثال لساعات السائق - ضمان قيادة السائقين فقط خلال الساعات المسموح بها قانونيًا بناءً على أوقات تشغيل وإيقاف المحرك. + +يمكن دمج هذه الفوائد - على سبيل المثال، دمج الامتثال لساعات السائق مع تتبع الموقع لإعادة توجيه السائقين إذا لم يتمكنوا من الوصول إلى وجهتهم ضمن ساعات القيادة المسموح بها. يمكن أيضًا دمجها مع بيانات استشعار أخرى خاصة بالمركبة، مثل بيانات درجة الحرارة من الشاحنات المبردة، مما يسمح بإعادة توجيه المركبات إذا كان مسارها الحالي يعني أن البضائع لن تبقى في درجة الحرارة المناسبة. + +> 🎓 اللوجستيات هي عملية نقل البضائع من مكان إلى آخر، مثل من مزرعة إلى سوبرماركت عبر مستودع أو أكثر. يقوم المزارع بتعبئة صناديق الطماطم التي يتم تحميلها على شاحنة، وتسليمها إلى مستودع مركزي، ثم وضعها على شاحنة ثانية قد تحتوي على مزيج من أنواع مختلفة من المنتجات التي يتم تسليمها بعد ذلك إلى سوبرماركت. + +المكون الأساسي لتتبع المركبات هو GPS - أجهزة استشعار يمكنها تحديد موقعها في أي مكان على الأرض. في هذا الدرس، ستتعلم كيفية استخدام مستشعر GPS، بدءًا من تعلم كيفية تحديد موقع على الأرض. + +## الإحداثيات الجغرافية + +تُستخدم الإحداثيات الجغرافية لتحديد النقاط على سطح الأرض، مثلما تُستخدم الإحداثيات لتحديد بكسل على شاشة الكمبيوتر أو وضع الغرز في التطريز. بالنسبة لنقطة واحدة، لديك زوج من الإحداثيات. على سبيل المثال، يقع مقر مايكروسوفت في ريدموند، واشنطن، الولايات المتحدة عند 47.6423109, -122.1390293. + +### خطوط العرض والطول + +الأرض عبارة عن كرة - دائرة ثلاثية الأبعاد. لذلك، يتم تحديد النقاط عن طريق تقسيمها إلى 360 درجة، مثل هندسة الدوائر. تقيس خطوط العرض عدد الدرجات من الشمال إلى الجنوب، بينما تقيس خطوط الطول عدد الدرجات من الشرق إلى الغرب. + +> 💁 لا أحد يعرف السبب الأصلي لتقسيم الدوائر إلى 360 درجة. تغطي صفحة [الدرجة (زاوية) على ويكيبيديا](https://wikipedia.org/wiki/Degree_(angle)) بعض الأسباب المحتملة. + +![خطوط العرض من 90° عند القطب الشمالي، 45° في منتصف الطريق بين القطب الشمالي وخط الاستواء، 0° عند خط الاستواء، -45° في منتصف الطريق بين خط الاستواء والقطب الجنوبي، و -90° عند القطب الجنوبي](../../../../../translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.ar.png) + +يتم قياس خطوط العرض باستخدام خطوط تدور حول الأرض وتوازي خط الاستواء، وتقسم نصفي الكرة الشمالي والجنوبي إلى 90° لكل منهما. خط الاستواء عند 0°، والقطب الشمالي عند 90°، المعروف أيضًا بـ 90° شمالًا، والقطب الجنوبي عند -90°، أو 90° جنوبًا. + +يتم قياس خطوط الطول كعدد الدرجات شرقًا وغربًا. نقطة الأصل عند 0° تُعرف باسم *خط الطول الرئيسي*، وتم تحديدها في عام 1884 كخط يمتد من القطب الشمالي إلى القطب الجنوبي ويمر عبر [المرصد الملكي البريطاني في غرينتش، إنجلترا](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich). + +![خطوط الطول التي تمتد من -180° إلى الغرب من خط الطول الرئيسي، إلى 0° على خط الطول الرئيسي، إلى 180° شرق خط الطول الرئيسي](../../../../../translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.ar.png) + +> 🎓 خط الطول هو خط وهمي مستقيم يمتد من القطب الشمالي إلى القطب الجنوبي، مكونًا نصف دائرة. + +لقياس خط الطول لنقطة ما، يتم قياس عدد الدرجات حول خط الاستواء من خط الطول الرئيسي إلى خط الطول الذي يمر عبر تلك النقطة. خطوط الطول تمتد من -180°، أو 180° غربًا، عبر 0° عند خط الطول الرئيسي، إلى 180°، أو 180° شرقًا. تشير 180° و -180° إلى نفس النقطة، وهي خط الطول المقابل أو خط الطول 180. هذا خط طول على الجانب الآخر من الأرض بالنسبة لخط الطول الرئيسي. + +> 💁 لا ينبغي الخلط بين خط الطول المقابل وخط التاريخ الدولي، الذي يقع في نفس الموقع تقريبًا، ولكنه ليس خطًا مستقيمًا ويتغير ليتناسب مع الحدود الجيوسياسية. + +✅ قم ببعض البحث: حاول العثور على خطوط العرض والطول لموقعك الحالي. + +### الدرجات والدقائق والثواني مقابل الدرجات العشرية + +تقليديًا، كانت قياسات خطوط العرض والطول تُجرى باستخدام نظام العد الستيني، أو قاعدة-60، وهو نظام عد استخدمه البابليون القدماء الذين قاموا بأول قياسات وتسجيلات للوقت والمسافة. ربما تستخدم النظام الستيني يوميًا دون أن تدرك ذلك - تقسيم الساعات إلى 60 دقيقة والدقائق إلى 60 ثانية. + +يتم قياس خطوط الطول والعرض بالدرجات والدقائق والثواني، حيث تكون الدقيقة الواحدة 1/60 من الدرجة، والثانية الواحدة 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. عادةً ما يتم حذف رمز الدرجة. + +تُعطى إحداثيات النقطة دائمًا كـ `خط العرض، خط الطول`، لذا المثال السابق لمقر مايكروسوفت عند 47.6423109,-122.117198 يحتوي على: + +* خط عرض 47.6423109 (47.6423109 درجة شمال خط الاستواء) +* خط طول -122.1390293 (122.1390293 درجة غرب خط الطول الرئيسي). + +![مقر مايكروسوفت عند 47.6423109,-122.117198](../../../../../translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.ar.png) + +## أنظمة تحديد المواقع العالمية (GPS) + +تستخدم أنظمة GPS عدة أقمار صناعية تدور حول الأرض لتحديد موقعك. ربما استخدمت أنظمة GPS دون أن تدرك ذلك - لتحديد موقعك على تطبيق خرائط على هاتفك مثل خرائط Apple أو Google، أو لمعرفة مكان سيارتك في تطبيقات مثل Uber أو Lyft، أو عند استخدام نظام الملاحة عبر الأقمار الصناعية (sat-nav) في سيارتك. + +> 🎓 الأقمار الصناعية في "الملاحة عبر الأقمار الصناعية" هي أقمار GPS! + +تعمل أنظمة GPS عن طريق وجود عدد من الأقمار الصناعية التي ترسل إشارة تحتوي على موقع كل قمر صناعي حاليًا، ووقت دقيق. تُرسل هذه الإشارات عبر موجات الراديو ويتم اكتشافها بواسطة هوائي في مستشعر GPS. يكتشف مستشعر GPS هذه الإشارات، وباستخدام الوقت الحالي يقيس المدة التي استغرقتها الإشارة للوصول من القمر الصناعي إلى المستشعر. نظرًا لأن سرعة موجات الراديو ثابتة، يمكن لمستشعر GPS استخدام الطابع الزمني المرسل لحساب المسافة بين المستشعر والقمر الصناعي. من خلال دمج البيانات من 3 أقمار صناعية على الأقل مع المواقع المرسلة، يمكن لمستشعر GPS تحديد موقعه على الأرض. + +> 💁 تحتاج مستشعرات GPS إلى هوائيات لاكتشاف موجات الراديو. الهوائيات المدمجة في الشاحنات والسيارات المزودة بنظام GPS مثبتة للحصول على إشارة جيدة، عادةً على الزجاج الأمامي أو السقف. إذا كنت تستخدم نظام GPS منفصلًا، مثل هاتف ذكي أو جهاز إنترنت الأشياء، فيجب التأكد من أن الهوائي المدمج في النظام أو الهاتف لديه رؤية واضحة للسماء، مثل التثبيت على الزجاج الأمامي. + +![من خلال معرفة المسافة بين المستشعر وعدة أقمار صناعية، يمكن حساب الموقع](../../../../../translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.ar.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 على جهاز إنترنت الأشياء الخاص بك للحصول على بيانات GPS. + +### المهمة - توصيل مستشعر GPS وقراءة بيانات GPS + +اتبع الدليل المناسب لقراءة بيانات GPS باستخدام جهاز إنترنت الأشياء الخاص بك: + +* [Arduino - Wio Terminal](wio-terminal-gps-sensor.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi](pi-gps-sensor.md) +* [كمبيوتر أحادي اللوحة - جهاز افتراضي](virtual-device-gps-sensor.md) + +## بيانات GPS بصيغة NMEA + +عند تشغيل الكود الخاص بك، قد ترى ما يبدو كأنه رموز غير مفهومة في المخرجات. هذه في الواقع بيانات GPS قياسية، وكل جزء منها له معنى. + +تقوم مستشعرات GPS بإخراج البيانات باستخدام رسائل NMEA، وفقًا لمعيار NMEA 0183. NMEA هو اختصار لـ [الرابطة الوطنية للإلكترونيات البحرية](https://www.nmea.org)، وهي منظمة تجارية مقرها الولايات المتحدة تضع معايير للتواصل بين الأجهزة الإلكترونية البحرية. + +> 💁 هذا المعيار مملوك ويباع بسعر لا يقل عن 2000 دولار أمريكي، ولكن هناك معلومات كافية عنه في المجال العام بحيث تم عكس هندسة معظم المعيار ويمكن استخدامه في الأكواد مفتوحة المصدر وغيرها من الأكواد غير التجارية. + +هذه الرسائل تعتمد على النصوص. تتكون كل رسالة من *جملة* تبدأ بالحرف `$`، يتبعها حرفان للإشارة إلى مصدر الرسالة (مثل GP لنظام GPS الأمريكي، GN لنظام GLONASS الروسي)، وثلاثة أحرف للإشارة إلى نوع الرسالة. بقية الرسالة تتكون من حقول مفصولة بفواصل، وتنتهي بحرف سطر جديد. + +بعض أنواع الرسائل التي يمكن استقبالها هي: + +| النوع | الوصف | +| ---- | ----------- | +| GGA | بيانات تحديد الموقع، بما في ذلك خط العرض وخط الطول والارتفاع لمستشعر GPS، بالإضافة إلى عدد الأقمار الصناعية المرئية لحساب هذا التحديد. | +| ZDA | التاريخ والوقت الحالي، بما في ذلك المنطقة الزمنية المحلية | +| GSV | تفاصيل الأقمار الصناعية المرئية - وهي الأقمار التي يمكن لمستشعر GPS اكتشاف إشاراتها | + +> 💁 تتضمن بيانات GPS طوابع زمنية، لذا يمكن لجهاز إنترنت الأشياء الخاص بك الحصول على الوقت إذا لزم الأمر من مستشعر GPS، بدلاً من الاعتماد على خادم NTP أو ساعة داخلية. + +تتضمن رسالة GGA الموقع الحالي باستخدام التنسيق `(dd)dmm.mmmm`، بالإضافة إلى حرف واحد للإشارة إلى الاتجاه. يشير `d` في التنسيق إلى الدرجات، و`m` إلى الدقائق، مع الثواني ككسور عشرية من الدقائق. على سبيل المثال، 2°17'43" ستكون 217.716666667 - درجتين و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 باستخدام جهاز إنترنت الأشياء الخاص بك: + +* [Arduino - Wio Terminal](wio-terminal-gps-decode.md) +* [كمبيوتر أحادي اللوحة - Raspberry Pi/جهاز إنترنت الأشياء الافتراضي](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) + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/assignment.md b/translations/ar/3-transport/lessons/1-location-tracking/assignment.md new file mode 100644 index 00000000..a3189403 --- /dev/null +++ b/translations/ar/3-transport/lessons/1-location-tracking/assignment.md @@ -0,0 +1,29 @@ + +# استكشاف بيانات GPS الأخرى + +## التعليمات + +الجمل NMEA التي تأتي من مستشعر GPS الخاص بك تحتوي على بيانات إضافية بجانب الموقع. قم باستكشاف هذه البيانات الإضافية واستخدامها في جهاز إنترنت الأشياء الخاص بك. + +على سبيل المثال - هل يمكنك الحصول على التاريخ والوقت الحاليين؟ إذا كنت تستخدم متحكمًا دقيقًا، هل يمكنك ضبط الساعة باستخدام بيانات GPS بنفس الطريقة التي ضبطتها باستخدام إشارات NTP في المشروع السابق؟ هل يمكنك الحصول على الارتفاع (ارتفاعك عن مستوى سطح البحر)، أو سرعتك الحالية؟ + +إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، يمكنك الحصول على بعض هذه البيانات عن طريق إرسال جمل NMEA التي يتم إنشاؤها باستخدام أدوات [nmeagen.org](https://www.nmeagen.org). + +## معايير التقييم + +| المعايير | ممتاز | مقبول | يحتاج إلى تحسين | +| -------- | ------ | ------ | --------------- | +| الحصول على بيانات GPS إضافية | قادر على الحصول على واستخدام بيانات GPS إضافية، سواء كقياسات أو لإعداد جهاز إنترنت الأشياء | قادر على الحصول على بيانات GPS إضافية، لكنه غير قادر على استخدامها | غير قادر على الحصول على بيانات GPS إضافية | + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/pi-gps-sensor.md b/translations/ar/3-transport/lessons/1-location-tracking/pi-gps-sensor.md new file mode 100644 index 00000000..01f7b4c3 --- /dev/null +++ b/translations/ar/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.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر GPS. لن يدخل إلا في اتجاه واحد. + +1. مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بمقبس UART المسمى **UART** على قبعة Grove Base المثبتة على Pi. يوجد هذا المقبس في الصف الأوسط، على الجانب الأقرب إلى فتحة بطاقة SD، في الطرف الآخر من منافذ USB ومقبس الإيثرنت. + + ![مستشعر Grove GPS متصل بمقبس UART](../../../../../translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ar.png) + +1. ضع مستشعر GPS بحيث يكون الهوائي المتصل به مرئيًا للسماء - من الأفضل أن يكون بجانب نافذة مفتوحة أو في الخارج. من الأسهل الحصول على إشارة واضحة بدون وجود عوائق أمام الهوائي. + +## برمجة مستشعر GPS + +يمكن الآن برمجة Raspberry Pi لاستخدام مستشعر GPS المتصل. + +### المهمة - برمجة مستشعر GPS + +قم ببرمجة الجهاز. + +1. قم بتشغيل Pi وانتظر حتى يتم الإقلاع. + +1. يحتوي مستشعر GPS على مصباحين LED - مصباح أزرق يومض عند إرسال البيانات، ومصباح أخضر يومض كل ثانية عند استقبال البيانات من الأقمار الصناعية. تأكد من أن المصباح الأزرق يومض عند تشغيل Pi. بعد بضع دقائق، سيبدأ المصباح الأخضر في الوميض - إذا لم يحدث ذلك، قد تحتاج إلى إعادة وضع الهوائي. + +1. قم بتشغيل VS Code، إما مباشرة على Pi، أو عبر الاتصال باستخدام إضافة Remote SSH. + + > ⚠️ يمكنك الرجوع إلى [التعليمات الخاصة بإعداد وتشغيل VS Code في الدرس الأول إذا لزم الأمر](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md). + +1. مع الإصدارات الأحدث من Raspberry Pi التي تدعم البلوتوث، هناك تعارض بين منفذ السيريال المستخدم للبلوتوث والمنفذ المستخدم بواسطة منفذ 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. قم بتشغيل هذا الكود. سترى المخرجات الخام من مستشعر 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 الخاص بك! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md b/translations/ar/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md new file mode 100644 index 00000000..2feb4f36 --- /dev/null +++ b/translations/ar/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md @@ -0,0 +1,75 @@ + +# فك بيانات GPS - الأجهزة الافتراضية لإنترنت الأشياء و Raspberry Pi + +في هذا الجزء من الدرس، ستقوم بفك رسائل NMEA التي يتم قراءتها من مستشعر GPS بواسطة Raspberry Pi أو جهاز إنترنت الأشياء الافتراضي، واستخراج خط العرض وخط الطول. + +## فك بيانات 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. قم بتشغيل الكود. إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، فتأكد من تشغيل تطبيق 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 مع فك البيانات! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md b/translations/ar/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md new file mode 100644 index 00000000..0c4f961a --- /dev/null +++ b/translations/ar/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md @@ -0,0 +1,144 @@ + +# قراءة بيانات GPS - جهاز إنترنت الأشياء الافتراضي + +في هذا الجزء من الدرس، ستضيف مستشعر GPS إلى جهاز إنترنت الأشياء الافتراضي الخاص بك، وتقرأ القيم منه. + +## الأجهزة الافتراضية + +سيستخدم جهاز إنترنت الأشياء الافتراضي مستشعر GPS محاكى يمكن الوصول إليه عبر UART من خلال منفذ تسلسلي. + +يحتوي مستشعر GPS الفعلي على هوائي لالتقاط موجات الراديو من الأقمار الصناعية لنظام GPS، وتحويل إشارات GPS إلى بيانات GPS. النسخة الافتراضية تحاكي ذلك من خلال السماح لك إما بتعيين خط العرض وخط الطول، أو إرسال جمل NMEA الخام، أو تحميل ملف GPX يحتوي على مواقع متعددة يمكن إرجاعها بالتتابع. + +> 🎓 سيتم تغطية جمل NMEA لاحقًا في هذا الدرس + +### إضافة المستشعر إلى CounterFit + +لاستخدام مستشعر GPS افتراضي، تحتاج إلى إضافته إلى تطبيق CounterFit. + +#### المهمة - إضافة المستشعر إلى CounterFit + +أضف مستشعر GPS إلى تطبيق CounterFit. + +1. قم بإنشاء تطبيق Python جديد على جهاز الكمبيوتر الخاص بك في مجلد يسمى `gps-sensor` يحتوي على ملف واحد يسمى `app.py` وبيئة افتراضية لـ Python، وأضف حزم pip الخاصة بـ CounterFit. + + > ⚠️ يمكنك الرجوع إلى [التعليمات الخاصة بإنشاء وإعداد مشروع Python لـ CounterFit في الدرس الأول إذا لزم الأمر](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). + +1. قم بتثبيت حزمة Pip إضافية لتثبيت shim لـ CounterFit يمكنه التحدث إلى المستشعرات القائمة على UART عبر اتصال تسلسلي. تأكد من تثبيتها من خلال نافذة طرفية مع تفعيل البيئة الافتراضية. + + ```sh + pip install counterfit-shims-serial + ``` + +1. تأكد من تشغيل تطبيق الويب CounterFit. + +1. قم بإنشاء مستشعر GPS: + + 1. في مربع *إنشاء مستشعر* في لوحة *المستشعرات*، افتح القائمة المنسدلة *نوع المستشعر* واختر *UART GPS*. + + 1. اترك *المنفذ* مضبوطًا على */dev/ttyAMA0*. + + 1. اختر زر **إضافة** لإنشاء مستشعر GPS على المنفذ `/dev/ttyAMA0`. + + ![إعدادات مستشعر GPS](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ar.png) + + سيتم إنشاء مستشعر GPS وسيظهر في قائمة المستشعرات. + + ![تم إنشاء مستشعر GPS](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ar.png) + +## برمجة مستشعر GPS + +يمكن الآن برمجة جهاز إنترنت الأشياء الافتراضي لاستخدام مستشعر 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. قم بتشغيل هذا الكود، مع التأكد من استخدام نافذة طرفية مختلفة عن تلك التي يتم تشغيل تطبيق CounterFit فيها، حتى يظل تطبيق CounterFit قيد التشغيل. + +1. من تطبيق CounterFit، قم بتغيير قيمة مستشعر GPS. يمكنك القيام بذلك بإحدى الطرق التالية: + + * ضبط **المصدر** على `Lat/Lon`، وتعيين خط عرض وخط طول وعدد الأقمار الصناعية المستخدمة للحصول على تثبيت GPS. سيتم إرسال هذه القيمة مرة واحدة فقط، لذا تحقق من مربع **التكرار** لتكرار البيانات كل ثانية. + + ![مستشعر GPS مع تحديد lat lon](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ar.png) + + * ضبط **المصدر** على `NMEA` وإضافة بعض جمل NMEA في مربع النص. سيتم إرسال جميع هذه القيم، مع تأخير قدره ثانية واحدة قبل قراءة كل جملة GGA (تثبيت الموقع). + + ![مستشعر GPS مع إعداد جمل NMEA](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ar.png) + + يمكنك استخدام أداة مثل [nmeagen.org](https://www.nmeagen.org) لإنشاء هذه الجمل عن طريق الرسم على الخريطة. سيتم إرسال هذه القيم مرة واحدة فقط، لذا تحقق من مربع **التكرار** لتكرار البيانات بعد ثانية واحدة من إرسالها جميعًا. + + * ضبط **المصدر** على ملف GPX، وتحميل ملف GPX يحتوي على مواقع المسار. يمكنك تنزيل ملفات GPX من عدد من مواقع الخرائط والمشي الشهيرة، مثل [AllTrails](https://www.alltrails.com/). تحتوي هذه الملفات على مواقع GPS متعددة كمسار، وسيعيد مستشعر GPS كل موقع جديد بفاصل زمني قدره ثانية واحدة. + + ![مستشعر GPS مع إعداد ملف GPX](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ar.png) + + سيتم إرسال هذه القيم مرة واحدة فقط، لذا تحقق من مربع **التكرار** لتكرار البيانات بعد ثانية واحدة من إرسالها جميعًا. + + بمجرد تكوين إعدادات GPS، اختر زر **تعيين** لتطبيق هذه القيم على المستشعر. + +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 الخاص بك! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md b/translations/ar/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md new file mode 100644 index 00000000..607183a6 --- /dev/null +++ b/translations/ar/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 التسلسلي إلى وحدة فك تشفير NMEA الخاصة بـ `gps`. بعد كل حرف، سيتحقق مما إذا كانت وحدة فك التشفير قد قرأت جملة صالحة، ثم يتحقق مما إذا كانت قد قرأت موقعًا صالحًا. إذا كان الموقع صالحًا، فسيتم إرساله إلى شاشة المراقبة التسلسلية، مع عدد الأقمار الصناعية التي ساهمت في هذا التحديد. + +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 مع فك تشفير البيانات! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md b/translations/ar/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md new file mode 100644 index 00000000..45948108 --- /dev/null +++ b/translations/ar/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. + +![مستشعر GPS من نوع Grove](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ar.png) + +1. أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر GPS. لن يدخل إلا في اتجاه واحد. + +1. مع فصل Wio Terminal عن الكمبيوتر أو أي مصدر طاقة آخر، قم بتوصيل الطرف الآخر من كابل Grove بالمقبس الأيسر لجهاز Wio Terminal عند النظر إلى الشاشة. هذا هو المقبس الأقرب إلى زر الطاقة. + + ![مستشعر GPS متصل بالمقبس الأيسر](../../../../../translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.ar.png) + +1. ضع مستشعر GPS بحيث يكون الهوائي المتصل لديه رؤية واضحة للسماء - من الأفضل أن يكون بجانب نافذة مفتوحة أو في الخارج. من الأسهل الحصول على إشارة واضحة عندما لا يكون هناك عوائق أمام الهوائي. + +1. يمكنك الآن توصيل Wio Terminal بجهاز الكمبيوتر الخاص بك. + +1. يحتوي مستشعر GPS على مصباحين LED - مصباح أزرق يومض عند إرسال البيانات، ومصباح أخضر يومض كل ثانية عند استقبال البيانات من الأقمار الصناعية. تأكد من أن المصباح الأزرق يومض عند تشغيل 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,000 مللي ثانية). + +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! + +--- + +**إخلاء المسؤولية**: +تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-transport/lessons/2-store-location-data/README.md b/translations/ar/3-transport/lessons/2-store-location-data/README.md new file mode 100644 index 00000000..5ad9f11a --- /dev/null +++ b/translations/ar/3-transport/lessons/2-store-location-data/README.md @@ -0,0 +1,479 @@ + +# تخزين بيانات الموقع + +![رسم توضيحي لهذا الدرس](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ar.jpg) + +> رسم توضيحي بواسطة [نيتيا ناراسيمهان](https://github.com/nitya). انقر على الصورة للحصول على نسخة أكبر. + +## اختبار ما قبل المحاضرة + +[اختبار ما قبل المحاضرة](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) + +## المقدمة + +في الدرس السابق، تعلمت كيفية استخدام مستشعر GPS لالتقاط بيانات الموقع. لاستخدام هذه البيانات لتصور موقع شاحنة محملة بالطعام ورحلتها، يجب إرسالها إلى خدمة إنترنت الأشياء (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](../../../../../3-transport/lessons/2-store-location-data) +* [ربط الكود بدون خادم بالتخزين](../../../../../3-transport/lessons/2-store-location-data) + +## البيانات المهيكلة وغير المهيكلة + +تتعامل أنظمة الكمبيوتر مع البيانات، وهذه البيانات تأتي بأشكال وأحجام مختلفة. يمكن أن تتراوح من أرقام فردية إلى كميات كبيرة من النصوص، إلى مقاطع فيديو وصور، وإلى بيانات إنترنت الأشياء. عادةً ما يمكن تقسيم البيانات إلى واحدة من فئتين - *البيانات المهيكلة* و *البيانات غير المهيكلة*. + +* **البيانات المهيكلة** هي بيانات ذات هيكل محدد جيدًا وثابت لا يتغير وعادةً ما يتم تعيينها إلى جداول بيانات ذات علاقات. مثال على ذلك هو تفاصيل شخص بما في ذلك اسمه، تاريخ ميلاده وعنوانه. + +* **البيانات غير المهيكلة** هي بيانات بدون هيكل محدد جيدًا وثابت، بما في ذلك البيانات التي يمكن أن يتغير هيكلها بشكل متكرر. مثال على ذلك هو المستندات مثل الوثائق المكتوبة أو جداول البيانات. + +✅ قم ببعض البحث: هل يمكنك التفكير في أمثلة أخرى للبيانات المهيكلة وغير المهيكلة؟ + +> 💁 هناك أيضًا بيانات شبه مهيكلة تكون مهيكلة ولكنها لا تتناسب مع جداول بيانات ثابتة. + +عادةً ما تعتبر بيانات إنترنت الأشياء بيانات غير مهيكلة. + +تخيل أنك تضيف أجهزة إنترنت الأشياء إلى أسطول من المركبات لمزرعة تجارية كبيرة. قد ترغب في استخدام أجهزة مختلفة لأنواع مختلفة من المركبات. على سبيل المثال: + +* بالنسبة لمركبات المزرعة مثل الجرارات، تريد بيانات GPS لضمان عملها في الحقول الصحيحة. +* بالنسبة لشاحنات التوصيل التي تنقل الطعام إلى المستودعات، تريد بيانات GPS بالإضافة إلى بيانات السرعة والتسارع لضمان قيادة السائق بأمان، وبيانات هوية السائق وبدء/إيقاف لضمان الامتثال للقوانين المحلية بشأن ساعات العمل. +* بالنسبة للشاحنات المبردة، تريد أيضًا بيانات درجة الحرارة لضمان عدم ارتفاع أو انخفاض درجة حرارة الطعام بشكل كبير مما يؤدي إلى تلفه أثناء النقل. + +يمكن أن تتغير هذه البيانات باستمرار. على سبيل المثال، إذا كان جهاز إنترنت الأشياء موجودًا في كابينة الشاحنة، فقد تتغير البيانات التي يرسلها مع تغيير المقطورة، على سبيل المثال إرسال بيانات درجة الحرارة فقط عند استخدام مقطورة مبردة. + +✅ ما البيانات الأخرى التي يمكن أن يتم التقاطها بواسطة إنترنت الأشياء؟ فكر في أنواع الحمولات التي يمكن أن تحملها الشاحنات، بالإضافة إلى بيانات الصيانة. + +تختلف هذه البيانات من مركبة إلى أخرى، ولكن يتم إرسالها جميعًا إلى نفس خدمة إنترنت الأشياء لمعالجتها. تحتاج خدمة إنترنت الأشياء إلى أن تكون قادرة على معالجة هذه البيانات غير المهيكلة، وتخزينها بطريقة تسمح بالبحث أو التحليل، ولكنها تعمل مع هياكل مختلفة لهذه البيانات. + +### تخزين SQL مقابل NoSQL + +تعد قواعد البيانات خدمات تسمح لك بتخزين البيانات واستعلامها. تأتي قواعد البيانات في نوعين - SQL و NoSQL. + +#### قواعد بيانات SQL + +كانت أول قواعد البيانات هي أنظمة إدارة قواعد البيانات العلائقية (RDBMS)، أو قواعد البيانات العلائقية. تُعرف أيضًا باسم قواعد بيانات SQL نسبةً إلى لغة الاستعلام الهيكلية (SQL) المستخدمة للتفاعل معها لإضافة أو إزالة أو تحديث أو استعلام البيانات. تتكون هذه القواعد من مخطط - مجموعة محددة جيدًا من جداول البيانات، مشابهة لجداول البيانات. يحتوي كل جدول على أعمدة مسماة متعددة. عندما تقوم بإدخال البيانات، تضيف صفًا إلى الجدول، وتضع القيم في كل من الأعمدة. يحافظ هذا على البيانات في هيكل صارم للغاية - على الرغم من أنه يمكنك ترك الأعمدة فارغة، إذا كنت تريد إضافة عمود جديد، يجب عليك القيام بذلك على قاعدة البيانات، وملء القيم للصفوف الموجودة. هذه القواعد علائقية - بمعنى أن جدولًا واحدًا يمكن أن يكون له علاقة بجدول آخر. + +![قاعدة بيانات علائقية تربط بين جدول المستخدمين وجدول المشتريات وجدول المنتجات](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ar.png) + +على سبيل المثال، إذا كنت تخزن تفاصيل شخصية للمستخدمين في جدول، فستكون لديك نوع من المعرف الفريد الداخلي لكل مستخدم يتم استخدامه في صف في جدول يحتوي على اسم المستخدم وعنوانه. إذا كنت تريد بعد ذلك تخزين تفاصيل أخرى عن هذا المستخدم، مثل مشترياته، في جدول آخر، فستكون لديك عمود واحد في الجدول الجديد لمعرف المستخدم. عندما تبحث عن مستخدم، يمكنك استخدام معرفه للحصول على تفاصيله الشخصية من جدول واحد، ومشترياته من جدول آخر. + +تعد قواعد بيانات SQL مثالية لتخزين البيانات المهيكلة، ولضمان تطابق البيانات مع المخطط الخاص بك. + +✅ إذا لم تستخدم SQL من قبل، خذ لحظة لقراءة المزيد عنها في [صفحة SQL على ويكيبيديا](https://wikipedia.org/wiki/SQL). + +بعض قواعد بيانات SQL المعروفة هي Microsoft SQL Server، MySQL، و PostgreSQL. + +✅ قم ببعض البحث: اقرأ عن بعض قواعد بيانات SQL هذه وقدراتها. + +#### قواعد بيانات NoSQL + +تُعرف قواعد بيانات NoSQL بهذا الاسم لأنها لا تحتوي على نفس الهيكل الصارم لقواعد بيانات SQL. تُعرف أيضًا باسم قواعد البيانات الوثائقية لأنها يمكنها تخزين البيانات غير المهيكلة مثل الوثائق. + +> 💁 على الرغم من اسمها، تسمح بعض قواعد بيانات NoSQL باستخدام SQL لاستعلام البيانات. + +![وثائق في مجلدات داخل قاعدة بيانات NoSQL](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ar.png) + +لا تحتوي قواعد بيانات NoSQL على مخطط محدد مسبقًا يحد من كيفية تخزين البيانات، بل يمكنك إدخال أي بيانات غير مهيكلة، عادةً باستخدام وثائق JSON. يمكن تنظيم هذه الوثائق في مجلدات، مشابهة للملفات على جهاز الكمبيوتر الخاص بك. يمكن أن تحتوي كل وثيقة على حقول مختلفة عن الوثائق الأخرى - على سبيل المثال، إذا كنت تخزن بيانات إنترنت الأشياء من مركبات المزرعة، فقد تحتوي بعضها على حقول لبيانات التسارع والسرعة، وقد تحتوي أخرى على حقول لدرجة الحرارة في المقطورة. إذا كنت تريد إضافة نوع جديد من الشاحنات، مثل شاحنة مزودة بموازين مدمجة لتتبع وزن المنتجات المحملة، يمكن لجهاز إنترنت الأشياء الخاص بك إضافة هذا الحقل الجديد ويمكن تخزينه دون أي تغييرات على قاعدة البيانات. + +بعض قواعد بيانات NoSQL المعروفة تشمل Azure CosmosDB، MongoDB، و CouchDB. + +✅ قم ببعض البحث: اقرأ عن بعض قواعد بيانات NoSQL هذه وقدراتها. + +في هذا الدرس، ستستخدم تخزين NoSQL لتخزين بيانات إنترنت الأشياء. + +## إرسال بيانات GPS إلى IoT Hub + +في الدرس السابق، قمت بالتقاط بيانات GPS من مستشعر GPS متصل بجهاز إنترنت الأشياء الخاص بك. لتخزين هذه البيانات في السحابة، تحتاج إلى إرسالها إلى خدمة إنترنت الأشياء. مرة أخرى، ستستخدم Azure IoT Hub، نفس خدمة إنترنت الأشياء السحابية التي استخدمتها في المشروع السابق. + +![إرسال بيانات GPS من جهاز إنترنت الأشياء إلى IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ar.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) إذا لزم الأمر. + + تذكر إنشاء مجموعة موارد جديدة. قم بتسمية مجموعة الموارد الجديدة `gps-sensor`، واسم IoT Hub الجديد اسمًا فريدًا بناءً على `gps-sensor`، مثل `gps-sensor-<اسمك>`. + + > 💁 إذا كان لديك IoT Hub من المشروع السابق، يمكنك إعادة استخدامه. تذكر استخدام اسم هذا IoT Hub ومجموعة الموارد التي توجد فيها عند إنشاء خدمات أخرى. + +1. أضف جهازًا جديدًا إلى IoT Hub. قم بتسمية هذا الجهاز `gps-sensor`. احصل على سلسلة الاتصال الخاصة بالجهاز. + +1. قم بتحديث كود الجهاز الخاص بك لإرسال بيانات GPS إلى IoT Hub الجديد باستخدام سلسلة الاتصال الخاصة بالجهاز من الخطوة السابقة. + + > ⚠️ يمكنك الرجوع إلى [تعليمات توصيل جهازك بـ 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(); +``` + +إذا كنت تستخدم جهاز إنترنت الأشياء الافتراضي، تذكر تثبيت جميع المكتبات اللازمة باستخدام بيئة افتراضية. + +بالنسبة لكل من Raspberry Pi وجهاز إنترنت الأشياء الافتراضي، استخدم الكود الموجود من الدرس السابق للحصول على قيم خطوط الطول والعرض، ثم أرسلها بالتنسيق الصحيح لـ 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) folder. + +قم بتشغيل كود الجهاز الخاص بك وتأكد من تدفق الرسائل إلى IoT Hub باستخدام أمر CLI `az iot hub monitor-events`. + +## مسارات البيانات الساخنة، الدافئة، والباردة + +البيانات التي تتدفق من جهاز إنترنت الأشياء إلى السحابة لا تتم معالجتها دائمًا في الوقت الفعلي. بعض البيانات تحتاج إلى معالجة في الوقت الفعلي، بينما يمكن معالجة بيانات أخرى بعد فترة قصيرة، وبيانات أخرى يمكن معالجتها لاحقًا. يشير تدفق البيانات إلى خدمات مختلفة تعالج البيانات في أوقات مختلفة إلى المسارات الساخنة، الدافئة، والباردة. + +### المسار الساخن + +يشير المسار الساخن إلى البيانات التي تحتاج إلى معالجة في الوقت الفعلي أو قريب من الوقت الفعلي. ستستخدم بيانات المسار الساخن للتنبيهات، مثل الحصول على تنبيهات بأن مركبة تقترب من مستودع، أو أن درجة الحرارة في شاحنة مبردة مرتفعة جدًا. + +للاستفادة من بيانات المسار الساخن، سيستجيب الكود الخاص بك للأحداث بمجرد استلامها بواسطة خدمات السحابة الخاصة بك. + +### المسار الدافئ + +يشير المسار الدافئ إلى البيانات التي يمكن معالجتها بعد فترة قصيرة من استلامها، على سبيل المثال للتقارير أو التحليلات قصيرة المدى. ستستخدم بيانات المسار الدافئ للتقارير اليومية عن مسافة المركبات، باستخدام البيانات التي تم جمعها في اليوم السابق. + +يتم تخزين بيانات المسار الدافئ بمجرد استلامها بواسطة خدمة السحابة داخل نوع من التخزين الذي يمكن الوصول إليه بسرعة. + +### المسار البارد + +يشير المسار البارد إلى البيانات التاريخية، حيث يتم تخزين البيانات على المدى الطويل ليتم معالجتها عند الحاجة. على سبيل المثال، يمكنك استخدام المسار البارد للحصول على تقارير سنوية عن مسافة المركبات، أو تشغيل تحليلات على الطرق للعثور على الطريق الأمثل لتقليل تكاليف الوقود. + +يتم تخزين بيانات المسار البارد في مستودعات البيانات - قواعد بيانات مصممة لتخزين كميات كبيرة من البيانات التي لن تتغير ويمكن استعلامها بسرعة وسهولة. عادةً ما يكون لديك وظيفة منتظمة في تطبيق السحابة الخاص بك تعمل في وقت منتظم كل يوم، أسبوع، أو شهر لنقل البيانات من تخزين المسار الدافئ إلى مستودع البيانات. + +✅ فكر في البيانات التي قمت بجمعها حتى الآن في هذه الدروس. هل هي بيانات مسار ساخن، دافئ، أم بارد؟ + +## معالجة أحداث GPS باستخدام الكود بدون خادم + +بمجرد تدفق البيانات إلى IoT Hub، يمكنك كتابة بعض الكود بدون خادم للاستماع إلى الأحداث المنشورة إلى نقطة النهاية المتوافقة مع Event-Hub. هذا هو المسار الدافئ - سيتم تخزين هذه البيانات واستخدامها في الدرس التالي للتقارير عن الرحلة. + +![إرسال بيانات GPS من جهاز إنترنت الأشياء إلى IoT Hub، ثم إلى Azure Functions عبر مشغل Event Hub](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ar.png) + +### المهمة - معالجة أحداث GPS باستخدام الكود بدون خادم + +1. قم بإنشاء تطبيق Azure Functions باستخدام CLI الخاص بـ Azure Functions. استخدم بيئة تشغيل Python، وقم بإنشائه في مجلد يسمى `gps-trigger`، واستخدم نفس الاسم لمشروع تطبيق Functions. تأكد من إنشاء بيئة افتراضية لاستخدامها. +> ⚠️ يمكنك الرجوع إلى [التعليمات لإنشاء مشروع 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 + +![شعار تخزين Azure](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ar.png) + +حسابات تخزين Azure هي خدمة تخزين متعددة الأغراض يمكنها تخزين البيانات بطرق متنوعة. يمكنك تخزين البيانات كـ blobs، في قوائم انتظار، في جداول، أو كملفات، وكل ذلك في نفس الوقت. + +### تخزين Blob + +كلمة *Blob* تعني كائنات كبيرة ثنائية، لكنها أصبحت مصطلحًا لأي بيانات غير منظمة. يمكنك تخزين أي بيانات في تخزين blob، من مستندات JSON التي تحتوي على بيانات IoT، إلى ملفات الصور والأفلام. يحتوي تخزين blob على مفهوم *الحاويات*، وهي دلائل مسماة يمكنك تخزين البيانات فيها، مشابهة للجداول في قاعدة بيانات علائقية. يمكن أن تحتوي هذه الحاويات على مجلدات لتخزين blobs، ويمكن لكل مجلد أن يحتوي على مجلدات أخرى، مشابهة لكيفية تخزين الملفات على القرص الصلب لجهاز الكمبيوتر الخاص بك. + +ستستخدم تخزين blob في هذا الدرس لتخزين بيانات 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) + +## ربط الكود بدون خادم بالتخزين + +يحتاج تطبيق الوظائف الخاص بك الآن إلى الاتصال بتخزين blob لتخزين الرسائل من IoT Hub. هناك طريقتان للقيام بذلك: + +* داخل كود الوظيفة، قم بالاتصال بتخزين blob باستخدام Python SDK الخاص بتخزين blob وكتابة البيانات كـ blobs. +* استخدم ربط وظيفة الإخراج لربط قيمة الإرجاع للوظيفة بتخزين blob وحفظ blob تلقائيًا. + +في هذا الدرس، ستستخدم Python SDK لمعرفة كيفية التفاعل مع تخزين blob. + +![إرسال بيانات GPS من جهاز IoT إلى IoT Hub، ثم إلى Azure Functions عبر مشغل Event Hub، ثم حفظها في تخزين blob](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ar.png) + +سيتم حفظ البيانات كـ JSON blob بالتنسيق التالي: + +```json +{ + "device_id": , + "timestamp" :